最详细的next国际化方案

实现效果 : 根据浏览器语言判断和手动切换(两种切换模式)

实现方法

1.下载安装包 (next-i18next react-i18next i18next)

yarn add next-i18next react-i18next i18next

2.在根目录下创建文件(next-i18next.config.js)  


const path = require("path");

module.exports = {
  i18n: {
    defaultLocale: "zh",
    locales: ["zh", "en"],
  },
  localePath: path.resolve("./public/locales"),
  shallowRender: true,
};

​

3.修改文件(next.config.js)

/** @type {import('next').NextConfig} */
const { i18n } = require('./next-i18next.config')
const nextConfig = {
  reactStrictMode: true,
  i18n,
}

module.exports = nextConfig

4.public目录下编写文本

5.pages目录下的_app.tsx文件修改

import "@/styles/globals.css";
import type { AppProps } from "next/app";
import { appWithTranslation } from "next-i18next";
import nextI18NextConfig from "../../next-i18next.config";
function App({ Component, pageProps }: AppProps) {
  return <Component {...pageProps} />;
}

export default appWithTranslation(App, nextI18NextConfig);

6.页面中使用

import { useTranslation, I18nContext } from "next-i18next";
import { serverSideTranslations } from "next-i18next/serverSideTranslations";
import nextI18NextConfig from "../../next-i18next.config.js";
import { useRouter } from "next/router.js";
import { Menu } from "antd";
export interface IndexProps {}

export default function Home(props: IndexProps) {
  const langs = {
    zh: "中国站",
    en: "Intl English",
  };
  const router = useRouter();
  const handleLanguageChange = (key: any) => {
    console.log(key);
    router.push(router.route, router.asPath, {
      locale: key,
    });
  };
  const { t } = useTranslation("common");

  return (
    <div>
      {t("nav.footer.solutions")}
      <Menu onClick={({ key }) => handleLanguageChange(key)}>
        {Object.keys(langs).map((key) => (
          <Menu.Item key={key}>{langs[key]}</Menu.Item>
        ))}
      </Menu>
    </div>
  );
}
export const getStaticProps = async ({ locale }: any) => ({
  props: {
    ...(await serverSideTranslations(locale, ["common"], nextI18NextConfig)),
  },
});

(但是注意react13以上并且用的是app路由的话最好是并采取这种方案i18n with Next.js 13 and app directory / App Router (an i18next guide))

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
i18next是一个用于国际化的JavaScript库,可以帮助我们在HTML页面上进行国际化。它提供了一种简单而灵活的方式来实现多语言网站。 首先,我们需要引入i18next的脚本文件,并初始化i18next。在初始化时,我们需要指定一些设置,比如默认语言、加载语言文件的路径等。 然后,我们需要创建语言文件,每个语言对应一个json文件。这些文件包含了相应语言的翻译文本。例如,如果我们支持英语和中文,那么就需要创建两个文件,一个是en.json,另一个是zh.json。 在HTML页面中,我们可以使用特定的HTML标记来标识需要翻译的文本。使用i18next提供的API,我们可以将这些文本实时地翻译成当前选择的语言。 例如,我们可以在需要翻译的文本周围添加data-i18n属性,并将其值设置为对应的翻译键。通过调用i18next的t()函数,我们可以将翻译键转换为实际文字。 同时,我们还可以在JavaScript代码中使用i18next来动态地翻译文本。比如,我们可以通过调用i18n.t()函数,根据当前语言环境来生成动态的文本。 在页面加载时,我们可以通过设置语言选择器来允许用户切换不同的语言。i18next提供了一些功能,比如自动检测浏览器语言、持久化语言选择等。 总的来说,通过使用i18next,我们可以实现HTML页面的国际化,让用户可以选择他们习惯使用的语言,使网站具有更好的用户体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值