123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- (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;
- })));
|