luci-base: cbi.js: support plural translations and disambiguation contexts
authorJo-Philipp Wich <jo@mein.io>
Wed, 22 Jan 2020 20:56:28 +0000 (21:56 +0100)
committerJo-Philipp Wich <jo@mein.io>
Thu, 7 May 2020 17:40:49 +0000 (19:40 +0200)
 - Implement `N_(count, "String singular", "String plural" [, "Context"])`
   plural translation function.

 - Extend `_()` to optionally accept a second disambiguation context
   argument.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 894752610d80a2fa1cdb6a845526728eeb0bc984)

modules/luci-base/htdocs/luci-static/resources/cbi.js

index f9b601995c541f940ef43bf0b5a383a64280190a..3150e393fe8ca41595d3abb7ee8e57da3258536b 100644 (file)
@@ -94,8 +94,24 @@ function sfh(s) {
        return (0x100000000 + hash).toString(16).substr(1);
 }
 
-function _(s) {
-       return (window.TR && TR[sfh(String(s).trim().replace(/[ \t\n]+/g, ' '))]) || s;
+var plural_function = null;
+
+function trimws(s) {
+       return String(s).trim().replace(/[ \t\n]+/g, ' ');
+}
+
+function _(s, c) {
+       return (window.TR && TR[sfh(trimws(s))]) || s;
+}
+
+function N_(n, s, p, c) {
+       if (plural_function == null && window.TR)
+               plural_function = new Function('n', (TR['00000000'] || 'plural=(n != 1);') + 'return +plural');
+
+       var i = plural_function ? plural_function(n) : (n != 1),
+           k = (c != null ? trimws(c) + '\u0001' : '') + trimws(s) + '\u0002' + i.toString();
+
+       return (window.TR && TR[sfh(k)]) || (i ? p : s);
 }