i18next-scanner icon indicating copy to clipboard operation
i18next-scanner copied to clipboard

Reading `context` dynamically per `tFunction`, `TransComponent`

Open jlee0425 opened this issue 3 years ago • 1 comments

🚀 Feature Proposal

Improve parser.js to read ConditionalExpression to parse context.

Motivation

My project heavily uses i18n and sometimes context is necessary. Problem is that each translation will have different values for the context and only a few of the keys actually use a context, and the current parser parses tOptions only when attr.value.type is one of: Literal, Identifier or ObjectExpression.

Example

What I would like to do is:

const { t } = useTranslation();

// component
<Trans 
  i18nKey="some.key"
  defaults="translated string"
  tOptions={{context: isTrue ? 'contextValue' : 'somethingelse'}}
/>

// better yet,
<Trans 
  i18nKey="some.key"
  defaults="translated string"
  context={isTrue ? 'contextValue' : 'somethingelse'}
/>

t('some.key2', 'translated string2', {context: isTrue ? 'withContext' : undefined});

// scanned
{
  "some.key": "translated string",
  "some.key_contextValue: "translated string",
  "some.key_somethingelse: "translated string",
  "some.key2": "translated string2",
  "some.key2_withContext": "translated string2",
}

Then, I would modify the translation with context accordingly.

jlee0425 avatar Jan 26 '23 04:01 jlee0425

If you like you could try if it works with: https://github.com/i18next/i18next-cli

adrai avatar Sep 25 '25 13:09 adrai