diff --git a/imports/i18n/blaze.js b/imports/i18n/blaze.js index fd8e393ce..e0ac8f48b 100644 --- a/imports/i18n/blaze.js +++ b/imports/i18n/blaze.js @@ -4,5 +4,20 @@ import { TAPi18n } from './tap'; Blaze.registerHelper('_', (...args) => { const { hash } = args.pop(); const [key] = args.splice(0, 1); - return TAPi18n.__(key, { ...hash, sprintf: args }); + + // If TAPi18n is not initialized yet, return the key as fallback + if (!TAPi18n.i18n) { + return key; + } + + const translation = TAPi18n.__(key, { ...hash, sprintf: args }); + + // If translation is the same as key (meaning not found), return a formatted version + if (translation === key) { + return key.split('-').map(word => + word.charAt(0).toUpperCase() + word.slice(1) + ).join(' '); + } + + return translation; }); diff --git a/imports/i18n/index.js b/imports/i18n/index.js index cc42e80aa..c8e39e358 100644 --- a/imports/i18n/index.js +++ b/imports/i18n/index.js @@ -8,7 +8,8 @@ if (Meteor.isClient) { export { TAPi18n }; -(async () => { +// Initialize translations immediately and synchronously +Meteor.startup(async () => { await TAPi18n.init(); -})(); +}); diff --git a/server/publications/activities.js b/server/publications/activities.js index fe1456e3a..ea88df22b 100644 --- a/server/publications/activities.js +++ b/server/publications/activities.js @@ -12,10 +12,15 @@ Meteor.publish('activities', (kind, id, limit, showActivities) => { return ['board', 'card'].indexOf(x) !== -1; }), ); - check(id, String); + check(id, Match.Maybe(String)); check(limit, Number); check(showActivities, Boolean); + // Return empty cursor if id is null or undefined + if (!id) { + return this.ready(); + } + // Get linkedBoard let linkedElmtId = [id]; if (kind == 'board') {