我最大的错误:为什么你应该从第一天就 i18n 你的 Next.js 应用(Vibe Coding 生存指南)

发布: (2026年4月5日 GMT+8 17:14)
8 分钟阅读
原文: Dev.to

Source: Dev.to

我构建了一个叫 FAMI‑KAN 的分账应用(最初面向日本市场),使用 Next.js 15 App RouterSupabase。由于我主要通过 Vibe Coding(使用 Claude/Gemini 等 AI 代理进行迭代编码)来开发,功能开发速度异常快。虽然我完全没有专业的编程经验,但 AI 让我能够打造出一个功能完整的产品。我当时觉得自己简直是天才。

随后,X(Twitter)扩展了多语言功能。突然之间,全球流量成为了真实的可能性。我意识到:

如果全球的用户通过 X 点击我的应用链接,却只能看到日文,我的用户旅程就彻底崩溃了。

于是,我决定把我的应用翻译成 8 种语言

“有了 AI 应该很容易吧?” 我这么想。

我大错特错。

从第一天起就没有使用 i18n(next-intl)是这个项目最大的失误。即便有 Vibe Coding 的强大助力,将已有的单体代码库迁移到国际化也是一场噩梦。下面是我如何在迁移过程中生存下来、AI 在此过程中的意外局限,以及最终的结果。

噩梦:5000 行组件

一开始,我没有把 UI 文本拆分到 JSON 字典中,而是直接在组件里硬编码日文字符串。我的主事件详情页(page.tsx)的代码膨胀到 超过 5000 行,充斥着复杂且状态繁重的 React 代码。

我的第一次尝试

我向 AI 代理询问:

“在这个 5000 行的文件中找出所有日文文本,并用 useTranslations() 替换它们。”

AI 的失败

AI 完全崩溃了。它触及了上下文窗口限制,输出被截断,还出现了幻觉变量。应用甚至无法编译。

解决方案

我必须停止把 AI 当作魔法棒来使用。

我没有让 AI 直接改写 React 组件,而是让它编写一个 Node.js AST(抽象语法树)替换脚本。我在本地运行该脚本,安全地分块提取并用 t('…') 替换字符串。

经验教训: 不要让 AI 直接编辑巨大的文件;让 AI 编写用于编辑这些文件的工具。

在 Next.js 15 中生存:“知识截止”陷阱

选择翻译库是另一个难题。我选择了 next-intl,因为它支持 App Router。然而,我的 Vibe Coding 方法却碰到了壁垒。

AI 的失误

大多数 AI 模型的训练数据截止到 2023 年或 2024 年初。Next.js 15 引入了一条严格的新规则:动态路由(如 [locale])中的 params 必须是一个 Promise。AI 不断生成旧的 Next.js 14 代码(params.locale),导致编译器(tsc --noEmit)不停地抛出错误。

解决方案

作为非程序员,我不知道如何通过阅读官方文档来修复它。于是只能盲目地把愤怒的编译器错误一次又一次地复制粘贴回 AI,迫使它通过暴力方式自行纠正并更新上下文。

经验教训: Vibe Coding 很强大,但 AI 的过时知识会让你与现代编译器搏斗。

保护我辛苦获得的 SEO

我最大的担忧之一是会破坏我为日本市场建立的 SEO。

如果我更改根 URL 结构,我现有的已索引页面和博客的反向链接都会失效。我明确指示 AI:

“不要触碰日语的现有路由结构。只在其他语言下添加 /en//es/ 作为子目录。”

得益于 next-intl 的中间件,我实现了这一点。根目录 / 仍然是日语(保护 SEO),而 /en/ 处理新的英文流量。此外,AI 还帮助我构建了一个动态的 sitemap.ts,以正确输出 hreflang 标签。

本地化 > 翻译(当 AI 过于有创意时)

我的应用为首次使用的用户生成示例演示数据。

在日语中,演示事件是 “The Tabei Family’s Trip to Okinawa.”

翻译问题

如果我仅字面翻译,英文用户会看到 “Trip to Okinawa.” 当然,他们可能知道东京或京都,但冲绳并不是全球每个人都熟悉的地点。

解决方案(AI 的惊人表现)

我对 AI 说:

“让演示数据对全球用户更自然。”

我本以为它只会使用 “Tokyo Trip” 或 “Kyoto Trip”。但令我惊讶的是,AI 完全进入本地化模式。它为每种语言重新编写了演示情境!

语言演示事件
西班牙语“Garcia一家去坎昆的旅行”
法语“Martin一家去尼斯的旅行”
印地语“Sharma一家去希姆拉的旅行”

AI 完全忽略了我原来的日语上下文,这其实是正确的做法。这种文化同理心让应用在全球用户眼中更具本土化体验。

Bonus: Localizing for AI Crawlers (llms.txt)

最终,我们已经进入了 Generative Engine Optimization (GEO) 时代。用户不再仅仅在搜索 Google;他们在向 ChatGPT 和 Gemini 提问。

我不仅仅翻译了 UI。我指示 AI 为英文 AI 爬虫创建了 /en/llms.txt/en/llms‑full.txt 文件。现在,当英文用户向 AI 询问 “有什么好的应用可以按比例分摊旅行费用?” 时,AI 拥有直接的英文本地化 Markdown 上下文可供读取,从而推荐我的应用。

结论

如果你今天要启动一个新的 Next.js 项目,从第一天起就加入 next-intl——即使你只支持母语。硬编码字符串以后会让你吃亏。

Vibe 编码是一种令人难以置信的超能力。它让我——一个没有编程背景的独立开发者——在几天内完成了一个包含 8 种语言的大规模更新。但 AI 仍有其局限,从上下文窗口到过时的框架知识。

如果你觉得这个故事有帮助,可以在这里查看 FAMI‑KAN here。我还将在下个月初在 Product Hunt 上发布,任何关于英文 UI 的反馈都将不胜感激!

你可以在 X 上关注我的公开创作,账号是 @vibe_archi

0 浏览
Back to Blog

相关文章

阅读更多 »