手写i18n层对比:bloub为何拒绝vue-i18n,用240行代码实现三语支持
前端图形学【免费下载链接】bloubSVG recreation of the x.ai bot avatar. One shape morphing through 14 states, measured off the reference video frame by frame.项目地址https://gitcode.com/gh_mirrors/bl/bloub点击查看免费下载bloub是一个用 SVG 复刻 x.ai 机器人头像的 Vue 3 小项目一个黑色图形在 14 种状态间形变表情、颜色、形状都能自定义。它的多语言功能没有使用 vue-i18n而是用src/i18n/目录下约 240 行手写 TypeScript 实现了法、英、中三语支持——这是量出来的取舍而非固执己见。先上对比数据为什么值得手写方案gzip 体积语言能力未知键检查vue-i18n34.4 kB日期、货币、复数、懒加载…运行时才发现bloub 手写层0.55 kB3 种语言、约 90 条文案编译期报错项目里没有任何日期或货币格式需求只有 3 种语言、约 90 条文案。为一个如此小的需求引入 34.4 kB 的依赖bloub 的答案是否。数据出处docs/i18n.md。手写层的全部家当src/i18n/index.ts —— 入口语言切换与t()函数src/i18n/langues.ts —— 语言定义与检测规则刻意不碰 DOMsrc/i18n/format.ts —— 插值与复数机制纯函数易于测试src/i18n/locales/fr.ts / en.ts / zh.ts —— 三语字典src/i18n/i18n.test.ts —— 完整性测试fr.ts 是契约漏翻译直接编译失败三个字典中最巧的设计fr.ts 是参考字典en和zh的类型都被声明为typeof fr你在fr.ts里新增一个键 →vue-tsc立刻在en.ts、zh.ts报编译错误漏翻译根本进不了 CI而t(reglage.x)这样的调用因为键名不存在同样编译不通过——vue-i18n 只能到运行时才发现。两个容易被忽视的细节千万不要给fr.ts加as const那样每个值都会变成字面量类型所有翻译都会被拒绝英文字符串不是法文字符串键名本身也有类型t()的签名只接受fr.ts里真实存在的键路径。语言检测检测 ≠ 记忆langues.ts 里的choisirLangue规则很克制显式选择永远优先——用户手动切过英文不会因为换了网络就变回法语否则按顺序遍历navigator.languages这是偏好排序不是集合取第一个会说的标签解析走Intl.Locale而非split(-)[0]这样zh-Hans-CN能正确落到zh全都不匹配时回退到默认法语。关键设计自动检测到的语言不写入 localStorage只有用户明确选择才通过 stockage.ts 持久化。否则一个首次从海外访问的用户语言会被冻结永远改不回来。语言列表刻意用内名Français / English / 简体中文而非翻译名——语言列表本来就是给看不懂该语言的人看的翻译它没有意义。复数与数字交给 Intl别自己拼format.ts只解决两件事插值{name}占位符替换没有提供值的占位符原样保留屏幕上看得见比空字符串更容易排查复数法语把 0 归为单数0 animation英语归为复数0 animations中文没有复数。字典里用|分隔单复数形式由Intl.PluralRules裁决而不是n 1。数字格式同理——法语小数用逗号、英语用点中文单位前不加空格。bloub 用带缓存的Intl.NumberFormatnombre/pourcentage/secondes而不是.replace(., ,)式的土办法。顺带一提timeline.ts 保持纯函数所有本地化格式化都从/i18n走模块间零耦合。标点符号属于翻译不属于代码这是文档里最较真的一条法语要« … »加不间断空格英语要…中文要全角标点且单位前不留空格。如果某个组件自己往文案前面拼一个«三种语言立刻坏掉两种。所以引号、空格、标点全部写进字典里由 zh.ts 这类文件自行承载。这些状态名Idle / 待机 / 眨眼……就来自字典的states目录在 BlockPicker.vue、Timeline.vue 等组件中通过t()渲染全项目共207 处t()调用。还有一处精妙设计未命名的动画序列不存 Default cycle 字符串而是存空串显示时经nomDeCycle()解析——这样默认名会跟随当前语言。写死名字的话首次访问写入 localStorage 后就变成了用户数据换语言也不会再翻译。什么时候该换回 vue-i18n作者没有留模糊地带docs/i18n.md 明确列出了切换门槛需要懒加载语言包首屏变重时语言超过10 种出现非开发者译者需要消息平台、XLIFF 流程等工具链。届时只需重写src/i18n/内部207 处调用方一行都不用动——这就是把接口收敛在 240 行里的价值。小结问题bloub 的答案键名打错 / 漏翻译typeof fr 路径类型编译期拦截语言检测尊重显式选择 按序匹配 默认法语复数差异Intl.PluralRules字典里|分形式数字与标点Intl 写进翻译代码零拼接何时换 vue-i18n懒加载 / 10 语言 / 非开发者译者对个人项目够用 类型安全 体积极小往往比引入成熟库更划算。240 行不是偷懒而是把复杂度花在了刀刃上。想跑起来看看克隆仓库后执行pnpm install pnpm dev打开浏览器即可切换三种语言。赞分享前端图形学【免费下载链接】bloubSVG recreation of the x.ai bot avatar. One shape morphing through 14 states, measured off the reference video frame by frame.项目地址https://gitcode.com/gh_mirrors/bl/bloub点击查看免费下载相关推荐Vue I18n 国际化插件完整指南如何为Vue应用添加多语言支持Vue I18n 国际化插件完整指南如何为Vue应用添加多语言支持 Vue I18n 是 Vue.js 的官方国际化插件让开发者能够轻松为应用程序添加多语言前端国际化Stylis核心组件详解Parser、Tokenizer和Serializer的工作原理Stylis核心组件详解Parser、Tokenizer和Serializer的工作原理 Stylis作为一款轻量级CSS预处理器其核心功能由ParserQQ空间说说备份用GetQzonehistory免费备份全部历史说说QQ空间说说备份用GetQzonehistory免费备份全部历史说说 打开QQ空间网页把说说往早年翻互动列表只展示有限页数更老的内容往往不在列表里。Get网页爬虫数据分析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

DeepSeek从入门到精通:MoE架构、API集成与参数调优实战指南

DeepSeek从入门到精通:MoE架构、API集成与参数调优实战指南

简介:围绕DeepSeek大语言模型的系统性入门到精通指南,内容从技术原理、使用操作到工程应用层层递进,覆盖自然语言处理、多语言处理、编程辅助和接口开发等场景;资源面向AI开发者、研究人员及普通用户,既可作为新手首次…

2026/10/12 14:46:47 阅读更多 →
Win8.1安装程序集成DWM桌面合成器:环境检测、毛玻璃与降级策略

Win8.1安装程序集成DWM桌面合成器:环境检测、毛玻璃与降级策略

1. 为什么要在安装程序里折腾桌面合成器 第一次看到“给安装程序加上 DWM”这个思路,我脑子里蹦出来的画面是:一个本该老老实实跑进度条、复制文件、写注册表的安装界面,突然开始玩起了毛玻璃、窗口动画和实时缩略图。听起来像是吃饱了撑的&a…

2026/10/12 14:47:00 阅读更多 →
康茂盛气动选型软件:离线选型、BOM导出与CAD模型对接实操

康茂盛气动选型软件:离线选型、BOM导出与CAD模型对接实操

简介:这份资源是康茂盛(Camozzi)气动元件选型软件,面向从事自动化设备、非标机械与气动系统设计的工程师及设计专业学生,用于解决气动执行元件、控制元件、气源处理装置、真空元件等产品在选型与三维建模环节的效率问题…

2026/10/12 14:47:05 阅读更多 →

最新新闻

图像加密算法设计:有限域置换多项式与Matlab实现

图像加密算法设计:有限域置换多项式与Matlab实现

图像加密和文本加密有一个很本质的区别:一段文字用AES加密之后,人眼根本看不出规律,但图像不一样,它天然带有强烈的空间结构、数据冗余和可视化特征。我第一次接触图像加密课题时,导师给的方向是“有限域置换多项式”&…

2026/10/13 9:24:57 阅读更多 →
让 DALL·E 生成全程透明:Image Prompt Reveal 系统提示词设计深度解析

让 DALL·E 生成全程透明:Image Prompt Reveal 系统提示词设计深度解析

提示工程AI 安全治理 【免费下载链接】TheBigPromptLibrary A collection of prompts, system prompts and LLM instructions 项目地址: https://gitcode.com/gh_mirrors/th/TheBigPromptLibrary 点击查看 免费下载 本文围绕 TheBigPromptLibrary 仓库中的 Image P…

2026/10/13 9:24:57 阅读更多 →
Ark UI MCP Server 完全指南:为 AI 助手接入组件、示例与文档的七个工具与配置实战

Ark UI MCP Server 完全指南:为 AI 助手接入组件、示例与文档的七个工具与配置实战

前端UI组件设计系统 【免费下载链接】ark Unstyled, accessible UI components for your design System. Works in React, Vue, Solid, and Svelte. 项目地址: https://gitcode.com/gh_mirrors/ar/ark 点击查看 免费下载 本文聚焦 Ark UI 官方推出的 MCP&#xff0…

2026/10/13 9:24:57 阅读更多 →
Upscayl 免费 AI 图像放大工具:从安装到放大第一张图片

Upscayl 免费 AI 图像放大工具:从安装到放大第一张图片

Upscayl 免费 AI 图像放大工具:从安装到放大第一张图片 【免费下载链接】upscayl 🆙 Upscayl - #1 Free and Open Source AI Image Upscaler for Linux, MacOS and Windows. 项目地址: https://gitcode.com/GitHub_Trending/up/upscayl Upscayl 是…

2026/10/13 9:24:57 阅读更多 →
Zero 构建指南:运行、构建、交叉编译与剖析 Zero 程序

Zero 构建指南:运行、构建、交叉编译与剖析 Zero 程序

【免费下载链接】zerolang The Programming Language for Agents 项目地址: https://gitcode.com/gh_mirrors/zero54/zerolang 点击查看 免费下载 本篇指南以 Zerolang(Zero)编译器的构建子系统为核心,系统讲解 graph 输入的约定…

2026/10/13 9:24:57 阅读更多 →
AIGC创作训练营:从工具使用到工作流设计的系统化训练

AIGC创作训练营:从工具使用到工作流设计的系统化训练

1. 从"会用AI"到"驾驭AI":AIGC创作训练营到底在训练什么很多人第一次接触AIGC,都是从"帮我写一段文案""帮我生成一张图"开始的。提示词丢进去,结果出来,能用就复制粘贴,不能用…

2026/10/13 9:23:55 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →