i18n国际化使用

一、介绍

国际化是指项目能够根据不同国家的语言进行转换,便于不同国家的用户使用。Vue I18 是 Vue.js 的国际化插件,它可以轻松地将一些本地化功能集成到应用程序中。

i18n 的全程是 internationalization,插件名取了首字母 i 和尾字母 n,中间一共有 18 个字母,所以组合起来就叫 i18n。

二、插件基本思路

1. 定义语言包:需要几种语言展示,就定义几个语言包。

2. 组合语言包对象:创建对象,对语言包进行组合,对象的 key 为语言包引用,值为语言包对象。

3. 创建实例:创建 vue-i18n 类的对象,添加 message 和 locale 属性。4. 挂载:挂载创建的实例对象。

三、适用框架

vue-i18n 作为国际化插件,它主要有两个版本:v8 和 v9。v8 版本适用于 Vue2 框架,v9 版本适用于 Vue3 框架。具体区别可以查看 官网 ,以下内容均在 Vue3 中使用。

四、Vue3 中使用

1.安装插件
npm install vue-i18n --save
2.定义和组合语言包

先定义常用的两个语言包:

// src/langurage/en.js 
// 定义英文语言包对象
export default {
  navigateBar: {
    hotspot: 'Hotspot',
    experience: 'Experience',
    focus: 'Focus',
    recommend: 'Recommend'
  },
  tabs: {
    work: 'Work',
    private: 'Private',
    collect: 'Collect',
    like: 'Like'
  }
}
// src/langurage/zh.js 
// 定义中文语言包对象
export default {
  navigateBar: {
    hotspot: '热点',
    experience: '经验',
    focus: '关注',
    recommend: '推荐'
  },
  tabs: {
    work: '作品',
    private: '私密',
    collect: '收藏',
    like: '喜欢'
  }
}

组合语言包对象:

// src/main.js
const message = {
    en,
    zh
}
3.引入插件并创建 i18n 实例
// src/main.js
import { createI18n } from 'vue-i18n';
 
const i18n = createI18n({
  legacy: false,  // 设置为 false,启用 composition API 模式
  messages,
  locale: 'en'  // 设置默认语言
})

注意:在创建实例时,一定要将 legacy 属性设置为 false,因为 legacy 默认为 true,它支持使用 Vue2 框架中的 Options API,如果要在 Vue3 更好的使用 Composition API 模式,那么就需要将此属性手动设置为 false。

4.挂载实例对象
// src/main.js
import { createApp } from 'vue';
const app = createApp(App);
app.use(i18n);

main.js 文件中的完整代码:

import { createApp } from 'vue';
import App from './App.vue';
import { createI18n } from 'vue-i18n';
import en from './langurage/en';
import zh from './langurage/zh';
// 组合语言包对象
const messages = {
  en,
  zh
}
// 创建实例对象
const i18n = createI18n({
  legacy: false,  // 设置为 false,启用 composition API 模式
  messages,
  locale: 'en'
})
// 创建 Vue 实例
const app = createApp(App);
// 注册对象
app.use(i18n);
// 挂载到 Dom 元素中
app.mount('#app');

在组件中使用:

<template>
    <div>
        <ul>
            <li>{{ $t("navigateBar.hotspot") }}</li>
            <li>{{ $t("navigateBar.experience") }}</li>
            <li>{{ $t("navigateBar.focus") }}</li>
            <li>{{ $t("navigateBar.recommend") }}</li>
        </ul>
        <ol>
            <li>{{ $t("tabs.work") }}</li>
            <li>{{ $t("tabs.private") }}</li>
            <li>{{ $t("tabs.collect") }}</li>
            <li>{{ $t("tabs.like") }}</li>
        </ol>
    <div>
</template>

在步骤 2 中定义的语言包是对象形式的,如果你定义的是简单的属性形式,要注意在组件中使用时的形式。

5.动态切换语言

想要切换语言时,修改 locale 属性就可以了。

  • 获取浏览器当前使用的语言

如果一开始想使用浏览器中默认的语言,那么将 locale 属性改成如下即可:

const i18n = createI18n({
  messages,
  locale: navigator.language // 获取浏览器的语言
})
  • 按钮切换

添加按钮切换语言时,Vue2 和 Vue3 的修改方式是不同的,在 Vue2 中使用全局的 this.$i18n.locale 就可以修改,但在 Vue3 中,需要 Hook 进行修改,如下所示:

<template>
    <div>
        <div>
            <button @click="changeLocale('zh')">切换为中文</button>
            <button @click="changeLocale('en')">切换为中文</button>
        </div>
        <ul>
            <li>{{ $t("navigateBar.hotspot") }}</li>
            <li>{{ $t("navigateBar.experience") }}</li>
            <li>{{ $t("navigateBar.focus") }}</li>
            <li>{{ $t("navigateBar.recommend") }}</li>
        </ul>
        <ol>
            <li>{{ $t("tabs.work") }}</li>
            <li>{{ $t("tabs.private") }}</li>
            <li>{{ $t("tabs.collect") }}</li>
            <li>{{ $t("tabs.like") }}</li>
        </ol>
    <div>
</template>
 
<script setup>
import { useI18n } from "vue-i18n";
 
const { locale } = useI18n();
 
// 切换语言
const changeLocale = (lang) => {
  locale.value = lang;
};
</script>

五、在react中使用

1.安装插件
npm install react-i18next
2.配置文件

在src下新建i18n文件夹,以存放国际化相关配置,可根据需要添加相应的语言文件

2.1 新建config.js

import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
//配置中文的配置文件
import translation_zh from './zh.json';
//配置英文的配置文件
import translation_en from './en.json';

const resources = {
  en: {
    translation: translation_en
  },
  zh: {
    translation: translation_zh
  }
};

i18n.use(initReactI18next).init({
  resources,
  lng: 'zh',
  interpolation: {
    escapeValue: false
  }
});

export default i18n;

2.2 语言文件示例

  • en.json
{
  "header": {
    "register": "Register",
    "signin": "Sign In",
    "home": "Home"
  },
  "footer": {
    "detail": "All rights reserved @ React"
  },
  "home": {
    "mainTip": "Im login page"
  },
  "content": {
    "description": "this is a chinese graph"
  }
}

  • zh.json
{
  "header": {
    "register": "注册",
    "signin": "登录",
    "home": "首页"
  },
  "footer": {
    "detail": "版权所有 @ React"
  },
  "home": {
    "mainTip": "我是登录页面"
  },
  "content": {
    "description": "这是个中文段落"
  }
}

3.详细使用

首先在index.jsx中引入国际化配置文件

import './i18n/config';

3.1 类(class)组件中使用

import React, { Component } from 'react';
import { withTranslation } from 'react-i18next';
class login extends Component {
  render() {
    const { t } = this.props;
    return (
      <div>
        <h1>{t('home.mainTip')}</h1>
      </div>
    );
  }
}
export default withTranslation()(login);

3.2 函数(function)组件或Hook中使用

import React from 'react';
import { useTranslation,Trans } from 'react-i18next';
function Example() {
  const { t, i18n } = useTranslation();
  return (
    <div>
    //第一种方式
      <p>{t('footer.detail')}</p>
    //第二种方式
      <li><Trans>home.new_arrival</Trans></li>
    </div>
  );
}
export default Example;

3.3 切换语言功能

import { Button } from "antd-mobile";
import { useTranslation, Trans } from "react-i18next";
const Lang = () => {
  const { i18n } = useTranslation();
  return (
    <Button
      onClick={() =>
        i18n?.changeLanguage(i18n?.language === "en" ? "zh" : "en")
      }
    >
      {i18n?.language === "en" ? "切换成中文" : "切换成英文"}
    </Button>
  );
};
export default Lang;

参考:

React功能篇 - 使用react-i18next进行国际化-CSDN博客

react使用i18next实现国际化_react i18n前端国际化-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,i18n国际化HTML是指通过使用i18n插件和相关工具,生成多语言版本的HTML文件。这样可以方便地在不同语言环境下展示网页内容。具体步骤如下: 1. 创建并封装language.js文件:在该文件中定义了网站支持的语言种类,并设置默认语言为繁体中文。通过使用$.i18n.properties方法,加载对应语言的资源文件,并将文本、value属性和placeholder属性进行替换。 2. 在HTML文件中引入language.js文件和相关依赖库:在HTML文件的<head>标签内引入jquery.js和jquery.i18n.properties-min.js等依赖库。然后在<body>标签内,通过使用i18n属性、i18n-v属性和i18n-p属性来标记需要国际化的文本、value值和placeholder属性。同时,可以通过按钮点击事件来切换不同的语言版本。 3. 使用i18nProp函数获取文本:在<script>标签内,可以使用i18nProp函数来获取对应的国际化文本。 总结来说,i18n国际化HTML是通过使用i18n插件和相关工具,在网页中实现多语言版本的生成和展示。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [HTML——国际化实现](https://blog.csdn.net/qq812457115/article/details/126191259)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [webpack-static-i18n-plugin:一个Webpack插件,实现了node-static-i18n来生成国际化HTML文件](https://download.csdn.net/download/weixin_42165980/18554275)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值