前端國際化-插件模式

文章目錄

  • Webpack 插件開發
  • 解析中文
  • 調用有道翻譯 API
  • 生成 JSON 語言文件
  • React 國際化實現

Webpack 插件開發

  • 創建 i18n-webpack-plugin.js 插件:
  • 在 src 目錄下掃描所有文件
  • 使用 babel-parser 解析 JavaScript/JSX 代碼
  • 識別中文文本
  • 通過有道翻譯 API 翻譯
  • 生成 locales/en.json(英語)和 locales/zh.json(中文)
const fs = require("fs");
const path = require("path");
const parser = require("@babel/parser");
const traverse = require("@babel/traverse").default;
const fetch = require("node-fetch");class I18nWebpackPlugin {constructor(options) {this.options = options || {};this.localeDir = path.resolve(process.cwd(), "locales");this.zhJsonPath = path.join(this.localeDir, "zh.json");this.enJsonPath = path.join(this.localeDir, "en.json");}async extractChinese(content) {const ast = parser.parse(content, { sourceType: "module", plugins: ["jsx"] });const chineseTexts = new Set();traverse(ast, {StringLiteral({ node }) {if (/[\u4e00-\u9fa5]/.test(node.value)) {chineseTexts.add(node.value);}},JSXText({ node }) {if (/[\u4e00-\u9fa5]/.test(node.value.trim())) {chineseTexts.add(node.value.trim());}}});return Array.from(chineseTexts);}async translateText(text) {const apiKey = "your-app-key";const apiSecret = "your-app-secret";const url = `https://openapi.youdao.com/api?q=${encodeURIComponent(text)}&from=zh-CHS&to=en&appKey=${apiKey}`;const response = await fetch(url);const data = await response.json();return data.translation ? data.translation[0] : text;}async apply(compiler) {compiler.hooks.emit.tapAsync("I18nWebpackPlugin", async (compilation, callback) => {const srcDir = path.resolve(process.cwd(), "src");const files = fs.readdirSync(srcDir).filter(file => file.endsWith(".js") || file.endsWith(".jsx"));let translations = {};for (const file of files) {const content = fs.readFileSync(path.join(srcDir, file), "utf-8");const chineseTexts = await this.extractChinese(content);for (const text of chineseTexts) {if (!translations[text]) {translations[text] = await this.translateText(text);}}}if (!fs.existsSync(this.localeDir)) {fs.mkdirSync(this.localeDir);}fs.writeFileSync(this.zhJsonPath, JSON.stringify(translations, null, 2), "utf-8");fs.writeFileSync(this.enJsonPath, JSON.stringify(translations, null, 2), "utf-8");console.log("? 國際化 JSON 文件已生成!");callback();});}
}module.exports = I18nWebpackPlugin;

解析中文

  • 使用 babel-parser 解析代碼,提取 JSX 內的中文文本和 JavaScript 代碼中的字符串中文。

調用有道翻譯 API

有道 API 示例:

const fetch = require('node-fetch');async function translate(text, from = 'zh-CHS', to = 'en') {const appKey = 'your-app-key';const appSecret = 'your-app-secret';const url = `https://openapi.youdao.com/api?q=${encodeURIComponent(text)}&from=${from}&to=${to}&appKey=${appKey}`;const response = await fetch(url);const data = await response.json();return data.translation[0]; // 返回翻譯結果
}

生成 JSON 語言文件

掃描所有 src 目錄的文件后,創建 locales/en.json 和 locales/zh.json 語言包,格式如下:

{"首頁": "Home","你好": "Hello"
}

React 國際化實現

  • 使用 react-intl 或 i18next 進行國際化支持,并在 App.js 中引入翻譯文件,動態切換語言。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/899721.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/899721.shtml
英文地址,請注明出處:http://en.pswp.cn/news/899721.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IP屬地和發作品的地址不一樣嗎

在當今這個數字化時代,互聯網已經成為人們日常生活不可或缺的一部分。隨著各大社交平臺功能的不斷完善,一個新功能——IP屬地顯示,逐漸走進大眾視野。這一功能在微博、抖音、快手等各大平臺上得到廣泛應用,旨在幫助公眾識別虛假信…

PP-ChatOCRv3新升級:多頁PDF信息抽取支持自定義提示詞工程,拓展大語言模型功能邊界

文本圖像信息抽取技術在自動化辦公、建筑工程、教育科研、金融風控、醫療健康等行業領域具有廣泛應用場景。2024年9月,飛槳低代碼開發工具PaddleX中新增文本圖像智能產線PP-ChatOCRv3,充分結合PaddleOCR的文本圖像版面解析能力和文心一言語言理解優勢&am…

算法刷題記錄——LeetCode篇(1.2) [第11~20題](持續更新)

更新時間:2025-03-29 LeetCode題解專欄:實戰算法解題 (專欄)技術博客總目錄:計算機技術系列目錄頁 優先整理熱門100及面試150,不定期持續更新,歡迎關注! 17. 電話號碼的字母組合 給定一個僅包含數字 2-9…

如何在 vue 渲染百萬行數據,vxe-table 渲染百萬行數據性能對比,超大量百萬級表格渲染

vxe-table 渲染百萬行數據性能對比,超大量百萬級表格渲染;如何在 vue 渲染百萬行數據;當在開發項目時,遇到需要流暢支持百萬級數據的表格時, vxe-table 就可以非常合適了,不僅支持強大的功能,虛…

阿里 FunASR 開源中文語音識別大模型應用示例(準確率比faster-whisper高)

文章目錄 Github官網簡介模型安裝非流式應用示例流式應用示例 Github https://github.com/modelscope/FunASR 官網 https://www.funasr.com/#/ 簡介 FunASR是一個基礎語音識別工具包,提供多種功能,包括語音識別(ASR)、語音端…

如何使用 LLaMA-Factory 微調 LLaMA3

【LLaMa3微調】使用 LLaMA-Factory 微調LLaMA3 實驗環境 1.1 機器 操作系統:Windows 10 或 UbuntuPyTorch 版本:2.1.0Python 版本:3.10(針對Ubuntu 22.04)Cuda 版本:12.1GPU 配置:p100 (16GB) …

使用Java ApI 實現Hadoop文件上傳

目錄 文件傳輸步驟 windows的本機文件傳輸 linux的虛擬機文件傳輸 文件傳輸步驟 建立連接 在connect2HDFS()方法中,通過設置Configuration對象來指定HDFS的URI(在這個例子中為hdfs://192.168.12.133:9000),并初始化一個FileSys…

喜訊 | 耘瞳科技視覺檢測與測量裝備榮膺“2024機器視覺創新產品TOP10”

3月28日,全球機器視覺行業盛會VisionChina2025(上海)機器視覺展完美收官。展會期間,由機器視覺產業聯盟(CMVU)舉辦的“2024機器視覺創新產品TOP10”企業名單正式揭曉,耘瞳科技“工業跨尺度場景實…

數據可視化(matplotlib)-------圖表樣式美化

目錄 一、圖表樣式概述 (一)、默認圖表樣式 (二)、圖表樣式修改 1、局部修改 2、全局修改 二、使用顏色 (一)、使用基礎顏色 1、單詞縮寫或單詞表示的顏色 2、十六進制/HTML模式表示的顏色 3、RGB…

202518 | Ngnix

Ngnix是什么 Nginx(發音為“engine-x”)是一個開源的高性能HTTP服務器、反向代理服務器、負載均衡器和郵件代理服務器。它由俄羅斯程序員Igor Sysoev開發,首次發布于2004年,旨在解決C10K問題(即如何高效地處理10,000個…

WP Mail 郵件發送:WordPress Mail SMTP設置

在我們WordPress搭建個人網站完成后,讀者或者客戶發送的電子郵件,包括你的WPForms電子郵件通知,如果無法到達預定收件人收件箱,這會對我們網站的運營造成很大的影響,問題在于WordPress Mail SMTP的發送方式。 SMTP&am…

小智機器人關鍵函數解析:MqttProtocol::SendAudio()對輸入的音頻數據進行加密處理,通過UDP發送加密后的音頻數據

MqttProtocol::SendAudio()對輸入的音頻數據進行加密處理&#xff0c;通過UDP發送加密后的音頻數據。 源碼&#xff1a; void MqttProtocol::SendAudio(const std::vector<uint8_t>& data) {// 使用互斥鎖保護臨界區&#xff0c;確保同一時間只有一個線程可以訪問該…

Hadoop 常用命令集總覽

Hadoop 常用命令集總覽 在大數據處理領域&#xff0c;Hadoop 作為一種廣泛應用的分布式系統基礎架構&#xff0c;其重要性不言而喻。熟練掌握 Hadoop 的常用命令對于高效的數據處理和分析工作至關重要。本文將對 Hadoop 的常用命令進行專業而詳盡的列舉&#xff0c;并結合實例進…

mac m4 Homebrew安裝MySQL 8.0

1.使用Homebrew安裝MySQL8 在終端中輸入以下命令來安裝MySQL8&#xff1a; brew install mysql8.0 安裝完成后&#xff0c;您可以通過以下命令來驗證MySQL是否已成功安裝&#xff1a; 2.配置mysql環境變量 find / -name mysql 2>/dev/null #找到mysql的安裝位置 cd /op…

GoLand 2024.3 中文 GO語言開發工具

GoLand 2024.3 中文 GO語言開發工具 文章目錄 GoLand 2024.3 中文 GO語言開發工具一、介紹二、效果三、下載 一、介紹 JetBrains GoLand 2024 &#xff0c;是一款GO語言開發工具&#xff0c;全行代碼補全&#xff1a;能使用本地運行的上下文感知深度學習模型&#xff0c;可以自…

Excel去掉單元格里面的換行的方法

方法一&#xff1a;使用“查找和替換”功能 ?選中單元格?&#xff1a;首先選中需要替換換行符的單元格或區域。 ?打開替換窗口?&#xff1a;按下“CtrlH”快捷鍵&#xff0c;打開“查找和替換”對話框。 ?輸入換行符?&#xff1a; 在“查找內容”框中&#xff0c;你可…

React 中的 Props

Props&#xff08;Properties 的縮寫&#xff09;是 React 中用于組件間通信的核心機制。它們允許數據從父組件單向傳遞到子組件。Props 是 React 組件不可變&#xff08;只讀&#xff09;的輸入參數&#xff0c;這種特性使得組件更加可預測且易于維護。 Props 的核心特性 單…

基于簡單神經網絡的線性回歸

一、概述 本代碼實現了一個簡單的神經網絡進行線性回歸任務。通過生成包含噪聲的線性數據集&#xff0c;定義一個簡單的神經網絡類&#xff0c;使用梯度下降算法訓練網絡以擬合數據&#xff0c;并最終通過可視化展示原始數據、真實線性關系以及模型的預測結果。 二、依賴庫 …

?19.思科路由器:OSPF協議引入直連路由的實驗研究

思科路由器:OSPF協議引入直連路由的實驗研究 一、實驗拓撲二、基本配置2.1、sw1的配置2.2、開啟交換機三層功能三、ospf的配置3.1、R1的配置3.2、R2的配置3.3、重啟ospf進程四、引入直連路由五、驗證結果隨著互聯網技術的不斷發展,路由器作為網絡互聯的關鍵設備,其性能與穩定…

USB——刪除注冊表信息

文章目錄 背景工具下載地址工具使用刪除注冊表信息背景 注測表中已記錄這個設備的信息,但現在設備描述符又指定為了 WinUSB 設備,所以當設備再次插入的時候,不會發送 0xEE 命令,造成了枚舉失敗。 兩種處理方式: 修改枚舉時候的 VID/PID刪除 USB 的注冊表信息工具下載地址…