国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

React18.x + i18next + antd 國際化正確使用姿勢及避坑指南

這篇具有很好參考價值的文章主要介紹了React18.x + i18next + antd 國際化正確使用姿勢及避坑指南。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

React18.x + i18next + antd 國際化正確使用姿勢及避坑指南

如果你使用這個教程還不能夠解決你的問題的話,直接私信我,免費一對一給你解決。

一、使用vite創(chuàng)建一個react項目

具體的創(chuàng)建方法大家參考vite官方文檔,大概的操作如下,如果需要更詳細的,大家去自行搜索即可

pnpm create vite

因為我這里使用的是ts版本,所以,你自己看著辦吧。

二、安裝依賴

pnpm add i18next i18next-browser-languagedetector i18next-http-backend react-i18next

其中 i18next-browser-languagedetector i18next-http-backend 這倆包我只是參考官方的文檔安裝了,具體的作用請自行搜索吧(付費咨詢也是么的問題,Q~A~Q)。

三、配置i18next

在src目錄下創(chuàng)建一個i18n文件夾,然后創(chuàng)建index.ts文件,內容如下

import i18n from "i18next";
import { initReactI18next } from "react-i18next";
// 檢測當前瀏覽器的語言或者從服務器獲取配置資源,不過也沒有什么用處
import Backend from "i18next-http-backend";
// 嗅探當前瀏覽器語言
import LanguageDetector from "i18next-browser-languagedetector";
import ThemeConfig from "@/config/themeConfig";
import Storage from "@/plugins/utils/storage";
import Constants from "@/plugins/constants";

import zhCN from "antd/lib/locale/zh_CN";
import enUS from "antd/lib/locale/en_US";

export const antI18n = {
	[ThemeConfig.i18nEnum.ZHCN.value]: zhCN,
	[ThemeConfig.i18nEnum.ENUS.value]: enUS,
};

import zhCNLocale from "./modules/zhCN.json";
import enUSLocale from "./modules/enUS.json";

// @ts-ignore
i18n
	.use(Backend)
	.use(LanguageDetector)
	.use(initReactI18next)
	.init({
		resources: {
			[ThemeConfig.i18nEnum.ZHCN.value]: {
				translation: zhCNLocale,
			},
			[ThemeConfig.i18nEnum.ENUS.value]: {
				translation: enUSLocale,
			},
		},
		fallbackLng: Storage.getStorage(Constants.storageKey.i18nLocal) || ThemeConfig.i18nDef,
		lng: Storage.getStorage(Constants.storageKey.i18nLocal) || ThemeConfig.i18nDef,
		preload: ThemeConfig.i18nKeyArr,
		debug: true,
		interpolation: {
			escapeValue: false,
		},
		detection: ["localStorage", "sessionStorage", "cookie"],
	});
export default i18n;

四、配置i18next翻譯文件(注意:必須是.json,且注意命名,一般為zh-cn,zh-CN,zh這幾種遵循官網(wǎng)說的規(guī)則)

在i18n目錄下創(chuàng)建modules目錄,并且創(chuàng)建enUS.json以及zhCN.json,各位可以自行定義,如果小白還不知道怎么擴展的話,付費找我吧。

enUS.json

{
	"msg": "test",
	"menu": {
		"home": "home"
	},
	"page": {
		"loginTitle": "login"
	},
	"antd": {
		"paginationTotal": "Total {{total}} items"
	}
}

znCN.json

{
	"msg": "示例",
	"menu": {
		"home": "首頁"
	},
	"page": {
		"loginTitle": "登錄"
	},
	"antd": {
		"paginationTotal": "共 {{total}} 條"
	}
}

五、在main.ts引入

// import React from "react";
import ReactDOM from "react-dom/client";
import { BrowserRouter } from "react-router-dom";
import { RecoilRoot } from "recoil";
import App from "./App";
import "@/plugins/i18n";
// import "antd/dist/reset.css";
import "animate.css";
import "@/assets/styles/index.scss";

// react 18 創(chuàng)建(會導致 antd 菜單折疊時閃爍,等待官方修復)
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
	// * react嚴格模式
	// <React.StrictMode>
	<BrowserRouter>
		<RecoilRoot>
			<App></App>
		</RecoilRoot>
	</BrowserRouter>,
	// </React.StrictMode>,
);
import { useEffect, useState } from "react";
import { ConfigProvider } from "antd";
import { useRecoilValue } from "recoil";
import { Routers } from "@/router";
import Store from "@/store";
import { setHtmlLang } from "@/plugins/utils/i18n";
import { II18nKey } from "@/interface/i18n";
import { antI18n } from "@/plugins/i18n";

export default function APP() {
	const locale = useRecoilValue(Store.useThemeState).i18n as II18nKey;
	const [i18n, setI18n] = useState(antI18n[locale]);

	useEffect(() => {
		setHtmlLang(locale);
		setI18n(antI18n[locale]);
	}, [locale]);

	// theme prefixCls
	return (
		<ConfigProvider locale={i18n} autoInsertSpaceInButton={true} componentSize={"middle"} prefixCls={""}>
			<Routers></Routers>
		</ConfigProvider>
	);
}

六、在頁面中使用

import { Row, Col, Pagination, Switch } from "antd";
import { useSetRecoilState, useRecoilState, useRecoilValue } from "recoil";
import Store from "@/store";
import "@/assets/styles/page/home.scss";
import { useTranslation } from "react-i18next";

export default function Home() {
	const [i18nState, setI18nState] = useRecoilState(Store.i18nState);
	const setThemeState = useSetRecoilState(Store.useThemeState);
	const themeState = useRecoilValue(Store.useThemeState);
	const { t, i18n } = useTranslation();

	const onChange = (checked: boolean) => {
		if (checked) {
			i18n.changeLanguage("zh-CN");
			setThemeState({ i18n: "zh-CN" });
			setI18nState("zh-CN");
		} else {
			i18n.changeLanguage("en-US");
			setThemeState({ i18n: "en-US" });
			setI18nState("en-US");
		}
		console.log(i18nState, themeState);
	};

	return (
		<Row justify="center" className="content-body home-box">
			<Col span={24}>
				{t("msg")}
				<Pagination total={85} showSizeChanger showQuickJumper showTotal={(total) => `${t("antd.paginationTotal", { total: total })}`}></Pagination>
				<Switch defaultChecked onChange={onChange} />
			</Col>
		</Row>
	);
}

完整項目地址:點我跳轉
React18.x + i18next + antd 國際化正確使用姿勢及避坑指南文章來源地址http://www.zghlxwxcb.cn/news/detail-447085.html

到了這里,關于React18.x + i18next + antd 國際化正確使用姿勢及避坑指南的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Spring之國際化:i18n

    Spring之國際化:i18n

    學習的最大理由是想擺脫平庸,早一天就多一份人生的精彩;遲一天就多一天平庸的困擾。各位小伙伴,如果您: 想系統(tǒng)/深入學習某技術知識點… 一個人摸索學習很難堅持,想組團高效學習… 想寫博客但無從下手,急需寫作干貨注入能量… 熱愛寫作,愿意讓自己成為更好

    2024年02月03日
    瀏覽(39)
  • SpringBoot - SpringBoot整合i18n實現(xiàn)消息國際化

    SpringBoot - SpringBoot整合i18n實現(xiàn)消息國際化

    在我們開發(fā)WEB項目的時候,項目可能涉及到在國外部署或者應用,也有可能會有國外的用戶對項目進行訪問,那么在這種項目中, 為客戶展現(xiàn)的頁面或者操作的信息就需要根據(jù)客戶系統(tǒng)的環(huán)境來使用不同的語言,這就是我們所說的項目國際化。 1. MessageSource源碼 Spring中定義了

    2024年02月03日
    瀏覽(38)
  • 【angular】實現(xiàn)簡單的angular國際化(i18n)

    【angular】實現(xiàn)簡單的angular國際化(i18n)

    實現(xiàn)簡單的angular國際化。本博客實現(xiàn)中文版和法語版。 將 Hello i18n! 變?yōu)?中文版:你好 i18n! 或 法語版:Bonjour l’i18n ! 。 創(chuàng)建一個項目: 在集成終端中打開。 添加本地化包: 在html中添加格式化標識: 現(xiàn)在運行一下,頁面是: 生成翻譯模板語言包: 生成了一個文件夾: l

    2024年02月08日
    瀏覽(32)
  • spring6-國際化:i18n | 數(shù)據(jù)校驗:Validation

    spring6-國際化:i18n | 數(shù)據(jù)校驗:Validation

    1.1、i18n概述 國際化也稱作i18n,其來源是英文單詞 internationalization的首末字符i和n,18為中間的字符數(shù)。由于軟件發(fā)行可能面向多個國家,對于不同國家的用戶,軟件顯示不同語言的過程就是國際化。通常來講,軟件中的國際化是通過配置文件來實現(xiàn)的,假設要支撐兩種語言,

    2024年02月08日
    瀏覽(25)
  • 微信小程序-切換語言(國際化i18n)的方法封裝

    微信小程序-切換語言(國際化i18n)的方法封裝

    最近做的一個小程序的項目, 涉及到了 多語言的切換 , 就想到了之前vue用的多語言插件i18n, 就嘗試著在微信開放社區(qū)搜了一下, 沒有具體的實現(xiàn), 但是提供了大致的實現(xiàn)思路, 如下: 又結合了很多大佬的分享經(jīng)驗, 試著去封裝了一個微信的i18n方法 首先, 我們需要明確一下需要實

    2024年02月05日
    瀏覽(21)
  • 如何在Vue3中配置國際化語言i18n

    1. 安裝 vue-i18n 2. 創(chuàng)建一個i8n的配置文件 如:i18nConfig.js 3. 新建語言文件 zh-CN.js 和 en-US.js zh-CN.js 文件 en-US.js 文件 CONFIG.js 文件 4. 在 main.js 里面全局配置 通過上面四步即可配置完畢 下面說一下如何使用,分三種情況 在 .vue 組件中的 template 使用 在 .vue 組件中的 script 中使用 在

    2024年02月09日
    瀏覽(23)
  • Vue3中,國際化插件vue-i18n使用記錄,配合VSCode自動化翻譯插件i18n Ally

    Vue3中,國際化插件vue-i18n使用記錄,配合VSCode自動化翻譯插件i18n Ally

    說明文檔: vue-i18n 版本說明: vue: 3.0.0+ vue-i18n: 9.x版 src 目錄下新建目錄 lang ,存放 i18n 的配置。 新建目錄名稱: lang (語言)、 locales (語系設定)、 i18n ,這些名稱都可被VSCode圖標插件( vscode-icons )檢測到并美化。 lang 目錄下,新建 index.js 文件,引入 vue-i18n 。 語言的配置信

    2024年02月12日
    瀏覽(23)
  • SpringBoot 國際化(i18n) 支持中文鍵(KEY)的解決方法

    前言: 項目中要解決“中英文”切換的問題,想法是輸入key例如“你好”,然后去國際化文件找對應的中文key,然后進行輸出,如果沒有定義這個key,則輸出“你好”。但是中文key在properties文件中會已unicode編碼輸出,使用中文key時獲取不到對應的value。 解決方法: 重構$.

    2024年02月16日
    瀏覽(30)
  • 【國際化】文段中的HTML標簽(JQuery-i18next)

    【國際化】文段中的HTML標簽(JQuery-i18next)

    javascript - HTML tags in i18next translation - Stack Overflow 問題: 解決方法: 源碼: src/index.js · xlieee/jquery-i18next - 碼云 - 開源中國 (gitee.com) 文檔: jquery-i18next: i18next plugin for jquery usage (gitee.com)

    2024年02月19日
    瀏覽(18)
  • 用i18n 實現(xiàn)vue2+element UI的國際化多語言切換詳細步驟及代碼

    用i18n 實現(xiàn)vue2+element UI的國際化多語言切換詳細步驟及代碼

    這個地方要注意自己的vue版本和i1n8的匹配程度,如果是vue2點幾,記得安裝i18n的@8版本,不然會自動安裝的最新版本,后面會報錯哦,查詢了下資料,好像最新版本是適配的vue3。 在src下面新建i18n文件夾,然后在里面新建index.js,里面的內容如下 新建i18n文件夾里面新建config文

    2024年02月14日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包