《永恒之柱》双语本地化 (英汉)
A Bilingual Localization for Pillars of Eternity (EN and ZH)

原始链接: https://blog.cerrorism.com/blog/2026-03-19

这个项目始于个人兴趣,源于对《永恒之柱》的热爱以及对中文本地化中细微不准确之处的 frustration。作为非英语母语者,游戏中丰富细腻的对话在翻译后常常感觉语气“不对”,影响沉浸感。受到十年前论坛帖子的启发,目标成为一个双语本地化,同时显示英文和中文文本——一种潜在的语言学习工具。 最初,项目规模巨大且对文学英语理解缺乏信心,人工智能的进步至关重要。人工智能处理大部分技术工作,例如结构化文件和提出修改建议,而作者则提供细致的反馈,验证语气和意图。该方法优先为故事丰富的文本提供双语显示,同时为UI元素保持简洁的中文界面。 工作流程包括自动化脚本、人工智能审查,以及至关重要的*游戏游玩*,以识别自动化工具遗漏的细微错误。这个迭代过程,加上作者和人工智能之间不断增长的共享知识库,旨在完善本地化,并重现原始作者的意图,将本地化从一种实用工具转变为游戏体验不可或缺的一部分。该项目在GitHub上开源。

黑客新闻 新的 | 过去的 | 评论 | 提问 | 展示 | 工作 | 提交 登录 《永恒之柱》的双语本地化(英和中) (cerrorism.com) 5 分,作者 cerrorism 2 小时前 | 隐藏 | 过去的 | 收藏 | 1 条评论 帮助 cerrorism 2 小时前 [–] 我为《永恒之柱》构建了一个双语(英语 + 中文)本地化,主要是为了解决作为非母语者完全理解 CRPG 写作的困难。 想法很简单:对于故事文本,并排显示两种语言,同时保持 UI 文本的简洁。 让我惊讶的是,本地化质量很大程度上取决于上下文——细微的语气变化、用词选择以及只有在实际游玩场景时才有意义的台词。 这篇文章将介绍设计、工作流程(AI 参与其中)以及一些翻译微妙出错的实际例子。 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 申请 YC | 联系 搜索:
相关文章

原文

This is not a corporate postmortem. It’s a player diary with a developer’s toolbox.

I didn’t start this project because someone assigned me a localization task. I started because I love Pillars of Eternity, and because my relationship with language, gaming, and English is more complicated than it looks.


Why language has always been the obstacle

I’m not a native English speaker. In work, that’s fine — technical English, documentation, code reviews, Slack messages. I handle those without much trouble.

But CRPG writing is a different beast entirely.

Pillars of Eternity is essentially a novel you play. Pages of companion dialogue, lore entries, quest descriptions, NPC monologues — all of it dense, literary, full of tone and subtext. Even for native speakers, it’s a lot. For me, reading it in English felt like wading through mud. I’d understand the words, but I’d miss the texture. I’d get the meaning but lose the mood.

So I played in Chinese. Most of the time, the existing community localization served me well. The translation was solid. The game was enjoyable.

But most of the time isn’t all the time.

Every so often, I’d hit a line that felt slightly off. Not wrong enough to break gameplay, but just… tilted. A companion’s sarcasm reading as sincerity. A villain’s menace softened into politeness. An archaic flourish flattened into plain modern speech. Small things. But Pillars is a game where tone is gameplay — when a line slips, it pulls you out of the world. And in that slipping moment, you’re reminded: this text was written by someone else, adapted by someone else, and it’s showing.

That feeling nagged at me.


The bilingual idea: older than I thought

The thought of a bilingual localization — keeping both English and Chinese visible in-game — wasn’t originally mine.

In 2015, someone on the Obsidian forums posted exactly this idea: Bilingual Pillars of Eternity — Learn Languages While Playing. The concept was elegant: show both languages side by side so players could use the game as a language-learning tool. I loved it immediately.

The problem was, that post was ten years old. No one had built it for Chinese text. So I figured: maybe I should.

The bilingual format solved two things at once for me.

First, it gives me a safety net when the Chinese feels wrong. Instead of just suspecting a translation is off, I can glance at the English, and if I’m patient — or curious enough — I can pull up a dictionary and try to reconstruct what the original line actually meant. That slow, deliberate process of comparing both versions is exactly how I used to play games years ago.

I still remember grinding through Baldur’s Gate 2 and Tyranny that way — game open, English dictionary in another window, occasionally pausing mid-combat to look up a word I half-understood. It was slow. It was occasionally maddening. But nothing, absolutely nothing, was going to stop me from playing those games. Love of the genre beats all friction.

Second, it’s genuinely useful for learning. Seeing the English and Chinese next to each other in context — not in a textbook, but inside a world I’m invested in — is more effective than any flashcard app I’ve tried.


Why this was impossible until recently

Here’s the part I want to be honest about: I couldn’t have done this a year ago — not because the idea was too ambitious, but because I had two limitations that together made the project feel out of reach.

The first was scale. A localization of this size involves thousands of string table files across four data packages covering the base game and three expansions. Doing that manually, line by line, would take an unreasonable amount of time. I could imagine the workflow, but I couldn’t execute it alone at any reasonable speed.

The second was confidence. My English is decent for technical work, but literary English — the kind Pillars uses, full of archaic register, careful word choice, deliberate ambiguity — is harder. When I look at a line and think “the Chinese sounds wrong,” I wasn’t always sure I was right. Maybe the original really did mean that. Maybe my instinct was off. That uncertainty made me hesitant to commit changes.

AI changed both of those.

On the programming side, AI can do the things I know how to do — building scripts, structuring files, defining workflows, iterating on output formats — roughly a hundred times faster than I could alone. That means I can stay at the high level: define the task, shape the workflow, evaluate the results. The implementation details get handled. The scale problem dissolves.

On the language side, it’s subtler. AI doesn’t replace my understanding — but it gives me confidence in it. When I look at an English passage and form a reading, I can check that reading. I can ask whether the nuance I’m sensing is real, whether a particular word choice carries the weight I think it does. Most of the time, I’m right. And knowing that — being able to verify rather than just guess — removes the hesitation that used to slow me down.

Together, those two changes made the project feel possible in a way it simply wasn’t before.


My design decision: bilingual where story matters, concise where UI matters

Not all text has the same job — and I learned that the hard way, by actually running the scripts and loading the game.

Story text (conversations/, quests): keep both languages visible

[EN] ...
[ZH] ...

Dialogue and quest text is where I want to compare tone, catch translation drift, and feel authorial intent. Seeing both languages together makes that comparison immediate, without leaving the game.

A tavern conversation in the opening area — both the NPC narration and the dialogue choices show the bilingual format side by side.

A tavern conversation early in the game. The aumaua barkeep’s narration shows the [EN] description first, followed by [ZH] — and the player’s reply options follow the same pattern. The comparison is instant, without breaking the scene.

The same format carries into the quest journal. Every quest name, every objective, every lore entry — bilingual throughout.

The quest journal showing bilingual quest names on the left and a full bilingual quest description on the right.

The quest log for “The Master Below”. When a quest description reads oddly in Chinese, I can immediately check the English source. If I’m curious, I can look up the exact word choice and understand what the writer intended. That option didn’t exist before.

System/UI text (game/): keep it clean in Chinese only

UI labels, ability names, item names, menu options — these are about speed and readability. During combat or fast inventory navigation, bilingual clutter actively hurts. Chinese only.

The character sheet for my Watcher, Cerror — stats, abilities, and skills all displayed in Chinese with no English in sight.

My Watcher’s character sheet. Thirty-odd stats, passive bonuses, skill ranks, combat history — all in Chinese, clean and scannable. Adding English labels here would just be noise.

This split was one of the best decisions in the project. It respects how people actually read games: immersively for story, functionally for interface.


The workflow, in honest detail

Pass one: make it playable

The first pass is purely mechanical. A Python script walks through all the source files, pairs the existing English text with the existing Chinese text, and writes the [EN] / [ZH] format into the EZ string tables. No translation judgment yet — just structure.

Then I do a spot-check pass: load the game, walk around, look for format breaks, fix anything that crashes the UI or renders wrong. Repeat until the game is actually playable.

This is also when I discovered that the UI doesn’t need bilingual at all. The lesson wasn’t theoretical — I saw it in the game. Ability names, item tooltips, menu options with two lines of text crammed into a space designed for one. It looked terrible. The bilingual format is immersive in dialogue; in the UI, it’s just noise. That’s when I made the split.

Pass two: AI in the lead, human in the loop

The second pass is where the real work happens — and where I leaned hardest on AI.

I’m using two AI agents: Codex and Claude. They work independently on the same localization, reviewing each other’s output and catching issues the other missed. So far, they haven’t fought. If anything, they seem to collaborate — one flags something, the other confirms or refines. I’ll enjoy that while it lasts.

The workflow they follow: accumulate a batch of changes (roughly 30–50 edits), then open a pull request for me to review. I read through the diffs, leave comments, raise questions. If something feels wrong, I say so — but I’m careful to frame it correctly every time: I’m a Chinese speaker, not a native English speaker, and not a professional translator. Treat my comments as a signal about what feels off, not as a final answer about what’s right. That framing matters. It keeps the agents from over-correcting based on my imprecise wording while still trusting my instinct about what breaks.

Over time, this produced two documents that both AI agents and I keep adding to: a findings.md of recurring patterns and pitfalls, and a localization guide with concrete examples of decisions we’ve made. It started as my notes. Now it’s a shared document that Codex, Claude, and I are all writing together.

The third layer: playing the game

The part I enjoy most: sync_to_game.py deploys only the changed files to my local game installation, and then I just play.

Any time a line feels wrong — not wrong in an obvious way, but that small tilt where something doesn’t quite land — I take a screenshot. I think about what might be off. Then I ask ChatGPT. If ChatGPT confirms the translation is wrong, I do two things: I go into the repository and fix the line myself, and I write down the principle behind the fix so the agents can apply it to similar cases in the future.

This is the feedback loop that no automated pass can replace. And the reason why comes down to a single structural problem: the lines that matter most don’t live next to each other in the string tables.


Why context is the one thing AI can’t get from files alone

Let me show you what I mean with three real examples.

”transfixed” — a word that looks simple and isn’t

Early in the game, you encounter a man described like this:

[EN] You see a man wearing simple but mostly neat clothes. He’s transfixed, however, by a ragged tear in the seam of his tunic.

[ZH] 你看到一名男子,衣着朴素但大体整洁。然而,他被自己长袍缝线上的破洞迷住了

“迷住了” means fascinated — as if the tear in his clothes was beautiful or interesting. But transfixed here means something closer to staring vacantly, the way someone might stare at nothing when they’re embarrassed, or lost in thought.

This man is a down-on-his-luck nobleman. He’s not fascinated by the tear. He’s staring at it because he can’t quite accept it’s there. That’s a moment of quiet characterization — and the original Chinese turns it into a non sequitur.

I noticed it while playing. Asked ChatGPT. Fixed it. And added a note to the guide: transfixed in narrative description almost never means “fascinated”; check what emotional state it’s actually depicting.

”high-minded” — a word that sounds like a compliment

This one is subtle. Heodan, a companion you meet early, describes the Readcerans as hardworking but a little fanatical. You have a dialogue option to respond:

Heodan's dialogue — he's explaining why he left home.

The player's dialogue options, showing the second choice mistranslated as "你真是大度啊".

The original response is: “That’s high-minded of you.”

The translation: “你真是大度啊”“how magnanimous of you.”

High-minded in English means principled, idealistic, morally ambitious — sometimes used sincerely, sometimes with a light edge of dry humor. 大度 means forgiving, generous, magnanimous — an entirely different concept. You say 大度 when someone lets a slight go. You don’t say it when someone expresses a balanced, slightly lofty view of another culture.

The wrong word doesn’t break the scene. But it makes your character sound like they said something odd. That’s the kind of slippage that erodes immersion slowly, line by line.

”that’s no longer a concern” — a pronoun that murders a punchline

This is the one that made me most appreciate playing over reading files. Eder, the fighter companion, tells you that after the war, people started saying his brother sided with the enemy. He explains:

“I was safe because I fought, but then this rumor starts that my brother, that he was on the wrong side… they’d have to hang him to get to me.”

Then the scene shifts. He looks up.

Eder telling the story of his brother, with the line "they'd have to hang him to get to me."

Eder looking up at the swaying bodies in the tree, then saying "Seems that's no longer a concern."

His eyes follow one of the swaying bodies hanging from the tree.

“Seems that’s no longer a concern.”

Translation: “原因已经无关紧要了。”“The reason is no longer relevant.”

Concern is not reason. And “that” doesn’t refer to an abstract concept — it refers to his brother, who was standing between him and danger, and who is now hanging from that tree. The English line is deliberately understated, cold, dark. The translation gets the rough meaning across, but quietly drops the referent and the tone along the way — the kind of thing you’d never notice unless you were watching the scene unfold.

I could only catch this because I watched those two lines play out in sequence, in a scene, with the image of the bodies on screen. Those two lines are not adjacent in the string table. An AI reading files would see each in isolation and have no reason to connect them.

That’s the review that can only happen in the game.


Why this project became more personal than expected

I originally thought I was “just cleaning up text,” but it became a way to revisit one of my favorite games with a level of attention I’d never given it before.

Localization stopped being a background utility and became part of the play experience itself:

  • reading closer
  • noticing voice and tone
  • making deliberate choices about phrasing and register
  • learning by rewriting, not just consuming

There’s something quietly satisfying about it. It feels like co-traveling with the game’s writers, one line at a time — close-reading a world I already love, and leaving it a little more precise than I found it.


If I had to summarize this project in one sentence

I’m not building this because I must — I’m building it because I love this game, because I’ve always found a way to play the games I love regardless of the friction, and because for the first time, the tools exist to do it properly.

If any of this resonates with you, maybe your favorite RPG deserves the same treatment.

The project is open — scripts, string tables, glossary, and all the accumulated findings — at github.com/cerrorism/poe-localization.

联系我们 contact @ memedata.com