From: Jo-Philipp Wich Date: Wed, 22 Jan 2020 20:56:28 +0000 (+0100) Subject: luci-base: cbi.js: support plural translations and disambiguation contexts X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=c952ef38d296ee6f8991c618e041db2f5d4dfeba;p=project%2Fluci.git luci-base: cbi.js: support plural translations and disambiguation contexts - 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 (cherry picked from commit 894752610d80a2fa1cdb6a845526728eeb0bc984) --- diff --git a/modules/luci-base/htdocs/luci-static/resources/cbi.js b/modules/luci-base/htdocs/luci-static/resources/cbi.js index f9b601995c..3150e393fe 100644 --- a/modules/luci-base/htdocs/luci-static/resources/cbi.js +++ b/modules/luci-base/htdocs/luci-static/resources/cbi.js @@ -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); }