i18next-pseudoloc
Version:
Pseudo loc test plugin for i18next
267 lines (260 loc) • 9.2 kB
JavaScript
/*!
* i18next-pseudoloc v1.0.1
* MIT Licensed
*/
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["psuedoloc"] = factory();
else
root["psuedoloc"] = factory();
})(window, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(1);
/***/ }),
/* 1 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
function _extends() { _extends = Object.assign ? Object.assign.bind() : 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; }; return _extends.apply(this, arguments); }
var CONST = __webpack_require__(2);
var PseudoLoc = /*#__PURE__*/function () {
function PseudoLoc(_ref) {
var _ref$lengther = _ref.lengther,
lengther = _ref$lengther === void 0 ? 2 : _ref$lengther,
_ref$enabled = _ref.enabled,
enabled = _ref$enabled === void 0 ? true : _ref$enabled,
_ref$enableCJK = _ref.enableCJK,
enableCJK = _ref$enableCJK === void 0 ? true : _ref$enableCJK,
_ref$sourceLocale = _ref.sourceLocale,
sourceLocale = _ref$sourceLocale === void 0 ? 'en' : _ref$sourceLocale,
_ref$repeatedLetters = _ref.repeatedLetters,
repeatedLetters = _ref$repeatedLetters === void 0 ? CONST.vowelChars : _ref$repeatedLetters,
_ref$pseudoCharObject = _ref.pseudoCharObject,
pseudoCharObject = _ref$pseudoCharObject === void 0 ? CONST.pseudoChars : _ref$pseudoCharObject;
this.name = 'pseudoloc';
this.type = 'postProcessor';
this.options = {
enabled: enabled,
lengther: lengther,
enableCJK: enableCJK,
sourceLocale: sourceLocale,
repeatedLetters: repeatedLetters,
characters: pseudoCharObject
};
}
var _proto = PseudoLoc.prototype;
_proto.setOptions = function setOptions(options) {
this.options = _extends({}, this.options, options);
};
_proto.process = function process(value, key, options, translator) {
var _this = this;
if (translator.language && this.options.sourceLocale !== translator.language || !this.options.enabled) {
return value;
}
var bracketCount = 0;
var processedValue = value.split('').map(function (letter) {
if (letter === '}') {
bracketCount = 0;
return letter;
}
if (letter === '{') {
bracketCount++;
return letter;
}
if (bracketCount === 2) return letter;
if (_this.options.repeatedLetters.indexOf(letter) !== -1) {
return _this.options.characters[letter].repeat(_this.options.lengther);
} else {
if (letter === '.') {
return '。'; // japanese period(full stop)
} else if (letter === '?') {
return '¿'; // spanish inverted mark of interrogation
} else if (letter === '“') {
return '„'; // german opening quotation
} else {
return _this.options.characters[letter] || letter;
}
}
}).join('');
return CONST.stringMarker({
string: processedValue,
enableCJK: this.options.enableCJK
});
};
return PseudoLoc;
}();
/* harmony default export */ __webpack_exports__["default"] = (PseudoLoc);
/***/ }),
/* 2 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pseudoChars", function() { return pseudoChars; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "vowelChars", function() { return vowelChars; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "stringMarker", function() { return stringMarker; });
var pseudoChars = {
a: 'ā',
b: 'ḅ',
c: 'ĉ',
d: 'ď',
e: 'ė',
f: 'ϝ',
g: 'ḡ',
h: 'ĥ',
i: 'ĩ',
j: 'ĵ',
k: 'ķ',
l: 'ḽ',
m: 'ṃ',
n: 'ň',
o: 'ṓ',
p: 'ṗ',
q: 'ʠ',
r: 'ŗ',
s: 'ş',
t: 'ŧ',
u: 'ṵ',
v: 'ṽ',
w: 'ẁ',
x: 'ẋ',
y: 'ẏ',
z: 'ź',
A: 'Ą',
B: 'β',
C: 'Ḉ',
D: 'Đ',
E: 'Ḛ',
F: 'Ḟ',
G: 'Ģ',
H: 'Ħ',
I: 'Ḭ',
J: 'Ĵ',
K: 'Ķ',
L: 'Ŀ',
M: 'Ṁ',
N: 'Ň',
O: 'Ő',
P: 'Ṕ',
Q: 'Ǫ',
R: 'Ṛ',
S: 'Ŝ',
T: 'Ŧ',
U: 'Ů',
V: 'Ṿ',
W: 'Ŵ',
X: 'Ẋ',
Y: 'Ŷ',
Z: 'Ž'
};
var vowelChars = ['a', 'e', 'i', 'o', 'u', 'y', 'A', 'E', 'I', 'O', 'U', 'Y'];
var cjkCharacters = ['꿇', '꿈', '꿘', '끓', '떫', '맬', '숄', '쌜', '왱', '좰', '헬', '긇', '쭌', 'あ', 'お', 'き', 'ぬ', 'ば', 'ぽ', 'ゑ', 'ザ', 'ネ', 'ヲ', 'ヴ', 'ミ', 'プ', 'ฬ', 'ษ', 'ล', 'ฟ', 'ป', 'ต', 'ฒ', 'ณ', 'ญ', 'ฆ', 'ข'];
var getRandomInt = function getRandomInt(max) {
return Math.floor(Math.random() * max);
};
var stringMarker = function stringMarker(_ref) {
var string = _ref.string,
enableCJK = _ref.enableCJK;
var cjkLength = cjkCharacters.length;
var start = cjkCharacters[getRandomInt(cjkLength)];
var end = cjkCharacters[getRandomInt(cjkLength)];
if (enableCJK) {
return "<" + start + "<[" + string + "]>" + end + ">";
} else {
return "<[" + string + "]>";
}
};
/***/ })
/******/ ])["default"];
});