mirror of
https://github.com/drakkan/sftpgo.git
synced 2025-12-08 07:10:56 +03:00
WebClient WIP: add support for localizations
Signed-off-by: Nicola Murino <nicola.murino@gmail.com>
This commit is contained in:
128
static/vendor/i18next/jquery-i18next.js
vendored
Normal file
128
static/vendor/i18next/jquery-i18next.js
vendored
Normal file
@@ -0,0 +1,128 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global.jqueryI18next = factory());
|
||||
}(this, (function () { 'use strict';
|
||||
|
||||
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
||||
|
||||
var defaults = {
|
||||
tName: 't',
|
||||
i18nName: 'i18n',
|
||||
handleName: 'localize',
|
||||
selectorAttr: 'data-i18n',
|
||||
targetAttr: 'i18n-target',
|
||||
optionsAttr: 'i18n-options',
|
||||
useOptionsAttr: false,
|
||||
parseDefaultValueFromContent: true
|
||||
};
|
||||
|
||||
function init(i18next, $) {
|
||||
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
||||
|
||||
|
||||
options = _extends({}, defaults, options);
|
||||
|
||||
function parse(ele, key, opts) {
|
||||
if (key.length === 0) return;
|
||||
|
||||
var attr = 'text';
|
||||
|
||||
if (key.indexOf('[') === 0) {
|
||||
var parts = key.split(']');
|
||||
key = parts[1];
|
||||
attr = parts[0].substr(1, parts[0].length - 1);
|
||||
}
|
||||
|
||||
if (key.indexOf(';') === key.length - 1) {
|
||||
key = key.substr(0, key.length - 2);
|
||||
}
|
||||
|
||||
function extendDefault(o, val) {
|
||||
if (!options.parseDefaultValueFromContent) return o;
|
||||
return _extends({}, o, { defaultValue: val });
|
||||
}
|
||||
|
||||
if (attr === 'html') {
|
||||
ele.html(i18next.t(key, extendDefault(opts, ele.html())));
|
||||
} else if (attr === 'text') {
|
||||
ele.text(i18next.t(key, extendDefault(opts, ele.text())));
|
||||
} else if (attr === 'prepend') {
|
||||
ele.prepend(i18next.t(key, extendDefault(opts, ele.html())));
|
||||
} else if (attr === 'append') {
|
||||
ele.append(i18next.t(key, extendDefault(opts, ele.html())));
|
||||
} else if (attr.indexOf('data-') === 0) {
|
||||
var dataAttr = attr.substr('data-'.length);
|
||||
var translated = i18next.t(key, extendDefault(opts, ele.data(dataAttr)));
|
||||
|
||||
// we change into the data cache
|
||||
ele.data(dataAttr, translated);
|
||||
// we change into the dom
|
||||
ele.attr(attr, translated);
|
||||
} else {
|
||||
ele.attr(attr, i18next.t(key, extendDefault(opts, ele.attr(attr))));
|
||||
}
|
||||
}
|
||||
|
||||
function localize(ele, opts) {
|
||||
var key = ele.attr(options.selectorAttr);
|
||||
if (!key && typeof key !== 'undefined' && key !== false) key = ele.text() || ele.val();
|
||||
if (!key) return;
|
||||
|
||||
var target = ele,
|
||||
targetSelector = ele.data(options.targetAttr);
|
||||
|
||||
if (targetSelector) target = ele.find(targetSelector) || ele;
|
||||
|
||||
if (!opts && options.useOptionsAttr === true) opts = ele.data(options.optionsAttr);
|
||||
|
||||
opts = opts || {};
|
||||
|
||||
if (key.indexOf(';') >= 0) {
|
||||
var keys = key.split(';');
|
||||
|
||||
$.each(keys, function (m, k) {
|
||||
// .trim(): Trim the comma-separated parameters on the data-i18n attribute.
|
||||
if (k !== '') parse(target, k.trim(), opts);
|
||||
});
|
||||
} else {
|
||||
parse(target, key, opts);
|
||||
}
|
||||
|
||||
if (options.useOptionsAttr === true) {
|
||||
var clone = {};
|
||||
clone = _extends({ clone: clone }, opts);
|
||||
|
||||
delete clone.lng;
|
||||
ele.data(options.optionsAttr, clone);
|
||||
}
|
||||
}
|
||||
|
||||
function handle(opts) {
|
||||
return this.each(function () {
|
||||
// localize element itself
|
||||
localize($(this), opts);
|
||||
|
||||
// localize children
|
||||
var elements = $(this).find('[' + options.selectorAttr + ']');
|
||||
elements.each(function () {
|
||||
localize($(this), opts);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
// $.t $.i18n shortcut
|
||||
$[options.tName] = i18next.t.bind(i18next);
|
||||
$[options.i18nName] = i18next;
|
||||
|
||||
// selector function $(mySelector).localize(opts);
|
||||
$.fn[options.handleName] = handle;
|
||||
}
|
||||
|
||||
var index = {
|
||||
init: init
|
||||
};
|
||||
|
||||
return index;
|
||||
|
||||
})));
|
||||
Reference in New Issue
Block a user