速查 › 文字表 .LOC
文字表 .LOC
版面檔不存文字,只存編號。真正的文字在
data\IGENG.LOC 與 data\FEENG.LOC 這兩個檔裡。
這頁把格式完整解開 —— 解開之後,你不用開遊戲就能看到每個介面元素寫什麼。
先看規模
| 檔案 | 剛安裝好的原版 | 本站測試機 | 字串數 | 負責哪裡 |
|---|---|---|---|---|
| IGENG.LOC | 59,432 bytes | 60,023 bytes | 1,584 | IG = in-game,比賽進行中的畫面 |
| FEENG.LOC | 415,528 bytes | 416,753 bytes | 6,352 | FE = front-end,選單與所有比賽外的畫面 |
| 合計 | 464 KB | 466 KB | 7,936 |
⚠️ 這一頁本來只寫了右邊那一欄
本站 2026-08-28 自我檢查時發現:原本那張表只列 60,023 與 416,753,
而那是本站測試機那兩個被 2023 年名冊模組換過的檔(檔案日期是 2023 年,原版是 2005 年)。
頁面底下明明寫著「測試機那份 FEENG.LOC 被模組換過」,最上面的規模表卻沒有跟著標。
字串數兩邊一樣(索引段的宣告值逐位元組相同),所以這頁的結構結論完全不受影響 —— 但這正是本站自己訂的紀律:數字要寫清楚量的是哪一份。現在兩欄都列出來。
上面每個數字都是把這兩個檔現場打開數出來的,不是引用他人資料。
檔名裡的 ENG 是語言代號。社群的中文化模組是換掉這兩個檔的內容;但 EA 自己的繁體中文版不是這樣做的 —— 它另外放一對 JPN 檔,沒有覆蓋 ENG。
三段式結構
LOCH ← 檔頭,20 bytes
LOCI ← 索引:每 4 bytes 一筆,把「字串編號」對到「第幾條」
LOCL ← 文字:條數 + 位移表 + UTF-16 內容
索引那 4 個位元組是兩個數字疊在一起
一筆索引 = (第幾條 << 16) | 字串編號
例:0x003B0506
高 16 位 0x003B = 59 ← 文字表的第 59 條
低 16 位 0x0506 = 1286 ← 版面檔裡寫的編號
所以查一個編號要兩步:先在索引裡找到它,取出「第幾條」, 再去文字表拿那一條。
文字是 UTF-16,不是一般的文字檔
每個字佔兩個位元組。所以你用一般文字編輯器或 strings 這類工具打開,
會什麼都看不到 —— 本站第一次也是這樣,以為檔案是加密的。
實際上只是英文字母中間夾了一堆 00。
這件事 2008 年就有人在論壇上想通了
本站在歷史資料裡翻到一篇 2008 年 9 月的貼文。作者一開始被人告知 中文要用 Big5 編碼,卡了一陣子, 後來是家裡的長輩點醒他:美國做的軟體要中文化,用的是萬國碼。
他接著寫下一個具體的步驟:查到「美」這個字的編碼是 7F8E,
但寫進檔案要把高低位元互換,變成 8E7F。
(本站不逐字引用當年的貼文,也不寫出作者的帳號。)
十八年後驗一次,他是對的
本站打開 EA 官方繁體中文版的兩個語系檔, 直接數「美」這個字的兩種位元組順序各出現幾次:
| 檔 | 8E 7F | 7F 8E |
|---|---|---|
| FEJPN.LOC | 43 | 0 |
| IGJPN.LOC | 7 | 0 |
50 次全部是互換過的順序,反過來一次都沒有。 其中一段的上下文是「美國職棒大聯盟2005」—— 那正是這款遊戲官方中文版的名字。
他當年說的「高低位元互換」,今天的說法叫 little-endian(小端序)。 他沒有這個詞,但他把規則講對了。
順帶一提,官方中文版的語系檔沿用了日文版的檔名
(FEJPN/IGJPN)。
這件事在EA 自己的繁體中文版那頁有量。
驗證:編號對得起來嗎
光解出格式不夠,要證明對應是正確的。方法是拿版面檔裡已知用途的元素 去查,看查出來的文字合不合理:
| 版面檔裡的元素 | 編號 | 查出來的文字 | 合理嗎 |
|---|---|---|---|
| TX:RATING(跑壘者速度) | 3501 | 99 | 合理 速度是兩位數 |
| TTX:BALLS(好壞球數) | 3013 | 3 | 合理 壞球數是一位數 |
| TX:PITCHSPEED1(球速) | 3500 | 999 | 合理 球速是三位數 |
| TX:PAUSE(暫停選單標題) | 15211 | Game Options | 合理 |
| TX:PRESS | 14275 | Press START button | 合理 |
全檔驗證
把 ingame.big 全部 47 個版面檔裡的字串引用都拿去查:
2,719 處引用,2,719 處查得到文字,命中率 100%。
兩張表重疊的那 1,310 個編號
兩個檔加起來 7,936 條,但編號不是各自獨立的: 有 1,310 個編號兩張表都有。
| 狀況 | 剛安裝好的原版 | 本站測試機 |
|---|---|---|
| 兩張表都有這個編號 | 1,310 | 1,310 |
| └ 文字完全一樣 | 1,310 | 1,295 |
| └ 文字不一樣 | 0 | 15 |
共用的編號很好理解 —— 「確定」「取消」這種字兩邊都要用。 剛安裝好的原版,1,310 個共用編號兩張表寫的字完全一樣,一個例外都沒有; 本站測試機那 15 個不一樣的,全部是 2023 年名冊模組造成的。 這裡挑三個最說明問題的(下表兩欄都是本站測試機的值):
| 編號 | 選單那張表 | 比賽中那張表 |
|---|---|---|
| 18 | back | Back |
| 704 | Home Run Derby | Home Run Showdown |
| 1540 | MVP Baseball 2023 | MVP Baseball™ 2005 |
第 1540 條說明了一件事:改一張表、不改另一張,遊戲就會前後不一致
編號 1540 是遊戲標題。本站測試機正在跑的那份, 選單那張表寫著 2023,比賽中那張表還是 2005。
改掉選單那張的是名冊模組 —— 它把隊名更新到 2023 年
(Devil Rays 改成 Rays、Indians 改成 Guardians、Anaheim Angels 改成 Los Angeles Angels),
順手把標題也改了。它其實兩個檔都動過,
漏掉的是 IGENG.LOC 裡標題那一條。
兩張表都要改,不然遊戲會有一半是舊的。這是本站實際踩到的,不是推論。
⚠️ 2026-09-05 訂正:這一段原本寫「名冊模組……但沒動 IGENG.LOC」,是錯的。
把本站測試機的 IGENG.LOC 跟剛安裝好的原版逐條比:共同的 1,584 個編號裡
203 條文字不同(Devil Rays→Rays、
Cleveland Indians→Cleveland Guardians、
Anaheim Angels→Los Angeles Angels,
還有一整批球場改名如 Bank One Ballpark™→Chase Field),
檔案日期也是 2023 年。模組漏掉的只有標題那一條,不是整個檔沒碰。
⚠️ 2026-08-25 訂正:這一段原本寫成「中文化模組只換了一張表」,是錯的。 測試機正在用的這兩張表一個中文字都沒有(實測含漢字的字串各 0 條)。 機器上確實另外留著一份中文化的備份,而那一份兩張表都換了 (IGENG 992 條、FEENG 4,914 條含漢字)。 把「這台機器上看到的現象」寫成「別人的做法」,本站又犯了一次。
同一條在兩張表裡的 ™ 符號也不一樣 —— 模組那張的商標符號被編碼弄壞了。 這說明字型與編碼是中文化最容易出事的地方。
⚠️ 編號 704 那組,本站原本寫錯了
原本寫「Home Run Derby / Home Run Showdown
是 EA 原版就不一樣的,跟模組無關」。反了。
拿剛安裝好的原版查:FEENG.LOC 與 IGENG.LOC 的第 704 條
都是 Home Run Showdown,
而 Home Run Derby 這個字串兩個檔加起來出現 0 次。
本站測試機那份 FEENG.LOC 被 2023 年的名冊模組換過(md5 跟原版不同),
差異是模組造成的,不是 EA 原版就有的。
這正是同一頁上面在講的那件事: 把這台機器上的現象寫成 EA 的做法。同一種錯,漏改了一處。
那些「不是給玩家看的」字串
翻文字表的時候會撞到一批明顯不是遊戲文案的東西。它們出現在正式出貨的遊戲裡:
| 位置 | 內容 | 看起來是什麼 |
|---|---|---|
| 兩個檔的第 0 條 | <some text> | 佔位字串 |
| 兩個檔的第 1 條 | Hello, world! | 程式設計的第一課,就這樣留在出貨版裡 |
| IG 287–293 FE 594–603 |
WWW / WWWW / … 最長 32 個 W |
見下方說明 |
| IG 284–285 | 999 / 99 | 數字欄位的佔位 |
| FE 4791–4793 | <Required> <********> |
註冊表單的欄位提示(還有一條是信箱格式範例) |
一整排 W 是有用途的
W 在大多數字型裡是最寬的字母。 想確認「這個欄位能不能塞得下 8 個字」,最保險的做法就是塞 8 個 W 進去看看。
所以那些 WWWW 不是打錯字,是版面寬度的測試字串。
翻譯成別的語言時,這種欄位最容易爆版。
其實還有第三套文字表
上面講的兩個 .LOC 是遊戲本體的。
但遊戲裡那個內建網站有自己的一套,
而且做法完全相反 —— 它是純文字的 XML,記事本直接打得開。
<Row>
<Id>BTN_OK</Id>
<en>OK</en>
</Row>
| 量到的 | 結果 |
|---|---|
| 檔案 | data\easo\mvp\main\MVP_lt_en.xml |
| 大小 | 142,317 bytes / 6,227 行 |
| 條目數 | 1,556 |
| 語言 | 只有英文(標籤是 <en>,看得出本來設計成可以多語) |
它的編號不是數字,是看得懂的名字:
| 前綴 | 幾條 | 是什麼 |
|---|---|---|
| UC_ | 201 | 照名字分類:按鈕、警告、訊息、說明、錯誤、頁籤… |
| ALERT_ | 79 | |
| BTN_ | 77 | |
| MSG_ | 72 | |
| SUBS_ | 58 | |
| DESC_ | 51 | |
| ERR_ | 45 | |
| TAB_ | 41 |
同一款遊戲,兩種完全相反的做法
| 遊戲本體 | 內建網站 | |
|---|---|---|
| 格式 | 二進位(要寫程式才讀得出來) | 純文字 XML(記事本就行) |
| 編號 | 數字(3501) | 名字(BTN_OK) |
| 條數 | 7,936 | 1,556 |
網頁那一套是用網頁技術做的,所以跟著網頁的慣例走。 同一片光碟裡,兩個團隊各做各的。
這份表裡有 32 個伺服器錯誤代號,
但那個故事頁講的 SERVER_ERROR_10016
不在裡面 —— 本站重驗過,確實查不到。
做成中文版要動的就是這兩個檔
版面檔只存編號,所以中文化不是改版面檔,是改 .LOC。
本站測試機的這兩個檔都還是英文;動過它們的是 2023 年的名冊模組,不是中文化模組。
本站教的中文化,是「搬」不是「從零做」
格式解開了。要「從零做一套中文」還缺兩塊,但要「把官方現成的中文搬到英文版」不缺:
一、寫回 .LOC 的工具後來做了 —— 在中文版配大球場就跳出那一課(mvp_fix_loc.py:照原結構寫回、索引偏移跟著更新、--apply 才真的寫、有 --restore)。本節原本寫「本站沒做,只做了讀」,那句已經過期。
二、字型檔的字圖集與字元表讀得出來(見那一頁 2026-09-05 的訂正),
但本站沒有從零產生一份、再寫回去的辦法 —— 中文字要顯示得出來,字型裡得先有那些字。
可繞過 第一塊後來做了;第二塊(從零造一套字型)確實還沒解 —— 讀得出來、寫不回去 —— 但不必解它:官方繁中版的中文字型是現成的,搬過去就好。所以本站有中文化教學,教的是把官方中文搬進英文版,不是教你從零刻一套中文字型。
另外拆解 EA 官方繁中版(兩份官方發行版的格式比對,不是教人做東西)見官方中文版拆給你看;官方那三個更新檔改了什麼見更新檔說明。
怎麼自己查
介面萬用工具內建了這個功能:
python mvp_fel_toolkit.py "你的遊戲資料夾" --strings fes_ingameoverlay.fel
版面檔 行號 元素 編號 文字
------------------------------------------------------------------
fes_ingameoverlay.fel 38 TEXT 23505 Argument Intensity
fes_ingameoverlay.fel 43 TEXT 1286 To Charge Mound Press
fes_ingameoverlay.fel 53 PRESS 14275 Press START button
fes_ingameoverlay.fel 126 PITCHSPEED1 3500 999
不加檔名就掃封裝檔裡的每一個版面檔(ingame.big 在本站測試機是 47 個,剛安裝好的原版是 44 個)。全程唯讀。
📌 重點整理
- 一句話 版面檔只存編號,真正的文字在
IGENG.LOC與FEENG.LOC這兩個 UTF-16 二進位檔裡,三段式格式已完全解開,兩檔合計 7,936 條。 - 關鍵數字
IGENG.LOC1,584 條管比賽中、FEENG.LOC6,352 條管選單與所有比賽外的畫面。索引一筆 4 個位元組是兩個數字疊在一起:高 16 位是「第幾條」、低 16 位是版面檔寫的編號。拿ingame.big全部 47 個版面檔的引用去查,2,719 處全部查得到,命中率 100%。 - 最容易誤讀的兩件事 一、文字是 UTF-16,一個字兩個位元組,用記事本或
strings打開什麼都看不到,本站第一次也以為檔案被加密,實際上只是字母中間夾了一堆00。二、同一個編號在兩張表可以寫不一樣的字,編號 1540 是遊戲標題,測試機的選單那張寫 2023、比賽中那張還是 2005,兩張表都要改,不然遊戲會有一半是舊的。 - 2008 年有人講對了,十八年後量到 當年那篇貼文說美國軟體中文化用的是萬國碼不是 Big5,而且「美」的編碼
7F8E寫進檔案要高低位元互換成8E7F。數 EA 官方繁中版的兩個語系檔:8E 7F出現 43 次與 7 次共 50 次,反過來一次都沒有。他沒有 little-endian 這個詞,但規則講對了。 - 本站訂正了自己四次 一、規模表原本只列測試機那一欄(那兩個檔被 2023 名冊模組換過),沒標是量哪一份,現在原版的 59,432 與 415,528 位元組兩欄都列。二、原本寫「中文化模組只換了一張表」是錯的,測試機那兩張表一個中文字都沒有,機器上另一份中文化備份是兩張都換(IGENG 992 條、FEENG 4,914 條含漢字)。三、編號 704 原本寫成「EA 原版就不一樣」,反了:剛安裝好的原版兩張表都是
Home Run Showdown,Home Run Derby兩個檔加起來出現 0 次,差異是模組造成的。四、原本寫名冊模組「沒動IGENG.LOC」,也是錯的:測試機那份跟剛安裝好的原版比有 203 條文字不同(隊名與球場名一起更新過),模組漏掉的只有標題那一條;而原版那 1,310 個共用編號兩張表寫的字完全一樣,測試機那 15 個不一樣全是模組造成的。 - 出貨版裡留著開發用字串 兩個檔的第 0 條是
<some text>、第 1 條是Hello, world!。那一排最長 32 個 W 也不是打錯字,W 在多數字型裡是最寬的字母,那是版面寬度的測試字串,翻譯成別的語言時這種欄位最容易爆版。 - 其實還有第三套文字表 遊戲內建網站自己一套,做法完全相反,是純文字 XML(
MVP_lt_en.xml,142,317 位元組/6,227 行/1,556 條),編號是看得懂的名字如BTN_OK。同一片光碟裡,兩個團隊各做各的。 - 本站沒驗的 寫回
.LOC的工具後來做了(見 中文版配大球場就跳出那一課);字型檔的字圖集與字元表讀得出來,仍然沒解的是從零產生一份、再寫回去,中文字要顯示得出來字型裡得先有那些字。但要「從零做一套中文字型」才需要它 —— 而本站的中文化教學是搬官方現成的,繞過這一塊,見把官方中文搬進英文版。