summaryrefslogtreecommitdiff
path: root/addons/bus
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/bus
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/bus')
-rw-r--r--addons/bus/__init__.py3
-rw-r--r--addons/bus/__manifest__.py14
-rw-r--r--addons/bus/controllers/__init__.py2
-rw-r--r--addons/bus/controllers/main.py44
-rw-r--r--addons/bus/i18n/af.po126
-rw-r--r--addons/bus/i18n/am.po122
-rw-r--r--addons/bus/i18n/ar.po160
-rw-r--r--addons/bus/i18n/az.po128
-rw-r--r--addons/bus/i18n/bg.po156
-rw-r--r--addons/bus/i18n/bn.po153
-rw-r--r--addons/bus/i18n/bs.po133
-rw-r--r--addons/bus/i18n/bus.pot149
-rw-r--r--addons/bus/i18n/ca.po158
-rw-r--r--addons/bus/i18n/ckb.po153
-rw-r--r--addons/bus/i18n/cs.po158
-rw-r--r--addons/bus/i18n/da.po159
-rw-r--r--addons/bus/i18n/de.po154
-rw-r--r--addons/bus/i18n/el.po156
-rw-r--r--addons/bus/i18n/en_AU.po143
-rw-r--r--addons/bus/i18n/en_GB.po125
-rw-r--r--addons/bus/i18n/eo.po149
-rw-r--r--addons/bus/i18n/es.po155
-rw-r--r--addons/bus/i18n/es_BO.po125
-rw-r--r--addons/bus/i18n/es_CL.po125
-rw-r--r--addons/bus/i18n/es_CO.po125
-rw-r--r--addons/bus/i18n/es_CR.po125
-rw-r--r--addons/bus/i18n/es_DO.po125
-rw-r--r--addons/bus/i18n/es_EC.po125
-rw-r--r--addons/bus/i18n/es_MX.po153
-rw-r--r--addons/bus/i18n/es_PA.po143
-rw-r--r--addons/bus/i18n/es_PE.po125
-rw-r--r--addons/bus/i18n/es_PY.po125
-rw-r--r--addons/bus/i18n/es_VE.po125
-rw-r--r--addons/bus/i18n/et.po156
-rw-r--r--addons/bus/i18n/eu.po158
-rw-r--r--addons/bus/i18n/fa.po156
-rw-r--r--addons/bus/i18n/fi.po158
-rw-r--r--addons/bus/i18n/fo.po125
-rw-r--r--addons/bus/i18n/fr.po157
-rw-r--r--addons/bus/i18n/fr_BE.po143
-rw-r--r--addons/bus/i18n/fr_CA.po125
-rw-r--r--addons/bus/i18n/gl.po125
-rw-r--r--addons/bus/i18n/gu.po134
-rw-r--r--addons/bus/i18n/he.po157
-rw-r--r--addons/bus/i18n/hi.po149
-rw-r--r--addons/bus/i18n/hr.po155
-rw-r--r--addons/bus/i18n/hu.po157
-rw-r--r--addons/bus/i18n/hy.po139
-rw-r--r--addons/bus/i18n/id.po160
-rw-r--r--addons/bus/i18n/is.po134
-rw-r--r--addons/bus/i18n/it.po156
-rw-r--r--addons/bus/i18n/ja.po156
-rw-r--r--addons/bus/i18n/ka.po159
-rw-r--r--addons/bus/i18n/kab.po125
-rw-r--r--addons/bus/i18n/km.po155
-rw-r--r--addons/bus/i18n/ko.po155
-rw-r--r--addons/bus/i18n/lb.po133
-rw-r--r--addons/bus/i18n/lo.po122
-rw-r--r--addons/bus/i18n/lt.po158
-rw-r--r--addons/bus/i18n/lv.po155
-rw-r--r--addons/bus/i18n/mk.po125
-rw-r--r--addons/bus/i18n/ml_IN.po143
-rw-r--r--addons/bus/i18n/mn.po154
-rw-r--r--addons/bus/i18n/nb.po154
-rw-r--r--addons/bus/i18n/ne.po122
-rw-r--r--addons/bus/i18n/nl.po155
-rw-r--r--addons/bus/i18n/nl_BE.po125
-rw-r--r--addons/bus/i18n/pl.po158
-rw-r--r--addons/bus/i18n/pt.po157
-rw-r--r--addons/bus/i18n/pt_BR.po158
-rw-r--r--addons/bus/i18n/ro.po154
-rw-r--r--addons/bus/i18n/ru.po156
-rw-r--r--addons/bus/i18n/si.po149
-rw-r--r--addons/bus/i18n/sk.po158
-rw-r--r--addons/bus/i18n/sl.po156
-rw-r--r--addons/bus/i18n/sq.po125
-rw-r--r--addons/bus/i18n/sr.po131
-rw-r--r--addons/bus/i18n/sr@latin.po128
-rw-r--r--addons/bus/i18n/sv.po156
-rw-r--r--addons/bus/i18n/ta.po144
-rw-r--r--addons/bus/i18n/th.po156
-rw-r--r--addons/bus/i18n/tr.po161
-rw-r--r--addons/bus/i18n/uk.po154
-rw-r--r--addons/bus/i18n/ur.po149
-rw-r--r--addons/bus/i18n/vi.po157
-rw-r--r--addons/bus/i18n/zh_CN.po160
-rw-r--r--addons/bus/i18n/zh_TW.po153
-rw-r--r--addons/bus/models/__init__.py5
-rw-r--r--addons/bus/models/bus.py199
-rw-r--r--addons/bus/models/bus_presence.py71
-rw-r--r--addons/bus/models/res_partner.py29
-rw-r--r--addons/bus/models/res_users.py28
-rw-r--r--addons/bus/security/ir.model.access.csv4
-rw-r--r--addons/bus/static/src/js/crosstab_bus.js363
-rw-r--r--addons/bus/static/src/js/longpolling_bus.js262
-rw-r--r--addons/bus/static/src/js/services/bus_service.js154
-rw-r--r--addons/bus/static/src/js/web_client_bus.js109
-rw-r--r--addons/bus/static/tests/bus_tests.js391
-rw-r--r--addons/bus/static/tests/bus_tests_tour.js25
-rw-r--r--addons/bus/tests/__init__.py1
-rw-r--r--addons/bus/tests/test_assetsbundle.py49
-rw-r--r--addons/bus/views/bus.xml30
102 files changed, 13801 insertions, 0 deletions
diff --git a/addons/bus/__init__.py b/addons/bus/__init__.py
new file mode 100644
index 00000000..3b389160
--- /dev/null
+++ b/addons/bus/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+from . import models
+from . import controllers
diff --git a/addons/bus/__manifest__.py b/addons/bus/__manifest__.py
new file mode 100644
index 00000000..f8b51ab0
--- /dev/null
+++ b/addons/bus/__manifest__.py
@@ -0,0 +1,14 @@
+{
+ 'name' : 'IM Bus',
+ 'version': '1.0',
+ 'category': 'Hidden',
+ 'complexity': 'easy',
+ 'description': "Instant Messaging Bus allow you to send messages to users, in live.",
+ 'depends': ['base', 'web'],
+ 'data': [
+ 'views/bus.xml',
+ 'security/ir.model.access.csv',
+ ],
+ 'installable': True,
+ 'license': 'LGPL-3',
+}
diff --git a/addons/bus/controllers/__init__.py b/addons/bus/controllers/__init__.py
new file mode 100644
index 00000000..757b12a1
--- /dev/null
+++ b/addons/bus/controllers/__init__.py
@@ -0,0 +1,2 @@
+# -*- coding: utf-8 -*-
+from . import main
diff --git a/addons/bus/controllers/main.py b/addons/bus/controllers/main.py
new file mode 100644
index 00000000..99fcc82e
--- /dev/null
+++ b/addons/bus/controllers/main.py
@@ -0,0 +1,44 @@
+# -*- coding: utf-8 -*-
+
+from odoo import exceptions, _
+from odoo.http import Controller, request, route
+from odoo.addons.bus.models.bus import dispatch
+
+
+class BusController(Controller):
+ """ Examples:
+ openerp.jsonRpc('/longpolling/poll','call',{"channels":["c1"],last:0}).then(function(r){console.log(r)});
+ openerp.jsonRpc('/longpolling/send','call',{"channel":"c1","message":"m1"});
+ openerp.jsonRpc('/longpolling/send','call',{"channel":"c2","message":"m2"});
+ """
+
+ @route('/longpolling/send', type="json", auth="public")
+ def send(self, channel, message):
+ if not isinstance(channel, str):
+ raise Exception("bus.Bus only string channels are allowed.")
+ return request.env['bus.bus'].sendone(channel, message)
+
+ # override to add channels
+ def _poll(self, dbname, channels, last, options):
+ # update the user presence
+ if request.session.uid and 'bus_inactivity' in options:
+ request.env['bus.presence'].update(options.get('bus_inactivity'))
+ request.cr.close()
+ request._cr = None
+ return dispatch.poll(dbname, channels, last, options)
+
+ @route('/longpolling/poll', type="json", auth="public", cors="*")
+ def poll(self, channels, last, options=None):
+ if options is None:
+ options = {}
+ if not dispatch:
+ raise Exception("bus.Bus unavailable")
+ if [c for c in channels if not isinstance(c, str)]:
+ raise Exception("bus.Bus only string channels are allowed.")
+ if request.registry.in_test_mode():
+ raise exceptions.UserError(_("bus.Bus not available in test mode"))
+ return self._poll(request.db, channels, last, options)
+
+ @route('/longpolling/im_status', type="json", auth="user")
+ def im_status(self, partner_ids):
+ return request.env['res.partner'].with_context(active_test=False).search([('id', 'in', partner_ids)]).read(['im_status'])
diff --git a/addons/bus/i18n/af.po b/addons/bus/i18n/af.po
new file mode 100644
index 00000000..26982a88
--- /dev/null
+++ b/addons/bus/i18n/af.po
@@ -0,0 +1,126 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux <mat@odoo.com>, 2017
+# Andre de Kock <adekock11@gmail.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-09-20 09:53+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Last-Translator: Andre de Kock <adekock11@gmail.com>, 2017\n"
+"Language-Team: Afrikaans (https://www.transifex.com/odoo/teams/41243/af/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: af\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Kontak"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "Geskep deur"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr "Vertoningsnaam"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr "Laas Gewysig op"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "Laas Opgedateer deur"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "Laas Opgedateer op"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr "Boodskap"
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr "Gebruikers"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
diff --git a/addons/bus/i18n/am.po b/addons/bus/i18n/am.po
new file mode 100644
index 00000000..c2c3d61b
--- /dev/null
+++ b/addons/bus/i18n/am.po
@@ -0,0 +1,122 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-09-20 09:53+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Language-Team: Amharic (https://www.transifex.com/odoo/teams/41243/am/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: am\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
diff --git a/addons/bus/i18n/ar.po b/addons/bus/i18n/ar.po
new file mode 100644
index 00000000..d4f21410
--- /dev/null
+++ b/addons/bus/i18n/ar.po
@@ -0,0 +1,160 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Sherif Abd Ekmoniem <sherif.tsupport@gmail.com>, 2020
+# Mustafa Rawi <mustafa@cubexco.com>, 2020
+# Mustafa J. Kadhem <safi2266@gmail.com>, 2020
+# Akram Alfusayal <akram_ma@hotmail.com>, 2020
+# amrnegm <amrnegm.01@gmail.com>, 2020
+# hoxhe Aits <hoxhe0@gmail.com>, 2020
+# Osama Ahmaro <osamaahmaro@gmail.com>, 2020
+# Shaima Safar <shaima.safar@open-inside.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Shaima Safar <shaima.safar@open-inside.com>, 2020\n"
+"Language-Team: Arabic (https://www.transifex.com/odoo/teams/41243/ar/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "يمكن للمستخدم امتلاك حالة محادثات فورية واحدة فقط."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "بعيد"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "القناة"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "ناقل الاتصالات"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "جهة الاتصال"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "أنشئ بواسطة"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "أنشئ في"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "الاسم المعروض"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "المُعرف"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "حالة المحادثات الفورية"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "آخر تعديل في"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "آخر استطلاع"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "آخر حضور"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "آخر تحديث بواسطة"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "آخر تحديث في"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "الرسالة"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "مقطوع"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "متصل"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "وجود المستخدم"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "المستخدمون"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/az.po b/addons/bus/i18n/az.po
new file mode 100644
index 00000000..e4413106
--- /dev/null
+++ b/addons/bus/i18n/az.po
@@ -0,0 +1,128 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~11.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-09-21 13:17+0000\n"
+"PO-Revision-Date: 2018-08-24 09:17+0000\n"
+"Language-Team: Azerbaijani (https://www.transifex.com/odoo/teams/41243/az/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: az\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+msgid "ID"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:41
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/bg.po b/addons/bus/i18n/bg.po
new file mode 100644
index 00000000..84168b02
--- /dev/null
+++ b/addons/bus/i18n/bg.po
@@ -0,0 +1,156 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# aleksandar ivanov, 2020
+# Albena Mincheva <albena_vicheva@abv.bg>, 2020
+# Maria Boyadjieva <marabo2000@gmail.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Maria Boyadjieva <marabo2000@gmail.com>, 2020\n"
+"Language-Team: Bulgarian (https://www.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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Един потребител може да има само едно IM състояние."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Извън"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Канал"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Контакт"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Създадено от"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Създадено на"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Име за показване"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "Статус IM "
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Последно променено на"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Последна анкета"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Последно присъствие"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Последно обновено от"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Последно обновено на"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Съобщение"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Офлайн"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Онлайн"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Потребителско присъствие"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Потребители"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/bn.po b/addons/bus/i18n/bn.po
new file mode 100644
index 00000000..a0d103dd
--- /dev/null
+++ b/addons/bus/i18n/bn.po
@@ -0,0 +1,153 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Abu Zafar <azmikbal@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Abu Zafar <azmikbal@gmail.com>, 2021\n"
+"Language-Team: Bengali (https://www.transifex.com/odoo/teams/41243/bn/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: bn\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "যোগাযোগ"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "দ্বারা সৃষ্টি"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "তৈরি"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "প্রদর্শন নাম"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "আইডি "
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "সর্বশেষ সংশোধিত"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "সর্বশেষ আপডেট করেছেন"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "সর্বশেষ আপডেট হয়েছে"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "ব্যবহারকারীরা"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/bs.po b/addons/bus/i18n/bs.po
new file mode 100644
index 00000000..9c459e37
--- /dev/null
+++ b/addons/bus/i18n/bs.po
@@ -0,0 +1,133 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2018
+# Boško Stojaković <bluesoft83@gmail.com>, 2018
+# Bole <bole@dajmi5.com>, 2018
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~11.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-09-21 13:17+0000\n"
+"PO-Revision-Date: 2018-09-21 13:17+0000\n"
+"Last-Translator: Bole <bole@dajmi5.com>, 2018\n"
+"Language-Team: Bosnian (https://www.transifex.com/odoo/teams/41243/bs/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: bs\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: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Kanal"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Kontakt"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Kreirao"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Kreirano"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+msgid "Display Name"
+msgstr "Prikazani naziv"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+msgid "Last Modified on"
+msgstr "Zadnje mijenjano"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Zadnji ažurirao"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Zadnje ažurirano"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Poruka"
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr "Van mreže"
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr "Na mreži"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Korisnici"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:41
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/bus.pot b/addons/bus/i18n/bus.pot
new file mode 100644
index 00000000..555c78d4
--- /dev/null
+++ b/addons/bus/i18n/bus.pot
@@ -0,0 +1,149 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-01 07:28+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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/ca.po b/addons/bus/i18n/ca.po
new file mode 100644
index 00000000..649e9814
--- /dev/null
+++ b/addons/bus/i18n/ca.po
@@ -0,0 +1,158 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# RGB Consulting <odoo@rgbconsulting.com>, 2020
+# Quim - eccit <quim@eccit.com>, 2020
+# Sandra Franch <sandra.franch@upc.edu>, 2020
+# Arnau Ros, 2020
+# Josep Anton Belchi, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Josep Anton Belchi, 2021\n"
+"Language-Team: Catalan (https://www.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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Un usuari només pot tenir un estat de conversa."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Absent"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Canal"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "Bus de comunicació "
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Contacte"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Creat per"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Creat el"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Nom mostrat"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "Estat de la conversa"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Última modificació el "
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Última conversa"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Última presencia"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Última actualització per"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Última actualització el"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Missatge"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Fora de línia"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "En línia"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Presència del usuari"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Usuaris"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "bus.Bus no disponible en mode test"
diff --git a/addons/bus/i18n/ckb.po b/addons/bus/i18n/ckb.po
new file mode 100644
index 00000000..45cba298
--- /dev/null
+++ b/addons/bus/i18n/ckb.po
@@ -0,0 +1,153 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Haval Abdulkarim <haval.abdulkarim@gmail.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Haval Abdulkarim <haval.abdulkarim@gmail.com>, 2020\n"
+"Language-Team: Central Kurdish (https://www.transifex.com/odoo/teams/41243/ckb/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ckb\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "پەیوەندی"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "دروستکراوە لەلایەن"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "دروستکراوە لە"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "پیشاندانی ناو"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ناسنامە"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "دواین دەستکاری لە"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "دواین تازەکردنەوە لەلایەن"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "دواین تازەکردنەوە لە"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "بەکارهێنەرەکان"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/cs.po b/addons/bus/i18n/cs.po
new file mode 100644
index 00000000..eae51400
--- /dev/null
+++ b/addons/bus/i18n/cs.po
@@ -0,0 +1,158 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# Jaroslav Helemik Nemec <nemec@helemik.cz>, 2020
+# Jan Horzinka <jan.horzinka@centrum.cz>, 2020
+# Michal Veselý <michal@veselyberanek.net>, 2020
+# karolína schusterová <karolina.schusterova@vdp.sk>, 2021
+# trendspotter, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: trendspotter, 2021\n"
+"Language-Team: Czech (https://www.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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Uživatel může mít pouze jeden IM status."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Pryč"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Kanál"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "Komunikační sběrnice"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Kontakt"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Vytvořeno od"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Vytvořeno"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Zobrazované jméno"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "IM Status"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Naposled změněno"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Poslední průzkum"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Poslední přítomnost"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Naposledy upraveno od"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Naposled upraveno"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Zpráva"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Nepřipojeno"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Online"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr "Obnovit"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr "Stránka se zdá být zastaralá."
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Přítomnost uživatele"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Uživatelé"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "bus.Bus není v testovacím režimu k dispozici"
diff --git a/addons/bus/i18n/da.po b/addons/bus/i18n/da.po
new file mode 100644
index 00000000..fcddab9c
--- /dev/null
+++ b/addons/bus/i18n/da.po
@@ -0,0 +1,159 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# jonas jensen <j.jensen@tcomp.dk>, 2020
+# Morten Schou <ms@msteknik.dk>, 2020
+# Jesper Carstensen <jc@danodoo.dk>, 2020
+# Pernille Kristensen <pernillekristensen1994@gmail.com>, 2020
+# Sanne Kristensen <sanne@vkdata.dk>, 2020
+# Mads Søndergaard <mads@vkdata.dk>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Mads Søndergaard <mads@vkdata.dk>, 2020\n"
+"Language-Team: Danish (https://www.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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "En bruger kan kun have en IM status."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Væk"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Kanal"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "Kommunikations Bus"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Kontakt"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Oprettet af"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Oprettet den"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Vis navn"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "IM status"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Sidst ændret den"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Seneste meningsmåling"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Sidste tilstedeværelse"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Sidst opdateret af"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Sidst opdateret den"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Besked"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Offline"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Online"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr "Genopfrisk"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr "Siden ser ud til at være forældet."
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Bruger tilstedeværelse"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Brugere"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "bus. Bus er ikke tilgængelig i testtilstand"
diff --git a/addons/bus/i18n/de.po b/addons/bus/i18n/de.po
new file mode 100644
index 00000000..afaed682
--- /dev/null
+++ b/addons/bus/i18n/de.po
@@ -0,0 +1,154 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# Chris Egal <sodaswed@web.de>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Chris Egal <sodaswed@web.de>, 2021\n"
+"Language-Team: German (https://www.transifex.com/odoo/teams/41243/de/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: de\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Ein Benutzer kann nur einen eindeutigen Status haben."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Abwesend"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Kanal"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "Komunikations Bus"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Kontakt"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Erstellt von"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Erstellt am"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Anzeigename"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "Sofortnachrichten-Status"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Zuletzt geändert am"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Letzte Abfrage"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Letzte Anwesenheit"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Zuletzt aktualisiert durch"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Zuletzt aktualisiert am"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Nachricht"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Offline"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Online"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr "Aktualisieren"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr "Die Seite scheint veraltet zu sein."
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Benutzer Anwesend"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Benutzer"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "bus. Bus im Testmodus nicht verfügbar"
diff --git a/addons/bus/i18n/el.po b/addons/bus/i18n/el.po
new file mode 100644
index 00000000..109f3e79
--- /dev/null
+++ b/addons/bus/i18n/el.po
@@ -0,0 +1,156 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# Kostas Goutoudis <goutoudis@gmail.com>, 2020
+# George Tarasidis <george_tarasidis@yahoo.com>, 2020
+# Methodoos Greece <info@methodoos.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Methodoos Greece <info@methodoos.com>, 2021\n"
+"Language-Team: Greek (https://www.transifex.com/odoo/teams/41243/el/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: el\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Ένας χρήστης μπορεί να έχει μόνο μία κατάσταση Άμεσης Συνομιλίας"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Εκτός"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Κανάλι"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "Δίαυλος Επικοινωνίας"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Επαφή"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Δημιουργήθηκε από"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Δημιουργήθηκε στις"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Εμφάνιση Ονόματος"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "Κωδικός"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "Κατάσταση Άμεσης Συνομιλίας"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Τελευταία τροποποίηση στις"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Τελευταία Δημοσκόπηση"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Τελευταία Παρουσία"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Τελευταία Ενημέρωση από"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Τελευταία Ενημέρωση στις"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Μήνυμα"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Offline"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Online"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Παρουσία Χρήστη"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Χρήστες"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "bus.Bus δεν είναι διαθέσιμο σε δοκιμαστική λειτουργία"
diff --git a/addons/bus/i18n/en_AU.po b/addons/bus/i18n/en_AU.po
new file mode 100644
index 00000000..40e71f4a
--- /dev/null
+++ b/addons/bus/i18n/en_AU.po
@@ -0,0 +1,143 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo 9.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-08-18 14:07+0000\n"
+"PO-Revision-Date: 2015-09-07 16:42+0000\n"
+"Last-Translator: Martin Trigaux\n"
+"Language-Team: English (Australia) (http://www.transifex.com/odoo/odoo-9/"
+"language/en_AU/)\n"
+"Language: en_AU\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: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "Created by"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr "Display Name"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_res_users_partner_latitude
+msgid "Geo Latitude"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_res_users_partner_longitude
+msgid "Geo Longitude"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_res_users_date_localization
+msgid "Geolocation Date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr "Last Modified on"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "Last Updated by"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "Last Updated on"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Partner"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
+
+#~ msgid "Created on"
+#~ msgstr "Created on"
diff --git a/addons/bus/i18n/en_GB.po b/addons/bus/i18n/en_GB.po
new file mode 100644
index 00000000..11f3f163
--- /dev/null
+++ b/addons/bus/i18n/en_GB.po
@@ -0,0 +1,125 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux <mat@odoo.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-09-20 09:53+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
+"Language-Team: English (United Kingdom) (https://www.transifex.com/odoo/teams/41243/en_GB/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: en_GB\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "Created by"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr "Display Name"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr "Last Modified on"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "Last Updated by"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "Last Updated on"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
diff --git a/addons/bus/i18n/eo.po b/addons/bus/i18n/eo.po
new file mode 100644
index 00000000..01c963d9
--- /dev/null
+++ b/addons/bus/i18n/eo.po
@@ -0,0 +1,149 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Language-Team: Esperanto (https://www.transifex.com/odoo/teams/41243/eo/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/es.po b/addons/bus/i18n/es.po
new file mode 100644
index 00000000..61f0474b
--- /dev/null
+++ b/addons/bus/i18n/es.po
@@ -0,0 +1,155 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# José Cabrera Lozano <jose.cabrera@edukative.es>, 2021
+# Daniela Cervantes <dace@odoo.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Daniela Cervantes <dace@odoo.com>, 2021\n"
+"Language-Team: Spanish (https://www.transifex.com/odoo/teams/41243/es/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Un usuario sólo puede tener un estado de mensajería instantánea."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Ausente"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Canal"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "Bus de comunicación"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Contacto"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Creado por"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Creado el"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Nombre mostrado"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "Identificación"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "Estado de mensajería instantanea"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Última modificación el"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Última encuesta"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Última conexión"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Última actualización por"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Última actualización el"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Mensaje"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Desconectado"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "En línea"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr "Actualizar"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr "Parece que la página no está actualizada."
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Usuario conectado"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Usuarios"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "bus.Bus no está disponible en modo de prueba"
diff --git a/addons/bus/i18n/es_BO.po b/addons/bus/i18n/es_BO.po
new file mode 100644
index 00000000..3fd67617
--- /dev/null
+++ b/addons/bus/i18n/es_BO.po
@@ -0,0 +1,125 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux <mat@odoo.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-09-20 09:53+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
+"Language-Team: Spanish (Bolivia) (https://www.transifex.com/odoo/teams/41243/es_BO/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: es_BO\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "Creado por"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "Última actualización de"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "Última actualización en"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
diff --git a/addons/bus/i18n/es_CL.po b/addons/bus/i18n/es_CL.po
new file mode 100644
index 00000000..a75d3c07
--- /dev/null
+++ b/addons/bus/i18n/es_CL.po
@@ -0,0 +1,125 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux <mat@odoo.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-09-20 09:53+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
+"Language-Team: Spanish (Chile) (https://www.transifex.com/odoo/teams/41243/es_CL/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: es_CL\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "Creado por"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr "Nombre mostrado"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "ID (identificación)"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr "Última modificación en"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "Última actualización de"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "Última actualización en"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
diff --git a/addons/bus/i18n/es_CO.po b/addons/bus/i18n/es_CO.po
new file mode 100644
index 00000000..db4636c5
--- /dev/null
+++ b/addons/bus/i18n/es_CO.po
@@ -0,0 +1,125 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux <mat@odoo.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-09-20 09:53+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
+"Language-Team: Spanish (Colombia) (https://www.transifex.com/odoo/teams/41243/es_CO/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: es_CO\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "Creado por"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr "Nombre Público"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr "Última Modificación el"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "Actualizado por"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "Actualizado"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
diff --git a/addons/bus/i18n/es_CR.po b/addons/bus/i18n/es_CR.po
new file mode 100644
index 00000000..3cd82faf
--- /dev/null
+++ b/addons/bus/i18n/es_CR.po
@@ -0,0 +1,125 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux <mat@odoo.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-09-20 09:53+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
+"Language-Team: Spanish (Costa Rica) (https://www.transifex.com/odoo/teams/41243/es_CR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: es_CR\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
diff --git a/addons/bus/i18n/es_DO.po b/addons/bus/i18n/es_DO.po
new file mode 100644
index 00000000..11fec846
--- /dev/null
+++ b/addons/bus/i18n/es_DO.po
@@ -0,0 +1,125 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux <mat@odoo.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-09-20 09:53+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
+"Language-Team: Spanish (Dominican Republic) (https://www.transifex.com/odoo/teams/41243/es_DO/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: es_DO\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "Creado por"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr "Nombre mostrado"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "ID (identificación)"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr "Última modificación en"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "Última actualización de"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "Última actualización en"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
diff --git a/addons/bus/i18n/es_EC.po b/addons/bus/i18n/es_EC.po
new file mode 100644
index 00000000..8848736e
--- /dev/null
+++ b/addons/bus/i18n/es_EC.po
@@ -0,0 +1,125 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux <mat@odoo.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-09-20 09:53+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
+"Language-Team: Spanish (Ecuador) (https://www.transifex.com/odoo/teams/41243/es_EC/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: es_EC\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "Creado por:"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr "Nombre a Mostrar"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr "Fecha de modificación"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "Ultima Actualización por"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "Actualizado en"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
diff --git a/addons/bus/i18n/es_MX.po b/addons/bus/i18n/es_MX.po
new file mode 100644
index 00000000..68e8d58d
--- /dev/null
+++ b/addons/bus/i18n/es_MX.po
@@ -0,0 +1,153 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Cécile Collart <cco@odoo.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Cécile Collart <cco@odoo.com>, 2021\n"
+"Language-Team: Spanish (Mexico) (https://www.transifex.com/odoo/teams/41243/es_MX/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: es_MX\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Un usuario sólo puede tener un estado de mensajería instantánea."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Ausente"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Canal"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "Bus de comunicación"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Contacto"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Creado por"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Creado el"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Nombre mostrado"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "Identificación"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "Estado de mensajería instantanea"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Última modificación el"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Última encuesta"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Última conexión"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Última actualización por"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Última actualización el"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Mensaje"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Desconectado"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "En línea"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr "Actualizar"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr "Parece que la página no está actualizada."
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Usuario conectado"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Usuarios"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "bus.Bus no está disponible en modo de prueba"
diff --git a/addons/bus/i18n/es_PA.po b/addons/bus/i18n/es_PA.po
new file mode 100644
index 00000000..653787fa
--- /dev/null
+++ b/addons/bus/i18n/es_PA.po
@@ -0,0 +1,143 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo 9.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-08-18 14:07+0000\n"
+"PO-Revision-Date: 2015-09-07 16:42+0000\n"
+"Last-Translator: Martin Trigaux\n"
+"Language-Team: Spanish (Panama) (http://www.transifex.com/odoo/odoo-9/"
+"language/es_PA/)\n"
+"Language: es_PA\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: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "Creado por"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_res_users_partner_latitude
+msgid "Geo Latitude"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_res_users_partner_longitude
+msgid "Geo Longitude"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_res_users_date_localization
+msgid "Geolocation Date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "Última actualización de"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "Última actualización en"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Partner"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
+
+#~ msgid "Created on"
+#~ msgstr "Creado en"
diff --git a/addons/bus/i18n/es_PE.po b/addons/bus/i18n/es_PE.po
new file mode 100644
index 00000000..b9d94479
--- /dev/null
+++ b/addons/bus/i18n/es_PE.po
@@ -0,0 +1,125 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux <mat@odoo.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-09-20 09:53+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
+"Language-Team: Spanish (Peru) (https://www.transifex.com/odoo/teams/41243/es_PE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: es_PE\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "Creado por"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr "Nombre a Mostrar"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr "Ultima Modificación en"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "Actualizado última vez por"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "Ultima Actualización"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
diff --git a/addons/bus/i18n/es_PY.po b/addons/bus/i18n/es_PY.po
new file mode 100644
index 00000000..a90f1b52
--- /dev/null
+++ b/addons/bus/i18n/es_PY.po
@@ -0,0 +1,125 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux <mat@odoo.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-09-20 09:53+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
+"Language-Team: Spanish (Paraguay) (https://www.transifex.com/odoo/teams/41243/es_PY/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: es_PY\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "Creado por"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "Ultima actualización por"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "Ultima actualización en"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
diff --git a/addons/bus/i18n/es_VE.po b/addons/bus/i18n/es_VE.po
new file mode 100644
index 00000000..2a13887d
--- /dev/null
+++ b/addons/bus/i18n/es_VE.po
@@ -0,0 +1,125 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux <mat@odoo.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-09-20 09:53+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
+"Language-Team: Spanish (Venezuela) (https://www.transifex.com/odoo/teams/41243/es_VE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: es_VE\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "Creado por"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr "Mostrar nombre"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr "Modificada por última vez"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "Última actualización realizada por"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "Ultima actualizacion en"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
diff --git a/addons/bus/i18n/et.po b/addons/bus/i18n/et.po
new file mode 100644
index 00000000..a1160efd
--- /dev/null
+++ b/addons/bus/i18n/et.po
@@ -0,0 +1,156 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Triine Aavik <triine@avalah.ee>, 2020
+# Arma Gedonsky <armagedonsky@hot.ee>, 2020
+# Eneli Õigus <enelioigus@gmail.com>, 2020
+# Martin Aavastik <martin@avalah.ee>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Martin Aavastik <martin@avalah.ee>, 2020\n"
+"Language-Team: Estonian (https://www.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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "A user can only have one IM status."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Eemal"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Allikas"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Kontakt"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Loonud"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Loodud"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Kuva nimi"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "IM Status"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Viimati muudetud (millal)"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Last Poll"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Last Presence"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Viimati uuendatud (kelle poolt)"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Viimati uuendatud"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Sõnum"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Offline"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Online"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Kasutaja kohalolek"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Kasutajad"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/eu.po b/addons/bus/i18n/eu.po
new file mode 100644
index 00000000..44e6521c
--- /dev/null
+++ b/addons/bus/i18n/eu.po
@@ -0,0 +1,158 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2021
+# oihane <oihanecruce@gmail.com>, 2021
+# Esther Martín Menéndez <esthermartin001@gmail.com>, 2021
+# Eneko <eastigarraga@codesyntax.com>, 2021
+# 61590936fa9bf290362ee306eeabf363_944dd10 <a8bfd5a0b49b9c8455f33fc521764cc3_680674>, 2021
+# Victor Laskurain <blaskurain@binovo.es>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Victor Laskurain <blaskurain@binovo.es>, 2021\n"
+"Language-Team: Basque (https://www.transifex.com/odoo/teams/41243/eu/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: eu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Kanala"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Kontaktua"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Nork sortua"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Noiz sortua"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Izena erakutsi"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Azken aldaketa"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Azkenengoz eguneratu zuena"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Azken eguneraketa noiz"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Mezua"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Linean "
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Erabiltzailearen presentzia "
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Erabiltzaileak"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/fa.po b/addons/bus/i18n/fa.po
new file mode 100644
index 00000000..9542572c
--- /dev/null
+++ b/addons/bus/i18n/fa.po
@@ -0,0 +1,156 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# Hamid Darabi, 2020
+# Hamed Mohammadi <hamed@dehongi.com>, 2020
+# Mohsen Mohammadi <iammohsen.123@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Mohsen Mohammadi <iammohsen.123@gmail.com>, 2021\n"
+"Language-Team: Persian (https://www.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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "یک کاربر فقط می‌تواند یک وضعیت پیام رسانی داشته باشد."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "بیرون رفته"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "کانال"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "مخاطب"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "ایجاد توسط"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "ایجاد شده در"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "نام نمایشی"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "شناسه"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "وضعیت پیام رسانی"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "آخرین تغییر در"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "آخرین رای‌گیری"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "آخرین حضور"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "آخرین به روز رسانی توسط"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "آخرین به روز رسانی در"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "پیام"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "آفلاین"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "آنلاین"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr "تازه سازی"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr "صفحه به نظر می‌رسد قدیمی است."
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "حضور کاربر"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "کاربران"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/fi.po b/addons/bus/i18n/fi.po
new file mode 100644
index 00000000..736066d8
--- /dev/null
+++ b/addons/bus/i18n/fi.po
@@ -0,0 +1,158 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# Kari Lindgren <kari.lindgren@emsystems.fi>, 2020
+# Miku Laitinen <miku.laitinen@gmail.com>, 2020
+# Jarmo Kortetjärvi <jarmo.kortetjarvi@gmail.com>, 2020
+# Tuomo Aura <tuomo.aura@web-veistamo.fi>, 2020
+# Veikko Väätäjä <veikko.vaataja@gmail.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Veikko Väätäjä <veikko.vaataja@gmail.com>, 2020\n"
+"Language-Team: Finnish (https://www.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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Käyttäjällä voi olla vain yksi pikaviestimen tila"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Poissa"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Kanava"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "Viestintäväylä"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Kontakti"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Luonut"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Luotu"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Näyttönimi"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "Tunniste (ID)"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "Pikaviestimen tila"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Viimeksi muokattu"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Viimeisin kysely"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Viimeksi läsnä"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Viimeksi päivitetty"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Viimeksi päivitetty"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Viesti"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Poissa"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Paikalla"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Käyttäjän läsnäolo"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Käyttäjät"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "bus.Bus ei ole käytettävissä testitilassa"
diff --git a/addons/bus/i18n/fo.po b/addons/bus/i18n/fo.po
new file mode 100644
index 00000000..6e0df5fc
--- /dev/null
+++ b/addons/bus/i18n/fo.po
@@ -0,0 +1,125 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux <mat@odoo.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-09-20 09:53+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
+"Language-Team: Faroese (https://www.transifex.com/odoo/teams/41243/fo/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: fo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "Byrjað av"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr "Vís navn"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr "Seinast rættað tann"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "Seinast dagført av"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "Seinast dagført tann"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
diff --git a/addons/bus/i18n/fr.po b/addons/bus/i18n/fr.po
new file mode 100644
index 00000000..85c659db
--- /dev/null
+++ b/addons/bus/i18n/fr.po
@@ -0,0 +1,157 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# Aurélien Pillevesse <aurelienpillevesse@hotmail.fr>, 2020
+# Eloïse Stilmant <est@odoo.com>, 2020
+# Cécile Collart <cco@odoo.com>, 2020
+# Gilles Mangin <gilles.mangin@phidias.fr>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Gilles Mangin <gilles.mangin@phidias.fr>, 2020\n"
+"Language-Team: French (https://www.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=2; plural=(n > 1);\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Un utilisateur ne peut avoir qu'un statut de messagerie instantanée."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Absent"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Canal"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "Bus de communication"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Contact"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Créé par"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Créé le"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Nom affiché"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "Statut de messagerie instantanée"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Dernière modification le"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Dernier poll"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Dernière présence en ligne"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Dernière mise à jour par"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Dernière mise à jour le"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Message"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Hors ligne"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "En ligne"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr "Actualiser"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Présence de l'utilisateur"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Utilisateurs"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "bus.Bus pas disponible en mode test"
diff --git a/addons/bus/i18n/fr_BE.po b/addons/bus/i18n/fr_BE.po
new file mode 100644
index 00000000..9d0b257a
--- /dev/null
+++ b/addons/bus/i18n/fr_BE.po
@@ -0,0 +1,143 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo 9.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-08-18 14:07+0000\n"
+"PO-Revision-Date: 2015-09-07 16:42+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: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "Créé par"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_res_users_partner_latitude
+msgid "Geo Latitude"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_res_users_partner_longitude
+msgid "Geo Longitude"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_res_users_date_localization
+msgid "Geolocation Date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "Derniere fois mis à jour par"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "Dernière mis à jour le"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr "Message"
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Partner"
+msgstr "Partenaire"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr "Utilisateurs"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
+
+#~ msgid "Created on"
+#~ msgstr "Créé le"
diff --git a/addons/bus/i18n/fr_CA.po b/addons/bus/i18n/fr_CA.po
new file mode 100644
index 00000000..74dc0680
--- /dev/null
+++ b/addons/bus/i18n/fr_CA.po
@@ -0,0 +1,125 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux <mat@odoo.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-09-20 09:53+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
+"Language-Team: French (Canada) (https://www.transifex.com/odoo/teams/41243/fr_CA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: fr_CA\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "Créé par"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr "Nom affiché"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "Identifiant"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr "Dernière modification le"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "Dernière mise à jour par"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "Dernière mise à jour le"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
diff --git a/addons/bus/i18n/gl.po b/addons/bus/i18n/gl.po
new file mode 100644
index 00000000..c40039c3
--- /dev/null
+++ b/addons/bus/i18n/gl.po
@@ -0,0 +1,125 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux <mat@odoo.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-09-20 09:53+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
+"Language-Team: Galician (https://www.transifex.com/odoo/teams/41243/gl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: gl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "Creado por"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "Última actualización de"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "Última actualización en"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
diff --git a/addons/bus/i18n/gu.po b/addons/bus/i18n/gu.po
new file mode 100644
index 00000000..33bf7d41
--- /dev/null
+++ b/addons/bus/i18n/gu.po
@@ -0,0 +1,134 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2018
+# Ranjit Pillai <rpi@odoo.com>, 2018
+# Turkesh Patel <turkesh4friends@gmail.com>, 2018
+# Dharmraj Jhala <dja@openerp.com>, 2018
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~11.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-09-21 13:17+0000\n"
+"PO-Revision-Date: 2018-09-21 13:17+0000\n"
+"Last-Translator: Dharmraj Jhala <dja@openerp.com>, 2018\n"
+"Language-Team: Gujarati (https://www.transifex.com/odoo/teams/41243/gu/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: gu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "સંપર્ક"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "બનાવનાર"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+msgid "Display Name"
+msgstr "પ્રદર્શન નામ"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+msgid "ID"
+msgstr "ઓળખ"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "સંદેશ"
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "વપરાશકર્તાઓ"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:41
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/he.po b/addons/bus/i18n/he.po
new file mode 100644
index 00000000..14d38e39
--- /dev/null
+++ b/addons/bus/i18n/he.po
@@ -0,0 +1,157 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Fishfur A Banter <fishfurbanter@gmail.com>, 2020
+# Yihya Hugirat <hugirat@gmail.com>, 2020
+# דודי מלכה <Dudimalka6@gmail.com>, 2020
+# ZVI BLONDER <ZVIBLONDER@gmail.com>, 2020
+# Lilach Gilliam <lilach.gilliam@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Lilach Gilliam <lilach.gilliam@gmail.com>, 2021\n"
+"Language-Team: Hebrew (https://www.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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "למשתמש יכול להיות רק סטאטוס IM אחד "
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "רחוק"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "ערוץ"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "צור קשר"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "נוצר ע\"י"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "נוצר ב-"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "שם תצוגה"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "מזהה"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "שונה לאחרונה ב - "
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "סקר אחרון"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "נוכחות אחרונה"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "עודכן לאחרונה ע\"י"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "עדכון אחרון ב"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "הודעה"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "לא מקוון"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "מקוון"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr "רענן"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr "נראה שהדף הינו מיושן."
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "נוכחות משתמש"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "משתמשים"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/hi.po b/addons/bus/i18n/hi.po
new file mode 100644
index 00000000..ab9f9cd7
--- /dev/null
+++ b/addons/bus/i18n/hi.po
@@ -0,0 +1,149 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Language-Team: Hindi (https://www.transifex.com/odoo/teams/41243/hi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: hi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/hr.po b/addons/bus/i18n/hr.po
new file mode 100644
index 00000000..14cda1c1
--- /dev/null
+++ b/addons/bus/i18n/hr.po
@@ -0,0 +1,155 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# Vladimir Olujić <olujic.vladimir@storm.hr>, 2020
+# Bole <bole@dajmi5.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Bole <bole@dajmi5.com>, 2020\n"
+"Language-Team: Croatian (https://www.transifex.com/odoo/teams/41243/hr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Korisnik može imati samo jedan IM status"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Odsutan"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Kanal"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Kontakt"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Kreirao"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Kreirano"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Naziv"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "IM Status"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Zadnja promjena"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Zadnji pokušaj"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Zadnja prijava"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Promijenio"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Vrijeme promjene"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Poruka"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Odspojen"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Online"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr "Osvježi"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr "Stranica se čini zastarjela."
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Prisutnost korisnika"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Korisnici"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "bus.Bus nije dostupan test načinu"
diff --git a/addons/bus/i18n/hu.po b/addons/bus/i18n/hu.po
new file mode 100644
index 00000000..9120d202
--- /dev/null
+++ b/addons/bus/i18n/hu.po
@@ -0,0 +1,157 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2021
+# krnkris, 2021
+# Tamás Németh <ntomasz81@gmail.com>, 2021
+# gezza <geza.nagy@oregional.hu>, 2021
+# Ákos Nagy <akos.nagy@oregional.hu>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Ákos Nagy <akos.nagy@oregional.hu>, 2021\n"
+"Language-Team: Hungarian (https://www.transifex.com/odoo/teams/41243/hu/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: hu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Egy felhasználónak csak egy üzenetküldési állapota lehet."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Távol"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Csatorna"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "Kommunikációs busz"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Kapcsolat"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Létrehozta"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Létrehozva"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Név megjelenítése"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "Azonosító"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "Üzenetküldési állapot"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Legutóbb módosítva"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Utolsó szavazás"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Utolsó jelenlét"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Frissítette"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Frissítve "
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Üzenet"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Offline"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Online"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Felhasználói jelenlét"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Felhasználók"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "bus.Bus nem elérhető tesztelési módban"
diff --git a/addons/bus/i18n/hy.po b/addons/bus/i18n/hy.po
new file mode 100644
index 00000000..6e8d6f3f
--- /dev/null
+++ b/addons/bus/i18n/hy.po
@@ -0,0 +1,139 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo 9.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-08-18 14:07+0000\n"
+"PO-Revision-Date: 2015-09-07 16:41+0000\n"
+"Last-Translator: Martin Trigaux\n"
+"Language-Team: Armenian (http://www.transifex.com/odoo/odoo-9/language/hy/)\n"
+"Language: hy\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: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_res_users_partner_latitude
+msgid "Geo Latitude"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_res_users_partner_longitude
+msgid "Geo Longitude"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_res_users_date_localization
+msgid "Geolocation Date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr "Հաղորդագրություն"
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Partner"
+msgstr "Գործընկեր"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr "Օգտագործողներ"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
diff --git a/addons/bus/i18n/id.po b/addons/bus/i18n/id.po
new file mode 100644
index 00000000..5b94b343
--- /dev/null
+++ b/addons/bus/i18n/id.po
@@ -0,0 +1,160 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# William Surya Permana <zarambie_game@yahoo.com>, 2020
+# Wahyu Setiawan <wahyusetiaaa@gmail.com>, 2020
+# oon arfiandwi <oon.arfiandwi@gmail.com>, 2020
+# Bonny Useful <bonny.useful@gmail.com>, 2020
+# Deddy Ddr <deddy.ddr@gmail.com>, 2020
+# Ryanto The <ry.the77@gmail.com>, 2020
+# Abdul Munif Hanafi <amunifhanafi@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Abdul Munif Hanafi <amunifhanafi@gmail.com>, 2021\n"
+"Language-Team: Indonesian (https://www.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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Pengguna hanya dapat memiliki satu status IM."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Menjauh"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Saluran"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Kontak"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Dibuat oleh"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Dibuat pada"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Nama Tampilan"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "Status IM"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Terakhir diubah pada"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Poll terakhir"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Kehadiran terakhir"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Terakhir diperbarui oleh"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Terakhir diperbarui pada"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Pesan"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Luring"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Daring"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr "Halaman tersebut tampaknya sudah usang."
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Kehadiran Pengguna"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Pengguna"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/is.po b/addons/bus/i18n/is.po
new file mode 100644
index 00000000..6e3ed130
--- /dev/null
+++ b/addons/bus/i18n/is.po
@@ -0,0 +1,134 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2018
+# Birgir Steinarsson <biggboss83@gmail.com>, 2018
+# Bjorn Ingvarsson <boi@exigo.is>, 2018
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~11.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-09-21 13:17+0000\n"
+"PO-Revision-Date: 2018-08-24 09:17+0000\n"
+"Last-Translator: Bjorn Ingvarsson <boi@exigo.is>, 2018\n"
+"Language-Team: Icelandic (https://www.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: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "farvegur"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Tengiliður"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Búið til af"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Stofnað þann"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+msgid "Display Name"
+msgstr "Nafn"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+msgid "ID"
+msgstr "Auðkenni"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+msgid "Last Modified on"
+msgstr "Síðast breytt þann"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Síðast uppfært af"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Síðast uppfært þann"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Skilaboð"
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr "Ótengt"
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Notendur"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:41
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/it.po b/addons/bus/i18n/it.po
new file mode 100644
index 00000000..3a1c9139
--- /dev/null
+++ b/addons/bus/i18n/it.po
@@ -0,0 +1,156 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# Riccardo Di Maio <riccardodimaio11@gmail.com>, 2020
+# Paolo Valier, 2020
+# Sergio Zanchetta <primes2h@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Sergio Zanchetta <primes2h@gmail.com>, 2021\n"
+"Language-Team: Italian (https://www.transifex.com/odoo/teams/41243/it/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: it\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Un utente può avere un solo stato IM."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Assente"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Canale"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "Bus di comunicazione"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Contatto"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Creato da"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Data creazione"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Nome visualizzato"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "Stato IM"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Ultima modifica il"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Ultimo poll"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Ultima presenza"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Ultimo aggiornamento di"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Ultimo aggiornamento il"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Messaggio"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Fuori linea"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "In linea"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr "Ricarica"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr "La pagina non sembra essere aggiornata."
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Presenza utente"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Utenti"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "bus.Bus non disponibile in modalità test"
diff --git a/addons/bus/i18n/ja.po b/addons/bus/i18n/ja.po
new file mode 100644
index 00000000..f8e4fa39
--- /dev/null
+++ b/addons/bus/i18n/ja.po
@@ -0,0 +1,156 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Shunho Kin <s-kin@shonan-innovation.co.jp>, 2020
+# Martin Trigaux, 2020
+# Yoshi Tashiro <tashiro@roomsfor.hk>, 2020
+# Norimichi Sugimoto <norimichi.sugimoto@tls-ltd.co.jp>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Norimichi Sugimoto <norimichi.sugimoto@tls-ltd.co.jp>, 2020\n"
+"Language-Team: Japanese (https://www.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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "ユーザは1つのIMステータスのみを持つことができます。"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "外出"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "チャネル"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "連絡先"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "作成者"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "作成日"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "表示名"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "IMステータス"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "最終更新日"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "最終返信"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "最終在席"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "最終更新者"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "最終更新日"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "メッセージ"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "オフライン"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "オンライン"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "ユーザプレゼンス"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "ユーザ"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/ka.po b/addons/bus/i18n/ka.po
new file mode 100644
index 00000000..2e638e18
--- /dev/null
+++ b/addons/bus/i18n/ka.po
@@ -0,0 +1,159 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Davit Matchakhelidze <david.machakhelidze@gmail.com>, 2021
+# Mari Khomeriki <mari.khomeriki@maxinai.com>, 2021
+# Saba Khmaladze <skhmaladze@uglt.org>, 2021
+# Martin Trigaux, 2021
+# Temur, 2021
+# Dachi Darchiashvili <darcho.dd@gmail.com>, 2021
+# Giorgi Melitauri <gmelitauri@live.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Giorgi Melitauri <gmelitauri@live.com>, 2021\n"
+"Language-Team: Georgian (https://www.transifex.com/odoo/teams/41243/ka/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ka\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "მომხმარებელს მხოლოდ ერთი IM სტატუსის ქონა შეუძლია"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "გასული"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "არხი"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "კონტაქტი"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "შემქმნელი"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "შექმნის თარიღი"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "სახელი"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "იდენტიფიკატორი/ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "IM სტატუსი"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "ბოლოს განახლებულია"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "ბოლოს განაახლა"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "ბოლოს განახლდა"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "შეტყობინება"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "მომხმარებლები"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/kab.po b/addons/bus/i18n/kab.po
new file mode 100644
index 00000000..81d42020
--- /dev/null
+++ b/addons/bus/i18n/kab.po
@@ -0,0 +1,125 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux <mat@odoo.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-09-20 09:53+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
+"Language-Team: Kabyle (https://www.transifex.com/odoo/teams/41243/kab/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: kab\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "Yerna-t"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "Asulay"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr "Aleqqem aneggaru di"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "Aleqqem aneggaru sɣuṛ"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "Aleqqem aneggaru di"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
diff --git a/addons/bus/i18n/km.po b/addons/bus/i18n/km.po
new file mode 100644
index 00000000..36e35cfe
--- /dev/null
+++ b/addons/bus/i18n/km.po
@@ -0,0 +1,155 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Sengtha Chay <sengtha@gmail.com>, 2020
+# Chan Nath <channath@gmail.com>, 2020
+# Lux Sok <sok.lux@gmail.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Lux Sok <sok.lux@gmail.com>, 2020\n"
+"Language-Team: Khmer (https://www.transifex.com/odoo/teams/41243/km/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: km\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "អ្នកប្រើអាចមានស្ថានភាព IM មួយប៉ុណ្ណោះ"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "មិននៅកន្លែង"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "ឆានែល"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "រថយន្តទំនាក់ទំនង"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "ទំនាក់ទំនង"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "បង្កើតដោយ"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "បង្កើតនៅ"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "ឈ្មោះសំរាប់បង្ហាញ"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "អត្តសញ្ញាណ"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "ស្ថានភាព IM"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "កាលបរិច្ឆេតកែប្រែចុងក្រោយ"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "ការស្ទង់មតិចុងក្រោយ"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "វត្តមានចុងក្រោយ"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "ផ្លាស់ប្តូរចុងក្រោយ"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "ផ្លាស់ប្តូរចុងក្រោយ"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "សារ"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "បិទប្រពន្ឋ័សេវា"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "បើកប្រពន្ឋ័ទាក់ទង"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "វត្តមានរបស់អ្នកប្រើ"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "អ្នកប្រើ"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "bus.Bus មិនមាននៅក្នុងរបៀបតេស្ត"
diff --git a/addons/bus/i18n/ko.po b/addons/bus/i18n/ko.po
new file mode 100644
index 00000000..7d03a408
--- /dev/null
+++ b/addons/bus/i18n/ko.po
@@ -0,0 +1,155 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# Seongseok Shin <shinss61@hotmail.com>, 2020
+# JH CHOI <hwangtog@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: JH CHOI <hwangtog@gmail.com>, 2021\n"
+"Language-Team: Korean (https://www.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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "사용자는 메신저 상태를 하나만 가질 수 있습니다."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "자리 비움"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "채널"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "커뮤니케이션 버스"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "연락처"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "작성자"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "작성일"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "이름 표시"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "메신저 상태"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "최근 수정"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "최근 투표"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "최근 출석"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "최근 갱신한 사람"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "최근 갱신 날짜"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "메시지"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "오프라인"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "온라인"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr "새로 고침"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr "페이지가 오래된 것 같습니다."
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "사용자 출석"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "사용자"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "bus.Bus는 시험 모드에서는 사용할 수 없음"
diff --git a/addons/bus/i18n/lb.po b/addons/bus/i18n/lb.po
new file mode 100644
index 00000000..9866ace4
--- /dev/null
+++ b/addons/bus/i18n/lb.po
@@ -0,0 +1,133 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~12.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2019-08-26 08:16+0000\n"
+"PO-Revision-Date: 2019-08-26 09:09+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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_ir_autovacuum
+msgid "Automatic Vacuum"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+msgid "ID"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/lo.po b/addons/bus/i18n/lo.po
new file mode 100644
index 00000000..b73cf292
--- /dev/null
+++ b/addons/bus/i18n/lo.po
@@ -0,0 +1,122 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-09-20 09:53+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Language-Team: Lao (https://www.transifex.com/odoo/teams/41243/lo/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: lo\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
diff --git a/addons/bus/i18n/lt.po b/addons/bus/i18n/lt.po
new file mode 100644
index 00000000..70d78ca0
--- /dev/null
+++ b/addons/bus/i18n/lt.po
@@ -0,0 +1,158 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2021
+# UAB "Draugiški sprendimai" <transifex@draugiskisprendimai.lt>, 2021
+# Audrius Palenskis <audrius.palenskis@gmail.com>, 2021
+# Monika Raciunaite <monika.raciunaite@gmail.com>, 2021
+# Linas Versada <linaskrisiukenas@gmail.com>, 2021
+# grupoda2 <dmitrijus.ivanovas@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: grupoda2 <dmitrijus.ivanovas@gmail.com>, 2021\n"
+"Language-Team: Lithuanian (https://www.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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Vartotojas gali turėti tik vieną IM būseną."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Išėjęs"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Kanalas"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "Komunikacijos magistralė"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Kontaktas"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Sukūrė"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Sukurta"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Rodomas pavadinimas"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "IM būsena"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Paskutinį kartą keista"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Paskutinė apklausa"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Paskutinį kartą matytas"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Paskutinį kartą atnaujino"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Paskutinį kartą atnaujinta"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Žinutė"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Atsijungęs"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Prisijungęs"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Vartotojo aktyvumas"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Vartotojai"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "magistralė. Magistralė nepasiekiama testiniame režime"
diff --git a/addons/bus/i18n/lv.po b/addons/bus/i18n/lv.po
new file mode 100644
index 00000000..dcde36a6
--- /dev/null
+++ b/addons/bus/i18n/lv.po
@@ -0,0 +1,155 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Arnis Putniņš <arnis@allegro.lv>, 2020
+# JanisJanis <jbojars@gmail.com>, 2020
+# ievaputnina <ievai.putninai@gmail.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: ievaputnina <ievai.putninai@gmail.com>, 2020\n"
+"Language-Team: Latvian (https://www.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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Kanāls"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Kontakts"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Izveidoja"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Izveidots"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Attēlotais nosaukums"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Pēdējoreiz modificēts"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Pēdējoreiz atjaunoja"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Pēdējoreiz atjaunots"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Ziņojums"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Bezsaiste"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Tiešsaiste"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Lietotāji"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/mk.po b/addons/bus/i18n/mk.po
new file mode 100644
index 00000000..c94e3e66
--- /dev/null
+++ b/addons/bus/i18n/mk.po
@@ -0,0 +1,125 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux <mat@odoo.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-09-20 09:53+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
+"Language-Team: Macedonian (https://www.transifex.com/odoo/teams/41243/mk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: mk\n"
+"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "Креирано од"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr "Прикажи име"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr "Последна промена на"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "Последно ажурирање од"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "Последно ажурирање на"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
diff --git a/addons/bus/i18n/ml_IN.po b/addons/bus/i18n/ml_IN.po
new file mode 100644
index 00000000..11d9468a
--- /dev/null
+++ b/addons/bus/i18n/ml_IN.po
@@ -0,0 +1,143 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo 9.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-08-18 14:07+0000\n"
+"PO-Revision-Date: 2016-04-22 12:13+0000\n"
+"Last-Translator: Martin Trigaux\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: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "രൂപപ്പെടുത്തിയത്"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_res_users_partner_latitude
+msgid "Geo Latitude"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_res_users_partner_longitude
+msgid "Geo Longitude"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_res_users_date_localization
+msgid "Geolocation Date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "അവസാനം അപ്ഡേറ്റ് ചെയ്തത്"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "അവസാനം അപ്ഡേറ്റ് ചെയ്ത ദിവസം"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Partner"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
+
+#~ msgid "Created on"
+#~ msgstr "നിർമിച്ച ദിവസം"
diff --git a/addons/bus/i18n/mn.po b/addons/bus/i18n/mn.po
new file mode 100644
index 00000000..17ba8649
--- /dev/null
+++ b/addons/bus/i18n/mn.po
@@ -0,0 +1,154 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# Minj P <pminj322@gmail.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Minj P <pminj322@gmail.com>, 2020\n"
+"Language-Team: Mongolian (https://www.transifex.com/odoo/teams/41243/mn/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: mn\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Хэрэглэгч шуурхай хөөрөлдөөны нэг л төлөвтэй байх боломжтой"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Хол байна"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Суваг"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "Харилцааны цуваа"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Харилцах хаяг"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Үүсгэсэн этгээд"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Үүсгэсэн огноо"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Дэлгэрэнгүй нэр"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "ШХ Төлөв"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Сүүлд зассан огноо"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Сүүлийн Санал"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Сүүлийн Оролцоо"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Сүүлд зассан этгээд"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Сүүлд зассан огноо"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Зурвас"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Оффлайн"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Онлайн"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Хэрэглэгчийн Оролцоо"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Хэрэглэгчид"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "Тестийн горимд bus.Bus ашиглах боломжгүй"
diff --git a/addons/bus/i18n/nb.po b/addons/bus/i18n/nb.po
new file mode 100644
index 00000000..032cd80c
--- /dev/null
+++ b/addons/bus/i18n/nb.po
@@ -0,0 +1,154 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# Marius Stedjan <marius@stedjan.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Marius Stedjan <marius@stedjan.com>, 2020\n"
+"Language-Team: Norwegian Bokmål (https://www.transifex.com/odoo/teams/41243/nb/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: nb\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "En bruker kan bare ha én chattestatus"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Borte"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Kanal"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Kontakt"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Opprettet av"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Opprettet"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Visningsnavn"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "Chattestatus"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Sist endret"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Sist kontaktet"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Sist tilstede"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Sist oppdatert av"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Sist oppdatert"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Melding"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Frakoblet"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "På nett"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Bruker tilstede"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Brukere"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/ne.po b/addons/bus/i18n/ne.po
new file mode 100644
index 00000000..5794de99
--- /dev/null
+++ b/addons/bus/i18n/ne.po
@@ -0,0 +1,122 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-09-20 09:53+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Language-Team: Nepali (https://www.transifex.com/odoo/teams/41243/ne/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ne\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
diff --git a/addons/bus/i18n/nl.po b/addons/bus/i18n/nl.po
new file mode 100644
index 00000000..d9f1e049
--- /dev/null
+++ b/addons/bus/i18n/nl.po
@@ -0,0 +1,155 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# Yenthe Van Ginneken <yenthespam@gmail.com>, 2020
+# Erwin van der Ploeg <erwin@odooexperts.nl>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Erwin van der Ploeg <erwin@odooexperts.nl>, 2020\n"
+"Language-Team: Dutch (https://www.transifex.com/odoo/teams/41243/nl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: nl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Een gebruiker kan maar één IM status hebben."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Afwezig"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Kanaal"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "Communicatiebus"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Contact"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Aangemaakt door"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Aangemaakt op"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Schermnaam"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "IM Status"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Laatst gewijzigd op"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Laatste pol"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Laatst aanwezig"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Laatst bijgewerkt door"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Laatst bijgewerkt op"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Bericht"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Offline"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Online"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr "Vernieuw"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr "De pagina lijkt verouderd."
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Gebruiker aanwezig"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Gebruikers"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "bus.Bus niet beschikbaar in test modus"
diff --git a/addons/bus/i18n/nl_BE.po b/addons/bus/i18n/nl_BE.po
new file mode 100644
index 00000000..3308d45f
--- /dev/null
+++ b/addons/bus/i18n/nl_BE.po
@@ -0,0 +1,125 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux <mat@odoo.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-09-20 09:53+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
+"Language-Team: Dutch (Belgium) (https://www.transifex.com/odoo/teams/41243/nl_BE/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: nl_BE\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "Aangemaakt door"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr "Schermnaam"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr "Laatst gewijzigd op"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "Laatst bijgewerkt door"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "Laatst bijgewerkt op"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
diff --git a/addons/bus/i18n/pl.po b/addons/bus/i18n/pl.po
new file mode 100644
index 00000000..c124b3f6
--- /dev/null
+++ b/addons/bus/i18n/pl.po
@@ -0,0 +1,158 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# Mariusz, 2020
+# Piotr Szlązak <szlazakpiotr@gmail.com>, 2020
+# Marcin Młynarczyk <mlynarczyk@gmail.com>, 2020
+# Andrzej Donczew <a.donczew@hadron.eu.com>, 2020
+# Paweł Wodyński <pw@myodoo.pl>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Paweł Wodyński <pw@myodoo.pl>, 2020\n"
+"Language-Team: Polish (https://www.transifex.com/odoo/teams/41243/pl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Użytkownik może mieć tylko jeden status komunikatora."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Zaraz wracam"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Kanał"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Kontakt"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Utworzona przez"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Utworzono"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Nazwa wyświetlana"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "Status komunikatora"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Data ostatniej modyfikacji"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Ostatnia ankieta"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Ostatnia obecność"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Ostatnio aktualizowane przez"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Data ostatniej aktualizacji"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Wiadomość"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Niedostępny"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Dostępny"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Obecność użytkownika"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Użytkownicy"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/pt.po b/addons/bus/i18n/pt.po
new file mode 100644
index 00000000..a6d7437c
--- /dev/null
+++ b/addons/bus/i18n/pt.po
@@ -0,0 +1,157 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# Ricardo Correia <rcorreiavv@gmail.com>, 2020
+# Manuela Silva <manuelarodsilva@gmail.com>, 2020
+# Reinaldo Ramos <reinaldo.ramos@arxi.pt>, 2020
+# Pedro Filipe <pedro2.10@hotmail.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Pedro Filipe <pedro2.10@hotmail.com>, 2020\n"
+"Language-Team: Portuguese (https://www.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=2; plural=(n != 1);\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Um utilizador só pode ter um estado IM."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Ausente"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Canal"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Contacto"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Criado por"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Criado em"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Nome"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "Estado IM"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Última Modificação em"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Última Votação"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Última Presença"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Última Atualização por"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Última Atualização em"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Mensagem"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Desligado"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Online"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Presença de utilizador"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Utilizadores"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/pt_BR.po b/addons/bus/i18n/pt_BR.po
new file mode 100644
index 00000000..fc0a2d1e
--- /dev/null
+++ b/addons/bus/i18n/pt_BR.po
@@ -0,0 +1,158 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Rodrigo de Almeida Sottomaior Macedo <rmsolucoeseminformatica@protonmail.com>, 2020
+# Martin Trigaux, 2020
+# Mateus Lopes <mateus1@gmail.com>, 2020
+# grazziano <gra.negocia@gmail.com>, 2020
+# André Augusto Firmino Cordeiro <a.cordeito@gmail.com>, 2020
+# Éder Brito <britoederr@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Éder Brito <britoederr@gmail.com>, 2021\n"
+"Language-Team: Portuguese (Brazil) (https://www.transifex.com/odoo/teams/41243/pt_BR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: pt_BR\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Um usuário pode ter apenas um status"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Ausente"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Canal"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "Barramento de Comunicação"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Contato"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Criado por"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Criado em"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Nome exibido"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "Status do mensageiro"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Última modificação em"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Última votação"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Última presença"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Última atualização por"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Última atualização em"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Mensagem"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Offline"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Online"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr "Atualizar"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr "A página parece estar desatualizada."
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Presença do Usuário"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Usuários"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "bus.Bus não disponível em modo de teste"
diff --git a/addons/bus/i18n/ro.po b/addons/bus/i18n/ro.po
new file mode 100644
index 00000000..f6988715
--- /dev/null
+++ b/addons/bus/i18n/ro.po
@@ -0,0 +1,154 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# Foldi Robert <foldirobert@nexterp.ro>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Foldi Robert <foldirobert@nexterp.ro>, 2020\n"
+"Language-Team: Romanian (https://www.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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Un utilizator poate ave un singur status IM."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Absent"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Canal"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Contact"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Creat de"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Creat în"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Nume afișat"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "Status IM"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Ultima modificare la"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Ultimul sondaj"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Ultima prezență"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Ultima actualizare făcută de"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Ultima actualizare pe"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Mesaj"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Deconectat"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Activ"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr "Reîimporspătare"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Prezență utilizator"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Utilizatori"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/ru.po b/addons/bus/i18n/ru.po
new file mode 100644
index 00000000..18595c1c
--- /dev/null
+++ b/addons/bus/i18n/ru.po
@@ -0,0 +1,156 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# Ivan Yelizariev <yelizariev@it-projects.info>, 2020
+# ILMIR <karamov@it-projects.info>, 2020
+# Irina Fedulova <istartlin@gmail.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Irina Fedulova <istartlin@gmail.com>, 2020\n"
+"Language-Team: Russian (https://www.transifex.com/odoo/teams/41243/ru/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Пользователь может иметь только один IM статус."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Далеко"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Канал"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "Bus коммуникация"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Контакт"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Создал"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Создан"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Отображаемое имя"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "Идентификатор"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "IM статус"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Последнее изменение"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Последний опрос"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Последнее присутствие"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Последний раз обновил"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Последнее обновление"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Сообщение"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Офлайн"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Онлайн"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Присутствие пользователя"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Пользователи"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "bus.Bus не доступен в тестовом режиме"
diff --git a/addons/bus/i18n/si.po b/addons/bus/i18n/si.po
new file mode 100644
index 00000000..88f694d7
--- /dev/null
+++ b/addons/bus/i18n/si.po
@@ -0,0 +1,149 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Language-Team: Sinhala (https://www.transifex.com/odoo/teams/41243/si/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: si\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/sk.po b/addons/bus/i18n/sk.po
new file mode 100644
index 00000000..417117c8
--- /dev/null
+++ b/addons/bus/i18n/sk.po
@@ -0,0 +1,158 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# Matus Krnac <matus.krnac@gmail.com>, 2020
+# Jaroslav Bosansky <jaro.bosansky@ekoenergo.sk>, 2020
+# gebri <gebri@inmail.sk>, 2020
+# Jan Prokop, 2020
+# Rastislav Brencic <rastislav.brencic@azet.sk>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Rastislav Brencic <rastislav.brencic@azet.sk>, 2020\n"
+"Language-Team: Slovak (https://www.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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Užívateľ môže mať iba jeden IM status."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Neprítomný"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Kanál"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "Komunikačná zbernica"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Kontakt"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Vytvoril"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Vytvorené"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Zobrazovaný názov"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "IM status"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Posledná úprava"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Posledný prieskum"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Posledná prítomnosť"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Naposledy upravoval"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Naposledy upravované"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Správa"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Offline"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Online"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr "Obnoviť"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr "Zdá sa, že stránka je zastaraná."
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Užívateľova prítomnosť"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Užívatelia"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "bus.Bus nie je dostupný v testovacom móde"
diff --git a/addons/bus/i18n/sl.po b/addons/bus/i18n/sl.po
new file mode 100644
index 00000000..daba68be
--- /dev/null
+++ b/addons/bus/i18n/sl.po
@@ -0,0 +1,156 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2021
+# Matjaz Mozetic <m.mozetic@matmoz.si>, 2021
+# laznikd <laznik@mentis.si>, 2021
+# matjaz k <matjaz@mentis.si>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: matjaz k <matjaz@mentis.si>, 2021\n"
+"Language-Team: Slovenian (https://www.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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Uporabnik ima lahko le en IM status"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Odsoten"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Kanal"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Stik"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Ustvaril"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Ustvarjeno"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Prikazani naziv"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "IM status"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Zadnjič spremenjeno"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Zadnje glasovanje"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Zadnja prisotnost"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Zadnji posodobil"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Zadnjič posodobljeno"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Sporočilo"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Brez povezave"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Spletno"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Uporabniki"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/sq.po b/addons/bus/i18n/sq.po
new file mode 100644
index 00000000..267e5ae8
--- /dev/null
+++ b/addons/bus/i18n/sq.po
@@ -0,0 +1,125 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux <mat@odoo.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-09-20 09:53+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
+"Language-Team: Albanian (https://www.transifex.com/odoo/teams/41243/sq/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: sq\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "Krijuar nga"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr "Emri i paraqitur"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr "Modifikimi i fundit në"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "Modifikuar per here te fundit nga"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "Modifikuar per here te fundit me"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
diff --git a/addons/bus/i18n/sr.po b/addons/bus/i18n/sr.po
new file mode 100644
index 00000000..526d324a
--- /dev/null
+++ b/addons/bus/i18n/sr.po
@@ -0,0 +1,131 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2018
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~11.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-09-21 13:17+0000\n"
+"PO-Revision-Date: 2018-09-21 13:17+0000\n"
+"Last-Translator: Martin Trigaux, 2018\n"
+"Language-Team: Serbian (https://www.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: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Канал"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Kontakt"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Kreiran"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Poruka"
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Korisnici"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:41
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/sr@latin.po b/addons/bus/i18n/sr@latin.po
new file mode 100644
index 00000000..fb6f3e81
--- /dev/null
+++ b/addons/bus/i18n/sr@latin.po
@@ -0,0 +1,128 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux <mat@odoo.com>, 2017
+# Djordje Marjanovic <djordje_m@yahoo.com>, 2017
+# Ljubisa Jovev <ljubisa.jovev@gmail.com>, 2017
+# Nemanja Dragovic <nemanjadragovic94@gmail.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.saas~18\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-09-20 09:53+0000\n"
+"PO-Revision-Date: 2017-09-20 09:53+0000\n"
+"Last-Translator: Nemanja Dragovic <nemanjadragovic94@gmail.com>, 2017\n"
+"Language-Team: Serbian (Latin) (https://www.transifex.com/odoo/teams/41243/sr%40latin/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: sr@latin\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: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr "Korisnik može imati samo jedan IM status."
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr "Odsutan"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr "Kanal"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Kontakt"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr "Datum kreiranja"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "Kreirao"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr "Naziv za prikaz"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr "IM status"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr "Zadnja promena"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr "Zadnja dojava"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr "Zadnji put prisutan"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "Promenio"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "Vreme promene"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr "Poruka"
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr "Offline"
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr "Online"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Prisustvo korisnika"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr "Korisnici"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr "bus.bus"
diff --git a/addons/bus/i18n/sv.po b/addons/bus/i18n/sv.po
new file mode 100644
index 00000000..250fdd2e
--- /dev/null
+++ b/addons/bus/i18n/sv.po
@@ -0,0 +1,156 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2021
+# Anders Wallenquist <anders.wallenquist@vertel.se>, 2021
+# Moa Nicklasson <Moa.nicklasson@hotmail.se>, 2021
+# Chrille Hedberg <hedberg.chrille@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Chrille Hedberg <hedberg.chrille@gmail.com>, 2021\n"
+"Language-Team: Swedish (https://www.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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "En användare kan bara ha en IM-status."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Borta"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Säljkanal"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Kontakt"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Skapad av"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Skapad den"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Visningsnamn"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "IM-status"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Senast redigerad"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Senaste undersökning"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Sågs senast"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Senast uppdaterad av"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Senast uppdaterad"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Meddelande"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Offline"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Uppkopplad"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Användarens närvaro/status"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Användare"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/ta.po b/addons/bus/i18n/ta.po
new file mode 100644
index 00000000..13a4e8f1
--- /dev/null
+++ b/addons/bus/i18n/ta.po
@@ -0,0 +1,144 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo 9.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-08-18 14:07+0000\n"
+"PO-Revision-Date: 2016-02-11 12:51+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: bus
+#: sql_constraint:bus.presence:0
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_channel
+msgid "Channel"
+msgstr "சேனல்"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_date
+msgid "Create date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_create_uid
+msgid "Created by"
+msgstr "உருவாக்கியவர்"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence_display_name
+msgid "Display Name"
+msgstr "காட்சி பெயர்"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_res_users_partner_latitude
+msgid "Geo Latitude"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_res_users_partner_longitude
+msgid "Geo Longitude"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_res_users_date_localization
+msgid "Geolocation Date"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_id
+#: model:ir.model.fields,field_description:bus.field_bus_presence_id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_status
+#: model:ir.model.fields,field_description:bus.field_res_partner_im_status
+#: model:ir.model.fields,field_description:bus.field_res_users_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus___last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence___last_update
+msgid "Last Modified on"
+msgstr "கடைசியாக திருத்திய"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence_last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_uid
+msgid "Last Updated by"
+msgstr "கடைசியாக புதுப்பிக்கப்பட்டது"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_write_date
+msgid "Last Updated on"
+msgstr "கடைசியாக புதுப்பிக்கப்பட்டது"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus_message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: selection:bus.presence,status:0
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Partner"
+msgstr "கூட்டாளி"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence_user_id
+msgid "Users"
+msgstr "பயனர்கள்"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "bus.bus"
+msgstr ""
+
+#~ msgid "Created on"
+#~ msgstr ""
+#~ "உருவாக்கப்பட்ட \n"
+#~ "தேதி"
diff --git a/addons/bus/i18n/th.po b/addons/bus/i18n/th.po
new file mode 100644
index 00000000..a8c70f06
--- /dev/null
+++ b/addons/bus/i18n/th.po
@@ -0,0 +1,156 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# Khwunchai Jaengsawang <khwunchai.j@ku.th>, 2020
+# Somchart Jabsung <jabsung.s@gmail.com>, 2020
+# Odoo Thaidev <odoothaidev@gmail.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Odoo Thaidev <odoothaidev@gmail.com>, 2020\n"
+"Language-Team: Thai (https://www.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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "ช่องทาง"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "ติดต่อ"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "สร้างโดย"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "สร้างเมื่อ"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "ชื่อที่ใช้แสดง"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "รหัส"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "แก้ไขครั้งสุดท้ายเมื่อ"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "อัพเดทครั้งสุดท้ายโดย"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "อัพเดทครั้งสุดท้ายเมื่อ"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "ข้อความ"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Offline"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "ออนไลน์"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "ผู้ใช้งาน"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/tr.po b/addons/bus/i18n/tr.po
new file mode 100644
index 00000000..842877ec
--- /dev/null
+++ b/addons/bus/i18n/tr.po
@@ -0,0 +1,161 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Ediz Duman <neps1192@gmail.com>, 2020
+# Martin Trigaux, 2020
+# Levent Karakaş <levent@mektup.at>, 2020
+# Murat Kaplan <muratk@projetgrup.com>, 2020
+# Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2020
+# Ramiz Deniz Öner <deniz@denizoner.com>, 2020
+# Gökhan Erdoğdu <gokhan.erdogdu@mechsoft.com.tr>, 2020
+# abc Def <hdogan1974@gmail.com>, 2020
+# Nadir Gazioglu <nadirgazioglu@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Nadir Gazioglu <nadirgazioglu@gmail.com>, 2021\n"
+"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: tr\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Bir kullanıcı yalnozca bir IM durumunda olabilir."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Dışarıda"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Kanal"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "İletişim Veriyolu"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Temas"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Oluşturan"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Oluşturulma"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Görünüm Adı"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "Anlık İleti Durumu"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Son Düzenleme"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Son Anket"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Son Durum"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Son Güncelleyen"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Son Güncelleme"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Mesaj"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Çevrimdışı"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Online"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr "Refresh"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr "The page appears to be out of date."
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Kullanıcı Durumu"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Kullanıcılar"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "bus.Bus deneme kipinde kullanılamaz"
diff --git a/addons/bus/i18n/uk.po b/addons/bus/i18n/uk.po
new file mode 100644
index 00000000..d4de6db2
--- /dev/null
+++ b/addons/bus/i18n/uk.po
@@ -0,0 +1,154 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# Alina Lisnenko <alinasemeniuk1@gmail.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Alina Lisnenko <alinasemeniuk1@gmail.com>, 2020\n"
+"Language-Team: Ukrainian (https://www.transifex.com/odoo/teams/41243/uk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"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: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Користувач може мати лише один статус IM."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Відійшов"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Канал"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "Bus комунікація"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Контакт"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Створено"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Створено"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Відобразити назву"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "Статус у миттєвих повідомленнях"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Останні зміни"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Останнє опитування"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Остання присутність"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Востаннє оновив"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Останнє оновлення"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Повідомлення"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Офлайн"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Онлайн"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr "Оновити"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr "Сторінка, здається, застаріла."
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Присутність користувача"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Користувачі"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "bus.Bus не доступний в тестовому режимі"
diff --git a/addons/bus/i18n/ur.po b/addons/bus/i18n/ur.po
new file mode 100644
index 00000000..ce9d3901
--- /dev/null
+++ b/addons/bus/i18n/ur.po
@@ -0,0 +1,149 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Language-Team: Urdu (https://www.transifex.com/odoo/teams/41243/ur/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ur\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr ""
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr ""
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr ""
diff --git a/addons/bus/i18n/vi.po b/addons/bus/i18n/vi.po
new file mode 100644
index 00000000..2e370fd6
--- /dev/null
+++ b/addons/bus/i18n/vi.po
@@ -0,0 +1,157 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# Nancy Momoland <thanhnguyen.icsc@gmail.com>, 2020
+# Duy BQ <duybq86@gmail.com>, 2020
+# Dung Nguyen Thi <dungnt@trobz.com>, 2020
+# Trần Hà <tranthuha13590@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: Trần Hà <tranthuha13590@gmail.com>, 2021\n"
+"Language-Team: Vietnamese (https://www.transifex.com/odoo/teams/41243/vi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: vi\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "Một người dùng chỉ có thể có một trạng thái IM."
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "Away"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "Kênh"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "Communication Bus"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "Liên hệ"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "Tạo bởi"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "Thời điểm tạo"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "Tên hiển thị"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "Tình trạng IM"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Sửa lần cuối vào"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "Last Poll"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "Xuất hiện lần cuối"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "Cập nhật lần cuối bởi"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "Cập nhật lần cuối vào"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "Thông báo"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "Ngoại tuyến"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "Trực tuyến"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr "Refresh"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr "The page appears to be out of date."
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "Người dùng hiện diện"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "Người dùng"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "bus.Bus not available in test mode"
diff --git a/addons/bus/i18n/zh_CN.po b/addons/bus/i18n/zh_CN.po
new file mode 100644
index 00000000..16839bf6
--- /dev/null
+++ b/addons/bus/i18n/zh_CN.po
@@ -0,0 +1,160 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# Martin Trigaux, 2020
+# Jeffery CHEN Fan <jeffery9@gmail.com>, 2020
+# 老窦 北京 <2662059195@qq.com>, 2020
+# 敬雲 林 <chingyun@yuanchih-consult.com>, 2020
+# boho wong <wbh924@126.com>, 2020
+# inspur qiuguodong <qiuguodong@inspur.com>, 2020
+# Felix Yang - Elico Corp <felixyangsh@aliyun.com>, 2020
+# 稀饭~~ <wangwhai@qq.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: 稀饭~~ <wangwhai@qq.com>, 2020\n"
+"Language-Team: Chinese (China) (https://www.transifex.com/odoo/teams/41243/zh_CN/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: zh_CN\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "用户只能有一个IM状态"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "离开"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "频道"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "通讯总线"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "联系人"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "创建人"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "创建时间"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "显示名称"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "IM的状态"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "最后修改日"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "最后在线"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "最后登录"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "最后更新人"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "最后更新时间"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "消息"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "离线"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "在线"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr "刷新"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr "‎该页面似乎已过期。‎"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "用户上线"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "用户"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "测试模式下Bus总线不可用"
diff --git a/addons/bus/i18n/zh_TW.po b/addons/bus/i18n/zh_TW.po
new file mode 100644
index 00000000..44491939
--- /dev/null
+++ b/addons/bus/i18n/zh_TW.po
@@ -0,0 +1,153 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * bus
+#
+# Translators:
+# 敬雲 林 <chingyun@yuanchih-consult.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~13.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-01 07:28+0000\n"
+"PO-Revision-Date: 2020-09-07 08:11+0000\n"
+"Last-Translator: 敬雲 林 <chingyun@yuanchih-consult.com>, 2020\n"
+"Language-Team: Chinese (Taiwan) (https://www.transifex.com/odoo/teams/41243/zh_TW/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: zh_TW\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: bus
+#: model:ir.model.constraint,message:bus.constraint_bus_presence_bus_user_presence_unique
+msgid "A user can only have one IM status."
+msgstr "使用者只能有一個IM狀態 。"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__away
+msgid "Away"
+msgstr "離開"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__channel
+msgid "Channel"
+msgstr "群組"
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_bus
+msgid "Communication Bus"
+msgstr "通信匯流排"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_partner
+msgid "Contact"
+msgstr "聯繫人"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_uid
+msgid "Created by"
+msgstr "創立者"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__create_date
+msgid "Created on"
+msgstr "建立於"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__display_name
+#: model:ir.model.fields,field_description:bus.field_bus_presence__display_name
+#: model:ir.model.fields,field_description:bus.field_res_partner__display_name
+#: model:ir.model.fields,field_description:bus.field_res_users__display_name
+msgid "Display Name"
+msgstr "顯示名稱"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__id
+#: model:ir.model.fields,field_description:bus.field_bus_presence__id
+#: model:ir.model.fields,field_description:bus.field_res_partner__id
+#: model:ir.model.fields,field_description:bus.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__status
+#: model:ir.model.fields,field_description:bus.field_res_partner__im_status
+#: model:ir.model.fields,field_description:bus.field_res_users__im_status
+msgid "IM Status"
+msgstr "IM的狀態"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus____last_update
+#: model:ir.model.fields,field_description:bus.field_bus_presence____last_update
+#: model:ir.model.fields,field_description:bus.field_res_partner____last_update
+#: model:ir.model.fields,field_description:bus.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "最後修改於"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_poll
+msgid "Last Poll"
+msgstr "最後線上"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_presence__last_presence
+msgid "Last Presence"
+msgstr "最後登錄"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_uid
+msgid "Last Updated by"
+msgstr "最後更新者"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__write_date
+msgid "Last Updated on"
+msgstr "最後更新於"
+
+#. module: bus
+#: model:ir.model.fields,field_description:bus.field_bus_bus__message
+msgid "Message"
+msgstr "消息"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__offline
+msgid "Offline"
+msgstr "離線"
+
+#. module: bus
+#: model:ir.model.fields.selection,name:bus.selection__bus_presence__status__online
+msgid "Online"
+msgstr "線上"
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "Refresh"
+msgstr ""
+
+#. module: bus
+#. openerp-web
+#: code:addons/bus/static/src/js/web_client_bus.js:0
+#, python-format
+msgid "The page appears to be out of date."
+msgstr ""
+
+#. module: bus
+#: model:ir.model,name:bus.model_bus_presence
+msgid "User Presence"
+msgstr "使用者出現"
+
+#. module: bus
+#: model:ir.model,name:bus.model_res_users
+#: model:ir.model.fields,field_description:bus.field_bus_presence__user_id
+msgid "Users"
+msgstr "使用者"
+
+#. module: bus
+#: code:addons/bus/controllers/main.py:0
+#, python-format
+msgid "bus.Bus not available in test mode"
+msgstr "匯流排。匯流排在測試模式下不可用"
diff --git a/addons/bus/models/__init__.py b/addons/bus/models/__init__.py
new file mode 100644
index 00000000..5f99c824
--- /dev/null
+++ b/addons/bus/models/__init__.py
@@ -0,0 +1,5 @@
+# -*- coding: utf-8 -*-
+from . import bus
+from . import bus_presence
+from . import res_users
+from . import res_partner
diff --git a/addons/bus/models/bus.py b/addons/bus/models/bus.py
new file mode 100644
index 00000000..b88a8336
--- /dev/null
+++ b/addons/bus/models/bus.py
@@ -0,0 +1,199 @@
+# -*- coding: utf-8 -*-
+import datetime
+import json
+import logging
+import random
+import select
+import threading
+import time
+
+import odoo
+from odoo import api, fields, models, SUPERUSER_ID
+from odoo.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT
+from odoo.tools import date_utils
+
+_logger = logging.getLogger(__name__)
+
+# longpolling timeout connection
+TIMEOUT = 50
+
+#----------------------------------------------------------
+# Bus
+#----------------------------------------------------------
+def json_dump(v):
+ return json.dumps(v, separators=(',', ':'), default=date_utils.json_default)
+
+def hashable(key):
+ if isinstance(key, list):
+ key = tuple(key)
+ return key
+
+
+class ImBus(models.Model):
+
+ _name = 'bus.bus'
+ _description = 'Communication Bus'
+
+ channel = fields.Char('Channel')
+ message = fields.Char('Message')
+
+ @api.autovacuum
+ def _gc_messages(self):
+ timeout_ago = datetime.datetime.utcnow()-datetime.timedelta(seconds=TIMEOUT*2)
+ domain = [('create_date', '<', timeout_ago.strftime(DEFAULT_SERVER_DATETIME_FORMAT))]
+ return self.sudo().search(domain).unlink()
+
+ @api.model
+ def sendmany(self, notifications):
+ channels = set()
+ for channel, message in notifications:
+ channels.add(channel)
+ values = {
+ "channel": json_dump(channel),
+ "message": json_dump(message)
+ }
+ self.sudo().create(values)
+ if channels:
+ # We have to wait until the notifications are commited in database.
+ # When calling `NOTIFY imbus`, some concurrent threads will be
+ # awakened and will fetch the notification in the bus table. If the
+ # transaction is not commited yet, there will be nothing to fetch,
+ # and the longpolling will return no notification.
+ @self.env.cr.postcommit.add
+ def notify():
+ with odoo.sql_db.db_connect('postgres').cursor() as cr:
+ cr.execute("notify imbus, %s", (json_dump(list(channels)),))
+
+ @api.model
+ def sendone(self, channel, message):
+ self.sendmany([[channel, message]])
+
+ @api.model
+ def poll(self, channels, last=0, options=None):
+ if options is None:
+ options = {}
+ # first poll return the notification in the 'buffer'
+ if last == 0:
+ timeout_ago = datetime.datetime.utcnow()-datetime.timedelta(seconds=TIMEOUT)
+ domain = [('create_date', '>', timeout_ago.strftime(DEFAULT_SERVER_DATETIME_FORMAT))]
+ else: # else returns the unread notifications
+ domain = [('id', '>', last)]
+ channels = [json_dump(c) for c in channels]
+ domain.append(('channel', 'in', channels))
+ notifications = self.sudo().search_read(domain)
+ # list of notification to return
+ result = []
+ for notif in notifications:
+ result.append({
+ 'id': notif['id'],
+ 'channel': json.loads(notif['channel']),
+ 'message': json.loads(notif['message']),
+ })
+ return result
+
+
+#----------------------------------------------------------
+# Dispatcher
+#----------------------------------------------------------
+class ImDispatch(object):
+ def __init__(self):
+ self.channels = {}
+ self.started = False
+
+ def poll(self, dbname, channels, last, options=None, timeout=TIMEOUT):
+ if options is None:
+ options = {}
+ # Dont hang ctrl-c for a poll request, we need to bypass private
+ # attribute access because we dont know before starting the thread that
+ # it will handle a longpolling request
+ if not odoo.evented:
+ current = threading.current_thread()
+ current._daemonic = True
+ # rename the thread to avoid tests waiting for a longpolling
+ current.setName("openerp.longpolling.request.%s" % current.ident)
+
+ registry = odoo.registry(dbname)
+
+ # immediatly returns if past notifications exist
+ with registry.cursor() as cr:
+ env = api.Environment(cr, SUPERUSER_ID, {})
+ notifications = env['bus.bus'].poll(channels, last, options)
+
+ # immediatly returns in peek mode
+ if options.get('peek'):
+ return dict(notifications=notifications, channels=channels)
+
+ # or wait for future ones
+ if not notifications:
+ if not self.started:
+ # Lazy start of events listener
+ self.start()
+
+ event = self.Event()
+ for channel in channels:
+ self.channels.setdefault(hashable(channel), set()).add(event)
+ try:
+ event.wait(timeout=timeout)
+ with registry.cursor() as cr:
+ env = api.Environment(cr, SUPERUSER_ID, {})
+ notifications = env['bus.bus'].poll(channels, last, options)
+ except Exception:
+ # timeout
+ pass
+ finally:
+ # gc pointers to event
+ for channel in channels:
+ channel_events = self.channels.get(hashable(channel))
+ if channel_events and event in channel_events:
+ channel_events.remove(event)
+ return notifications
+
+ def loop(self):
+ """ Dispatch postgres notifications to the relevant polling threads/greenlets """
+ _logger.info("Bus.loop listen imbus on db postgres")
+ with odoo.sql_db.db_connect('postgres').cursor() as cr:
+ conn = cr._cnx
+ cr.execute("listen imbus")
+ cr.commit();
+ while True:
+ if select.select([conn], [], [], TIMEOUT) == ([], [], []):
+ pass
+ else:
+ conn.poll()
+ channels = []
+ while conn.notifies:
+ channels.extend(json.loads(conn.notifies.pop().payload))
+ # dispatch to local threads/greenlets
+ events = set()
+ for channel in channels:
+ events.update(self.channels.pop(hashable(channel), set()))
+ for event in events:
+ event.set()
+
+ def run(self):
+ while True:
+ try:
+ self.loop()
+ except Exception as e:
+ _logger.exception("Bus.loop error, sleep and retry")
+ time.sleep(TIMEOUT)
+
+ def start(self):
+ if odoo.evented:
+ # gevent mode
+ import gevent
+ self.Event = gevent.event.Event
+ gevent.spawn(self.run)
+ else:
+ # threaded mode
+ self.Event = threading.Event
+ t = threading.Thread(name="%s.Bus" % __name__, target=self.run)
+ t.daemon = True
+ t.start()
+ self.started = True
+ return self
+
+dispatch = None
+if not odoo.multi_process or odoo.evented:
+ # We only use the event dispatcher in threaded and gevent mode
+ dispatch = ImDispatch()
diff --git a/addons/bus/models/bus_presence.py b/addons/bus/models/bus_presence.py
new file mode 100644
index 00000000..2f6545bc
--- /dev/null
+++ b/addons/bus/models/bus_presence.py
@@ -0,0 +1,71 @@
+# -*- coding: utf-8 -*-
+import datetime
+import time
+
+from psycopg2 import OperationalError
+
+from odoo import api, fields, models
+from odoo import tools
+from odoo.addons.bus.models.bus import TIMEOUT
+from odoo.service.model import PG_CONCURRENCY_ERRORS_TO_RETRY
+from odoo.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT
+
+DISCONNECTION_TIMER = TIMEOUT + 5
+AWAY_TIMER = 1800 # 30 minutes
+
+
+class BusPresence(models.Model):
+ """ User Presence
+ Its status is 'online', 'away' or 'offline'. This model should be a one2one, but is not
+ attached to res_users to avoid database concurrence errors. Since the 'update' method is executed
+ at each poll, if the user have multiple opened tabs, concurrence errors can happend, but are 'muted-logged'.
+ """
+
+ _name = 'bus.presence'
+ _description = 'User Presence'
+ _log_access = False
+
+ _sql_constraints = [('bus_user_presence_unique', 'unique(user_id)', 'A user can only have one IM status.')]
+
+ user_id = fields.Many2one('res.users', 'Users', required=True, index=True, ondelete='cascade')
+ last_poll = fields.Datetime('Last Poll', default=lambda self: fields.Datetime.now())
+ last_presence = fields.Datetime('Last Presence', default=lambda self: fields.Datetime.now())
+ status = fields.Selection([('online', 'Online'), ('away', 'Away'), ('offline', 'Offline')], 'IM Status', default='offline')
+
+ @api.model
+ def update(self, inactivity_period):
+ """ Updates the last_poll and last_presence of the current user
+ :param inactivity_period: duration in milliseconds
+ """
+ # This method is called in method _poll() and cursor is closed right
+ # after; see bus/controllers/main.py.
+ try:
+ self._update(inactivity_period)
+ # commit on success
+ self.env.cr.commit()
+ except OperationalError as e:
+ if e.pgcode in PG_CONCURRENCY_ERRORS_TO_RETRY:
+ # ignore concurrency error
+ return self.env.cr.rollback()
+ raise
+
+ @api.model
+ def _update(self, inactivity_period):
+ presence = self.search([('user_id', '=', self._uid)], limit=1)
+ # compute last_presence timestamp
+ last_presence = datetime.datetime.now() - datetime.timedelta(milliseconds=inactivity_period)
+ values = {
+ 'last_poll': time.strftime(DEFAULT_SERVER_DATETIME_FORMAT),
+ }
+ # update the presence or a create a new one
+ if not presence: # create a new presence for the user
+ values['user_id'] = self._uid
+ values['last_presence'] = last_presence
+ self.create(values)
+ else: # update the last_presence if necessary, and write values
+ if presence.last_presence < last_presence:
+ values['last_presence'] = last_presence
+ # Hide transaction serialization errors, which can be ignored, the presence update is not essential
+ with tools.mute_logger('odoo.sql_db'):
+ presence.write(values)
+ presence.flush()
diff --git a/addons/bus/models/res_partner.py b/addons/bus/models/res_partner.py
new file mode 100644
index 00000000..71f2f8fb
--- /dev/null
+++ b/addons/bus/models/res_partner.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+
+from odoo import api, fields, models
+from odoo.addons.bus.models.bus_presence import AWAY_TIMER
+from odoo.addons.bus.models.bus_presence import DISCONNECTION_TIMER
+
+
+class ResPartner(models.Model):
+ _inherit = 'res.partner'
+
+ im_status = fields.Char('IM Status', compute='_compute_im_status')
+
+ def _compute_im_status(self):
+ self.env.cr.execute("""
+ SELECT
+ U.partner_id as id,
+ CASE WHEN max(B.last_poll) IS NULL THEN 'offline'
+ WHEN age(now() AT TIME ZONE 'UTC', max(B.last_poll)) > interval %s THEN 'offline'
+ WHEN age(now() AT TIME ZONE 'UTC', max(B.last_presence)) > interval %s THEN 'away'
+ ELSE 'online'
+ END as status
+ FROM bus_presence B
+ RIGHT JOIN res_users U ON B.user_id = U.id
+ WHERE U.partner_id IN %s AND U.active = 't'
+ GROUP BY U.partner_id
+ """, ("%s seconds" % DISCONNECTION_TIMER, "%s seconds" % AWAY_TIMER, tuple(self.ids)))
+ res = dict(((status['id'], status['status']) for status in self.env.cr.dictfetchall()))
+ for partner in self:
+ partner.im_status = res.get(partner.id, 'im_partner') # if not found, it is a partner, useful to avoid to refresh status in js
diff --git a/addons/bus/models/res_users.py b/addons/bus/models/res_users.py
new file mode 100644
index 00000000..8e40c1b1
--- /dev/null
+++ b/addons/bus/models/res_users.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+
+from odoo import api, fields, models
+from odoo.addons.bus.models.bus_presence import AWAY_TIMER
+from odoo.addons.bus.models.bus_presence import DISCONNECTION_TIMER
+
+
+class ResUsers(models.Model):
+
+ _inherit = "res.users"
+
+ im_status = fields.Char('IM Status', compute='_compute_im_status')
+
+ def _compute_im_status(self):
+ """ Compute the im_status of the users """
+ self.env.cr.execute("""
+ SELECT
+ user_id as id,
+ CASE WHEN age(now() AT TIME ZONE 'UTC', last_poll) > interval %s THEN 'offline'
+ WHEN age(now() AT TIME ZONE 'UTC', last_presence) > interval %s THEN 'away'
+ ELSE 'online'
+ END as status
+ FROM bus_presence
+ WHERE user_id IN %s
+ """, ("%s seconds" % DISCONNECTION_TIMER, "%s seconds" % AWAY_TIMER, tuple(self.ids)))
+ res = dict(((status['id'], status['status']) for status in self.env.cr.dictfetchall()))
+ for user in self:
+ user.im_status = res.get(user.id, 'offline')
diff --git a/addons/bus/security/ir.model.access.csv b/addons/bus/security/ir.model.access.csv
new file mode 100644
index 00000000..4a626a0e
--- /dev/null
+++ b/addons/bus/security/ir.model.access.csv
@@ -0,0 +1,4 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_bus_bus,bus.bus public,model_bus_bus,,0,0,0,0
+access_bus_presence,bus.presence,model_bus_presence,base.group_user,1,1,1,1
+access_bus_presence_portal,bus.presence,model_bus_presence,base.group_portal,1,1,1,1
diff --git a/addons/bus/static/src/js/crosstab_bus.js b/addons/bus/static/src/js/crosstab_bus.js
new file mode 100644
index 00000000..bb2b2a00
--- /dev/null
+++ b/addons/bus/static/src/js/crosstab_bus.js
@@ -0,0 +1,363 @@
+odoo.define('bus.CrossTab', function (require) {
+"use strict";
+
+var Longpolling = require('bus.Longpolling');
+
+var session = require('web.session');
+
+/**
+ * CrossTab
+ *
+ * This is an extension of the longpolling bus with browser cross-tab synchronization.
+ * It uses a Master/Slaves with Leader Election architecture:
+ * - a single tab handles longpolling.
+ * - tabs are synchronized by means of the local storage.
+ *
+ * localStorage used keys are:
+ * - {LOCAL_STORAGE_PREFIX}.{sanitizedOrigin}.channels : shared public channel list to listen during the poll
+ * - {LOCAL_STORAGE_PREFIX}.{sanitizedOrigin}.options : shared options
+ * - {LOCAL_STORAGE_PREFIX}.{sanitizedOrigin}.notification : the received notifications from the last poll
+ * - {LOCAL_STORAGE_PREFIX}.{sanitizedOrigin}.tab_list : list of opened tab ids
+ * - {LOCAL_STORAGE_PREFIX}.{sanitizedOrigin}.tab_master : generated id of the master tab
+ *
+ * trigger:
+ * - window_focus : when the window is focused
+ * - notification : when a notification is receive from the long polling
+ * - become_master : when this tab became the master
+ * - no_longer_master : when this tab is not longer the master (the user swith tab)
+ */
+var CrossTabBus = Longpolling.extend({
+ // constants
+ TAB_HEARTBEAT_PERIOD: 10000, // 10 seconds
+ MASTER_TAB_HEARTBEAT_PERIOD: 1500, // 1.5 seconds
+ HEARTBEAT_OUT_OF_DATE_PERIOD: 5000, // 5 seconds
+ HEARTBEAT_KILL_OLD_PERIOD: 15000, // 15 seconds
+ LOCAL_STORAGE_PREFIX: 'bus',
+
+ // properties
+ _isMasterTab: false,
+ _isRegistered: false,
+
+ /**
+ * @override
+ */
+ init: function () {
+ this._super.apply(this, arguments);
+ var now = new Date().getTime();
+ // used to prefix localStorage keys
+ this._sanitizedOrigin = session.origin.replace(/:\/{0,2}/g, '_');
+ // prevents collisions between different tabs and in tests
+ this._id = _.uniqueId(this.LOCAL_STORAGE_PREFIX) + ':' + now;
+ if (this._callLocalStorage('getItem', 'last_ts', 0) + 50000 < now) {
+ this._callLocalStorage('removeItem', 'last');
+ }
+ this._lastNotificationID = this._callLocalStorage('getItem', 'last', 0);
+ this.call('local_storage', 'onStorage', this, this._onStorage);
+ },
+ destroy: function () {
+ this._super();
+ clearTimeout(this._heartbeatTimeout);
+ },
+ //--------------------------------------------------------------------------
+ // Public
+ //--------------------------------------------------------------------------
+ /**
+ * Share the bus channels with the others tab by the local storage
+ *
+ * @override
+ */
+ addChannel: function () {
+ this._super.apply(this, arguments);
+ this._callLocalStorage('setItem', 'channels', this._channels);
+ },
+ /**
+ * Share the bus channels with the others tab by the local storage
+ *
+ * @override
+ */
+ deleteChannel: function () {
+ this._super.apply(this, arguments);
+ this._callLocalStorage('setItem', 'channels', this._channels);
+ },
+ /**
+ * @return {string}
+ */
+ getTabId: function () {
+ return this._id;
+ },
+ /**
+ * Tells whether this bus is related to the master tab.
+ *
+ * @returns {boolean}
+ */
+ isMasterTab: function () {
+ return this._isMasterTab;
+ },
+ /**
+ * Use the local storage to share the long polling from the master tab.
+ *
+ * @override
+ */
+ startPolling: function () {
+ if (this._isActive === null) {
+ this._heartbeat = this._heartbeat.bind(this);
+ }
+ if (!this._isRegistered) {
+ this._isRegistered = true;
+
+ var peers = this._callLocalStorage('getItem', 'peers', {});
+ peers[this._id] = new Date().getTime();
+ this._callLocalStorage('setItem', 'peers', peers);
+
+ this._registerWindowUnload();
+
+ if (!this._callLocalStorage('getItem', 'master')) {
+ this._startElection();
+ }
+
+ this._heartbeat();
+
+ if (this._isMasterTab) {
+ this._callLocalStorage('setItem', 'channels', this._channels);
+ this._callLocalStorage('setItem', 'options', this._options);
+ } else {
+ this._channels = this._callLocalStorage('getItem', 'channels', this._channels);
+ this._options = this._callLocalStorage('getItem', 'options', this._options);
+ }
+ return; // startPolling will be called again on tab registration
+ }
+
+ if (this._isMasterTab) {
+ this._super.apply(this, arguments);
+ }
+ },
+ /**
+ * Share the option with the local storage
+ *
+ * @override
+ */
+ updateOption: function () {
+ this._super.apply(this, arguments);
+ this._callLocalStorage('setItem', 'options', this._options);
+ },
+ //--------------------------------------------------------------------------
+ // Private
+ //--------------------------------------------------------------------------
+ /**
+ * Call local_storage service
+ *
+ * @private
+ * @param {string} method (getItem, setItem, removeItem, on)
+ * @param {string} key
+ * @param {any} param
+ * @returns service information
+ */
+ _callLocalStorage: function (method, key, param) {
+ return this.call('local_storage', method, this._generateKey(key), param);
+ },
+ /**
+ * Generates localStorage keys prefixed by bus. (LOCAL_STORAGE_PREFIX = the name
+ * of this addon), and the sanitized origin, to prevent keys from
+ * conflicting when several bus instances (polling different origins)
+ * co-exist.
+ *
+ * @private
+ * @param {string} key
+ * @returns key prefixed with the origin
+ */
+ _generateKey: function (key) {
+ return this.LOCAL_STORAGE_PREFIX + '.' + this._sanitizedOrigin + '.' + key;
+ },
+ /**
+ * @override
+ * @returns {integer} number of milliseconds since 1 January 1970 00:00:00
+ */
+ _getLastPresence: function () {
+ return this._callLocalStorage('getItem', 'lastPresence') || this._super();
+ },
+ /**
+ * Check all the time (according to the constants) if the tab is the master tab and
+ * check if it is active. Use the local storage for this checks.
+ *
+ * @private
+ * @see _startElection method
+ */
+ _heartbeat: function () {
+ var now = new Date().getTime();
+ var heartbeatValue = parseInt(this._callLocalStorage('getItem', 'heartbeat', 0));
+ var peers = this._callLocalStorage('getItem', 'peers', {});
+
+ if ((heartbeatValue + this.HEARTBEAT_OUT_OF_DATE_PERIOD) < now) {
+ // Heartbeat is out of date. Electing new master
+ this._startElection();
+ heartbeatValue = parseInt(this._callLocalStorage('getItem', 'heartbeat', 0));
+ }
+
+ if (this._isMasterTab) {
+ //walk through all peers and kill old
+ var cleanedPeers = {};
+ for (var peerName in peers) {
+ if (peers[peerName] + this.HEARTBEAT_KILL_OLD_PERIOD > now) {
+ cleanedPeers[peerName] = peers[peerName];
+ }
+ }
+
+ if (heartbeatValue !== this.lastHeartbeat) {
+ // someone else is also master...
+ // it should not happen, except in some race condition situation.
+ this._isMasterTab = false;
+ this.lastHeartbeat = 0;
+ peers[this._id] = now;
+ this._callLocalStorage('setItem', 'peers', peers);
+ this.stopPolling();
+ this.trigger('no_longer_master');
+ } else {
+ this.lastHeartbeat = now;
+ this._callLocalStorage('setItem', 'heartbeat', now);
+ this._callLocalStorage('setItem', 'peers', cleanedPeers);
+ }
+ } else {
+ //update own heartbeat
+ peers[this._id] = now;
+ this._callLocalStorage('setItem', 'peers', peers);
+ }
+
+ // Write lastPresence in local storage if it has been updated since last heartbeat
+ var hbPeriod = this._isMasterTab ? this.MASTER_TAB_HEARTBEAT_PERIOD : this.TAB_HEARTBEAT_PERIOD;
+ if (this._lastPresenceTime + hbPeriod > now) {
+ this._callLocalStorage('setItem', 'lastPresence', this._lastPresenceTime);
+ }
+
+ this._heartbeatTimeout = setTimeout(this._heartbeat.bind(this), hbPeriod);
+ },
+ /**
+ * @private
+ */
+ _registerWindowUnload: function () {
+ $(window).on('unload.' + this._id, this._onUnload.bind(this));
+ },
+ /**
+ * Check with the local storage if the current tab is the master tab.
+ * If this tab became the master, trigger 'become_master' event
+ *
+ * @private
+ */
+ _startElection: function () {
+ if (this._isMasterTab) {
+ return;
+ }
+ //check who's next
+ var now = new Date().getTime();
+ var peers = this._callLocalStorage('getItem', 'peers', {});
+ var heartbeatKillOld = now - this.HEARTBEAT_KILL_OLD_PERIOD;
+ var newMaster;
+ for (var peerName in peers) {
+ //check for dead peers
+ if (peers[peerName] < heartbeatKillOld) {
+ continue;
+ }
+ newMaster = peerName;
+ break;
+ }
+
+ if (newMaster === this._id) {
+ //we're next in queue. Electing as master
+ this.lastHeartbeat = now;
+ this._callLocalStorage('setItem', 'heartbeat', this.lastHeartbeat);
+ this._callLocalStorage('setItem', 'master', true);
+ this._isMasterTab = true;
+ this.startPolling();
+ this.trigger('become_master');
+
+ //removing master peer from queue
+ delete peers[newMaster];
+ this._callLocalStorage('setItem', 'peers', peers);
+ }
+ },
+ //--------------------------------------------------------------------------
+ // Handlers
+ //--------------------------------------------------------------------------
+ /**
+ * @override
+ */
+ _onFocusChange: function (params) {
+ this._super.apply(this, arguments);
+ this._callLocalStorage('setItem', 'focus', params.focus);
+ },
+ /**
+ * If it's the master tab, the notifications ares broadcasted to other tabs by the
+ * local storage.
+ *
+ * @override
+ */
+ _onPoll: function (notifications) {
+ var notifs = this._super(notifications);
+ if (this._isMasterTab && notifs.length) {
+ this._callLocalStorage('setItem', 'last', this._lastNotificationID);
+ this._callLocalStorage('setItem', 'last_ts', new Date().getTime());
+ this._callLocalStorage('setItem', 'notification', notifs);
+ }
+ },
+ /**
+ * Handler when the local storage is updated
+ *
+ * @private
+ * @param {OdooEvent} event
+ * @param {string} event.key
+ * @param {string} event.newValue
+ */
+ _onStorage: function (e) {
+ var value = JSON.parse(e.newValue);
+ var key = e.key;
+
+ if (this._isRegistered && key === this._generateKey('master') && !value) {
+ //master was unloaded
+ this._startElection();
+ }
+
+ // last notification id changed
+ if (key === this._generateKey('last')) {
+ this._lastNotificationID = value || 0;
+ }
+ // notifications changed
+ else if (key === this._generateKey('notification')) {
+ if (!this._isMasterTab) {
+ this.trigger("notification", value);
+ }
+ }
+ // update channels
+ else if (key === this._generateKey('channels')) {
+ this._channels = value;
+ }
+ // update options
+ else if (key === this._generateKey('options')) {
+ this._options = value;
+ }
+ // update focus
+ else if (key === this._generateKey('focus')) {
+ this._isOdooFocused = value;
+ this.trigger('window_focus', this._isOdooFocused);
+ }
+ },
+ /**
+ * Handler when unload the window
+ *
+ * @private
+ */
+ _onUnload: function () {
+ // unload peer
+ var peers = this._callLocalStorage('getItem', 'peers') || {};
+ delete peers[this._id];
+ this._callLocalStorage('setItem', 'peers', peers);
+
+ // unload master
+ if (this._isMasterTab) {
+ this._callLocalStorage('removeItem', 'master');
+ }
+ },
+});
+
+return CrossTabBus;
+
+});
+
diff --git a/addons/bus/static/src/js/longpolling_bus.js b/addons/bus/static/src/js/longpolling_bus.js
new file mode 100644
index 00000000..9c8df877
--- /dev/null
+++ b/addons/bus/static/src/js/longpolling_bus.js
@@ -0,0 +1,262 @@
+odoo.define('bus.Longpolling', function (require) {
+"use strict";
+
+var Bus = require('web.Bus');
+var ServicesMixin = require('web.ServicesMixin');
+
+
+/**
+ * Event Longpolling bus used to bind events on the server long polling return
+ *
+ * trigger:
+ * - window_focus : when the window focus change (true for focused, false for blur)
+ * - notification : when a notification is receive from the long polling
+ *
+ * @class Longpolling
+ */
+var LongpollingBus = Bus.extend(ServicesMixin, {
+ // constants
+ PARTNERS_PRESENCE_CHECK_PERIOD: 30000, // don't check presence more than once every 30s
+ ERROR_RETRY_DELAY: 10000, // 10 seconds
+ POLL_ROUTE: '/longpolling/poll',
+
+ // properties
+ _isActive: null,
+ _lastNotificationID: 0,
+ _isOdooFocused: true,
+ _pollRetryTimeout: null,
+
+ /**
+ * @override
+ */
+ init: function (parent, params) {
+ this._super.apply(this, arguments);
+ this._id = _.uniqueId('bus');
+
+ // the _id is modified by crosstab_bus, so we can't use it to unbind the events in the destroy.
+ this._longPollingBusId = this._id;
+ this._options = {};
+ this._channels = [];
+
+ // bus presence
+ this._lastPresenceTime = new Date().getTime();
+ $(window).on("focus." + this._longPollingBusId, this._onFocusChange.bind(this, {focus: true}));
+ $(window).on("blur." + this._longPollingBusId, this._onFocusChange.bind(this, {focus: false}));
+ $(window).on("unload." + this._longPollingBusId, this._onFocusChange.bind(this, {focus: false}));
+
+ $(window).on("click." + this._longPollingBusId, this._onPresence.bind(this));
+ $(window).on("keydown." + this._longPollingBusId, this._onPresence.bind(this));
+ $(window).on("keyup." + this._longPollingBusId, this._onPresence.bind(this));
+ },
+ /**
+ * @override
+ */
+ destroy: function () {
+ this.stopPolling();
+ $(window).off("focus." + this._longPollingBusId);
+ $(window).off("blur." + this._longPollingBusId);
+ $(window).off("unload." + this._longPollingBusId);
+ $(window).off("click." + this._longPollingBusId);
+ $(window).off("keydown." + this._longPollingBusId);
+ $(window).off("keyup." + this._longPollingBusId);
+ this._super();
+ },
+ //--------------------------------------------------------------------------
+ // Public
+ //--------------------------------------------------------------------------
+ /**
+ * Register a new channel to listen on the longpoll (ignore if already
+ * listening on this channel).
+ * Aborts a pending longpoll, in order to re-start another longpoll, so
+ * that we can immediately get notifications on newly registered channel.
+ *
+ * @param {string} channel
+ */
+ addChannel: function (channel) {
+ if (this._channels.indexOf(channel) === -1) {
+ this._channels.push(channel);
+ if (this._pollRpc) {
+ this._pollRpc.abort();
+ } else {
+ this.startPolling();
+ }
+ }
+ },
+ /**
+ * Unregister a channel from listening on the longpoll.
+ *
+ * Aborts a pending longpoll, in order to re-start another longpoll, so
+ * that we immediately remove ourselves from listening on notifications
+ * on this channel.
+ *
+ * @param {string} channel
+ */
+ deleteChannel: function (channel) {
+ var index = this._channels.indexOf(channel);
+ if (index !== -1) {
+ this._channels.splice(index, 1);
+ if (this._pollRpc) {
+ this._pollRpc.abort();
+ }
+ }
+ },
+ /**
+ * Tell whether odoo is focused or not
+ *
+ * @returns {boolean}
+ */
+ isOdooFocused: function () {
+ return this._isOdooFocused;
+ },
+ /**
+ * Start a long polling, i.e. it continually opens a long poll
+ * connection as long as it is not stopped (@see `stopPolling`)
+ */
+ startPolling: function () {
+ if (this._isActive === null) {
+ this._poll = this._poll.bind(this);
+ }
+ if (!this._isActive) {
+ this._isActive = true;
+ this._poll();
+ }
+ },
+ /**
+ * Stops any started long polling
+ *
+ * Aborts a pending longpoll so that we immediately remove ourselves
+ * from listening on notifications on this channel.
+ */
+ stopPolling: function () {
+ this._isActive = false;
+ this._channels = [];
+ clearTimeout(this._pollRetryTimeout);
+ if (this._pollRpc) {
+ this._pollRpc.abort();
+ }
+ },
+ /**
+ * Add or update an option on the longpoll bus.
+ * Stored options are sent to the server whenever a poll is started.
+ *
+ * @param {string} key
+ * @param {any} value
+ */
+ updateOption: function (key, value) {
+ this._options[key] = value;
+ },
+ //--------------------------------------------------------------------------
+ // Private
+ //--------------------------------------------------------------------------
+ /**
+ * returns the last recorded presence
+ *
+ * @private
+ * @returns {integer} number of milliseconds since 1 January 1970 00:00:00
+ */
+ _getLastPresence: function () {
+ return this._lastPresenceTime;
+ },
+ /**
+ * Continually start a poll:
+ *
+ * A poll is a connection that is kept open for a relatively long period
+ * (up to 1 minute). Local bus data are sent to the server each time a poll
+ * is initiated, and the server may return some "real-time" notifications
+ * about registered channels.
+ *
+ * A poll ends on timeout, on abort, on receiving some notifications, or on
+ * receiving an error. Another poll usually starts afterward, except if the
+ * poll is aborted or stopped (@see stopPolling).
+ *
+ * @private
+ */
+ _poll: function () {
+ var self = this;
+ if (!this._isActive) {
+ return;
+ }
+ var now = new Date().getTime();
+ var options = _.extend({}, this._options, {
+ bus_inactivity: now - this._getLastPresence(),
+ });
+ var data = {channels: this._channels, last: this._lastNotificationID, options: options};
+ // The backend has a maximum cycle time of 50 seconds so give +10 seconds
+ this._pollRpc = this._makePoll(data);
+ this._pollRpc.then(function (result) {
+ self._pollRpc = false;
+ self._onPoll(result);
+ self._poll();
+ }).guardedCatch(function (result) {
+ self._pollRpc = false;
+ // no error popup if request is interrupted or fails for any reason
+ result.event.preventDefault();
+ if (result.message === "XmlHttpRequestError abort") {
+ self._poll();
+ } else {
+ // random delay to avoid massive longpolling
+ self._pollRetryTimeout = setTimeout(self._poll, self.ERROR_RETRY_DELAY + (Math.floor((Math.random()*20)+1)*1000));
+ }
+ });
+ },
+
+ /**
+ * @private
+ * @param data: object with poll parameters
+ */
+ _makePoll: function(data) {
+ return this._rpc({route: this.POLL_ROUTE, params: data}, {shadow : true, timeout: 60000});
+ },
+
+ //--------------------------------------------------------------------------
+ // Handlers
+ //--------------------------------------------------------------------------
+ /**
+ * Handler when the focus of the window change.
+ * Trigger the 'window_focus' event.
+ *
+ * @private
+ * @param {Object} params
+ * @param {Boolean} params.focus
+ */
+ _onFocusChange: function (params) {
+ this._isOdooFocused = params.focus;
+ if (params.focus) {
+ this._lastPresenceTime = new Date().getTime();
+ this.trigger('window_focus', this._isOdooFocused);
+ }
+ },
+ /**
+ * Handler when the long polling receive the new notifications
+ * Update the last notification id received.
+ * Triggered the 'notification' event with a list [channel, message] from notifications.
+ *
+ * @private
+ * @param {Object[]} notifications, Input notifications have an id, channel, message
+ * @returns {Array[]} Output arrays have notification's channel and message
+ */
+ _onPoll: function (notifications) {
+ var self = this;
+ var notifs = _.map(notifications, function (notif) {
+ if (notif.id > self._lastNotificationID) {
+ self._lastNotificationID = notif.id;
+ }
+ return [notif.channel, notif.message];
+ });
+ this.trigger("notification", notifs);
+ return notifs;
+ },
+ /**
+ * Handler when they are an activity on the window (click, keydown, keyup)
+ * Update the last presence date.
+ *
+ * @private
+ */
+ _onPresence: function () {
+ this._lastPresenceTime = new Date().getTime();
+ },
+});
+
+return LongpollingBus;
+
+});
diff --git a/addons/bus/static/src/js/services/bus_service.js b/addons/bus/static/src/js/services/bus_service.js
new file mode 100644
index 00000000..39b61da5
--- /dev/null
+++ b/addons/bus/static/src/js/services/bus_service.js
@@ -0,0 +1,154 @@
+odoo.define('bus.BusService', function (require) {
+"use strict";
+
+var CrossTab = require('bus.CrossTab');
+var core = require('web.core');
+var ServicesMixin = require('web.ServicesMixin');
+const session = require('web.session');
+
+var BusService = CrossTab.extend(ServicesMixin, {
+ dependencies : ['local_storage'],
+
+ // properties
+ _audio: null,
+
+ /**
+ * As the BusService doesn't extend AbstractService, we have to replicate
+ * here what is done in AbstractService
+ *
+ * @param {Object} env
+ */
+ init: function (env) {
+ this.env = env;
+ this._super();
+ },
+
+ /**
+ * Replicate the behavior of AbstractService:
+ *
+ * Directly calls the requested service, instead of triggering a
+ * 'call_service' event up, which wouldn't work as services have no parent.
+ *
+ * @param {OdooEvent} ev
+ */
+ _trigger_up: function (ev) {
+ if (ev.name === 'call_service') {
+ const payload = ev.data;
+ let args = payload.args || [];
+ if (payload.service === 'ajax' && payload.method === 'rpc') {
+ // ajax service uses an extra 'target' argument for rpc
+ args = args.concat(ev.target);
+ }
+ const service = this.env.services[payload.service];
+ const result = service[payload.method].apply(service, args);
+ payload.callback(result);
+ }
+ },
+ /**
+ * This method is necessary in order for this Class to be used to instantiate services
+ *
+ * @abstract
+ */
+ start: function () {},
+
+ //--------------------------------------------------------------------------
+ // Public
+ //--------------------------------------------------------------------------
+
+ /**
+ * Send a notification, and notify once per browser's tab
+ *
+ * @param {string} title
+ * @param {string} content
+ * @param {function} [callback] if given callback will be called when user clicks on notification
+ */
+ sendNotification: function (title, content, callback) {
+ if (window.Notification && Notification.permission === "granted") {
+ if (this.isMasterTab()) {
+ try {
+ this._sendNativeNotification(title, content, callback);
+ } catch (error) {
+ // Notification without Serviceworker in Chrome Android doesn't works anymore
+ // So we fallback to do_notify() in this case
+ // https://bugs.chromium.org/p/chromium/issues/detail?id=481856
+ if (error.message.indexOf('ServiceWorkerRegistration') > -1) {
+ this.do_notify(title, content);
+ this._beep();
+ } else {
+ throw error;
+ }
+ }
+ }
+ } else {
+ this.do_notify(title, content);
+ if (this.isMasterTab()) {
+ this._beep();
+ }
+ }
+ },
+ /**
+ * Register listeners on notifications received on this bus service
+ *
+ * @param {Object} receiver
+ * @param {function} func
+ */
+ onNotification: function () {
+ this.on.apply(this, ["notification"].concat(Array.prototype.slice.call(arguments)));
+ },
+
+ //--------------------------------------------------------------------------
+ // Private
+ //--------------------------------------------------------------------------
+
+ /**
+ * Lazily play the 'beep' audio on sent notification
+ *
+ * @private
+ */
+ _beep: function () {
+ if (typeof(Audio) !== "undefined") {
+ if (!this._audio) {
+ this._audio = new Audio();
+ var ext = this._audio.canPlayType("audio/ogg; codecs=vorbis") ? ".ogg" : ".mp3";
+ this._audio.src = session.url("/mail/static/src/audio/ting" + ext);
+ }
+ Promise.resolve(this._audio.play()).catch(_.noop);
+ }
+ },
+ /**
+ * Show a browser notification
+ *
+ * @private
+ * @param {string} title
+ * @param {string} content
+ * @param {function} [callback] if given callback will be called when user clicks on notification
+ */
+ _sendNativeNotification: function (title, content, callback) {
+ var notification = new Notification(
+ // The native Notification API works with plain text and not HTML
+ // unescaping is safe because done only at the **last** step
+ _.unescape(title),
+ {
+ body: _.unescape(content),
+ icon: "/mail/static/src/img/odoobot_transparent.png"
+ });
+ notification.onclick = function () {
+ window.focus();
+ if (this.cancel) {
+ this.cancel();
+ } else if (this.close) {
+ this.close();
+ }
+ if (callback) {
+ callback();
+ }
+ };
+ },
+
+});
+
+core.serviceRegistry.add('bus_service', BusService);
+
+return BusService;
+
+});
diff --git a/addons/bus/static/src/js/web_client_bus.js b/addons/bus/static/src/js/web_client_bus.js
new file mode 100644
index 00000000..6683b565
--- /dev/null
+++ b/addons/bus/static/src/js/web_client_bus.js
@@ -0,0 +1,109 @@
+odoo.define('bus.WebClient', function (require) {
+ "use strict";
+
+ const core = require('web.core');
+ const WebClient = require('web.WebClient');
+
+ const _t = core._t;
+
+ WebClient.include({
+
+ //----------------------------------------------------------------------
+ // Public
+ //----------------------------------------------------------------------
+
+ /**
+ * Detects the presence of assets in DOM's HEAD
+ *
+ * @override
+ */
+ async start() {
+ this._assetsChangedNotificationId = null;
+ this._assets = {};
+ await this._super(...arguments);
+ },
+ /**
+ * Assigns handler to bus notification
+ *
+ * @override
+ */
+ show_application() {
+ const shown = this._super(...arguments);
+ document.querySelectorAll('*[data-asset-xmlid]').forEach(el => {
+ this._assets[el.getAttribute('data-asset-xmlid')] = el.getAttribute('data-asset-version');
+ });
+ this.call('bus_service', 'onNotification', this, this._onNotification);
+ this.call('bus_service', 'addChannel', 'bundle_changed');
+ return shown;
+ },
+
+ //----------------------------------------------------------------------
+ // Private
+ //----------------------------------------------------------------------
+
+ /**
+ * Displays one notification on user's screen when assets have changed
+ *
+ * @private
+ */
+ _displayBundleChangedNotification() {
+ if (!this._assetsChangedNotificationId) {
+ // Wrap the notification inside a delay.
+ // The server may be overwhelmed with recomputing assets
+ // We wait until things settle down
+ clearTimeout(this._bundleNotifTimerID);
+ this._bundleNotifTimerID = setTimeout(() => {
+ this._assetsChangedNotificationId = this.call('notification', 'notify', {
+ title: _t('Refresh'),
+ message: _t('The page appears to be out of date.'),
+ sticky: true,
+ onClose: () => {
+ this._assetsChangedNotificationId = null;
+ },
+ buttons: [{
+ text: _t('Refresh'),
+ primary: true,
+ click: () => {
+ window.location.reload(true);
+ }
+ }],
+ });
+ }, this._getBundleNotificationDelay());
+ }
+ },
+ /**
+ * Computes a random delay to avoid hammering the server
+ * when bundles change with all the users reloading
+ * at the same time
+ *
+ * @private
+ * @return {number} delay in milliseconds
+ */
+ _getBundleNotificationDelay() {
+ return 10000 + Math.floor(Math.random()*50) * 1000;
+ },
+
+ //--------------------------------------------------------------------------
+ // Handlers
+ //--------------------------------------------------------------------------
+
+ /**
+ * Reacts to bus's notification
+ *
+ * @private
+ * @param {Array} notifications: list of received notifications
+ */
+ _onNotification(notifications) {
+ for (const notif of notifications) {
+ if (notif[0][1] === 'bundle_changed') {
+ const bundleXmlId = notif[1][0];
+ const bundleVersion = notif[1][1];
+ if (bundleXmlId in this._assets && bundleVersion !== this._assets[bundleXmlId]) {
+ this._displayBundleChangedNotification();
+ break;
+ }
+ }
+ }
+ }
+ });
+});
diff --git a/addons/bus/static/tests/bus_tests.js b/addons/bus/static/tests/bus_tests.js
new file mode 100644
index 00000000..449e3ba2
--- /dev/null
+++ b/addons/bus/static/tests/bus_tests.js
@@ -0,0 +1,391 @@
+odoo.define('web.bus_tests', function (require) {
+"use strict";
+
+var BusService = require('bus.BusService');
+var CrossTabBus = require('bus.CrossTab');
+var AbstractStorageService = require('web.AbstractStorageService');
+var RamStorage = require('web.RamStorage');
+var testUtils = require('web.test_utils');
+var Widget = require('web.Widget');
+
+
+var LocalStorageServiceMock;
+
+BusService = BusService.extend({
+ TAB_HEARTBEAT_PERIOD: 10,
+ MASTER_TAB_HEARTBEAT_PERIOD: 1,
+});
+
+
+QUnit.module('Bus', {
+ beforeEach: function () {
+ LocalStorageServiceMock = AbstractStorageService.extend({storage: new RamStorage()});
+ },
+}, function () {
+ QUnit.test('notifications received from the longpolling channel', async function (assert) {
+ assert.expect(6);
+
+ var pollPromise = testUtils.makeTestPromise();
+
+ var parent = new Widget();
+ await testUtils.mock.addMockEnvironment(parent, {
+ data: {},
+ services: {
+ bus_service: BusService,
+ local_storage: LocalStorageServiceMock,
+ },
+ mockRPC: function (route, args) {
+ if (route === '/longpolling/poll') {
+ assert.step(route + ' - ' + args.channels.join(','));
+
+ pollPromise = testUtils.makeTestPromise();
+ pollPromise.abort = (function () {
+ this.reject({message: "XmlHttpRequestError abort"}, $.Event());
+ }).bind(pollPromise);
+ return pollPromise;
+ }
+ return this._super.apply(this, arguments);
+ }
+ });
+
+ var widget = new Widget(parent);
+ await widget.appendTo($('#qunit-fixture'));
+
+ widget.call('bus_service', 'onNotification', this, function (notifications) {
+ assert.step('notification - ' + notifications.toString());
+ });
+ widget.call('bus_service', 'addChannel', 'lambda');
+
+ pollPromise.resolve([{
+ id: 1,
+ channel: 'lambda',
+ message: 'beta',
+ }]);
+ await testUtils.nextTick();
+
+ pollPromise.resolve([{
+ id: 2,
+ channel: 'lambda',
+ message: 'epsilon',
+ }]);
+ await testUtils.nextTick();
+
+ assert.verifySteps([
+ '/longpolling/poll - lambda',
+ 'notification - lambda,beta',
+ '/longpolling/poll - lambda',
+ 'notification - lambda,epsilon',
+ '/longpolling/poll - lambda',
+ ]);
+
+ parent.destroy();
+ });
+
+ QUnit.test('provide notification ID of 0 by default', async function (assert) {
+ // This test is important in order to ensure that we provide the correct
+ // sentinel value 0 when we are not aware of the last notification ID
+ // that we have received. We cannot provide an ID of -1, otherwise it
+ // may likely be handled incorrectly (before this test was written,
+ // it was providing -1 to the server, which in return sent every stored
+ // notifications related to this user).
+ assert.expect(3);
+
+ // Simulate no ID of last notification in the local storage
+ testUtils.mock.patch(LocalStorageServiceMock, {
+ getItem: function (key) {
+ if (key === 'last_ts') {
+ return 0;
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ var pollPromise = testUtils.makeTestPromise();
+ var parent = new Widget();
+ await testUtils.mock.addMockEnvironment(parent, {
+ data: {},
+ services: {
+ bus_service: BusService,
+ local_storage: LocalStorageServiceMock,
+ },
+ mockRPC: function (route, args) {
+ if (route === '/longpolling/poll') {
+ assert.step(route);
+ assert.strictEqual(args.last, 0,
+ "provided last notification ID should be 0");
+
+ pollPromise = testUtils.makeTestPromise();
+ pollPromise.abort = (function () {
+ this.reject({message: "XmlHttpRequestError abort"}, $.Event());
+ }).bind(pollPromise);
+ return pollPromise;
+ }
+ return this._super.apply(this, arguments);
+ }
+ });
+
+ var widget = new Widget(parent);
+ await widget.appendTo($('#qunit-fixture'));
+
+ // trigger longpolling poll RPC
+ widget.call('bus_service', 'addChannel', 'lambda');
+ assert.verifySteps(['/longpolling/poll']);
+
+ testUtils.mock.unpatch(LocalStorageServiceMock);
+ parent.destroy();
+ });
+
+ QUnit.test('cross tab bus share message from a channel', async function (assert) {
+ assert.expect(5);
+
+ // master
+
+ var pollPromiseMaster = testUtils.makeTestPromise();
+
+ var parentMaster = new Widget();
+ await testUtils.mock.addMockEnvironment(parentMaster, {
+ data: {},
+ services: {
+ bus_service: BusService,
+ local_storage: LocalStorageServiceMock,
+ },
+ mockRPC: function (route, args) {
+ if (route === '/longpolling/poll') {
+ assert.step('master' + ' - ' + route + ' - ' + args.channels.join(','));
+
+ pollPromiseMaster = testUtils.makeTestPromise();
+ pollPromiseMaster.abort = (function () {
+ this.reject({message: "XmlHttpRequestError abort"}, $.Event());
+ }).bind(pollPromiseMaster);
+ return pollPromiseMaster;
+ }
+ return this._super.apply(this, arguments);
+ }
+ });
+
+ var master = new Widget(parentMaster);
+ await master.appendTo($('#qunit-fixture'));
+
+ master.call('bus_service', 'onNotification', master, function (notifications) {
+ assert.step('master - notification - ' + notifications.toString());
+ });
+ master.call('bus_service', 'addChannel', 'lambda');
+
+ // slave
+ await testUtils.nextTick();
+ var parentSlave = new Widget();
+ await testUtils.mock.addMockEnvironment(parentSlave, {
+ data: {},
+ services: {
+ bus_service: BusService,
+ local_storage: LocalStorageServiceMock,
+ },
+ mockRPC: function (route, args) {
+ if (route === '/longpolling/poll') {
+ throw new Error("Can not use the longpolling of the slave client");
+ }
+ return this._super.apply(this, arguments);
+ }
+ });
+
+ var slave = new Widget(parentSlave);
+ await slave.appendTo($('#qunit-fixture'));
+
+ slave.call('bus_service', 'onNotification', slave, function (notifications) {
+ assert.step('slave - notification - ' + notifications.toString());
+ });
+ slave.call('bus_service', 'addChannel', 'lambda');
+
+ pollPromiseMaster.resolve([{
+ id: 1,
+ channel: 'lambda',
+ message: 'beta',
+ }]);
+ await testUtils.nextTick();
+
+ assert.verifySteps([
+ 'master - /longpolling/poll - lambda',
+ 'master - notification - lambda,beta',
+ 'slave - notification - lambda,beta',
+ 'master - /longpolling/poll - lambda',
+ ]);
+
+ parentMaster.destroy();
+ parentSlave.destroy();
+ });
+
+ QUnit.test('cross tab bus elect new master on master unload', async function (assert) {
+ assert.expect(8);
+
+ // master
+ var pollPromiseMaster = testUtils.makeTestPromise();
+
+ var parentMaster = new Widget();
+ await testUtils.mock.addMockEnvironment(parentMaster, {
+ data: {},
+ services: {
+ bus_service: BusService,
+ local_storage: LocalStorageServiceMock,
+ },
+ mockRPC: function (route, args) {
+ if (route === '/longpolling/poll') {
+ assert.step('master - ' + route + ' - ' + args.channels.join(','));
+
+ pollPromiseMaster = testUtils.makeTestPromise();
+ pollPromiseMaster.abort = (function () {
+ this.reject({message: "XmlHttpRequestError abort"}, $.Event());
+ }).bind(pollPromiseMaster);
+ return pollPromiseMaster;
+ }
+ return this._super.apply(this, arguments);
+ }
+ });
+
+ var master = new Widget(parentMaster);
+ await master.appendTo($('#qunit-fixture'));
+
+ master.call('bus_service', 'onNotification', master, function (notifications) {
+ assert.step('master - notification - ' + notifications.toString());
+ });
+ master.call('bus_service', 'addChannel', 'lambda');
+
+ // slave
+ await testUtils.nextTick();
+ var parentSlave = new Widget();
+ var pollPromiseSlave = testUtils.makeTestPromise();
+ await testUtils.mock.addMockEnvironment(parentSlave, {
+ data: {},
+ services: {
+ bus_service: BusService,
+ local_storage: LocalStorageServiceMock,
+ },
+ mockRPC: function (route, args) {
+ if (route === '/longpolling/poll') {
+ assert.step('slave - ' + route + ' - ' + args.channels.join(','));
+
+ pollPromiseSlave = testUtils.makeTestPromise();
+ pollPromiseSlave.abort = (function () {
+ this.reject({message: "XmlHttpRequestError abort"}, $.Event());
+ }).bind(pollPromiseSlave);
+ return pollPromiseSlave;
+ }
+ return this._super.apply(this, arguments);
+ }
+ });
+
+ var slave = new Widget(parentSlave);
+ await slave.appendTo($('#qunit-fixture'));
+
+ slave.call('bus_service', 'onNotification', slave, function (notifications) {
+ assert.step('slave - notification - ' + notifications.toString());
+ });
+ slave.call('bus_service', 'addChannel', 'lambda');
+
+ pollPromiseMaster.resolve([{
+ id: 1,
+ channel: 'lambda',
+ message: 'beta',
+ }]);
+ await testUtils.nextTick();
+
+ // simulate unloading master
+ master.call('bus_service', '_onUnload');
+
+ pollPromiseSlave.resolve([{
+ id: 2,
+ channel: 'lambda',
+ message: 'gamma',
+ }]);
+ await testUtils.nextTick();
+
+ assert.verifySteps([
+ 'master - /longpolling/poll - lambda',
+ 'master - notification - lambda,beta',
+ 'slave - notification - lambda,beta',
+ 'master - /longpolling/poll - lambda',
+ 'slave - /longpolling/poll - lambda',
+ 'slave - notification - lambda,gamma',
+ 'slave - /longpolling/poll - lambda',
+ ]);
+
+ parentMaster.destroy();
+ parentSlave.destroy();
+ });
+
+ QUnit.test('two tabs calling addChannel simultaneously', async function (assert) {
+ assert.expect(5);
+
+ let id = 1;
+ testUtils.patch(CrossTabBus, {
+ init: function () {
+ this._super.apply(this, arguments);
+ this.__tabId__ = id++;
+ },
+ addChannel: function (channel) {
+ assert.step('Tab ' + this.__tabId__ + ': addChannel ' + channel);
+ this._super.apply(this, arguments);
+ },
+ deleteChannel: function (channel) {
+ assert.step('Tab ' + this.__tabId__ + ': deleteChannel ' + channel);
+ this._super.apply(this, arguments);
+ },
+ });
+
+ let pollPromise;
+ const parentTab1 = new Widget();
+ await testUtils.addMockEnvironment(parentTab1, {
+ data: {},
+ services: {
+ local_storage: LocalStorageServiceMock,
+ },
+ mockRPC: function (route) {
+ if (route === '/longpolling/poll') {
+ pollPromise = testUtils.makeTestPromise();
+ pollPromise.abort = (function () {
+ this.reject({message: "XmlHttpRequestError abort"}, $.Event());
+ }).bind(pollPromise);
+ return pollPromise;
+ }
+ return this._super.apply(this, arguments);
+ }
+ });
+ const parentTab2 = new Widget();
+ await testUtils.addMockEnvironment(parentTab2, {
+ data: {},
+ services: {
+ local_storage: LocalStorageServiceMock,
+ },
+ mockRPC: function (route) {
+ if (route === '/longpolling/poll') {
+ pollPromise = testUtils.makeTestPromise();
+ pollPromise.abort = (function () {
+ this.reject({message: "XmlHttpRequestError abort"}, $.Event());
+ }).bind(pollPromise);
+ return pollPromise;
+ }
+ return this._super.apply(this, arguments);
+ }
+ });
+
+ const tab1 = new CrossTabBus(parentTab1);
+ const tab2 = new CrossTabBus(parentTab2);
+
+ tab1.addChannel("alpha");
+ tab2.addChannel("alpha");
+ tab1.addChannel("beta");
+ tab2.addChannel("beta");
+
+ assert.verifySteps([
+ "Tab 1: addChannel alpha",
+ "Tab 2: addChannel alpha",
+ "Tab 1: addChannel beta",
+ "Tab 2: addChannel beta",
+ ]);
+
+ testUtils.unpatch(CrossTabBus);
+ parentTab1.destroy();
+ parentTab2.destroy();
+ });
+});
+
+});
diff --git a/addons/bus/static/tests/bus_tests_tour.js b/addons/bus/static/tests/bus_tests_tour.js
new file mode 100644
index 00000000..2248e0a1
--- /dev/null
+++ b/addons/bus/static/tests/bus_tests_tour.js
@@ -0,0 +1,25 @@
+odoo.define("bus.tour", function (require) {
+ "use strict";
+
+ const tour = require("web_tour.tour");
+
+ tour.register("bundle_changed_notification", {
+ test: true,
+ url: '/web',
+ }, [{
+ trigger: '.o_web_client',
+ run() {
+ const webClient = odoo.__DEBUG__.services['web.web_client'];
+ const _delayFn = webClient._getBundleNotificationDelay;
+ webClient._getBundleNotificationDelay = () => 0;
+ this.call('bus_service', 'trigger',
+ 'notification',
+ [[['db_name', 'bundle_changed'], ['web.assets_backend', 'hash']]]
+ );
+ webClient._getBundleNotificationDelay = _delayFn;
+ }
+ }, {
+ trigger: '.o_notification_title:contains(Refresh)',
+ }]
+ );
+});
diff --git a/addons/bus/tests/__init__.py b/addons/bus/tests/__init__.py
new file mode 100644
index 00000000..06c6ab0e
--- /dev/null
+++ b/addons/bus/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_assetsbundle
diff --git a/addons/bus/tests/test_assetsbundle.py b/addons/bus/tests/test_assetsbundle.py
new file mode 100644
index 00000000..c3780f38
--- /dev/null
+++ b/addons/bus/tests/test_assetsbundle.py
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+import odoo.tests
+from odoo.osv import expression
+
+
+@odoo.tests.tagged('post_install', '-at_install', 'assets_bundle')
+class BusWebTests(odoo.tests.HttpCase):
+
+ def test_bundle_sends_bus(self):
+ """
+ Tests two things:
+ - Messages are posted to the bus when assets change
+ i.e. their hash has been recomputed and differ from the attachment's
+ - The interface deals with those bus messages by displaying one notification
+ """
+ db_name = self.env.registry.db_name
+ bundle_xml_ids = ('web.assets_common', 'web.assets_backend')
+
+ domain = []
+ for bundle in bundle_xml_ids:
+ domain = expression.OR([
+ domain,
+ [('name', 'ilike', bundle + '%')]
+ ])
+ # start from a clean slate
+ self.env['ir.attachment'].search(domain).unlink()
+ self.env.registry._clear_cache()
+
+ sendones = []
+ def patched_sendone(self, channel, message):
+ """
+ Control API and number of messages posted to the bus
+ """
+ sendones.append((channel, message))
+
+ self.patch(type(self.env['bus.bus']), 'sendone', patched_sendone)
+
+ self.start_tour('/web', "bundle_changed_notification", login='admin', timeout=180)
+
+ # One sendone for each asset bundle and for each CSS / JS
+ self.assertEqual(len(sendones), 4)
+ for sent in sendones:
+ channel = sent[0]
+ message = sent[1]
+ self.assertEqual(channel, (db_name, 'bundle_changed'))
+ self.assertEqual(len(message), 2)
+ self.assertTrue(message[0] in bundle_xml_ids)
+ self.assertTrue(isinstance(message[1], str))
diff --git a/addons/bus/views/bus.xml b/addons/bus/views/bus.xml
new file mode 100644
index 00000000..24a83d42
--- /dev/null
+++ b/addons/bus/views/bus.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+ <template id="assets_backend" name="im assets" inherit_id="web.assets_backend">
+ <xpath expr="." position="inside">
+ <script type="text/javascript" src="/bus/static/src/js/longpolling_bus.js"></script>
+ <script type="text/javascript" src="/bus/static/src/js/crosstab_bus.js"></script>
+ <script type="text/javascript" src="/bus/static/src/js/services/bus_service.js"></script>
+ <script type="text/javascript" src="/bus/static/src/js/web_client_bus.js"></script>
+ </xpath>
+ </template>
+
+ <template id="assets_frontend" name="im assets" inherit_id="web.assets_frontend">
+ <xpath expr="." position="inside">
+ <script type="text/javascript" src="/bus/static/src/js/longpolling_bus.js"></script>
+ <script type="text/javascript" src="/bus/static/src/js/crosstab_bus.js"></script>
+ <script type="text/javascript" src="/bus/static/src/js/services/bus_service.js"></script>
+ </xpath>
+ </template>
+
+ <template id="qunit_suite" name="bus tests" inherit_id="web.qunit_suite_tests">
+ <xpath expr="//script[last()]" position="after">
+ <script type="text/javascript" src="/bus/static/tests/bus_tests.js"/>
+ </xpath>
+ </template>
+ <template id="assets_tests" name="Bus Assets Tests" inherit_id="web.assets_tests">
+ <xpath expr="." position="inside">
+ <script type="text/javascript" src="/bus/static/tests/bus_tests_tour.js"></script>
+ </xpath>
+ </template>
+</odoo>