diff --git a/superset-frontend/packages/superset-ui-core/src/translation/Translator.ts b/superset-frontend/packages/superset-ui-core/src/translation/Translator.ts index d4a6982c8d3..bf27ec7ce4f 100644 --- a/superset-frontend/packages/superset-ui-core/src/translation/Translator.ts +++ b/superset-frontend/packages/superset-ui-core/src/translation/Translator.ts @@ -86,20 +86,33 @@ export default class Translator { } translate(input: string, ...args: unknown[]): string { - return this.i18n.translate(input).fetch(...args); + try { + return this.i18n.translate(input).fetch(...args); + } catch (err) { + logging.warn(`Translation failed for key "${input}" with args:`, args); + return input; + } } translateWithNumber(key: string, ...args: unknown[]): string { - const [plural, num, ...rest] = args; - if (typeof plural === 'number') { + try { + const [plural, num, ...rest] = args; + if (typeof plural === 'number') { + return this.i18n + .translate(key) + .ifPlural(plural, key) + .fetch(plural, num, ...rest); + } return this.i18n .translate(key) - .ifPlural(plural, key) - .fetch(plural, num, ...args); + .ifPlural(num as number, plural as string) + .fetch(...rest); + } catch (err) { + logging.warn( + `Plural translation failed for key "${key}" with args:`, + args, + ); } - return this.i18n - .translate(key) - .ifPlural(num as number, plural as string) - .fetch(...rest); + return key; } } diff --git a/superset-frontend/scripts/po2json.sh b/superset-frontend/scripts/po2json.sh index 445da0e44c0..7ea151fa368 100755 --- a/superset-frontend/scripts/po2json.sh +++ b/superset-frontend/scripts/po2json.sh @@ -22,6 +22,8 @@ set -e +export NODE_NO_WARNINGS=1 + for file in $( find ../superset/translations/** -name '*.po' ); do extension=${file##*.} @@ -29,7 +31,7 @@ do if [ $extension == "po" ] then echo "po2json --domain superset --format jed1.x $file $filename.json" - po2json --domain superset --format jed1.x $file $filename.json + po2json --domain superset --format jed1.x --fuzzy $file $filename.json prettier --write $filename.json fi done