겨우 10분 만에 넥스트.일본어를 응용한 대화
하루에 몇 번 투고한다고 용서해 주세요.
이번에 나는 초속으로 내가 운용한 사이트 설명i18n에 대응할 수 있기 때문에 그 방법을 썼다.
Next.js10 이전에 next-i18next 같은 포장을 사용하지 않고 재미있는 일을 조금만 하지 않으면 i18n+Next에 대응하기 어렵다.제이스의 은혜를 완전히 받아들일 수는 없지만Next.js10 정부에서 i18n을 지원했습니다.
방법은 매우 간단하다,next.config.js를 지원하고 싶은 언어 환경과 기본값만 지정합니다.
module.exports = {
i18n: {
locales: ["en", "ja"],
defaultLocale: "en",
},
};
이상.이렇게, 예를 들면 lognog.com의 경우기본값은 영어 lognog입니다.com
일본어로 lognog.com/ja
구문을 사용합니다.그리고 모든 어족이 정태적으로 생성되는 것도 나쁘지 않아요.
사용자의 로켈을 판단하는 방법은 확인
Accept-Language
하고 URL을 해당 로켈로 자동으로 변경합니다.유일한 병목은 ↑의 자동 루트는 응용 프로그램 경로에서만 가능하다는 것이다.즉
example.com
만 검출하고 example.com/app
같은 경우는 검출되지 않는다는 것이다.그러나 앞으로 수요가 있다면 nested routes의 자동 검출 대응도시야에 들어오다.번역을 추가하려면 먼저
useRouter
부터 언어 환경을 발췌한다.import { useRouter } from 'next/router'
const App = () => {
const { locale } = useRouter() // 現在のロケールを表示してくれる
// ..
}
여기서부터 번역고를 이용할 수 있지만 자신의 사정이 간단해 en.js
와ja.js
같은 파일을 만들어 번역을 대상으로 넣었다.// ja.js
export default {
SUBTITLE: "「満足」を可視化しよう",
TO_DASHBOARD: "ダッシュボードへ",
// ...
}
// en.js
export default {
SUBTITLE: "Visualize your customer happiness.",
TO_DASHBOARD: "Go to dashboard",
// ...
}
그리고 이 파일들을 가져와 언어 환경에 따라 적절한 번역을 유도한다.import { useRouter } from 'next/router'
import en from "../../locales/en";
import ja from "../../locales/ja";
const App = () => {
const { locale } = useRouter()
const t = locale === "en" ? en : ja;
return (
<div>
...
<h1>{t.SUBTITLE}</h1>
<button>{t.TO_DASHBOARD}</button>
</div>
)
}
용서해 주지만 매번 공유기 모듈과 번역 파일을 가져오는 것은 번거롭기 때문에 hook으로 하자// hooks/useLocale.ts
import en from "../../locales/en";
import ja from "../../locales/ja";
import { useRouter } from "next/router";
export const useLocale = () => {
const { locale } = useRouter();
const t = locale === "en" ? en : ja;
return { locale, t };
};
이것만으로 두 언어의 대응을 완성했다.이상!
Reference
이 문제에 관하여(겨우 10분 만에 넥스트.일본어를 응용한 대화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/yuyao17/articles/5cfa65d7e7eb11텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)