diff --git a/guacamole/pom.xml b/guacamole/pom.xml
index 945724ff6..fb426e743 100644
--- a/guacamole/pom.xml
+++ b/guacamole/pom.xml
@@ -158,6 +158,7 @@
lib/jquery.js
lib/angular.min.js
lib/angular-module-shim.js
+ lib/messageformat/messageformat.js
license.txt
guacamole-common-js/all.js
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/af.js b/guacamole/src/main/webapp/lib/messageformat/locale/af.js
new file mode 100644
index 000000000..b03849f2d
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/af.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.af = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/am.js b/guacamole/src/main/webapp/lib/messageformat/locale/am.js
new file mode 100644
index 000000000..aa8af1d1a
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/am.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.am = function(n) {
+ if (n === 0 || n == 1) {
+ return 'one';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/ar.js b/guacamole/src/main/webapp/lib/messageformat/locale/ar.js
new file mode 100644
index 000000000..d33d95ddb
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/ar.js
@@ -0,0 +1,18 @@
+MessageFormat.locale.ar = function(n) {
+ if (n === 0) {
+ return 'zero';
+ }
+ if (n == 1) {
+ return 'one';
+ }
+ if (n == 2) {
+ return 'two';
+ }
+ if ((n % 100) >= 3 && (n % 100) <= 10 && n == Math.floor(n)) {
+ return 'few';
+ }
+ if ((n % 100) >= 11 && (n % 100) <= 99 && n == Math.floor(n)) {
+ return 'many';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/bg.js b/guacamole/src/main/webapp/lib/messageformat/locale/bg.js
new file mode 100644
index 000000000..868baea07
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/bg.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.bg = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/bn.js b/guacamole/src/main/webapp/lib/messageformat/locale/bn.js
new file mode 100644
index 000000000..1641ff32d
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/bn.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.bn = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/br.js b/guacamole/src/main/webapp/lib/messageformat/locale/br.js
new file mode 100644
index 000000000..2e0d43fee
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/br.js
@@ -0,0 +1,18 @@
+MessageFormat.locale.br = function (n) {
+ if (n === 0) {
+ return 'zero';
+ }
+ if (n == 1) {
+ return 'one';
+ }
+ if (n == 2) {
+ return 'two';
+ }
+ if (n == 3) {
+ return 'few';
+ }
+ if (n == 6) {
+ return 'many';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/ca.js b/guacamole/src/main/webapp/lib/messageformat/locale/ca.js
new file mode 100644
index 000000000..e2a685c67
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/ca.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.ca = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/cs.js b/guacamole/src/main/webapp/lib/messageformat/locale/cs.js
new file mode 100644
index 000000000..6a7f67ee2
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/cs.js
@@ -0,0 +1,9 @@
+MessageFormat.locale.cs = function (n) {
+ if (n == 1) {
+ return 'one';
+ }
+ if (n == 2 || n == 3 || n == 4) {
+ return 'few';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/cy.js b/guacamole/src/main/webapp/lib/messageformat/locale/cy.js
new file mode 100644
index 000000000..d98b1f49f
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/cy.js
@@ -0,0 +1,18 @@
+MessageFormat.locale.cy = function (n) {
+ if (n === 0) {
+ return 'zero';
+ }
+ if (n == 1) {
+ return 'one';
+ }
+ if (n == 2) {
+ return 'two';
+ }
+ if (n == 3) {
+ return 'few';
+ }
+ if (n == 6) {
+ return 'many';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/da.js b/guacamole/src/main/webapp/lib/messageformat/locale/da.js
new file mode 100644
index 000000000..7ea5765b2
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/da.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.da = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/de.js b/guacamole/src/main/webapp/lib/messageformat/locale/de.js
similarity index 100%
rename from guacamole/src/main/webapp/lib/messageformat/de.js
rename to guacamole/src/main/webapp/lib/messageformat/locale/de.js
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/el.js b/guacamole/src/main/webapp/lib/messageformat/locale/el.js
new file mode 100644
index 000000000..8c5215a44
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/el.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.el = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/en.js b/guacamole/src/main/webapp/lib/messageformat/locale/en.js
new file mode 100644
index 000000000..c2380b9bf
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/en.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.en = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/es.js b/guacamole/src/main/webapp/lib/messageformat/locale/es.js
new file mode 100644
index 000000000..4397d10b8
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/es.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.es = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/et.js b/guacamole/src/main/webapp/lib/messageformat/locale/et.js
new file mode 100644
index 000000000..d4b7f5a31
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/et.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.et = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/eu.js b/guacamole/src/main/webapp/lib/messageformat/locale/eu.js
new file mode 100644
index 000000000..6da55df13
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/eu.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.eu = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/fa.js b/guacamole/src/main/webapp/lib/messageformat/locale/fa.js
new file mode 100644
index 000000000..4280d1dab
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/fa.js
@@ -0,0 +1,3 @@
+MessageFormat.locale.fa = function ( n ) {
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/fi.js b/guacamole/src/main/webapp/lib/messageformat/locale/fi.js
new file mode 100644
index 000000000..3315a8404
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/fi.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.fi = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/fil.js b/guacamole/src/main/webapp/lib/messageformat/locale/fil.js
new file mode 100644
index 000000000..af882daf4
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/fil.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.fil = function(n) {
+ if (n === 0 || n == 1) {
+ return 'one';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/fr.js b/guacamole/src/main/webapp/lib/messageformat/locale/fr.js
similarity index 100%
rename from guacamole/src/main/webapp/lib/messageformat/fr.js
rename to guacamole/src/main/webapp/lib/messageformat/locale/fr.js
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/ga.js b/guacamole/src/main/webapp/lib/messageformat/locale/ga.js
new file mode 100644
index 000000000..c29aaadb6
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/ga.js
@@ -0,0 +1,9 @@
+MessageFormat.locale.ga = function (n) {
+ if (n == 1) {
+ return 'one';
+ }
+ if (n == 2) {
+ return 'two';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/gl.js b/guacamole/src/main/webapp/lib/messageformat/locale/gl.js
new file mode 100644
index 000000000..0d2a1b448
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/gl.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.gl = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/gsw.js b/guacamole/src/main/webapp/lib/messageformat/locale/gsw.js
new file mode 100644
index 000000000..9aae2bcc8
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/gsw.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.gsw = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/gu.js b/guacamole/src/main/webapp/lib/messageformat/locale/gu.js
new file mode 100644
index 000000000..70820dd9e
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/gu.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.gu = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/he.js b/guacamole/src/main/webapp/lib/messageformat/locale/he.js
new file mode 100644
index 000000000..bf828a5a7
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/he.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.he = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/hi.js b/guacamole/src/main/webapp/lib/messageformat/locale/hi.js
new file mode 100644
index 000000000..68fac22a3
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/hi.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.hi = function(n) {
+ if (n === 0 || n == 1) {
+ return 'one';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/hr.js b/guacamole/src/main/webapp/lib/messageformat/locale/hr.js
new file mode 100644
index 000000000..668e28e2b
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/hr.js
@@ -0,0 +1,14 @@
+MessageFormat.locale.hr = function (n) {
+ if ((n % 10) == 1 && (n % 100) != 11) {
+ return 'one';
+ }
+ if ((n % 10) >= 2 && (n % 10) <= 4 &&
+ ((n % 100) < 12 || (n % 100) > 14) && n == Math.floor(n)) {
+ return 'few';
+ }
+ if ((n % 10) === 0 || ((n % 10) >= 5 && (n % 10) <= 9) ||
+ ((n % 100) >= 11 && (n % 100) <= 14) && n == Math.floor(n)) {
+ return 'many';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/hu.js b/guacamole/src/main/webapp/lib/messageformat/locale/hu.js
new file mode 100644
index 000000000..1fa3c21b2
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/hu.js
@@ -0,0 +1,3 @@
+MessageFormat.locale.hu = function(n) {
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/id.js b/guacamole/src/main/webapp/lib/messageformat/locale/id.js
new file mode 100644
index 000000000..fb4b62bde
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/id.js
@@ -0,0 +1,3 @@
+MessageFormat.locale.id = function(n) {
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/in.js b/guacamole/src/main/webapp/lib/messageformat/locale/in.js
new file mode 100644
index 000000000..95abe006a
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/in.js
@@ -0,0 +1,3 @@
+MessageFormat.locale["in"] = function(n) {
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/is.js b/guacamole/src/main/webapp/lib/messageformat/locale/is.js
new file mode 100644
index 000000000..48efd8f46
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/is.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.is = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/it.js b/guacamole/src/main/webapp/lib/messageformat/locale/it.js
new file mode 100644
index 000000000..be964ccbe
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/it.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.it = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/iw.js b/guacamole/src/main/webapp/lib/messageformat/locale/iw.js
new file mode 100644
index 000000000..a25fb2b17
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/iw.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.iw = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/ja.js b/guacamole/src/main/webapp/lib/messageformat/locale/ja.js
new file mode 100644
index 000000000..a02267fa0
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/ja.js
@@ -0,0 +1,3 @@
+MessageFormat.locale.ja = function ( n ) {
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/kn.js b/guacamole/src/main/webapp/lib/messageformat/locale/kn.js
new file mode 100644
index 000000000..44c782db7
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/kn.js
@@ -0,0 +1,3 @@
+MessageFormat.locale.kn = function ( n ) {
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/ko.js b/guacamole/src/main/webapp/lib/messageformat/locale/ko.js
new file mode 100644
index 000000000..899ffeae9
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/ko.js
@@ -0,0 +1,3 @@
+MessageFormat.locale.ko = function ( n ) {
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/lag.js b/guacamole/src/main/webapp/lib/messageformat/locale/lag.js
new file mode 100644
index 000000000..d4990b96c
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/lag.js
@@ -0,0 +1,9 @@
+MessageFormat.locale.lag = function (n) {
+ if (n === 0) {
+ return 'zero';
+ }
+ if (n > 0 && n < 2) {
+ return 'one';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/ln.js b/guacamole/src/main/webapp/lib/messageformat/locale/ln.js
new file mode 100644
index 000000000..562e220b8
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/ln.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.ln = function(n) {
+ if (n === 0 || n == 1) {
+ return 'one';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/lt.js b/guacamole/src/main/webapp/lib/messageformat/locale/lt.js
new file mode 100644
index 000000000..82878cfef
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/lt.js
@@ -0,0 +1,10 @@
+MessageFormat.locale.lt = function (n) {
+ if ((n % 10) == 1 && ((n % 100) < 11 || (n % 100) > 19)) {
+ return 'one';
+ }
+ if ((n % 10) >= 2 && (n % 10) <= 9 &&
+ ((n % 100) < 11 || (n % 100) > 19) && n == Math.floor(n)) {
+ return 'few';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/lv.js b/guacamole/src/main/webapp/lib/messageformat/locale/lv.js
new file mode 100644
index 000000000..75beb3401
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/lv.js
@@ -0,0 +1,9 @@
+MessageFormat.locale.lv = function (n) {
+ if (n === 0) {
+ return 'zero';
+ }
+ if ((n % 10) == 1 && (n % 100) != 11) {
+ return 'one';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/mk.js b/guacamole/src/main/webapp/lib/messageformat/locale/mk.js
new file mode 100644
index 000000000..c17aa2e3a
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/mk.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.mk = function (n) {
+ if ((n % 10) == 1 && n != 11) {
+ return 'one';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/ml.js b/guacamole/src/main/webapp/lib/messageformat/locale/ml.js
new file mode 100644
index 000000000..f400a5f10
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/ml.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.ml = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/mo.js b/guacamole/src/main/webapp/lib/messageformat/locale/mo.js
new file mode 100644
index 000000000..16d84d98f
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/mo.js
@@ -0,0 +1,10 @@
+MessageFormat.locale.mo = function (n) {
+ if (n == 1) {
+ return 'one';
+ }
+ if (n === 0 || n != 1 && (n % 100) >= 1 &&
+ (n % 100) <= 19 && n == Math.floor(n)) {
+ return 'few';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/mr.js b/guacamole/src/main/webapp/lib/messageformat/locale/mr.js
new file mode 100644
index 000000000..da4d494ac
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/mr.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.mr = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/ms.js b/guacamole/src/main/webapp/lib/messageformat/locale/ms.js
new file mode 100644
index 000000000..e635ae79a
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/ms.js
@@ -0,0 +1,3 @@
+MessageFormat.locale.ms = function ( n ) {
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/mt.js b/guacamole/src/main/webapp/lib/messageformat/locale/mt.js
new file mode 100644
index 000000000..6a071a734
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/mt.js
@@ -0,0 +1,12 @@
+MessageFormat.locale.mt = function (n) {
+ if (n == 1) {
+ return 'one';
+ }
+ if (n === 0 || ((n % 100) >= 2 && (n % 100) <= 4 && n == Math.floor(n))) {
+ return 'few';
+ }
+ if ((n % 100) >= 11 && (n % 100) <= 19 && n == Math.floor(n)) {
+ return 'many';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/nl.js b/guacamole/src/main/webapp/lib/messageformat/locale/nl.js
similarity index 100%
rename from guacamole/src/main/webapp/lib/messageformat/nl.js
rename to guacamole/src/main/webapp/lib/messageformat/locale/nl.js
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/no.js b/guacamole/src/main/webapp/lib/messageformat/locale/no.js
new file mode 100644
index 000000000..025d3489d
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/no.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.no = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/or.js b/guacamole/src/main/webapp/lib/messageformat/locale/or.js
new file mode 100644
index 000000000..04240a185
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/or.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.or = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/pl.js b/guacamole/src/main/webapp/lib/messageformat/locale/pl.js
new file mode 100644
index 000000000..a9020d0a5
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/pl.js
@@ -0,0 +1,15 @@
+MessageFormat.locale.pl = function (n) {
+ if (n == 1) {
+ return 'one';
+ }
+ if ((n % 10) >= 2 && (n % 10) <= 4 &&
+ ((n % 100) < 12 || (n % 100) > 14) && n == Math.floor(n)) {
+ return 'few';
+ }
+ if ((n % 10) === 0 || n != 1 && (n % 10) == 1 ||
+ ((n % 10) >= 5 && (n % 10) <= 9 || (n % 100) >= 12 && (n % 100) <= 14) &&
+ n == Math.floor(n)) {
+ return 'many';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/pt.js b/guacamole/src/main/webapp/lib/messageformat/locale/pt.js
new file mode 100644
index 000000000..a4b65eb90
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/pt.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.pt = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/ro.js b/guacamole/src/main/webapp/lib/messageformat/locale/ro.js
new file mode 100644
index 000000000..26453eadd
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/ro.js
@@ -0,0 +1,10 @@
+MessageFormat.locale.ro = function (n) {
+ if (n == 1) {
+ return 'one';
+ }
+ if (n === 0 || n != 1 && (n % 100) >= 1 &&
+ (n % 100) <= 19 && n == Math.floor(n)) {
+ return 'few';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/ru.js b/guacamole/src/main/webapp/lib/messageformat/locale/ru.js
similarity index 100%
rename from guacamole/src/main/webapp/lib/messageformat/ru.js
rename to guacamole/src/main/webapp/lib/messageformat/locale/ru.js
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/shi.js b/guacamole/src/main/webapp/lib/messageformat/locale/shi.js
new file mode 100644
index 000000000..9e86dca14
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/shi.js
@@ -0,0 +1,9 @@
+MessageFormat.locale.shi = function(n) {
+ if (n >= 0 && n <= 1) {
+ return 'one';
+ }
+ if (n >= 2 && n <= 10 && n == Math.floor(n)) {
+ return 'few';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/sk.js b/guacamole/src/main/webapp/lib/messageformat/locale/sk.js
new file mode 100644
index 000000000..ef041ddb2
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/sk.js
@@ -0,0 +1,9 @@
+MessageFormat.locale.sk = function (n) {
+ if (n == 1) {
+ return 'one';
+ }
+ if (n == 2 || n == 3 || n == 4) {
+ return 'few';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/sl.js b/guacamole/src/main/webapp/lib/messageformat/locale/sl.js
new file mode 100644
index 000000000..7dd591b01
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/sl.js
@@ -0,0 +1,12 @@
+MessageFormat.locale.sl = function (n) {
+ if ((n % 100) == 1) {
+ return 'one';
+ }
+ if ((n % 100) == 2) {
+ return 'two';
+ }
+ if ((n % 100) == 3 || (n % 100) == 4) {
+ return 'few';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/sq.js b/guacamole/src/main/webapp/lib/messageformat/locale/sq.js
new file mode 100644
index 000000000..1e683894f
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/sq.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.sq = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/sr.js b/guacamole/src/main/webapp/lib/messageformat/locale/sr.js
new file mode 100644
index 000000000..c2e3d3df1
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/sr.js
@@ -0,0 +1,14 @@
+MessageFormat.locale.sr = function (n) {
+ if ((n % 10) == 1 && (n % 100) != 11) {
+ return 'one';
+ }
+ if ((n % 10) >= 2 && (n % 10) <= 4 &&
+ ((n % 100) < 12 || (n % 100) > 14) && n == Math.floor(n)) {
+ return 'few';
+ }
+ if ((n % 10) === 0 || ((n % 10) >= 5 && (n % 10) <= 9) ||
+ ((n % 100) >= 11 && (n % 100) <= 14) && n == Math.floor(n)) {
+ return 'many';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/sv.js b/guacamole/src/main/webapp/lib/messageformat/locale/sv.js
new file mode 100644
index 000000000..e566a339d
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/sv.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.sv = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/sw.js b/guacamole/src/main/webapp/lib/messageformat/locale/sw.js
new file mode 100644
index 000000000..7dd56c146
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/sw.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.sw = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/ta.js b/guacamole/src/main/webapp/lib/messageformat/locale/ta.js
new file mode 100644
index 000000000..08a4ae01f
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/ta.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.ta = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/te.js b/guacamole/src/main/webapp/lib/messageformat/locale/te.js
new file mode 100644
index 000000000..61ccb27f6
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/te.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.te = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/th.js b/guacamole/src/main/webapp/lib/messageformat/locale/th.js
new file mode 100644
index 000000000..9ef170824
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/th.js
@@ -0,0 +1,3 @@
+MessageFormat.locale.th = function ( n ) {
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/tl.js b/guacamole/src/main/webapp/lib/messageformat/locale/tl.js
new file mode 100644
index 000000000..bc68843df
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/tl.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.tl = function(n) {
+ if (n === 0 || n == 1) {
+ return 'one';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/tr.js b/guacamole/src/main/webapp/lib/messageformat/locale/tr.js
new file mode 100644
index 000000000..438941ad9
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/tr.js
@@ -0,0 +1,3 @@
+MessageFormat.locale.tr = function(n) {
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/uk.js b/guacamole/src/main/webapp/lib/messageformat/locale/uk.js
new file mode 100644
index 000000000..aad90c797
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/uk.js
@@ -0,0 +1,14 @@
+MessageFormat.locale.uk = function (n) {
+ if ((n % 10) == 1 && (n % 100) != 11) {
+ return 'one';
+ }
+ if ((n % 10) >= 2 && (n % 10) <= 4 &&
+ ((n % 100) < 12 || (n % 100) > 14) && n == Math.floor(n)) {
+ return 'few';
+ }
+ if ((n % 10) === 0 || ((n % 10) >= 5 && (n % 10) <= 9) ||
+ ((n % 100) >= 11 && (n % 100) <= 14) && n == Math.floor(n)) {
+ return 'many';
+ }
+ return 'other';
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/ur.js b/guacamole/src/main/webapp/lib/messageformat/locale/ur.js
new file mode 100644
index 000000000..5a875c9e3
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/ur.js
@@ -0,0 +1,6 @@
+MessageFormat.locale.ur = function ( n ) {
+ if ( n === 1 ) {
+ return "one";
+ }
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/vi.js b/guacamole/src/main/webapp/lib/messageformat/locale/vi.js
new file mode 100644
index 000000000..8a5b74698
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/vi.js
@@ -0,0 +1,3 @@
+MessageFormat.locale.vi = function ( n ) {
+ return "other";
+};
diff --git a/guacamole/src/main/webapp/lib/messageformat/locale/zh.js b/guacamole/src/main/webapp/lib/messageformat/locale/zh.js
new file mode 100644
index 000000000..6ae270cf6
--- /dev/null
+++ b/guacamole/src/main/webapp/lib/messageformat/locale/zh.js
@@ -0,0 +1,3 @@
+MessageFormat.locale.zh = function ( n ) {
+ return "other";
+};