mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-23 18:41:38 +01:00
2b6aff535e
The "i18n-provider" module has been replaced by a new `i18n.js` module in the `contexts` directory which provides the `t` function via the new React Context API. The legacy context API is still used throughout the codebase, so a legacy context provider has also been added as a shim until we migrate away from the old API. The migration does require changing every single place where the `t` function is used, so it is a non-trivial amount of work. This shim allows us to tackle it one piece at a time without breaking anything. This was placed in a new `contexts` directory because it didn't seem to belong in any existing categories. It certainly isn't a higher-order component.
62 lines
1.4 KiB
JavaScript
62 lines
1.4 KiB
JavaScript
import React, { Component, createContext, useMemo } from 'react'
|
|
import PropTypes from 'prop-types'
|
|
import { useSelector } from 'react-redux'
|
|
import { getMessage } from '../helpers/utils/i18n-helper'
|
|
import { getCurrentLocale } from '../ducks/metamask/metamask'
|
|
import { getCurrentLocaleMessages, getEnLocaleMessages } from '../ducks/locale/locale'
|
|
|
|
export const I18nContext = createContext((key) => `[${key}]`)
|
|
|
|
export const I18nProvider = (props) => {
|
|
const currentLocale = useSelector(getCurrentLocale)
|
|
const current = useSelector(getCurrentLocaleMessages)
|
|
const en = useSelector(getEnLocaleMessages)
|
|
|
|
const t = useMemo(() => {
|
|
return (key, ...args) => (
|
|
getMessage(currentLocale, current, key, ...args) ||
|
|
getMessage(currentLocale, en, key, ...args)
|
|
)
|
|
}, [currentLocale, current, en])
|
|
|
|
return (
|
|
<I18nContext.Provider value={t}>
|
|
{ props.children }
|
|
</I18nContext.Provider>
|
|
)
|
|
}
|
|
|
|
I18nProvider.propTypes = {
|
|
children: PropTypes.node,
|
|
}
|
|
|
|
I18nProvider.defaultProps = {
|
|
children: undefined,
|
|
}
|
|
|
|
export class LegacyI18nProvider extends Component {
|
|
static propTypes = {
|
|
children: PropTypes.node,
|
|
}
|
|
|
|
static defaultProps = {
|
|
children: undefined,
|
|
}
|
|
|
|
static contextType = I18nContext
|
|
|
|
static childContextTypes = {
|
|
t: PropTypes.func,
|
|
}
|
|
|
|
getChildContext () {
|
|
return {
|
|
t: this.context,
|
|
}
|
|
}
|
|
|
|
render () {
|
|
return this.props.children
|
|
}
|
|
}
|