i18next-scanner
Advanced tools
Comparing version 1.4.0 to 1.4.1
@@ -279,8 +279,29 @@ 'use strict'; | ||
var _loop = function _loop() { | ||
var options = {}; | ||
var full = r[0]; | ||
var key = _lodash2.default.trim(r[1], '\'"'); | ||
var options = {}; | ||
var key = _lodash2.default.trim(r[1]); // Remove leading and trailing whitespace | ||
var firstChar = key[0]; | ||
if (_lodash2.default.includes(['\'', '"'], firstChar)) { | ||
// Remove first and last character | ||
key = key.slice(1, -1); | ||
// Replace two consecutive backslashes with a backslash | ||
key = key.replace(/\\\\/g, '\\'); | ||
} | ||
// Replace \' with ' | ||
// Input: i18n.t('name=\'{{name}}\'') | ||
// Output: { "name='{{name}}'": "name='{{name}}'" } | ||
if (firstChar === '\'') { | ||
key = key.replace(/\\\'/g, '\''); | ||
} | ||
// Replace \" with " | ||
// Input: i18n.t("name=\"{{name}}\"") | ||
// Output: { "name=\"{{name}}\"": "name=\"{{name}}\"" } | ||
if (firstChar === '"') { | ||
key = key.replace(/\\\"/g, '"'); | ||
} | ||
var endsWithComma = full[full.length - 1] === ','; | ||
if (endsWithComma) { | ||
@@ -287,0 +308,0 @@ (function () { |
{ | ||
"name": "i18next-scanner", | ||
"version": "1.4.0", | ||
"version": "1.4.1", | ||
"description": "Scan your code, extract translation keys/values, and merge them into i18n resource files.", | ||
@@ -5,0 +5,0 @@ "homepage": "https://github.com/i18next/i18next-scanner", |
@@ -237,8 +237,29 @@ /* eslint no-console: 0 */ | ||
while ((r = re.exec(content))) { | ||
const options = {}; | ||
const full = r[0]; | ||
const key = _.trim(r[1], '\'"'); | ||
const options = {}; | ||
let key = _.trim(r[1]); // Remove leading and trailing whitespace | ||
const firstChar = key[0]; | ||
if (_.includes(['\'', '"'], firstChar)) { | ||
// Remove first and last character | ||
key = key.slice(1, -1); | ||
// Replace two consecutive backslashes with a backslash | ||
key = key.replace(/\\\\/g, '\\'); | ||
} | ||
// Replace \' with ' | ||
// Input: i18n.t('name=\'{{name}}\'') | ||
// Output: { "name='{{name}}'": "name='{{name}}'" } | ||
if (firstChar === '\'') { | ||
key = key.replace(/\\\'/g, '\''); | ||
} | ||
// Replace \" with " | ||
// Input: i18n.t("name=\"{{name}}\"") | ||
// Output: { "name=\"{{name}}\"": "name=\"{{name}}\"" } | ||
if (firstChar === '"') { | ||
key = key.replace(/\\\"/g, '"'); | ||
} | ||
const endsWithComma = (full[full.length - 1] === ','); | ||
if (endsWithComma) { | ||
@@ -245,0 +266,0 @@ const code = matchBalancedParentheses(content.substr(re.lastIndex)); |
@@ -151,2 +151,32 @@ import fs from 'fs'; | ||
test('Replace double backslash with single backslash', (t) => { | ||
const parser = new Parser({ | ||
defaultValue: function(lng, ns, key) { | ||
if (lng === 'en') { | ||
return key; | ||
} | ||
return '__NOT_TRANSLATED__'; | ||
}, | ||
keySeparator: false, | ||
nsSeparator: false | ||
}); | ||
const content = fs.readFileSync(path.resolve(__dirname, 'fixtures/escape.js'), 'utf8'); | ||
const wanted = { | ||
"en": { | ||
"translation": { | ||
"Primary 'email' activation": "Primary 'email' activation", | ||
"Primary \"email\" activation": "Primary \"email\" activation", | ||
"name='email' value='{{email}}'": "name='email' value='{{email}}'", | ||
"name=\"email\" value=\"{{email}}\"": "name=\"email\" value=\"{{email}}\"", | ||
"name=\"email\" value='{{email}}'": "name=\"email\" value='{{email}}'", | ||
"name='email' value=\"{{email}}\"": "name='email' value=\"{{email}}\"", | ||
} | ||
} | ||
}; | ||
parser.parseFuncFromString(content); | ||
t.same(parser.get(), wanted); | ||
t.end(); | ||
}); | ||
test('Disable nsSeparator', (t) => { | ||
@@ -153,0 +183,0 @@ const parser = new Parser({ |
112601
35
2179