(core) Making makeT helper use the unprefixed key as a fallback

Summary:
By default the fallback contains the prefix, which doesn't
work well with a key based translations. Now makeT helper will fallback
to the passed key (without a prefix).

Test Plan: Added new client test

Reviewers: paulfitz

Reviewed By: paulfitz

Subscribers: paulfitz

Differential Revision: https://phab.getgrist.com/D3758
This commit is contained in:
Jarosław Sadziński 2023-01-05 12:10:10 +01:00
parent 92276cdbda
commit 30600c5dc2
3 changed files with 14 additions and 2 deletions

View File

@ -161,9 +161,16 @@ export function makeT(scope: string, instance?: typeof i18next) {
scopedInstance = (instance ?? i18next).cloneInstance({
keySeparator: false,
nsSeparator: false,
saveMissing: true,
missingKeyHandler: (lng, ns, _key) => console.warn(`Missing translation for key: ${_key}`)
});
// Create a version of `t` function that will use the provided prefix as default.
scopedResolver = scopedInstance.getFixedT(null, null, scope);
const fixedResolver = scopedInstance.getFixedT(null, null, scope);
// Override the resolver with a custom one, that will use the argument as a default.
// This will remove all the overloads from the function, but we don't need them.
scopedResolver = (_key: string, _args?: any) => fixedResolver(_key, {defaultValue: _key, ..._args});
}
// If the key has interpolation or we did pass some arguments, make sure that
// the key exists.

View File

@ -9,5 +9,5 @@ export default function getCurrentTime(): moment.Moment {
if (typeof window === 'undefined' || !window) { return getDefault(); }
const searchParams = new URLSearchParams(window.location.search);
return searchParams.has('currentTime') ? moment(searchParams.get('currentTime')) : getDefault();
return searchParams.has('currentTime') ? moment(searchParams.get('currentTime')!) : getDefault();
}

View File

@ -127,4 +127,9 @@ describe('localization', function() {
const scoped = makeT('Parent', instance);
assert.equal(scoped('Not.Valid:Characters'), 'Works');
});
it('makeT helper fallbacks to an argument', function() {
const scoped = makeT('Parent', instance);
assert.equal(scoped("I'm not there"), "I'm not there");
});
});