热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

React06::I18N

React06::I18N-前言i18n(其来源是英文单词internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称。在React中,可以

前言

i18n(其来源是英文单词 internationalization的首末字符in,18为中间的字符数)是“国际化”的简称。

React中,可以使用i18next来支持i18n,本篇文章为大家来讲解如何在React-Typescript项目中如何使用i18next

老规矩,先来share一下本篇文档的repo:

gitlab.com/yafeya/reac…

1. 安装依赖

这篇文档还的Demo还是基于本系列之前的文档构建的。想要在现有项目中支持i18next首先需要安装依赖,执行以下代码,安装依赖。

npm install i18next i18next-browser-languagedetector react-i18next

2. 使用资源

首先添加i18n.tsx, zh.json, 与en.json。其中zh.json中存放所有中文资源,en.json中存放所有英文资源。

i18n.tsx用来使用这两个字源文件,并进行一些基础的设置。

// i18n.tsx
import i18n from "i18next";
import LanguageDetector from 'i18next-browser-languagedetector';
import enResources from "./en.json";
import zhResources from "./zh.json";
import { initReactI18next } from 'react-i18next';

const DETECTION_OPTIOnS= {
  order: ['path', 'querystring']
}

i18n.use(LanguageDetector) //获取当前浏览器语言
.use(initReactI18next) 
.init({
  // 使用option
  detection: DETECTION_OPTIONS,
  //资源文件
  resources: {
    en: {
      translation: enResources,
    },
    zh: {
      translation: zhResources,
    },
  },
  // 如果找不到语言设置,将会使用fallbackLng
  fallbackLng: "zh",
  debug: false,
  interpolation: {
    escapeValue: false,
  },
})
 
export default i18n;

3. App中引入i18n
// App.tsx
// ...
import '../i18n/i18n';

export class App extends Component {
    //...
}

4. 使用translation

新建translation component用来引入可翻译的资源。

一般可使用三种方式进行翻译:

  • t('testing')
  • testing
  • {t => }
// translation.tsx

let { t, i18n } = useTranslation();
// ...
<div className='translationWrapper'>
    <div className='translationGroup'>
        <label>{t('firstWay')}label>
        <label>{t('testing')}label>
    div>
    <div className='translationGroup'>
        <label>
            <Trans>secondWayTrans>
        label>
        <label>
            <Trans>testingTrans>
        label>
    div>
    <div className='translationGroup'>
        <label>
            <Translation>{t => <div>{t('thirdWay')}div>}Translation>
        label>
        <label>
            <Translation>{t => <div>{t('testing')}div>}Translation>
        label>
    div>
div>

5. 切换语言

可以通过调用i18n.changeLanguage(language)来修改当前语言。

function onclick() {
    let targetLanauge = i18n.language === 'en' ? 'zh' : 'en';
    i18n.changeLanguage(targetLanauge);
}

// ...

6. SEO Friendly

使用i18n的时候,还需要注意另一点,就是确保你的app对于SEO是Friendly的,也就是说,你需要给你的客户一个能访问到正确语言的URL。

比如对于中文用户,你给的URL应该是 http://some-domain/zh, 而对于英文用户,你给的URL应该是http://some-domain/en

i18next对于SEO-Friendly的支持做的还不错。通过设置init-options,可以设置语言监测的顺序。

// i18n.tsx

// path: 根据URL来检测语言信息
// queryString: 根据queryString来检测语言信息,?lng=language
// 还支持很多其他的方式,不过哪些方式不是SEO-Friendly的
const DETECTION_OPTIOnS= {
  order: ['path', 'querystring']
}

i18n.use(LanguageDetector) //获取当前浏览器语言
.use(initReactI18next) 
.init({
  detection: DETECTION_OPTIONS,
  // ...
  })

当设置完语言信息后,可以在DevTools -> Application -> localStorage中看到设置的结果。


推荐阅读
  • 基于Node.js的高性能实时消息推送系统通过集成Socket.IO和Express框架,实现了高效的高并发消息转发功能。该系统能够支持大量用户同时在线,并确保消息的实时性和可靠性,适用于需要即时通信的应用场景。 ... [详细]
  • 本文详细解析了如何使用 jQuery 实现一个在浏览器地址栏运行的射击游戏。通过源代码分析,展示了关键的 JavaScript 技术和实现方法,并提供了在线演示链接供读者参考。此外,还介绍了如何在 Visual Studio Code 中进行开发和调试,为开发者提供了实用的技巧和建议。 ... [详细]
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
  • Webpack与Babel的配置详解及优化策略深入探讨了这两个工具在现代前端开发中的应用。Babel作为一款强大的JavaScript编译器,能够将最新版的JavaScript代码转换为广泛兼容的版本,从而突破浏览器对ES规范的支持限制,确保开发者可以无缝使用最新的语言特性。本文不仅介绍了如何高效配置Webpack与Babel,还提供了多种优化策略,以提升构建性能和代码质量。 ... [详细]
  • 使用原生JavaScript为HTML元素动态添加新样式 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • npm 发布 WhalMakeLink 包:链接管理与优化的新选择
    WhalMakeLink 是一个强大的 npm 工具,专为项目管理和优化而设计。它能够自动在项目的 README 文件中生成当前工程目录下所有子项目的链接地址,极大提升了开发效率和文档维护的便捷性。通过简单的 `npm init` 命令即可快速启动和配置该工具,适用于各种复杂项目结构。 示例演示了其基本用法和功能。 ... [详细]
  • AngularJS uirouter模块下的状态管理机制深入解析
    本文深入探讨了 AngularJS 中 ui-router 模块的状态管理机制。通过详细分析状态配置、状态转换和嵌套状态等核心概念,结合实际案例,帮助开发者更好地理解和应用这一强大工具,提升单页面应用的开发效率和用户体验。 ... [详细]
  • 功能需求:fxFlex 指定目标父元素 ... [详细]
  • 利用 Gmail API 实现 Node.js 定时自动发送邮件功能
    功能:利用Node每天定时发送邮件给指定邮箱。需要的npm包:nodemailernode-schedule实现步骤:配置nodemailer发送邮件开启定时邮件发送 ... [详细]
  • 利用TensorFlow.js在网页浏览器中实现高效的人脸识别JavaScript接口
    作者|VincentMühle编译|姗姗出品|人工智能头条(公众号ID:AI_Thinker)【导读】随着深度学习方法的应用,浏览器调用人脸识别技术已经得到了更广泛的应用与提升。在 ... [详细]
  • 分享一下最近写的ReactNative的SSHSFTP组件,iOS端封装了NMSSH,Android端封装了JSch。支持SSH执行命令、实时Shell ... [详细]
  • 用uniapp和springboot做出的高效记忆小程序,技术点总结
    临时起意老早前就听说过一些高效记忆的方法,其中听的最多的就是艾宾浩斯记忆法和费曼学习法。恰好赶上过年放假,就在想除了吃吃吃之外,还能干点什么。本来想学习理财的知识,一看概念还真不少 ... [详细]
  • 卸载mysql残留【MySQL】
    数据库|mysql教程卸载mysql残留数据库-mysql教程A、在控制面板中查看是否有mysql,有则进行卸载。或运行相同版本的mysql安装文件,选择“remove”进行卸载。 ... [详细]
  • 什么是sequelize?sequelize是一个orm框架,什么是orm呢?即Object-RelationlMappingÿ ... [详细]
author-avatar
Eliza
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有