Expose Polyglot.t() to `onMissingKey` to allow substitutions
gomesalexandre opened this issue · 2 comments
Currently, react-polyglot allows to use onMissingKey
from node-polyglot, see:
https://github.com/airbnb/polyglot.js/blob/6c10c6f3eacec8f23deb4635dfafca862167161e/index.js#L406
Unfortunately, since there is no exposed translation function that allows substitutions, the passed onMissingKey
function will have to implement its own substitution logic, effectively using node-polyglot
exports. Here is an example of such implementation:
const onMissingKey = (key: string, substitutions?: InterpolationOptions) => {
const translation = get(translations['en'], key)
return transformPhrase(translation, substitutions)
}
It would be great to make the translation function available so that implementors of onMissingKey
can benefit from the already available translation context.
Proposed solutions:
- Augment
onMissingKey
with an additionalt
parameter (probably not the best for arity reasons, aslocale
will have to be passed) - Export the
transformPhrase
orPolyglot.t
translation function - this way, there would be no back and forth switching between the two libraries needed to implement this.
Note that if we go with this, InterpolationOptions
will need to be exported, as onMissingKey
is typed like so, and implementations using TS need to type it if they enabled noImplicitAny
in their tsconfig:
(property) PolyglotOptions.onMissingKey?: ((key: string, options?: InterpolationOptions | undefined, locale?: string | undefined) => string) | undefined
Happy to implement it if that's something of interest! I could also document it/add examples as documentation is missing for it on both node-polyglot
and on this library.
Hey @gomesalexandre, thanks for putting all the work into the details.
On reading, I don't see any problems with the idea itself. I'm just wondering about the use-cases where this would be useful. It's hard for me to imagine any as I've not needed it myself. Can you provide one or a few?
Hey @gomesalexandre, thanks for putting all the work into the details.
On reading, I don't see any problems with the idea itself. I'm just wondering about the use-cases where this would be useful. It's hard for me to imagine any as I've not needed it myself. Can you provide one or a few?
hey @nayaabkhan - please see this PR as an example shapeshift/web#1858