From 695c54c17b3299cd6170c45878b41cb46a577cd2 Mon Sep 17 00:00:00 2001 From: Pete Bacon Darwin Date: Wed, 17 Apr 2013 22:13:49 +0100 Subject: fix(i18n): escape all chars above \u007f in locale files Modify the script that writes the locales so all characters above \u007f are escaped Includes the updated locale files after running the closureI18nExtractor. Closes #2417 --- i18n/src/closureI18nExtractor.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'i18n/src/closureI18nExtractor.js') diff --git a/i18n/src/closureI18nExtractor.js b/i18n/src/closureI18nExtractor.js index a26f89b7..13d42143 100644 --- a/i18n/src/closureI18nExtractor.js +++ b/i18n/src/closureI18nExtractor.js @@ -9,6 +9,7 @@ exports.pluralExtractor = pluralExtractor; exports.outputLocale = outputLocale; exports.correctedLocaleId = correctedLocaleId; exports.findLocaleId = findLocaleId; +exports.serializeContent = serializeContent; var goog = { provide: function() {}, require: function() {}, @@ -125,6 +126,12 @@ function canonicalizeForJsonStringify(unused_key, object) { return result; } +function serializeContent(localeObj) { + return JSON.stringify(localeObj, canonicalizeForJsonStringify, ' ') + .replace(new RegExp('[\\u007f-\\uffff]', 'g'), function(c) { return '\\u'+('0000'+c.charCodeAt(0).toString(16)).slice(-4); }) + .replace(/"@@|@@"/g, ''); +} + function outputLocale(localeInfo, localeID) { var fallBackID = localeID.match(/[A-Za-z]+/)[0], localeObj = localeInfo[localeID], @@ -167,9 +174,7 @@ function outputLocale(localeInfo, localeID) { id: localeObj.id }; - var content = JSON.stringify(localeInfo[localeID], canonicalizeForJsonStringify, ' ') - .replace(/\ยค/g, '\\u00A4') - .replace(/"@@|@@"/g, ''); + var content = serializeContent(localeInfo[localeID]); return prefix + content + suffix; } -- cgit v1.2.3