Cách dịch một tệp CSV

OpenL Team 1/9/2026

TABLE OF CONTENTS

CSV trông có vẻ đơn giản, nhưng việc dịch nó có thể gặp lỗi rất nhanh: cột bị lệch, dấu ngoặc kép bị hỏng, ký tự không phải chữ Latinh bị lỗi, hoặc ID bị “dịch” thành thứ không thể sử dụng. Hướng dẫn này sẽ chỉ cho bạn quy trình dịch CSV an toàn, thực tế mà vẫn giữ nguyên cấu trúc, kèm theo checklist kiểm tra chất lượng và cách khắc phục các lỗi thường gặp.

Nếu bạn muốn cách đơn giản nhất, hãy dùng công cụ dịch hỗ trợ CSV (Phương pháp 1) thay vì sao chép văn bản CSV vào trình dịch văn bản thông thường.

Trước khi nhập tệp đã dịch, hãy chạy checklist kiểm tra chất lượng trong hướng dẫn này để phát hiện sớm các vấn đề về cột hoặc mã hóa.

Vì Sao Dịch CSV Lại Khó

CSV là văn bản thuần túy, nhưng có các quy tắc cấu trúc:

  • Ký tự phân tách: thường là dấu phẩy (,), đôi khi là dấu chấm phẩy (;) ở một số khu vực.
  • Dấu ngoặc kép: giá trị văn bản có thể được bao trong dấu ngoặc kép ("). Dấu ngoặc kép bên trong giá trị phải được escape (thường là "").
  • Xuống dòng trong ô: được phép, nhưng chỉ khi ô đó được đặt đúng dấu ngoặc kép.
  • Mã hóa: tệp của bạn có thể là UTF‑8, UTF‑8 với BOM, hoặc các mã hóa cũ.
  • Kiểu dữ liệu hỗn hợp: số, ngày tháng, SKU, ID, URL và placeholder thường phải giữ nguyên.

Các công cụ dịch coi CSV là “chỉ là văn bản” có thể vô tình làm thay đổi ký tự cấu trúc (phân tách/ngắt dòng/ngoặc kép) hoặc biến đổi kiểu dữ liệu (ngày tháng/số), dẫn đến lỗi khi nhập lại.

Trước Khi Bắt Đầu

Các bước nhanh sau giúp tránh hầu hết lỗi khi dịch CSV:

  1. Sao lưu tệp gốc

    • Lưu file.csvfile.original.csv.
    • Nếu CSV chứa dữ liệu khách hàng, hãy xóa hoặc ẩn thông tin nhạy cảm trước khi tải lên bất cứ đâu.
  2. Xác định các trường “không dịch” Giữ nguyên các trường sau:

    • ID, khóa, SKU, số đơn hàng
    • URL, email, đường dẫn tệp
    • Placeholder và biến ({name}, {{amount}}, %s, :count)
    • Thẻ, giá trị enum, mã trạng thái nội bộ (PAID, REFUNDED)
    • Bất kỳ trường nào được sử dụng bởi mã nguồn (API key, JSON blob, đoạn mã HTML)
    • Nếu không chắc chắn, xem thêm: /what-not-to-translate
  3. Xác nhận dấu phân cách, quy tắc dấu ngoặc kép và kết thúc dòng

    • Nếu bạn mở tệp CSV mà “trông như chỉ có một cột”, rất có thể dấu phân cách đã bị sai.
    • CSV tiêu chuẩn thường dùng dấu phân cách , và dấu ngoặc kép " (xem RFC 4180: https://www.rfc-editor.org/rfc/rfc4180).
  4. Xác nhận mã hóa

    • Ưu tiên UTF‑8 cho nội dung đa ngôn ngữ.
    • Nếu bạn sẽ mở tệp CSV đã dịch bằng Excel trên Windows, có thể cần UTF‑8 với BOM để tránh lỗi ký tự.
    • Thông tin về BOM: https://unicode.org/faq/utf_bom.html
  5. Không bắt buộc nhưng nên làm: thêm một cột row_id ổn định Đối với các tệp CSV sẽ được nhập lại hoặc đối chiếu sau này, hãy thêm một cột khóa duy nhất (ví dụ: row_id) để bạn có thể kiểm tra các dòng không bị thay đổi thứ tự.

Phương pháp 1 — Công cụ dịch trực tuyến nhận diện CSV (khuyến nghị)

Các công cụ dịch nhận diện CSV xử lý tệp CSV như dữ liệu có cấu trúc, không chỉ là “văn bản thuần túy”, nên ít có khả năng làm hỏng dấu phân cách, dấu ngoặc kép hoặc bố cục dòng/cột. Luôn kiểm tra lại theo danh sách QA trước khi nhập lại dữ liệu.

So sánh các lựa chọn trung lập

Lựa chọnƯu điểmHạn chếPhù hợp nhất cho
OpenL CSV Translator OnlineThiết kế riêng cho cấu trúc CSV; tải lên/tải xuống nhanhQuy trình dựa trên tải lên; không phù hợp với dữ liệu nhạy cảmBản dịch CSV nháp nhanh, đáng tin cậy
DeepL / Google Cloud / AWS Translate (API)Tự động hóa; chất lượng tốt; phù hợp quy trình hàng loạtCần kỹ thuật + xử lý CSV cẩn thậnNhóm dịch nhiều tệp
CAT tools (Smartling, Lokalise, Phrase, v.v.)Quản lý thuật ngữ/QA, làm việc nhómCần thiết lập nhiều + chi phíĐịa phương hóa sản phẩm/giao diện quy mô lớn
Công thức bảng tính (Sheets/Excel)Không cần công cụ bổ sungDễ tự động định dạng hoặc làm hỏng CSVChỉ dùng cho tệp nhỏ, ít rủi ro

Giới hạn và lưu ý

  • Đừng tải lên dữ liệu nhạy cảm mà bạn không được phép chia sẻ. Nếu cần, hãy xuất trước một file CSV đã được làm sạch.
  • Nếu hệ thống của bạn yêu cầu tên tiêu đề cụ thể, đừng dịch dòng tiêu đề.
  • Luôn chạy danh sách kiểm tra QA trước khi nhập file CSV đã dịch.
  • Nếu bạn sử dụng công cụ trực tuyến, hãy kiểm tra giới hạn tải lên và định dạng được hỗ trợ trên trang công cụ đó.

Các bước thực hiện

  1. Mở công cụ

  2. Chọn ngôn ngữ

    • Chọn các ngôn ngữ đích của bạn.
  3. Tải lên file CSV

    • Tải lên hoặc kéo thả file .csv của bạn.
    • Nếu file CSV của bạn có nhiều cột văn bản, công cụ dịch sẽ dịch nội dung mà vẫn giữ nguyên dấu phân cách và dấu ngoặc kép an toàn.
  4. Tải về file CSV đã dịch

    • Lưu lại với tên rõ ràng như products_es.csv.

Thực hành tốt để đạt kết quả tốt hơn

  • Chỉ dịch các cột hiển thị cho người dùng: tiêu đề sản phẩm, mô tả, chuỗi giao diện, ghi chú dành cho khách hàng.
  • Giữ nguyên mã: không dịch các trường như status, type, sku, category_id, url, handle.

Phương pháp 2 — Google Sheets hoặc Excel

Quy trình này có thể sử dụng, nhưng dễ vô tình thay đổi định dạng, dấu phân cách hoặc kiểu dữ liệu.

Google Sheets (file nhỏ)

  1. Nhập file CSV

    • Google Sheets → Tệp → Nhập → Tải lên.
    • Nếu dữ liệu của bạn hiển thị trong một cột, hãy chọn đúng dấu phân cách (dấu phẩy hoặc dấu chấm phẩy).
  2. Bảo vệ các cột “không dịch”

    • Định dạng các cột ID thành Văn bản thuần trước (ví dụ: SKU, mã đơn hàng) để tránh 00123 thành 123.
  3. Chỉ dịch các cột mục tiêu

    • Sử dụng =GOOGLETRANSLATE(A2,"en","es") trong một cột mới, sau đó Sao chép → Dán đặc biệt → Chỉ giá trị.
    • Không chạy công thức dịch trên các cột chứa URL, placeholder, mã hoặc công thức.
  4. Xuất file

    • Tệp → Tải xuống → Giá trị phân tách bằng dấu phẩy (.csv) (Google Sheets xuất ra UTF‑8).

Excel (Windows) — cách nhập và xuất UTF‑8 đúng cách

Excel là nơi thường xảy ra lỗi mã hóa nhất. Hãy làm theo các bước sau để tránh ký tự bị lỗi và vấn đề về dấu phân cách.

A) Nhập CSV mà không bị lỗi ký tự

  1. Dữ liệu → Từ văn bản/CSV
  2. Trong hộp thoại nhập:
    • Nguồn tệp / Mã hóa: chọn 65001: Unicode (UTF‑8) (cách diễn đạt có thể khác tùy phiên bản)
    • Dấu phân cách: Dấu phẩy (,) hoặc dấu chấm phẩy (;) phù hợp với tệp của bạn
  3. Nhấn Tải (hoặc Chuyển đổi dữ liệu nếu bạn cần ép cột ID thành Văn bản)

B) Xuất dưới dạng UTF‑8 (và khi nào nên dùng BOM)

  1. Tệp → Lưu dưới dạng
  2. Ở mục Lưu dưới dạng loại, chọn:
    • CSV UTF‑8 (Comma delimited) (*.csv) (khuyến nghị cho văn bản đa ngôn ngữ)
    • Nếu hệ thống phía sau của bạn không chấp nhận BOM, hãy xuất UTF‑8 không BOM bằng script (xem “Xử lý hàng loạt”) hoặc lưu lại bằng trình soạn thảo mã.

Những lỗi thường gặp

  • Tự động định dạng: bảng tính có thể chuyển ID như 00123 thành 123.
  • Chuyển đổi ngày tháng: 2026-01-09 có thể hiển thị khác và xuất ra không nhất quán.
  • Thay đổi dấu phân cách: xuất ra có thể chuyển sang ; tùy theo cài đặt vùng miền.

Nếu bạn dùng phương pháp này, phần QA bên dưới là bắt buộc.

Quy trình nâng cao — Bảng dịch

Nếu CSV của bạn là hỗn hợp giữa dữ liệu “cần dịch” và “không cần dịch”, hãy tạo một bảng dịch riêng để quá trình dịch không ảnh hưởng đến các trường nhạy cảm.

Bước 1: Tạo bảng dịch

Tạo một tệp CSV (hoặc sheet) mới như sau:

row_idfieldsource_textcontexttranslated_text
101product_titleWireless MouseE-commerce product titleChuột không dây
101product_descSilent clicks, 2-year batteryShort descriptionNhấp chuột êm, pin dùng 2 năm
102product_titleUSB-C ChargerE-commerce product titleBộ sạc USB-C
102product_descFast charging for phones and tabletsShort descriptionSạc nhanh cho điện thoại và máy tính bảng
103product_titleStainless Steel Water BottleProduct titleBình nước inox
103product_descBPA-free, keeps drinks cold 24hShort descriptionKhông chứa BPA, giữ lạnh 24 giờ
104product_titleNoise-Canceling HeadphonesProduct titleTai nghe chống ồn
104product_descOver-ear, Bluetooth 5.3Short descriptionChụp tai, Bluetooth 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”)


#### Ví dụ (mẫu join/update trong SQL)

```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 <> '';

Xử lý hàng loạt (nhiều tệp CSV)

Nếu bạn cần dịch nhiều tệp CSV, hãy tránh các bước thủ công trên bảng tính và sử dụng một quy trình tự động lặp lại:

  1. Chuẩn hóa đầu vào

    • Chuẩn hóa về UTF‑8 (hoặc UTF‑8 với BOM nếu hệ thống nhập liệu của bạn yêu cầu).
    • Đảm bảo mỗi tệp đều có một khóa ổn định (row_id / id) để đối chiếu.
  2. Tạo bảng dịch cho từng tệp

    • Chỉ trích xuất các trường cần dịch vào translation_table_<file>.csv.
    • Giữ một cột source_file nếu bạn muốn gộp tất cả vào một bảng chung.
  3. Dịch các bảng

    • Sử dụng quy trình API hoặc công cụ hỗ trợ CSV cho từng tệp.
  4. Ghép kết quả và xuất

    • Đối chiếu theo row_id + field (và source_file nếu có).
    • Xuất ra với mã hóa mà hệ thống phía sau của bạn yêu cầu.

Vòng lặp khởi động tối giản (xử lý nhiều tệp một cách nhất quán):

for f in ./input/*.csv; do
  base="$(basename "$f" .csv)"
  # 1) trích xuất bảng dịch (triển khai theo cấu trúc dữ liệu của bạn)
  # 2) dịch translation_table_${base}.csv -> translation_table_${base}_translated.csv
  # 3) ghép lại và xuất ${base}_translated.csv
  echo "Đã xử lý: $base"
done

Danh sách kiểm tra QA sau dịch

Sau khi bạn tải về tệp CSV đã dịch, hãy thực hiện các kiểm tra sau trước khi nhập liệu:

Kiểm tra nhanh

  • So sánh số dòng (macOS/Linux): wc -l file.original.csv file.translated.csv
  • Kiểm tra nhanh tính nhất quán của dấu phân cách bằng cách mở file trong trình soạn thảo văn bản thuần và xác nhận các ký tự phân tách giống nhau.
  • Tùy chọn: xác minh số lượng cột nhất quán bằng 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

Nếu bạn gặp lỗi giải mã Unicode, hãy chuyển đổi file CSV sang UTF-8 trước, hoặc thử dùng 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

Kiểm tra cấu trúc

  • Số dòng không thay đổi: số dòng dữ liệu giống như bản gốc.
  • Số cột không thay đổi: mỗi dòng có cùng số lượng cột.
  • Dấu phân cách không thay đổi: dấu phẩy hoặc chấm phẩy nhất quán với trình nhập của bạn.
  • Dấu ngoặc kép hợp lệ: các trường có dấu phẩy/xuống dòng vẫn được đặt trong dấu ngoặc kép đúng cách.

Kiểm tra tính toàn vẹn dữ liệu

  • ID và khóa không thay đổi: so sánh các trường sku, id, row_id, handle.
  • URL/email không thay đổi: không có khoảng trắng thừa, không dịch tên miền.
  • Số liệu được giữ nguyên: giá, số lượng, số thập phân không bị thay đổi.
  • Giữ nguyên placeholder: {name}, {{count}}, %s, :value vẫn giữ nguyên.

Kiểm tra chất lượng bản dịch

  • Thuật ngữ nhất quán: các thuật ngữ sản phẩm chính được dịch giống nhau ở mọi dòng.
  • Tuân thủ giới hạn độ dài: nhãn giao diện không quá dài (quan trọng với ứng dụng).
  • Không còn sót lại ngôn ngữ gốc: rà soát các từ nguồn phổ biến cần được dịch.

Xử lý sự cố thường gặp khi dịch file CSV

1) Cột bị lệch sau khi dịch

Triệu chứng

  • Trình nhập báo “số lượng cột không đúng”
  • Giá trị xuất hiện dưới tiêu đề sai

Nguyên nhân có thể

  • Một trường đã dịch chứa dấu ngoặc kép chưa được escape (")
  • Một trường đã dịch chứa dấu phẩy/xuống dòng nhưng không được đặt trong dấu ngoặc kép đúng cách

Cách khắc phục

  • Đảm bảo tệp CSV sử dụng quy tắc đặt dấu ngoặc kép đúng (dùng dấu ngoặc kép đôi bao quanh trường; dấu ngoặc kép bên trong được escape thành "").
  • Dịch lại bằng quy trình hỗ trợ CSV (thay vì dịch trực tiếp văn bản CSV thô).

2) Ký tự bị lỗi (mojibake) như ???? hoặc é

Nguyên nhân có thể

  • Sai mã hóa khi xuất/nhập (UTF‑8 so với mã hóa cũ)

Cách khắc phục

  • Xuất tệp dưới dạng UTF‑8.
  • Nếu sử dụng Excel trên Windows, hãy thử UTF‑8 có BOM.
  • Tránh sao chép/dán thủ công vì có thể làm thay đổi mã hóa.

3) Số 0 ở đầu bị mất (00123123)

Nguyên nhân có thể

  • Tự động định dạng bảng tính (Excel/Sheets)

Cách khắc phục

  • Đặt các cột ID ở dạng văn bản trước khi chỉnh sửa/xuất tệp.
  • Ưu tiên dịch bằng quy trình hỗ trợ CSV để không làm thay đổi kiểu dữ liệu.

4) Định dạng ngày hoặc số thập phân bị thay đổi

Ví dụ

  • 1,234.56 thành 1.234,56
  • 2026-01-09 thành 09/01/2026

Cách khắc phục

  • Không dịch các cột số/ngày tháng.
  • Giữ giá trị ở dạng máy có thể đọc được; chỉ bản địa hóa định dạng hiển thị ở giao diện người dùng, không thay đổi dữ liệu gốc.

5) Vấn đề bảo mật: CSV injection (công thức Excel)

Nếu một ô đã dịch bắt đầu bằng =, +, - hoặc @, khi mở tệp trong Excel có thể bị thực thi như một công thức.

Cách khắc phục

  • Với các tệp CSV sẽ mở bằng bảng tính, hãy escape các ô rủi ro bằng cách thêm dấu nháy đơn (') ở đầu hoặc xử lý an toàn khi xuất tệp.
  • Cân nhắc loại bỏ các ký tự đầu của công thức khỏi văn bản do người dùng cung cấp trước khi dịch/nhập.
  • Tham khảo: https://owasp.org/www-community/attacks/CSV_Injection

Câu hỏi thường gặp

Làm thế nào để dịch CSV mà không làm hỏng các cột?

Hãy sử dụng quy trình hỗ trợ CSV và kiểm tra cấu trúc trước khi nhập:

  • Dịch bằng phương pháp hỗ trợ CSV (Phương pháp 1)
  • Thực hiện “Kiểm tra nhanh” + danh sách QA để xác nhận số dòng/cột và dấu ngoặc kép hợp lệ
  • Nếu CSV của bạn có cả trường nhạy cảm và văn bản hiển thị cho người dùng, hãy dùng “Quy trình nâng cao — Bảng dịch”

Tôi có thể chỉ dịch một cột trong CSV không?

Có thể. Cách an toàn nhất là tạo một bảng dịch (row_id + source_text + context), chỉ dịch phần đó, rồi ánh xạ lại vào file gốc. Cách này giúp tránh thay đổi nhầm các trường ID và số liệu.

Tôi có nên dịch dòng tiêu đề không?

Tùy vào mục đích sử dụng:

  • Dịch tiêu đề nếu CSV sẽ được đọc bởi con người (báo cáo, xuất dữ liệu).
  • Không dịch tiêu đề nếu hệ thống/ứng dụng của bạn yêu cầu tên trường cụ thể (nhập dữ liệu thương mại điện tử, cơ sở dữ liệu, ứng dụng).

CSV của tôi dùng dấu chấm phẩy (;) thay vì dấu phẩy. Có ổn không?

Có, nhưng hãy đảm bảo công cụ/hệ thống nhập dữ liệu của bạn sử dụng cùng một loại dấu phân cách. Nhiều khu vực châu Âu mặc định dùng dấu chấm phẩy. Việc không đồng nhất dấu phân cách là nguyên nhân phổ biến khiến nhập CSV thất bại.

Tôi xử lý văn bản nhiều dòng (xuống dòng) trong ô như thế nào?

Ô nhiều dòng được phép trong CSV, nhưng phải được đặt trong dấu ngoặc kép đúng cách. Nếu nội dung dịch có xuống dòng, nên dùng công cụ dịch chuyên biệt cho CSV để tránh làm hỏng cấu trúc dòng.

Công cụ

  • OpenL CSV Translator Online (ví dụ công cụ chuyên biệt cho CSV): https://doc.openl.io/translate/csv
  • Dành cho quy trình Excel: xem thêm “Cách Dịch Excel Online”: /how-to-translate-excel-online
  • Dành cho nội dung Markdown: “Cách Dịch Markdown”: /how-to-translate-markdown
  • Nếu bạn cần quy tắc về những gì không được dịch: “Những Gì Không Nên Dịch”: /what-not-to-translate

Tóm tắt

Để dịch file CSV an toàn, hãy giữ nguyên cấu trúc (dấu phân cách, dấu ngoặc kép, mã hóa) và bảo vệ các trường “không dịch” (ID, URL, placeholder, số liệu). Ưu tiên quy trình chuyên biệt cho CSV, sau đó kiểm tra lại bằng checklist QA trước khi nhập dữ liệu.