import * as ReactDOM from 'react-dom'; import * as React from 'react'; import * as i18n from 'i18next'; import { translate, I18nextProvider, Interpolate, InjectedTranslateProps, TranslationFunction } from 'react-i18next'; i18n .init({ fallbackLng: 'en', // have a common namespace used around the full app ns: ['common'], defaultNS: 'common', debug: true, interpolation: { escapeValue: false // not needed for react!! } }); interface InnerAnotherComponentProps { _?: TranslationFunction; } class InnerAnotherComponent extends React.Component { render() { const _ = this.props._!; return

{_('content.text', { /* options t options */ })}

; } } const AnotherComponent = translate('view', { wait: true, translateFuncName: '_' })(InnerAnotherComponent); interface InnerYetAnotherComponentProps extends InjectedTranslateProps { } class InnerYetAnotherComponent extends React.Component { render() { const t = this.props.t!; return

{t('usingDefaultNS', { /* options t options */ })}

; } } const YetAnotherComponent = translate()(InnerYetAnotherComponent); interface TranslatableViewProps extends InjectedTranslateProps { } @translate(['view', 'nav'], { wait: true }) class TranslatableView extends React.Component { render() { const t = this.props.t!; let interpolateComponent = "a interpolated component"; return (

{t('common:appName')}

{t('nav:link1')}
) } } class App extends React.Component<{}, {}> { render() { return (
); } } ReactDOM.render( , document.getElementById('app') );