Most problems were due to strings being duplicated and overwriting each other. Updated the build-locales script to keep track of duplicates.
Project Curated by on the splash page was just missing the formatMessage call.
This commit is contained in:
chrisgarrity 2016-10-11 12:32:25 -04:00
parent 9f93340539
commit 1339683a73
4 changed files with 32 additions and 12 deletions

View file

@ -86,7 +86,7 @@ for (var v in routes) {
if (typeof routes[v].redirect !== 'undefined') { if (typeof routes[v].redirect !== 'undefined') {
continue; continue;
} }
views.push(routes[v].name); views.push(routes[v].name);
try { try {
var subdir = routes[v].view.split('/'); var subdir = routes[v].view.split('/');
@ -97,7 +97,8 @@ for (var v in routes) {
en: ids en: ids
}; };
idsWithICU = merge(idsWithICU, localeCompare.idToICUMap(routes[v].name, ids)); idsWithICU = merge(idsWithICU, localeCompare.idToICUMap(routes[v].name, ids));
icuWithIds = merge(icuWithIds, localeCompare.icuToIdMap(routes[v].name, ids)); // Note: if lodash.merge gets updated to 4.0 or higher this needs to be mergeWith instead
icuWithIds = merge(icuWithIds, localeCompare.icuToIdMap(routes[v].name, ids), localeCompare.customMerge);
} catch (err) { } catch (err) {
if (err.code !== 'MODULE_NOT_FOUND') { if (err.code !== 'MODULE_NOT_FOUND') {
throw err; throw err;

View file

@ -6,6 +6,7 @@ var crypto = require('crypto');
var fs = require('fs'); var fs = require('fs');
var path = require('path'); var path = require('path');
var po2icu = require('po2icu'); var po2icu = require('po2icu');
var isArray = require('lodash.isArray');
var Helpers = {}; var Helpers = {};
@ -20,6 +21,21 @@ Helpers.getMD5 = function (string) {
return crypto.createHash('md5').update(cleanedString, 'utf8').digest('hex'); return crypto.createHash('md5').update(cleanedString, 'utf8').digest('hex');
}; };
/**
* Customizer for icuWithIds merge.
* If icu key already has an id value, concatenate additional ids instead
* of replacing.
*
* @param {array} objVal current value
* @param {string} srcVal new value
* @return {array} objVal with srcVal concatenated
*/
Helpers.customMerge = function (objVal, srcVal) {
if (isArray(objVal)) {
return objVal.concat(srcVal);
}
};
/* /*
Existing translations should be in the key value format specified by react-intl (i.e. 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 formatted message id, with icu string as the value). New Translations should be in the
@ -33,7 +49,9 @@ Helpers.mergeNewTranslations = function (existingTranslations, newTranslations,
for (var id in newTranslations) { for (var id in newTranslations) {
var md5 = Helpers.getMD5(id); var md5 = Helpers.getMD5(id);
if (md5Map.hasOwnProperty(md5) && newTranslations[id].length > 0) { if (md5Map.hasOwnProperty(md5) && newTranslations[id].length > 0) {
existingTranslations[md5Map[md5]] = newTranslations[id]; md5Map[md5].forEach(function (msgId) {
existingTranslations[msgId] = newTranslations[id];
});
} }
} }
@ -103,7 +121,7 @@ Helpers.getTranslationsForLanguage = function (lang, idsWithICU, md5WithIds, sep
throw err; throw err;
} }
} }
var translationsByView = {}; var translationsByView = {};
for (var id in translations) { for (var id in translations) {
var ids = id.split(separator); // [viewName, stringId] var ids = id.split(separator); // [viewName, stringId]
@ -132,7 +150,7 @@ Helpers.writeTranslationsToJS = function (outputDir, viewName, translationObject
Helpers.idToICUMap = function (viewName, ids, separator) { Helpers.idToICUMap = function (viewName, ids, separator) {
var idsToICU = {}; var idsToICU = {};
separator = separator || ':'; separator = separator || ':';
for (var id in ids) { for (var id in ids) {
idsToICU[viewName + separator + id] = ids[id]; idsToICU[viewName + separator + id] = ids[id];
} }
@ -146,7 +164,7 @@ Helpers.icuToIdMap = function (viewName, ids, separator) {
separator = separator || ':'; separator = separator || ':';
for (var id in ids) { for (var id in ids) {
icuToIds[ids[id]] = viewName + separator + id; icuToIds[ids[id]] = [viewName + separator + id];
} }
return icuToIds; return icuToIds;
}; };

View file

@ -59,6 +59,7 @@
"keymirror": "0.1.1", "keymirror": "0.1.1",
"lodash.clone": "3.0.3", "lodash.clone": "3.0.3",
"lodash.defaultsdeep": "3.10.0", "lodash.defaultsdeep": "3.10.0",
"lodash.isarray": "^3.0.4",
"lodash.merge": "3.3.2", "lodash.merge": "3.3.2",
"lodash.omit": "3.1.0", "lodash.omit": "3.1.0",
"lodash.range": "3.0.1", "lodash.range": "3.0.1",

View file

@ -215,11 +215,11 @@ var Splash = injectIntl(React.createClass({
<Box <Box
key="curator_top_projects" key="curator_top_projects"
title={ title={
'Projects Curated by ' + formatMessage({id: 'splash.projectsCuratedBy', defaultMessage: 'Projects Curated by '}) +
this.state.featuredGlobal.curator_top_projects[0].curator_name} this.state.featuredGlobal.curator_top_projects[0].curator_name}
moreTitle={formatMessage({id: 'general.learnMore', defaultMessage: 'Learn More'})} moreTitle={formatMessage({id: 'general.learnMore', defaultMessage: 'Learn More'})}
moreHref="/studios/386359/"> moreHref="/studios/386359/">
<Carousel items={this.state.featuredGlobal.curator_top_projects} /> <Carousel items={this.state.featuredGlobal.curator_top_projects} />
</Box> </Box>
); );
@ -236,7 +236,7 @@ var Splash = injectIntl(React.createClass({
+ ' - ' + this.state.featuredGlobal.scratch_design_studio[0].gallery_title} + ' - ' + this.state.featuredGlobal.scratch_design_studio[0].gallery_title}
moreTitle={formatMessage({id: 'splash.visitTheStudio', defaultMessage: 'Visit the studio'})} moreTitle={formatMessage({id: 'splash.visitTheStudio', defaultMessage: 'Visit the studio'})}
moreHref={'/studios/' + this.state.featuredGlobal.scratch_design_studio[0].gallery_id + '/'}> moreHref={'/studios/' + this.state.featuredGlobal.scratch_design_studio[0].gallery_id + '/'}>
<Carousel items={this.state.featuredGlobal.scratch_design_studio} /> <Carousel items={this.state.featuredGlobal.scratch_design_studio} />
</Box> </Box>
); );
@ -260,7 +260,7 @@ var Splash = injectIntl(React.createClass({
rows.push( rows.push(
<Box title={formatMessage({id: 'splash.projectsByScratchersFollowing'})} <Box title={formatMessage({id: 'splash.projectsByScratchersFollowing'})}
key="custom_projects_by_following"> key="custom_projects_by_following">
<Carousel items={this.state.featuredCustom.custom_projects_by_following} /> <Carousel items={this.state.featuredCustom.custom_projects_by_following} />
</Box> </Box>
); );
@ -271,7 +271,7 @@ var Splash = injectIntl(React.createClass({
rows.push( rows.push(
<Box title={formatMessage({id: 'splash.projectsLovedByScratchersFollowing'})} <Box title={formatMessage({id: 'splash.projectsLovedByScratchersFollowing'})}
key="custom_projects_loved_by_following"> key="custom_projects_loved_by_following">
<Carousel items={this.state.featuredCustom.custom_projects_loved_by_following} /> <Carousel items={this.state.featuredCustom.custom_projects_loved_by_following} />
</Box> </Box>
); );
@ -283,7 +283,7 @@ var Splash = injectIntl(React.createClass({
rows.push( rows.push(
<Box title={formatMessage({id:'splash.projectsInStudiosFollowing'})} <Box title={formatMessage({id:'splash.projectsInStudiosFollowing'})}
key="custom_projects_in_studios_following"> key="custom_projects_in_studios_following">
<Carousel items={this.state.featuredCustom.custom_projects_in_studios_following} /> <Carousel items={this.state.featuredCustom.custom_projects_in_studios_following} />
</Box> </Box>
); );