+
+
+ Features
+
+
+
+
+
+

+
+
+
+ Switch Languages in POS
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+ Lang Switcher in POS
+
+ Add in Languages in Translation
+
.png)
+
+
+
+
+ Change Language button will appear in POS
+
+ We can choose to enable/disable this option from the customize menu
+
.png)
+
+
+
+
+ Clicking on it will cause the Language Switch Popup to Appear
+
.png)
+
+
+
+
+
+ You can see all the activated Languages within this Popup
+
.png)
+
+
+
+
+
+ Select Desired Language From Popup
+
.png)
+
+
+
+
+ Click Ok and it will switch to the desired Language
+
.png)
+
+
+
+
+ Clicking Again will show the Popup again the New Language
+
.png)
+
+
+
+
+
+
+
Suggested Products
+
+
+
+
+
+
+
+
+
+
+
+
Our Services
+
+
+
+
+
+

+
+
+ Odoo
+ Customization
+
+
+
+
+

+
+
+ Odoo
+ Implementation
+
+
+
+
+

+
+
+ Odoo
+ Support
+
+
+
+
+
+

+
+
+ Hire
+ Odoo
+ Developer
+
+
+
+
+

+
+
+ Odoo
+ Integration
+
+
+
+
+

+
+
+ Odoo
+ Migration
+
+
+
+
+
+

+
+
+ Odoo
+ Consultancy
+
+
+
+
+

+
+
+ Odoo
+ Implementation
+
+
+
+
+

+
+
+ Odoo
+ Licensing Consultancy
+
+
+
+
+
+
+
+
+
+
Our Industries
+
+
+
+
+
+

+
+ Trading
+
+
+ Easily procure
+ and
+ sell your products
+
+
+
+
+
+

+
+ POS
+
+
+ Easy
+ configuration
+ and convivial experience
+
+
+
+
+
+

+
+ Education
+
+
+ A platform for
+ educational management
+
+
+
+
+
+

+
+ Manufacturing
+
+
+ Plan, track and
+ schedule your operations
+
+
+
+
+
+

+
+ E-commerce & Website
+
+
+ Mobile
+ friendly,
+ awe-inspiring product pages
+
+
+
+
+
+

+
+ Service Management
+
+
+ Keep track of
+ services and invoice
+
+
+
+
+
+

+
+ Restaurant
+
+
+ Run your bar or
+ restaurant methodically
+
+
+
+
+
+

+
+ Hotel Management
+
+
+ An
+ all-inclusive
+ hotel management application
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lang_switch_pos/static/src/js/lang_button.js b/lang_switch_pos/static/src/js/lang_button.js
new file mode 100644
index 000000000..a65864c61
--- /dev/null
+++ b/lang_switch_pos/static/src/js/lang_button.js
@@ -0,0 +1,49 @@
+odoo.define('product_multi_uom_pos.uom_button',function(require) {
+ "use strict";
+
+var core = require('web.core');
+var QWeb = core.qweb;
+
+ const { onChangeOrder, useBarcodeReader } = require('point_of_sale.custom_hooks');
+ const PosComponent = require('point_of_sale.PosComponent');
+ const Registries = require('point_of_sale.Registries');
+ const ProductScreen = require('point_of_sale.ProductScreen');
+ const { useListener } = require('web.custom_hooks');
+ const { useState, useRef } = owl.hooks;
+ const { Gui } = require('point_of_sale.Gui');
+
+
+//Button click event listen and events
+
+class LangButton extends PosComponent {
+
+ constructor() {
+ super(...arguments);
+ useListener('click', this.button_click);
+ }
+
+ button_click() {
+
+ Gui.showPopup('LangWidget');
+ }
+
+}
+
+
+LangButton.template = 'LangButton';
+ProductScreen.addControlButton({
+
+ component: LangButton,
+ condition: function () {
+ return true;
+ },
+ position: ['before', 'SetFiscalPositionButton'],
+
+ });
+
+ Registries.Component.add(LangButton);
+ return LangButton;
+
+
+
+});
\ No newline at end of file
diff --git a/lang_switch_pos/static/src/js/lang_widget.js b/lang_switch_pos/static/src/js/lang_widget.js
new file mode 100644
index 000000000..5dccde704
--- /dev/null
+++ b/lang_switch_pos/static/src/js/lang_widget.js
@@ -0,0 +1,90 @@
+odoo.define('product_multi_uom_pos.multi_uom_widget',function(require) {
+ "use strict";
+
+var gui = require('point_of_sale.Gui');
+var core = require('web.core');
+var QWeb = core.qweb;
+
+ const NumberBuffer = require('point_of_sale.NumberBuffer');
+ const { onChangeOrder, useBarcodeReader } = require('point_of_sale.custom_hooks');
+ const PosComponent = require('point_of_sale.PosComponent');
+ const Registries = require('point_of_sale.Registries');
+ const ProductScreen = require('point_of_sale.ProductScreen');
+ const { useListener } = require('web.custom_hooks');
+ const { useState, useRef } = owl.hooks;
+ var rpc = require('web.rpc');
+ var models = require('point_of_sale.models');
+
+
+models.load_models({
+ model: 'res.lang',
+ fields: ['name', 'code'],
+ domain: function(self){
+ return [['active', '=', true]];
+ },
+ loaded: function(self, lang) {
+ self.lang = lang;
+ }
+
+})
+
+
+ class LangWidget extends PosComponent {
+
+
+ constructor() {
+ super(...arguments);
+
+ this.lang_list = [];
+
+ }
+
+//Pushing the languages at DOM mount
+
+ mounted(options){
+
+ this.lang_list = this.env.pos.lang;
+ this.current_lang = this.env.pos.user.lang;
+ this.render();
+
+ }
+
+//Click events
+
+ click_confirm(){
+ var self = this;
+ var lang = parseInt($('.lang').val());
+ rpc.query({
+ model: 'pos.order',
+ method: 'switch_lang',
+ args: [lang],
+
+ }).then(val => {
+ this.env.pos.do_action({
+ type: "ir.actions.client",
+ tag: 'reload',
+ });
+ })
+ this.trigger('close-popup');
+ return;
+
+ }
+ click_cancel(){
+ this.trigger('close-popup');
+
+
+ }
+
+ }
+
+ LangWidget.template = 'LangWidget';
+ LangWidget.defaultProps = {
+ confirmText: 'Return',
+ cancelText: 'Cancel',
+ title: 'Confirm ?',
+ body: '',
+ };
+ Registries.Component.add(LangWidget);
+ return LangWidget;
+});
+
diff --git a/lang_switch_pos/static/src/xml/pos.xml b/lang_switch_pos/static/src/xml/pos.xml
new file mode 100644
index 000000000..d9fa5c618
--- /dev/null
+++ b/lang_switch_pos/static/src/xml/pos.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+ Change Language
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file