6124e7d20c
This PR implements Internationalized Routing using formatjs / react-intl. ## Changelog - Updated formatjs to latest version - Remove deprecated babel-react-intl-plugin in favor of babel-formatjs-plugin - Remove server in favour of Internationalized Routing - Added linter with formatjs rules - Refactored JSX - Added missing types - Auto run formtjs script via before hooks - Adjusted readme docs - Added message descriptions - Removed default configs fixes #27870 ## Bug - [x] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Errors have helpful link attached, see `contributing.md` ## Feature - [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have helpful link attached, see `contributing.md` ## Documentation / Examples - [x] Make sure the linting passes
51 lines
1.3 KiB
TypeScript
51 lines
1.3 KiB
TypeScript
import Link from 'next/link'
|
|
import { useRouter } from 'next/router'
|
|
import { FormattedMessage } from 'react-intl'
|
|
import styles from './Nav.module.css'
|
|
|
|
export default function Nav() {
|
|
const { locale, locales, asPath } = useRouter()
|
|
return (
|
|
<nav className={styles.nav}>
|
|
<li className={styles.li}>
|
|
<Link href="/" passHref>
|
|
<a>
|
|
<FormattedMessage
|
|
defaultMessage="Home"
|
|
description="Nav: Index name"
|
|
/>
|
|
</a>
|
|
</Link>
|
|
</li>
|
|
<li className={styles.li}>
|
|
<Link href="/about" passHref>
|
|
<a>
|
|
<FormattedMessage
|
|
defaultMessage="About"
|
|
description="Nav: About item"
|
|
/>
|
|
</a>
|
|
</Link>
|
|
</li>
|
|
|
|
<li className={styles.divider}></li>
|
|
|
|
{locales.map((availableLocale) => (
|
|
<li key={availableLocale} className={styles.li}>
|
|
<Link
|
|
href={asPath}
|
|
locale={availableLocale}
|
|
passHref
|
|
prefetch={false}
|
|
>
|
|
<a
|
|
className={availableLocale === locale ? styles.active : undefined}
|
|
>
|
|
{availableLocale}
|
|
</a>
|
|
</Link>
|
|
</li>
|
|
))}
|
|
</nav>
|
|
)
|
|
}
|