如何翻譯 CSV 檔案
TABLE OF CONTENTS
CSV 看起來很簡單,但翻譯時很容易出錯:欄位移位、引號破壞、非拉丁字元變亂碼,或是 ID 被「翻譯」成無法使用的內容。本指南提供一套安全、實用的工作流程,教你如何在保留結構的前提下翻譯 CSV 檔案,並附上 QA 檢查清單及常見問題的修復方法。
如果你想要最簡單的選擇,請使用支援 CSV 的翻譯工具(方法一),而不是把 CSV 文字直接貼到一般翻譯器裡。
在匯入翻譯後的檔案之前,請先依照本指南的 QA 檢查清單,及早發現欄位或編碼問題。
為什麼 CSV 翻譯容易出錯
CSV 是純文字格式,但它有結構規則:
- 分隔符號:通常是逗號(
,),有些地區則用分號(;)。 - 引號:文字值可能會用雙引號(
")包住。若值內有引號,必須跳脫(通常用"")。 - 儲存格內換行:允許,但必須正確加上引號。
- 編碼:你的檔案可能是 UTF‑8、帶 BOM 的 UTF‑8,或舊式編碼。
- 混合資料型態:數字、日期、SKU、ID、網址、占位符通常必須保持不變。
把 CSV 當「純文字」處理的翻譯工具,可能會不小心修改結構字元(分隔符號/引號/換行),或改變資料型態(日期/數字),導致匯入失敗。
開始之前
這些簡單步驟可以避免大多數 CSV 翻譯問題:
-
備份檔案
- 將
file.csv儲存為file.original.csv。 - 如果 CSV 包含客戶資料,請先移除或匿名化敏感欄位再上傳。
- 將
-
確認「不可翻譯」欄位 以下欄位請保持不變:
- ID、鍵值、SKU、訂單編號
- 網址、電子郵件、檔案路徑
- 占位符與變數(
{name}、{{amount}}、%s、:count) - 標籤、枚舉值、內部狀態碼(
PAID、REFUNDED) - 任何會被程式讀取的欄位(API 金鑰、JSON 資料、HTML 片段)
- 如果不確定,請參考:/what-not-to-translate
-
確認分隔符、引號規則與換行符
- 如果你打開 CSV 檔時「看起來只有一欄」,很可能是分隔符設定錯誤。
- 一般 CSV 使用
,作為分隔符,並以"作為引號(參見 RFC 4180:https://www.rfc-editor.org/rfc/rfc4180)。
-
確認編碼格式
- 多語內容建議使用 UTF‑8。
- 若要在 Windows 上用 Excel 開啟翻譯後的 CSV,可能需要 UTF‑8 with BOM,以避免出現亂碼。
- BOM 背景說明:https://unicode.org/faq/utf_bom.html
-
可選但建議:加入穩定的
row_id若 CSV 需後續重新匯入或比對,建議新增唯一鍵欄位(如row_id),以便確認資料列未被重新排序。
方法一 — 支援 CSV 結構的線上翻譯工具(推薦)
支援 CSV 結構的翻譯工具會將 CSV 視為結構化資料,而非「純文字」,因此較不容易破壞分隔符、引號或列/欄排版。匯入前務必執行 QA 檢查清單。
中立選項比較
| 選項 | 優勢 | 取捨 | 適用情境 |
|---|---|---|---|
| OpenL CSV Translator Online | 專為 CSV 結構設計;上傳下載快速 | 需上傳檔案;不適合敏感資料 | 快速、可靠的 CSV 草稿 |
| DeepL / Google Cloud / AWS Translate(API) | 可自動化;品質佳;適合批次流程 | 需工程技術與謹慎處理 CSV | 適合大量檔案翻譯的團隊 |
| CAT 工具(Smartling、Lokalise、Phrase 等) | 術語/QA、協作功能 | 設置較繁瑣且成本較高 | 大規模產品/UI 本地化 |
| 試算表公式(Sheets/Excel) | 無需額外工具 | 容易自動格式化或破壞 CSV | 僅適用小型、低風險檔案 |
限制與注意事項
- 請勿上傳您無權分享的敏感資料。如有需要,請先匯出經過去識別化的 CSV。
- 如果您的系統需要特定的標題名稱,請勿翻譯標題列。
- 匯入翻譯後的 CSV 前,務必執行 QA 檢查清單。
- 若您使用線上工具,請在工具頁面確認其上傳限制與支援的格式。
操作步驟
-
開啟工具
-
選擇語言
- 選擇您的目標語言。
-
上傳您的 CSV
- 上傳或拖曳您的
.csv檔案。 - 若您的 CSV 包含多個文字欄位,翻譯工具會在保留分隔符與引號安全的情況下翻譯內容。
- 上傳或拖曳您的
-
下載翻譯後的 CSV
- 以明確的檔名儲存,例如
products_es.csv。
- 以明確的檔名儲存,例如
最佳實踐建議
- 僅翻譯使用者會看到的欄位:如產品名稱、描述、介面字串、客戶提示等。
- 保持代碼欄位不變:請勿翻譯
status、type、sku、category_id、url、handle等。
方法二 — Google Sheets 或 Excel
此流程可行,但較容易不小心更改格式、分隔符或資料型態。
Google Sheets(適用小型檔案)
-
匯入 CSV
- Google Sheets → 檔案 → 匯入 → 上傳。
- 若資料只出現在一欄,請選擇正確的分隔符(逗號或分號)。
-
保護「勿翻譯」欄位
- 先將 ID 欄位格式設為純文字(如 SKU、訂單編號),避免
00123變成123。
- 先將 ID 欄位格式設為純文字(如 SKU、訂單編號),避免
-
僅翻譯目標欄位
- 在新欄位使用
=GOOGLETRANSLATE(A2,"en","es"),然後複製 → 貼上特定格式 → 僅值。 - 請勿對包含網址、占位符、代碼或公式的欄位執行翻譯公式。
- 在新欄位使用
-
匯出
- 檔案 → 下載 → 逗號分隔值 (.csv)(Google Sheets 匯出為 UTF‑8 編碼)。
Excel(Windows)— 正確匯入與匯出 UTF‑8 的方法
Excel 是編碼錯誤最常發生的地方。請按照以下步驟避免亂碼和分隔符問題。
A) 匯入 CSV 不產生亂碼
- 資料 → 從文字/CSV
- 在匯入對話框中:
- 檔案來源 / 編碼:選擇 65001: Unicode (UTF‑8)(不同版本用詞略有不同)
- 分隔符:逗號(
,)或分號(;),依你的檔案而定
- 點選 載入(或 轉換資料,如果需要將 ID 欄強制為 文字)
B) 匯出為 UTF‑8(以及何時使用 BOM)
- 檔案 → 另存新檔
- 在 儲存檔案類型 選擇:
- CSV UTF‑8(逗號分隔)(*.csv)(多語言文本推薦使用)
- 如果下游系統不接受 BOM,可用腳本匯出無 BOM 的 UTF‑8(參見「批次處理」),或用程式碼編輯器重新儲存。
常見陷阱
- 自動格式化:試算表可能會將像
00123的 ID 轉成123。 - 日期轉換:
2026-01-09可能顯示不同,匯出時也不一致。 - 分隔符變動:匯出時可能因地區設定改用
;。
如果你採用此方法,下方的 QA 區段必須執行。
進階流程 — 翻譯表
如果你的 CSV 同時包含「需翻譯」和「不需翻譯」的資料,請建立獨立的翻譯表,避免翻譯觸及敏感欄位。
步驟 1:建立翻譯表
新增一個 CSV(或工作表),格式如下:
| row_id | field | source_text | context | translated_text |
|---|---|---|---|---|
| 101 | product_title | Wireless Mouse | E-commerce product title | 無線滑鼠 |
| 101 | product_desc | Silent clicks, 2-year battery | Short description | 靜音點擊,電池續航兩年 |
| 102 | product_title | USB-C Charger | E-commerce product title | USB-C 充電器 |
| 102 | product_desc | Fast charging for phones and tablets | Short description | 手機和平板快速充電 |
| 103 | product_title | Stainless Steel Water Bottle | Product title | 不鏽鋼水瓶 |
| 103 | product_desc | BPA-free, keeps drinks cold 24h | Short description | 不含 BPA,飲品保冷 24 小時 |
| 104 | product_title | Noise-Canceling Headphones | Product title | 降噪耳機 |
| 104 | product_desc | Over-ear, Bluetooth 5.3 | Short description | 耳罩式,藍牙 5.3 |
merged.drop(columns=[c for c in merged.columns if c.endswith(“__translated”)], inplace=True) merged.to_csv(“products_es.csv”, index=False, encoding=“utf-8-sig”)
#### 範例(SQL join/update 模式)
```sql
-- translation_table(row_id, field, translated_text)
-- products(row_id, product_title, product_desc, ...)
UPDATE products p
SET product_title = t.translated_text
FROM translation_table t
WHERE p.row_id = t.row_id
AND t.field = 'product_title'
AND t.translated_text IS NOT NULL
AND t.translated_text <> '';
批次處理(多個 CSV 檔案)
如果你需要翻譯大量 CSV 檔案,請避免手動試算表操作,使用可重複的流程:
-
標準化輸入
- 轉換為 UTF‑8(如果你的匯入工具需要,可用 UTF‑8 with BOM)。
- 確保每個檔案都有穩定的鍵值(如
row_id/id)方便對應。
-
每個檔案生成翻譯表
- 只提取可翻譯欄位到
translation_table_<file>.csv。 - 如果偏好所有檔案合併一張表,保留
source_file欄位。
- 只提取可翻譯欄位到
-
翻譯表格
- 使用 API 工作流程或支援 CSV 的工具逐檔處理。
-
結果回寫與匯出
- 依據
row_id + field(若有用source_file也要對應)進行映射。 - 匯出時使用下游系統所需的編碼格式。
- 依據
最簡易的批次處理迴圈(穩定處理多檔案):
for f in ./input/*.csv; do
base="$(basename "$f" .csv)"
# 1) 擷取翻譯表(依你的資料結構實作)
# 2) 翻譯 translation_table_${base}.csv -> translation_table_${base}_translated.csv
# 3) 回寫並匯出 ${base}_translated.csv
echo "Processed: $base"
done
翻譯後 QA 檢查清單
下載翻譯後的 CSV 檔案,匯入前請執行以下檢查:
快速檢查
- 比較行數(macOS/Linux):
wc -l file.original.csv file.translated.csv - 以純文字編輯器開啟檔案,隨機檢查分隔符是否一致,確認分隔符號看起來相同。
- 選用:用 Python 驗證欄位數是否一致:
python -c "import csv,sys; p=sys.argv[1]; r=list(csv.reader(open(p,newline='',encoding='utf-8'))); print('rows',len(r),'max_cols',max(len(x) for x in r))" file.translated.csv
如果出現 Unicode 解碼錯誤,請先將 CSV 轉換為 UTF-8,或嘗試使用 utf-8-sig:
python -c "import csv,sys; p=sys.argv[1]; r=list(csv.reader(open(p,newline='',encoding='utf-8-sig'))); print('rows',len(r),'max_cols',max(len(x) for x in r))" file.translated.csv
結構檢查
- 行數未變:資料行數與原始檔案相同。
- 欄位數未變:每一行的欄位數一致。
- 分隔符未變:逗號或分號需與匯入工具設定一致。
- 引號正確:含有逗號或換行的欄位仍正確加上引號。
資料完整性檢查
- ID 與鍵值未變:比對
sku、id、row_id、handle等欄位。 - 網址/電子郵件未變:不得多出空格,網域名稱不得被翻譯。
- 數字保留:價格、數量、小數點等數值保持不變。
- 占位符保留:如
{name}、{{count}}、%s、:value等需完整保留。
翻譯品質檢查
- 術語一致:主要產品術語在各行翻譯一致。
- 長度限制遵守:介面標籤不宜過長(對應用程式尤為重要)。
- 無混合語言殘留:檢查常見原文詞彙是否已正確翻譯。
常見 CSV 翻譯問題排查
1) 翻譯後欄位錯位
現象
- 匯入工具提示「欄位數錯誤」
- 資料出現在錯誤的標題下
可能原因
- 翻譯欄位中包含未轉義的引號(
") - 翻譯欄位中包含逗號或換行符,但未正確加上引號
解決方法
- 確保 CSV 使用正確的引號規則(欄位外加雙引號,內部引號以
""轉義)。 - 使用支援 CSV 的工作流程重新翻譯(不要直接翻譯原始 CSV 文字)。
2) 字元亂碼(mojibake),如 ???? 或 é
可能原因
- 匯出或匯入時編碼錯誤(UTF‑8 與舊式編碼混用)
解決方法
- 匯出時選擇 UTF‑8 編碼。
- 若在 Windows 上使用 Excel,請嘗試 UTF‑8 with BOM。
- 避免手動複製貼上,這可能會改變編碼。
3) 前導零消失(00123 → 123)
可能原因
- 試算表自動格式化(Excel/Sheets)
解決方法
- 在編輯或匯出前,將 ID 欄位設為文字格式。
- 優先使用支援 CSV 的翻譯流程,避免資料被重新輸入或格式化。
4) 日期或小數格式被更改
範例
1,234.56變成1.234,562026-01-09變成09/01/2026
解決方法
- 不要翻譯數字或日期欄位。
- 保持數值機器可讀;顯示格式的在地化應於 UI 層處理,而非原始資料中。
5) 安全問題:CSV 注入(Excel 公式)
若翻譯後的儲存格以 =, +, - 或 @ 開頭,於 Excel 開啟時可能會被當作公式執行。
解決方法
- 若 CSV 會在試算表中開啟,請在有風險的儲存格前加單引號(
')或於匯出時進行清理。 - 考慮在翻譯或匯入前,移除使用者提供文字中的公式開頭字元。
- 參考資料:https://owasp.org/www-community/attacks/CSV_Injection
常見問題
如何翻譯 CSV 而不破壞欄位結構?
請使用支援 CSV 的工作流程,並在匯入前確認結構:
- 使用支援 CSV 的翻譯方法(方法一)
- 執行「快速檢查」及 QA 清單,確認列/欄數及引號格式正確
- 若 CSV 同時包含敏感欄位與用戶端文字,請採用「進階工作流程 — 翻譯表」
我可以只翻译 CSV 的某一栏吗?
可以。最安全的方法是建立一个翻译表(row_id + source_text + context),只翻译这一部分,再将翻译结果映射回原文件。这样可以避免误改 ID 和数值字段。
我需要翻译表头那一行吗?
这取决于你的使用场景:
- 如果 CSV 文件是给人阅读的(如报表、导出文件),建议翻译表头。
- 如果系统或导入工具需要特定字段名(如电商导入、数据库、应用程序),则不要翻译表头。
我的 CSV 用分号(;)而不是逗号,这样可以吗?
可以,但要确保你的工具或导入程序始终使用相同的分隔符。许多欧洲地区默认使用分号。分隔符不一致是 CSV 导入失败的常见原因。
如果单元格里有多行文本(换行符),该怎么处理?
CSV 支持多行单元格,但必须正确加引号。如果翻译内容包含换行,强烈建议使用支持 CSV 的翻译工具,以避免行被错误拆分。
工具推薦
- OpenL CSV Translator Online(支持 CSV 的在线工具示例):https://doc.openl.io/translate/csv
- Excel 工作流:另见“如何在线翻译 Excel” /how-to-translate-excel-online
- Markdown 内容:参见“如何翻译 Markdown” /how-to-translate-markdown
- 如需了解哪些内容不能翻译:参见“哪些内容不要翻译” /what-not-to-translate
总结
要安全翻译 CSV 文件,请保留结构(分隔符、引号、编码),保护“不可翻译”字段(ID、网址、占位符、数字)。优先采用支持 CSV 的翻译流程,导入前务必用 QA 检查表核对。


