mirror of
https://github.com/scratchfoundation/scratch-www.git
synced 2024-11-27 09:35:56 -05:00
65 lines
2.3 KiB
JavaScript
65 lines
2.3 KiB
JavaScript
// -----------------------------------------------------------------------------
|
|
// Helper Methods for build-locales node script.
|
|
// -----------------------------------------------------------------------------
|
|
|
|
var crypto = require('crypto');
|
|
|
|
var Helpers = {};
|
|
|
|
/**
|
|
* Get the md5 has of a string with whitespace removed.
|
|
*
|
|
* @param {string} string a string
|
|
* @return {string} an md5 hash of the string in hex.
|
|
*/
|
|
Helpers.getMD5 = function (string) {
|
|
var cleanedString = string.replace(/\s+/g, '');
|
|
return crypto.createHash('md5').update(cleanedString, 'utf8').digest('hex');
|
|
};
|
|
|
|
/*
|
|
Existing translations should be in the key value format specified by react-intl (i.e.
|
|
formatted message id, with icu string as the value). New Translations should be in the
|
|
format returned by po2icu (i.e. a source language icu string for key, and a localized
|
|
language icu string for value).
|
|
|
|
ICU Map is an object in the reverse react-intl formatting (icu string as key), which will
|
|
help determine if the translation belongs in www currently.
|
|
*/
|
|
Helpers.mergeNewTranslations = function (existingTranslations, newTranslations, icuTemplate, md5Map) {
|
|
for (var id in newTranslations) {
|
|
var md5 = Helpers.getMD5(id);
|
|
if (md5Map.hasOwnProperty(md5) && newTranslations[id].length > 0) {
|
|
existingTranslations[md5Map[md5]] = newTranslations[id];
|
|
}
|
|
}
|
|
|
|
//Fill in defaults
|
|
for (var id in icuTemplate) {
|
|
if (!existingTranslations.hasOwnProperty(id)) existingTranslations[id] = icuTemplate[id];
|
|
}
|
|
return existingTranslations;
|
|
};
|
|
|
|
/**
|
|
* Converts a map of icu strings with react-intl id values into a map
|
|
* with md5 hashes of the icu strings as keys and react-intl id values.
|
|
* This is done so as to eliminate potential po conversion misses that
|
|
* could be caused by different white space formatting between po and icu.
|
|
*
|
|
* The md5 is generated after all white space is removed from the string.
|
|
*
|
|
* @param {object} idICUMap map where key=icuString, value=react-intl id
|
|
*
|
|
* @return {object}
|
|
*/
|
|
Helpers.getMD5Map = function (ICUIdMap) {
|
|
var md5Map = {};
|
|
for (var icu in ICUIdMap) {
|
|
var md5 = Helpers.getMD5(icu);
|
|
md5Map[md5] = ICUIdMap[icu];
|
|
}
|
|
return md5Map;
|
|
};
|
|
|
|
module.exports = Helpers;
|