如何翻譯 CSV 檔案

OpenL Team 1/9/2026

TABLE OF CONTENTS

CSV 看起來很簡單,但翻譯時很容易出錯:欄位移位、引號破壞、非拉丁字元變亂碼,或是 ID 被「翻譯」成無法使用的內容。本指南提供一套安全、實用的工作流程,教你如何在保留結構的前提下翻譯 CSV 檔案,並附上 QA 檢查清單及常見問題的修復方法。

如果你想要最簡單的選擇,請使用支援 CSV 的翻譯工具(方法一),而不是把 CSV 文字直接貼到一般翻譯器裡。

在匯入翻譯後的檔案之前,請先依照本指南的 QA 檢查清單,及早發現欄位或編碼問題。

為什麼 CSV 翻譯容易出錯

CSV 是純文字格式,但它有結構規則:

  • 分隔符號:通常是逗號(,),有些地區則用分號(;)。
  • 引號:文字值可能會用雙引號(")包住。若值內有引號,必須跳脫(通常用 "")。
  • 儲存格內換行:允許,但必須正確加上引號。
  • 編碼:你的檔案可能是 UTF‑8、帶 BOM 的 UTF‑8,或舊式編碼。
  • 混合資料型態:數字、日期、SKU、ID、網址、占位符通常必須保持不變。

把 CSV 當「純文字」處理的翻譯工具,可能會不小心修改結構字元(分隔符號/引號/換行),或改變資料型態(日期/數字),導致匯入失敗。

開始之前

這些簡單步驟可以避免大多數 CSV 翻譯問題:

  1. 備份檔案

    • file.csv 儲存為 file.original.csv
    • 如果 CSV 包含客戶資料,請先移除或匿名化敏感欄位再上傳。
  2. 確認「不可翻譯」欄位 以下欄位請保持不變:

    • ID、鍵值、SKU、訂單編號
    • 網址、電子郵件、檔案路徑
    • 占位符與變數({name}{{amount}}%s:count
    • 標籤、枚舉值、內部狀態碼(PAIDREFUNDED
    • 任何會被程式讀取的欄位(API 金鑰、JSON 資料、HTML 片段)
    • 如果不確定,請參考:/what-not-to-translate
  3. 確認分隔符、引號規則與換行符

  4. 確認編碼格式

    • 多語內容建議使用 UTF‑8
    • 若要在 Windows 上用 Excel 開啟翻譯後的 CSV,可能需要 UTF‑8 with BOM,以避免出現亂碼。
    • BOM 背景說明:https://unicode.org/faq/utf_bom.html
  5. 可選但建議:加入穩定的 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 檢查清單。
  • 若您使用線上工具,請在工具頁面確認其上傳限制與支援的格式。

操作步驟

  1. 開啟工具

  2. 選擇語言

    • 選擇您的目標語言。
  3. 上傳您的 CSV

    • 上傳或拖曳您的 .csv 檔案。
    • 若您的 CSV 包含多個文字欄位,翻譯工具會在保留分隔符與引號安全的情況下翻譯內容。
  4. 下載翻譯後的 CSV

    • 以明確的檔名儲存,例如 products_es.csv

最佳實踐建議

  • 僅翻譯使用者會看到的欄位:如產品名稱、描述、介面字串、客戶提示等。
  • 保持代碼欄位不變:請勿翻譯 statustypeskucategory_idurlhandle 等。

方法二 — Google Sheets 或 Excel

此流程可行,但較容易不小心更改格式、分隔符或資料型態。

Google Sheets(適用小型檔案)

  1. 匯入 CSV

    • Google Sheets → 檔案 → 匯入 → 上傳
    • 若資料只出現在一欄,請選擇正確的分隔符(逗號或分號)。
  2. 保護「勿翻譯」欄位

    • 先將 ID 欄位格式設為純文字(如 SKU、訂單編號),避免 00123 變成 123
  3. 僅翻譯目標欄位

    • 欄位使用 =GOOGLETRANSLATE(A2,"en","es"),然後複製 → 貼上特定格式 → 僅值
    • 請勿對包含網址、占位符、代碼或公式的欄位執行翻譯公式。
  4. 匯出

    • 檔案 → 下載 → 逗號分隔值 (.csv)(Google Sheets 匯出為 UTF‑8 編碼)。

Excel(Windows)— 正確匯入與匯出 UTF‑8 的方法

Excel 是編碼錯誤最常發生的地方。請按照以下步驟避免亂碼和分隔符問題。

A) 匯入 CSV 不產生亂碼

  1. 資料 → 從文字/CSV
  2. 在匯入對話框中:
    • 檔案來源 / 編碼:選擇 65001: Unicode (UTF‑8)(不同版本用詞略有不同)
    • 分隔符:逗號(,)或分號(;),依你的檔案而定
  3. 點選 載入(或 轉換資料,如果需要將 ID 欄強制為 文字

B) 匯出為 UTF‑8(以及何時使用 BOM)

  1. 檔案 → 另存新檔
  2. 儲存檔案類型 選擇:
    • CSV UTF‑8(逗號分隔)(*.csv)(多語言文本推薦使用)
    • 如果下游系統不接受 BOM,可用腳本匯出無 BOM 的 UTF‑8(參見「批次處理」),或用程式碼編輯器重新儲存。

常見陷阱

  • 自動格式化:試算表可能會將像 00123 的 ID 轉成 123
  • 日期轉換2026-01-09 可能顯示不同,匯出時也不一致。
  • 分隔符變動:匯出時可能因地區設定改用 ;

如果你採用此方法,下方的 QA 區段必須執行。

進階流程 — 翻譯表

如果你的 CSV 同時包含「需翻譯」和「不需翻譯」的資料,請建立獨立的翻譯表,避免翻譯觸及敏感欄位。

步驟 1:建立翻譯表

新增一個 CSV(或工作表),格式如下:

row_idfieldsource_textcontexttranslated_text
101product_titleWireless MouseE-commerce product title無線滑鼠
101product_descSilent clicks, 2-year batteryShort description靜音點擊,電池續航兩年
102product_titleUSB-C ChargerE-commerce product titleUSB-C 充電器
102product_descFast charging for phones and tabletsShort description手機和平板快速充電
103product_titleStainless Steel Water BottleProduct title不鏽鋼水瓶
103product_descBPA-free, keeps drinks cold 24hShort description不含 BPA,飲品保冷 24 小時
104product_titleNoise-Canceling HeadphonesProduct title降噪耳機
104product_descOver-ear, Bluetooth 5.3Short 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 檔案,請避免手動試算表操作,使用可重複的流程:

  1. 標準化輸入

    • 轉換為 UTF‑8(如果你的匯入工具需要,可用 UTF‑8 with BOM)。
    • 確保每個檔案都有穩定的鍵值(如 row_id / id)方便對應。
  2. 每個檔案生成翻譯表

    • 只提取可翻譯欄位到 translation_table_<file>.csv
    • 如果偏好所有檔案合併一張表,保留 source_file 欄位。
  3. 翻譯表格

    • 使用 API 工作流程或支援 CSV 的工具逐檔處理。
  4. 結果回寫與匯出

    • 依據 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 與鍵值未變:比對 skuidrow_idhandle 等欄位。
  • 網址/電子郵件未變:不得多出空格,網域名稱不得被翻譯。
  • 數字保留:價格、數量、小數點等數值保持不變。
  • 占位符保留:如 {name}{{count}}%s:value 等需完整保留。

翻譯品質檢查

  • 術語一致:主要產品術語在各行翻譯一致。
  • 長度限制遵守:介面標籤不宜過長(對應用程式尤為重要)。
  • 無混合語言殘留:檢查常見原文詞彙是否已正確翻譯。

常見 CSV 翻譯問題排查

1) 翻譯後欄位錯位

現象

  • 匯入工具提示「欄位數錯誤」
  • 資料出現在錯誤的標題下

可能原因

  • 翻譯欄位中包含未轉義的引號("
  • 翻譯欄位中包含逗號或換行符,但未正確加上引號

解決方法

  • 確保 CSV 使用正確的引號規則(欄位外加雙引號,內部引號以 "" 轉義)。
  • 使用支援 CSV 的工作流程重新翻譯(不要直接翻譯原始 CSV 文字)。

2) 字元亂碼(mojibake),如 ????é

可能原因

  • 匯出或匯入時編碼錯誤(UTF‑8 與舊式編碼混用)

解決方法

  • 匯出時選擇 UTF‑8 編碼。
  • 若在 Windows 上使用 Excel,請嘗試 UTF‑8 with BOM
  • 避免手動複製貼上,這可能會改變編碼。

3) 前導零消失(00123123

可能原因

  • 試算表自動格式化(Excel/Sheets)

解決方法

  • 在編輯或匯出前,將 ID 欄位設為文字格式。
  • 優先使用支援 CSV 的翻譯流程,避免資料被重新輸入或格式化。

4) 日期或小數格式被更改

範例

  • 1,234.56 變成 1.234,56
  • 2026-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 检查表核对。