После некоторых исследований я выяснил, что при статическом экспорте проекта Next JS при использовании getInitialProps или getStaticProps Next JS создаст страницы c HTML с начальными значениями - в этом case, "ar" - поэтому, когда вы обновляете sh страницу, содержимое будет приходить с его начальными значениями, поэтому в моем предыдущем подходе я менял cook ie только во время выполнения. Однако во время сборки это было начальное значение "ar".
- вот фрагмент кода out / index. html
<script id="__NEXT_DATA__" type="application/json">
{
"props": { "initialLanguage": "ar" },
"page": "/",
"query": {},
"buildId": "RmU4iA8jACDFdZr30Xqjo",
"nextExport": true,
"isFallback": false
}
</script>
, поэтому я знал некоторый подход чтобы решить эту проблему, а именно,
загрузить Next JS как SSR, а не SSG.
дубликаты страниц для каждого языка, например, "/ en", "/ ar".
сохраните начальное значение в localStorage и используйте useEffect, измените его, но вам нужно обработать состояние загрузки при рендеринге компонента и прочитать localStorage.
использовать сторонний пакет.
Итак, подход, который я использовал, заключался в создании двух страниц для каждого языка.
, чтобы структура папок стала примерно такой.
pages
--[lang]
--index.js
--other.js
--index.js
и вот страницы / указатель. js
import Home from '../components/Home';
import Head from '../components/Common/Head';
import { useRouter } from 'next/router';
import getInitialLocale from '../locale/getInitialLocale';
import Spinner from '../components/Common/Spinner/Spinner';
const Index = () => {
const router = useRouter();
React.useEffect(() => {
const href = `/${getInitialLocale()}`;
router.push({ pathname: href });
}, []);
return (
<div>
<Head title="Home" />
<h1 style={{ fontSize: '3rem' }}>Welcome to Here</h1>
</div>
);
};
export default Index;
Если я сделал что-то не так или у вас есть предложения лучше, прокомментируйте здесь, пожалуйста?