我正在使用 apollo 对我的 nextJS 应用程序进行身份验证。现在我需要添加 i18n 支持,我面临一些基本问题:
主要是处理问题class Index extends React.Component
,这是我的页面和组件的外观与示例中使用的功能版本的对比。
在文档中有这个示例如何在应用程序的页面上实现 i18next:
import React from 'react';
import Link from 'next/link';
import { translate } from 'react-i18next';
import i18n from '../i18n';
function Index({ t, initialI18nStore }) {
return (
<div>
{t('welcome')}
<p>{t('common:integrates_react-i18next')}</p>
<Link href="/page2"><a>{t('link.gotoPage2')}</a></Link>
</div>
);
}
const Extended = translate(['home', 'common'], { i18n, wait: process.browser })(Index);
// Passing down initial translations
// use req.i18n instance on serverside to avoid overlapping requests set the language wrong
Extended.getInitialProps = async ({ req }) => {
if (req && !process.browser) return i18n.getInitialProps(req, ['home', 'common']);
return {};
};
export default Extended;
但我的页面正在使用class Index extends React.Component
. 所以我不知道如何实现t
并initialI18nStore
进入我的组件。我也不明白如何将其添加getInitialProps
到我现有的中:
页
import React from 'react'
import cookie from 'cookie'
import { withApollo, compose } from 'react-apollo'
import withData from '../lib/withData'
import redirect from '../lib/redirect'
import checkLoggedIn from '../lib/checkLoggedIn'
class Index extends React.Component {
static async getInitialProps (context, apolloClient) {
const { loggedInUser } = await checkLoggedIn(context, apolloClient)
if (!loggedInUser.user) {
// If not signed in, send them somewhere more useful
redirect(context, '/signin')
}
return { loggedInUser }
}
render () {
return (
<div>
Hello {this.props.loggedInUser.user.name}!<br />
<button onClick={this.signout}>Sign out</button>
</div>
)
}
};
export default compose(
withData,
withApollo
)(Index)