前端国际化:别让你的应用只懂一种语言

前端国际化:别让你的应用只懂一种语言

毒舌时刻

这应用写得跟方言似的,出了本地就没人懂。

各位前端同行,咱们今天聊聊前端国际化。别告诉我你的应用还只有中文版本,那感觉就像在国际会议上只说方言——能说,但没人懂。

为什么你需要国际化

最近看到一个项目,想拓展海外市场,但所有文本都是硬编码在代码里的。我就想问:你是在做本地应用还是在做国际产品?

反面教材

// 反面教材:硬编码文本 function App() { return ( <div> <h1>欢迎来到我的网站</h1> <p>这是一个示例应用</p> <button>点击我</button> <div> <h2>产品列表</h2> <ul> <li>产品 1</li> <li>产品 2</li> <li>产品 3</li> </ul> </div> </div> ); } export default App; 

毒舌点评:这代码,就像在写日记,只有自己能看懂。

正确姿势

1. i18next

// 正确姿势:i18next // 1. 配置 // i18n.js import i18n from 'i18next'; import { initReactI18next } from 'react-i18next'; const resources = { zh: { translation: { welcome: '欢迎来到我的网站', description: '这是一个示例应用', button: '点击我', products: '产品列表', product1: '产品 1', product2: '产品 2', product3: '产品 3' } }, en: { translation: { welcome: 'Welcome to my website', description: 'This is a sample application', button: 'Click me', products: 'Product List', product1: 'Product 1', product2: 'Product 2', product3: 'Product 3' } } }; i18n .use(initReactI18next) .init({ resources, lng: 'zh', fallbackLng: 'en', interpolation: { escapeValue: false } }); export default i18n; // 2. 使用 // App.jsx import React from 'react'; import { useTranslation } from 'react-i18next'; function App() { const { t, i18n } = useTranslation(); const changeLanguage = (lng) => { i18n.changeLanguage(lng); }; return ( <div> <div> <button onClick={() => changeLanguage('zh')}>中文</button> <button onClick={() => changeLanguage('en')}>English</button> </div> <h1>{t('welcome')}</h1> <p>{t('description')}</p> <button>{t('button')}</button> <div> <h2>{t('products')}</h2> <ul> <li>{t('product1')}</li> <li>{t('product2')}</li> <li>{t('product3')}</li> </ul> </div> </div> ); } export default App; // 3. 入口文件 // index.js import React from 'react'; import ReactDOM from 'react-dom'; import App from './App'; import './i18n'; ReactDOM.render( <React.StrictMode> <App /> </React.StrictMode>, document.getElementById('root') ); 

2. react-intl

// 正确姿势:react-intl // 1. 配置 // App.jsx import React from 'react'; import { IntlProvider, FormattedMessage } from 'react-intl'; const zhMessages = { welcome: '欢迎来到我的网站', description: '这是一个示例应用', button: '点击我', products: '产品列表', product1: '产品 1', product2: '产品 2', product3: '产品 3' }; const enMessages = { welcome: 'Welcome to my website', description: 'This is a sample application', button: 'Click me', products: 'Product List', product1: 'Product 1', product2: 'Product 2', product3: 'Product 3' }; function App() { const [locale, setLocale] = React.useState('zh'); const messages = locale === 'zh' ? zhMessages : enMessages; return ( <IntlProvider locale={locale} messages={messages}> <div> <div> <button onClick={() => setLocale('zh')}>中文</button> <button onClick={() => setLocale('en')}>English</button> </div> <h1><FormattedMessage /></h1> <p><FormattedMessage /></p> <button><FormattedMessage /></button> <div> <h2><FormattedMessage /></h2> <ul> <li><FormattedMessage /></li> <li><FormattedMessage /></li> <li><FormattedMessage /></li> </ul> </div> </div> </IntlProvider> ); } export default App; 

3. 日期和数字格式化

// 正确姿势:日期和数字格式化 import React from 'react'; import { useTranslation } from 'react-i18next'; function FormattingExample() { const { t, i18n } = useTranslation(); const formatDate = (date) => { return new Intl.DateTimeFormat(i18n.language).format(date); }; const formatNumber = (number) => { return new Intl.NumberFormat(i18n.language).format(number); }; return ( <div> <p>{t('currentDate')}: {formatDate(new Date())}</p> <p>{t('price')}: {formatNumber(12345.67)}</p> </div> ); } export default FormattingExample; 

毒舌点评:这才叫国际化,让你的应用在全球范围内都能被理解。

Read more

一分钟看完:深圳都有哪些机器人公司

1. 人形机器人与具身智能(当下最火,运控/LLM背景) 序号公司名称核心业务(10字内)公司地址(补齐与精确化)1优必选 (UBTECH)商业化双足人形机器人南山区学苑大道1001号南山智园 C1 栋2乐聚机器人 (Leju)人形机器人本体与算法南山区学苑大道1068号南山智园 C2 栋3众擎机器人 (EngineAI)通用人形与外骨骼电机南山区学苑大道1001号南山智园 (具体栋数在C区)4逐际动力 (LimX)动态双足/四足运控算法南山区南头街道前海华润金融中心 (研发中心)5星尘智能 (Astribot)绳驱 AI 机器人与灵巧手南山区打石一路深圳国际创新谷 6 栋6帕西尼感知 (PaXini)触觉传感器与人形手南山区粤海街道深圳湾科技生态园7自变量机器人 (X Square)端到端具身智能大模型南山区西丽街道万科云城8数字华夏康养与文旅服务人形机器人南山区西丽街道留仙大道创智云城9跨维智能 (DexForce)三维视觉与具身操作大模型南山区粤海街道软件产业基地10腾讯 Robotics X实验室前沿轮足与灵巧手南山区粤海街道腾讯滨海大厦/朗科大厦11易择智擎VLA 具身

FLUX.1-dev与Stable Diffusion对比评测:图像质量与生成速度

FLUX.1-dev与Stable Diffusion对比评测:图像质量与生成速度 作为一名长期关注AI图像生成技术的开发者,我一直在寻找能够在质量和速度之间取得最佳平衡的解决方案。最近,Black Forest Labs开源的FLUX.1-dev模型引起了我的注意,特别是它声称能够在消费级硬件上运行,同时保持出色的图像质量。 今天我将通过实际测试,从图像细节、风格控制、生成速度等多个维度,对比FLUX.1-dev与大家熟悉的Stable Diffusion,看看这两个模型在实际使用中究竟表现如何。 1. 测试环境与方法 为了确保对比的公平性,我搭建了统一的测试环境。使用NVIDIA RTX 4090显卡,24GB显存,Intel i9-13900K处理器,64GB DDR5内存。操作系统为Ubuntu 22.04,所有测试都在相同的硬件和软件环境下进行。 测试方法包括定量评估和定性分析。定量方面主要测量生成速度、内存占用等硬性指标;定性方面则通过同一组提示词生成图像,从视觉质量、细节表现、风格一致性等角度进行对比。 我选择了50组涵盖不同场景的提示词,包括人物肖像、风景

FPGA AD7606串行驱动与并行驱动

FPGA AD7606串行驱动与并行驱动

AD7606是一个八通道16分辨率的adc,有两种测量范围5v和10v,每个通道采样率最高200ksps,支持多种驱动方案,最常用的有串行方案与并行方案,其中串行方案采用spi协议进行数据传输,可以在io引脚不够用的情况下采用,而并行方案采用16个io在一个采样边沿同时接收一次采样数据。 首先介绍ad7606的内部结构 内部主要部分有四个模块,模块1是在每个通道处添加了2阶巴特沃斯模拟低通滤波器,用来抗混叠,其截止频率受电压测量范围影响,当范围为5v时截止频率15khz,10v时23khz 因此在使用ad7606测量截止频率以上的信号时,需要在前方加入仪表放大器来放大信号,否则信号会被ad7606滤除 模块2用来控制复位、测量范围、通道转换,range为0时测量范围0~5v,1时测量范围0~10v,通道转换是指八个通道可分为两组,A组包含0~3通道,B组包含4~7通道,转换的意思就是在adc内部进行模拟量向数字量的转换,转换需要消耗一定的时间,而要指定那组通道转换则受convst信号影响,convst A信号拉高会让A组转换,convst B拉高会让B组转换,一般convst

图谱驱动大模型智能体普惠时代:Neo4j Aura Agent正式全面上线

图谱驱动大模型智能体普惠时代:Neo4j Aura Agent正式全面上线

摘要: Neo4j Aura Agent正式商用,基于知识图谱的智能体构建平台实现分钟级部署,重塑企业AI应用开发范式。 往期推荐 [290页电子书]打造企业级知识图谱的实战手册,Neo4j 首席科学家力作!从图数据库基础到图原生机器学习 [550页电子书]2025年10月最新出版-知识图谱与大语言模型融合的实战指南:KG&LLM in Action [30页电子书]GraphRAG开发者指南 [180页电子书]GraphRAG全面解析及实践-Neo4j:构建准确、可解释、具有上下文意识的生成式人工智能应用 [140页]Neo4j GraphRAG白皮书 引言 在AI智能体(Agentic AI)市场快速扩张的当下,Neo4j宣布其开创性的智能体创建平台——Neo4j Aura Agent正式进入全面可用阶段,并在2026年2月全月提供免费使用。这一平台为AuraDB客户带来了革命性的体验:只需几分钟即可构建和部署基于知识图谱的智能体,并配备强大的新功能——包括基于本体的自动化智能体构建,以及一键部署到安全托管的MCP服务器。 智能体AI不仅仅是制造巨大的市