React+TS前台项目实战(三)-- 国际化配置

文章目录

  • 前言
    • 一、安装国际化相关插件包
    • 二、在src/locales目录下创建en.json和zh.json语言包文件
    • 三、配置与使用
      • 1. i18n.ts配置详细代码及注释如下
      • 2. 在layout布局组件中初始化,并处理路由跳转问题
  • 总结


前言

本文主要讲项目的国际化配置和相关常用方法封装。


一、安装国际化相关插件包

npm i i18next react-i18next -S

二、在src/locales目录下创建en.json和zh.json语言包文件

// src/locales/en.json
{"translation": {"navbar": {"home": "Home","charts": "Charts","fee_rate": "Fee Rate","nervos_dao": "Nervos DAO","tokens": "Tokens","xUDT": "xUDT","sUDT": "sUDT","more": "More","language": "Language","language_en": "EN","language_zh": "简体中文"}}
}
// src/locales/zh.json
{"translation": {"navbar": {"home": "首页","charts": "图表","fee_rate": "费率","nervos_dao": "Nervos DAO","tokens": "代币","xUDT": "xUDT","sUDT": "sUDT","more": "更多","language": "语言","language_en": "EN","language_zh": "简体中文"}}
}

三、配置与使用

1. i18n.ts配置详细代码及注释如下

功能说明:
(1)添加初始化配置
(2)配置支持的语言
(3)封装国际化前缀增加/删除的方法

// @/config/i18n.ts
import i18n from 'i18next'
import { initReactI18next } from 'react-i18next'
import en from '@/locales/en.json'
import zh from '@/locales/zh.json'
export const SupportedLngs = ['en', 'zh'] as const
/*** Initializes the internationalization (i18n) library with the provided resources and configuration.** @return {Promise<void>} A Promise that resolves when the i18n library is successfully initialized.*/
i18n.use(initReactI18next).init({resources: {en,zh,},lng: 'zh', // 默认语言supportedLngs: SupportedLngs,fallbackLng: 'zh',interpolation: {escapeValue: false,},
})
export default i18n;
// 支持的语言
export const I18nLangs = ['en', 'zh'] as const
// 添加国际化前缀
export const addI18n = (to: string, locale?: string) => {// 如果没有locale,直接返回if (!locale || !to) return to;return `/${locale}${to}`;
};
// 删除国际化前缀
export const removeI18n = (to: string) => {const isInLocale = SupportedLngs.find((lang) => to.startsWith(`/${lang}`)); // 是否是支持的语言if (!isInLocale) return to; // 不是支持的语言,直接返回return to.replace(`/${isInLocale}`, "");
};

2. 在layout布局组件中初始化,并处理路由跳转问题

说明:
(1)这里主要讲解国际化配置,layout相关布局组件下一篇讲解
(2)由于React Router 6不支持正则写法,所以配置国际化后,跳转需要单独做判断,除去配置的语言前缀,其他的通通跳转404页面

// @/layout/index.tsx
import { useEffect, Suspense } from "react";
import { useParams, Outlet, Navigate } from "react-router-dom";
import { useTranslation } from "react-i18next";
// 引用组件
import { ErrorBoundary } from "@/components/ErrorBoundary";
// 引用样式
import { Page } from "./styled";
const LayOut = () => {const { locale = "en" } = useParams(); // 获取当前语言const [, i18n] = useTranslation(); // 获取i18nuseEffect(() => {i18n.init({ lng: locale });}, [locale, i18n]); // 初始化i18n,监听到变化时更新配置// 没有匹配到父级路由zh|en,并且 locale不是404,重定向到404if (locale && !["zh", "en"].includes(locale) && locale !== "404") {return <Navigate to={`/404`} />;} else {return (// ...<Suspense fallback={<span>loading...</span>}><ErrorBoundary><Outlet /></ErrorBoundary></Suspense>// ...);}
};
export default LayOut;

总结

下一篇讲【页面整体layout布局搭建】。关注本栏目,将实时更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/24806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytho入门教程

文章目录 随机数据生成的方式list操作方式数据操作方式处理缺失数据数据框操作方式画图的方式 随机数据生成的方式 # 随机生成数据的方式 # 1. 随机生成10-20之间的浮点数 holdForce random.uniform(10,20) # print(holdForce)# 2.for循环输出50个数据的方式 # for i in rang…

element-plus的el-text组件(文本组件)的介绍和使用

el-text&#xff08;适合文本操作的组件&#xff09; 设置文本type,如default,primary,success,info,warning,danger超出容器尺寸自动省略&#xff0c;tuncated属性设置size属性控制文本大小&#xff0c;有large,default,small设置tag属性&#xff0c;值为html5标签名&#xf…

前端工程化工具系列(十二)—— PostCSS(v8.4.38):CSS 转换工具

PostCSS 是转换 CSS 语法的工具。它提供 API 来对 CSS 文件进行分析和修改它的规则。 PostCSS 本身并不能直接使用&#xff0c;主要是使用基于 PostCSS 编写的插件。 1 安装 pnpm add -D postcss-import postcss-nested postcss-preset-env cssnano2 配置 在项目根目录下创…

基本类型值,是按值复制的,而不是按引用复制的。(深浅拷贝)

let obj[1,2,4] let obj2Array.from(obj) obj2[0]23 console.log(obj) 这是浅拷贝吗&#xff1f; 在给出的例子中&#xff0c;Array.from(obj) 实际上执行的是对数组 obj 的浅拷贝。这是因为数组在JavaScript中是一种特殊的对象&#xff0c;其元素存储在索引属性中。Array.fr…

Spring Cloud、Spring Cloud LoadBalancer、Nacos 和 OpenFeign整合

版本 Spring Cloud 3.1.1spring cloud loadbalancer 3.1.1nacos 2021.1open feign 3.1.1 引入依赖 在项目的 pom.xml 文件中添加相关依赖&#xff1a; <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter…

Nagios的安装和使用

*实验* *nagios安装和使用* Nagios 是一个监视系统运行状态和网络信息的监视系统。Nagios 能监视所指定的本地或远程主机以及服务&#xff0c;同时提供异常通知功能等. Nagios 可运行在 Linux/Unix 平台之上&#xff0c;同时提供一个可选的基于浏览器的 WEB 界面以方便系统管…

【创作活动】面对层出不穷的AI大模型产品我们应该怎么选择?

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

Vue CLI 4与项目构建实战指南

title: Vue CLI 4与项目构建实战指南 date: 2024/6/9 updated: 2024/6/9 excerpt: 这篇文章介绍了如何使用Vue CLI优化项目构建配置&#xff0c;提高开发效率&#xff0c;涉及配置管理、项目部署策略、插件系统定制以及Webpack和TypeScript的深度集成技巧。 categories: 前端…

五、身份与访问管理—身份管理和访问控制管理(CISSP)

目录 1.身份管理 1.1 目录技术 1.2 单点登录 1.2.1 Kerberos认证 1.2.2 SESAME认证 1.2.3 KryptoKnight认证 1.3 联合身份管理 1.3.1 SAML安全断言标记语言 1.3.2 标记语言 1.3.3 OpenID 1.3.4 OAuth 1.3.5 OIDC(OpenID Connect) 2.身份即服务(IDaaS) 2.1 AA…

深度神经网络是什么?

深度神经网络&#xff08;Deep Neural Network, DNN&#xff09;是机器学习领域中的一种重要技术&#xff0c;特别是在深度学习领域。以下是关于深度神经网络的详细回答&#xff1a; 1. 定义与结构 定义&#xff1a;深度神经网络是由多层人工神经元相互连接而成的网络结构&am…

Rocky linux 搭建DNS主从服务器+keepalived实现高可用

接上两篇文章&#xff0c;这篇文章跟上两篇没有直接关系。 第一篇&#xff1a;linux rocky 搭建DNS服务和禁止AD域控DNS&#xff0c;做到独立DNS并加域_linux 域控-CSDN博客文章浏览阅读519次&#xff0c;点赞20次&#xff0c;收藏10次。使用linux rocky 搭建DNS服务&#xff…

【个人博客搭建】(22)申请QQ开发者

这里我们要引入的一个概念是OAuth - OAuth 2.0是一个行业标准的授权协议&#xff0c;用于处理用户数据访问和分享的安全问题。它允许用户将他们对某些服务的访问权限授权给第三方应用&#xff0c;而无需分享他们的用户名和密码。以下是对OAuth 2.0的介绍&#xff1a; 基本概念 …

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:中国舰船研究院

中国舰船研究院又称中国船舶重工集团公司第七研究院&#xff0c;隶属于中国船舶重工集团公司&#xff0c;是专门从事舰船研究、设计、开发的科学技术研究机构&#xff0c;是中国船舶重工集团公司的军品技术研究中心、科技开发中心&#xff1b;主要从事舰船武器装备发展战略研究…

PDF编辑与转换的终极工具智能PDF处理Acrobat Pro DC

Acrobat Pro DC 2023是一款功能全面的PDF编辑管理软件&#xff0c;支持创建、编辑、转换、签署和共享PDF文件。它具备OCR技术&#xff0c;可将扫描文档转换为可编辑文本&#xff0c;同时提供智能PDF处理技术&#xff0c;确保文件完整性和可读性。此外&#xff0c;软件还支持电子…

信驰达蓝牙数字钥匙方案持续创新,助推智慧汽车生态发展

随着汽车智能化的加速发展&#xff0c;数字钥匙正成为全球化的新趋势&#xff0c;它通过数字化的手段连接人、车以及更广泛的生态&#xff0c;引领着出行方式的革命和用户体验的转变。数字钥匙不仅仅是一个简单的访问工具&#xff0c;它重新定义了人与车的互动方式&#xff0c;…

竞拍商城系统源码后端PHP+前端UNIAPP

下载地址&#xff1a;竞拍商城系统源码后端PHP前端UNIAPP

手把手教你入门vue+springboot开发(二)

文章目录 前言一、开发环境搭建二、创建项目三、编写代码1.插件下载2.编写代码 四、测试验证总结 前言 前面我们构建了一个查询用户信息的简单springboot后端demo&#xff0c;今天我们先搭建VSCodevue的开发环境&#xff0c;然后在这个开发环境上构建一个demo&#xff0c;连接…

肠道病原体感染定植的三个关键角色——炎症、营养与共生菌群

谷禾健康 日常生活中大部分人都可能碰到过食用了不卫生或过期变质食物以及水源后&#xff0c;出现过恶心、腹痛&#xff0c;并伴有腹泻、食欲不振、呕吐等症状&#xff1f;如果有就要当心&#xff0c;这可能是病原体感染引起的胃肠道炎症。 但是&#xff0c;即使食用了同样食物…

mysql中 redo日志(下)

大家好。上篇文章我们介绍了什么是redo日志以及redo日志的写入过程。建议没看过上篇文章的同学先看一下上一篇文章&#xff0c;今天我们继续来说一说redo日志。 一、redo日志文件 1. redo日志刷盘时机 我们知道mtr运行过程中产生的一组redo日志在mtr结束时会被复制到log buf…

从VS Code源码看清晰代码之美

VS Code的产品做的很优秀&#xff0c;其源码也质量颇高&#xff0c;清晰、整洁、富有美感。 下面是 src\vs\workbench\common\notifications.ts 文件中的两段代码&#xff0c;大家感受一下&#xff1a; get sticky(): boolean {if (this._sticky) {return true; // explicitl…