چگونه یک فایل CSV را ترجمه کنیم
TABLE OF CONTENTS
CSV ساده به نظر میرسد، اما ترجمه آن میتواند به سرعت دچار مشکل شود: ستونها جابجا میشوند، کوتیشنها میشکنند، نویسههای غیرلاتین به هم میریزند یا شناسهها به چیزی غیرقابل استفاده “ترجمه” میشوند. این راهنما یک روند کاری امن و عملی برای ترجمه فایل CSV را در حالی که ساختار حفظ میشود، به همراه یک چکلیست QA و راهحلهایی برای مشکلات رایج ارائه میدهد.
اگر سادهترین گزینه را میخواهید، به جای کپی کردن متن CSV در یک مترجم متنی عمومی، از یک مترجم آگاه به CSV (روش 1) استفاده کنید.
قبل از وارد کردن فایل ترجمهشده، چکلیست QA این راهنما را اجرا کنید تا مشکلات ستون/کدگذاری را زود تشخیص دهید.
چرا ترجمه CSV دشوار است
CSV متن ساده است، اما شامل قوانین ساختاری میباشد:
- جداکننده: معمولاً کاما (
,)، گاهی سمیکالن (;) در برخی مناطق. - کوتیشنها: مقادیر متنی ممکن است در کوتیشن دوتایی (
") قرار گیرند. کوتیشنهای داخل مقادیر باید escape شوند (معمولاً""). - خط جدید داخل سلولها: مجاز است، اما فقط اگر سلول به درستی کوتیشن شده باشد.
- کدگذاری: فایل شما ممکن است UTF‑8، UTF‑8 با BOM یا کدگذاریهای قدیمی باشد.
- انواع دادههای ترکیبی: اعداد، تاریخها، SKUها، شناسهها، URLها و placeholderها اغلب باید بدون تغییر باقی بمانند.
ابزارهای ترجمهای که CSV را صرفاً به عنوان “متن” در نظر میگیرند، ممکن است به طور تصادفی نویسههای ساختاری (جداکنندهها/کوتیشنها/خطوط جدید) را تغییر دهند یا انواع دادهها (تاریخ/عدد) را تبدیل کنند که منجر به واردات خراب میشود.
قبل از شروع
این مراحل سریع از بیشتر خرابیهای ترجمه CSV جلوگیری میکند:
-
یک نسخه پشتیبان تهیه کنید
- ذخیره کنید
file.csv→file.original.csv. - اگر CSV شامل دادههای مشتری است، قبل از آپلود در هر جایی، فیلدهای حساس را حذف یا ناشناسسازی کنید.
- ذخیره کنید
-
فیلدهای “ترجمه نشود” را شناسایی کنید این موارد را بدون تغییر نگه دارید:
- شناسهها، کلیدها، SKUها، شماره سفارشها
- URLها، ایمیلها، مسیر فایلها
- placeholderها و متغیرها (
{name}،{{amount}}،%s،:count) - تگها، مقادیر enum، کدهای وضعیت داخلی (
PAID،REFUNDED) - هر فیلدی که توسط کد استفاده میشود (کلیدهای API، JSON blobs، HTML snippets)
- اگر مطمئن نیستید، ببینید: /what-not-to-translate
-
تأیید جداکننده، قوانین نقل قول و پایان خطوط
- اگر فایل CSV را باز میکنید و “به نظر میرسد فقط یک ستون دارد”، احتمالاً جداکننده اشتباه است.
- CSV معمولی از جداکننده
,و نقل قول"استفاده میکند (به RFC 4180 مراجعه کنید: https://www.rfc-editor.org/rfc/rfc4180).
-
تأیید کدگذاری
- برای محتوای چندزبانه، UTF‑8 را ترجیح دهید.
- اگر فایل CSV ترجمهشده را در Excel روی ویندوز باز میکنید، ممکن است به UTF‑8 با BOM نیاز داشته باشید تا از بههمریختگی کاراکترها جلوگیری شود.
- اطلاعات پسزمینه BOM: https://unicode.org/faq/utf_bom.html
-
اختیاری اما توصیهشده: افزودن یک
row_idپایدار برای فایلهای CSV که قرار است دوباره وارد یا بعداً تطبیق داده شوند، یک ستون کلید یکتا (مثلاًrow_id) اضافه کنید تا بتوانید مطمئن شوید ردیفها جابهجا نشدهاند.
روش 1 — مترجمهای آنلاین آگاه به CSV (توصیهشده)
مترجمهای آگاه به CSV، فایل CSV را به عنوان داده ساختاریافته تلقی میکنند، نه “فقط متن”، بنابراین احتمال کمتری دارد که جداکنندهها، نقل قولها یا ساختار ردیف/ستون را بههم بزنند. همیشه قبل از وارد کردن، چکلیست QA را اجرا کنید.
مقایسه گزینههای خنثی
| گزینه | نقاط قوت | نقاط ضعف | بهترین کاربرد |
|---|---|---|---|
| OpenL CSV Translator Online | ساختهشده برای ساختار CSV؛ بارگذاری/دانلود سریع | گردش کار مبتنی بر بارگذاری؛ مناسب دادههای حساس نیست | پیشنویسهای سریع و قابل اعتماد CSV |
| DeepL / Google Cloud / AWS Translate (API) | قابل اتوماسیون؛ کیفیت خوب؛ مناسب پردازش دستهای | نیاز به مهندسی و مدیریت دقیق CSV | تیمهایی با فایلهای ترجمه زیاد |
| CAT tools (Smartling, Lokalise, Phrase, etc.) | واژهنامه/QA، همکاری | راهاندازی و هزینه بیشتر | بومیسازی محصول/UI در مقیاس بالا |
| فرمولهای صفحهگسترده (Sheets/Excel) | بدون ابزار اضافه | بهراحتی میتواند CSV را خودکار قالببندی یا خراب کند | فقط فایلهای کوچک و کمریسک |
محدودیتها و نکات
- دادههای حساس را که اجازه اشتراکگذاری آنها را ندارید، آپلود نکنید. در صورت نیاز، ابتدا یک فایل CSV پاکسازیشده خروجی بگیرید.
- اگر سیستم شما به نامهای خاصی برای هدر نیاز دارد، ردیف هدر را ترجمه نکنید.
- همیشه قبل از وارد کردن CSV ترجمهشده، چکلیست QA را اجرا کنید.
- اگر از یک ابزار آنلاین استفاده میکنید، محدودیتهای آپلود و فرمتهای پشتیبانیشده را در صفحه ابزار بررسی کنید.
گام به گام
-
ابزار را باز کنید
-
زبانها را انتخاب کنید
- زبان(های) مقصد خود را انتخاب کنید.
-
CSV خود را آپلود کنید
- فایل
.csvخود را آپلود یا کشیده و رها کنید. - اگر CSV شما چندین ستون متنی دارد، مترجم محتوا را ترجمه میکند و جداکنندهها و نقلقولها را حفظ میکند.
- فایل
-
CSV ترجمهشده را دانلود کنید
- آن را با نام واضحی مانند
products_es.csvذخیره کنید.
- آن را با نام واضحی مانند
بهترین روشها برای نتایج بهتر
- فقط ستونهای قابل مشاهده برای کاربر را ترجمه کنید: عناوین محصولات، توضیحات، رشتههای UI، یادداشتهای مشتریمحور.
- کدها را ثابت نگه دارید: ستونهایی مانند
status،type،sku،category_id،url،handleرا ترجمه نکنید.
روش ۲ — Google Sheets یا Excel
این فرآیند میتواند کار کند، اما تغییر تصادفی قالببندی، جداکنندهها یا نوع دادهها راحتتر رخ میدهد.
Google Sheets (فایلهای کوچک)
-
CSV را وارد کنید
- Google Sheets → File → Import → Upload.
- اگر دادههای شما در یک ستون نمایش داده میشود، جداکننده صحیح را انتخاب کنید (کاما یا سمیکالن).
-
ستونهای “ترجمه نشود” را محافظت کنید
- ابتدا ستونهای شناسه را به صورت متن ساده قالببندی کنید (مثلاً SKU، order id) تا از تبدیل
00123به123جلوگیری شود.
- ابتدا ستونهای شناسه را به صورت متن ساده قالببندی کنید (مثلاً SKU، order id) تا از تبدیل
-
فقط ستونهای هدف را ترجمه کنید
- از فرمول
=GOOGLETRANSLATE(A2,"en","es")در یک ستون جدید استفاده کنید، سپس Copy → Paste special → Values only. - فرمولهای ترجمه را روی ستونهایی که شامل URL، جاینگهدار، کد یا فرمول هستند اجرا نکنید.
- از فرمول
-
خروجی بگیرید
- File → Download → Comma-separated values (.csv) (Google Sheets خروجی را با UTF‑8 میدهد).
Excel (ویندوز) — نحوه وارد کردن و خروجی گرفتن صحیح UTF‑8
اکسل جایی است که اشتباهات رمزگذاری اغلب رخ میدهد. از این مراحل برای جلوگیری از کاراکترهای بههمریخته و مشکلات جداکننده استفاده کنید.
A) وارد کردن CSV بدون بههمریختگی کاراکترها
- Data → From Text/CSV
- در پنجره وارد کردن:
- File Origin / Encoding: گزینه 65001: Unicode (UTF‑8) را انتخاب کنید (عبارت ممکن است بسته به نسخه متفاوت باشد)
- Delimiter: ویرگول (
,) یا سمیکالن (;) مطابق با فایل شما
- روی Load کلیک کنید (یا Transform Data اگر نیاز دارید ستونهای ID را به Text تبدیل کنید)
B) خروجی گرفتن به صورت UTF‑8 (و زمان استفاده از BOM)
- File → Save As
- برای Save as type، انتخاب کنید:
- CSV UTF‑8 (Comma delimited) (*.csv) (توصیهشده برای متن چندزبانه)
- اگر سیستم پاییندستی شما BOM را نمیپذیرد، با استفاده از اسکریپت (بخش “Batch Processing” را ببینید) یا ذخیره مجدد با ویرایشگر کد، خروجی UTF‑8 بدون BOM بگیرید.
مشکلات رایج
- Auto-formatting: صفحات گسترده ممکن است شناسههایی مانند
00123را به123تبدیل کنند. - Date conversion:
2026-01-09ممکن است به شکل متفاوتی نمایش داده شود و به طور ناسازگار صادر شود. - Delimiter changes: خروجیها ممکن است بسته به تنظیمات منطقهای به
;تغییر کنند.
اگر از این روش استفاده میکنید، بخش 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، نوشیدنی را تا ۲۴ ساعت سرد نگه میدارد |
| 104 | product_title | Noise-Canceling Headphones | Product title | هدفون حذف نویز |
| 104 | product_desc | Over-ear, Bluetooth 5.3 | Short description | روگوشی، Bluetooth 5.3 |
مرحله ۲: فقط source_text را ترجمه کنید
ستون source_text را با روش انتخابی خود ترجمه کنید و نتیجه را در translated_text قرار دهید. (مترجم آنلاین سازگار با CSV معمولاً ایمنتر از صفحات گسترده است.)
مرحله ۳: نگاشت ترجمهها به داده اصلی
بر اساس row_id + field الحاق کنید و متن ترجمه شده را به مجموعه داده اصلی خود بازگردانید. این کار تضمین میکند که شناسهها، قیمتها و فیلدهای سیستمی هرگز ترجمه نشوند.
مثال (Python + pandas)
import pandas as pd
# داده اصلی (انواع را ثابت نگه دارید؛ شناسهها را به عنوان رشته در نظر بگیرید)
orig = pd.read_csv("products.csv", dtype=str, keep_default_na=False)
# جدول ترجمه پس از ترجمه
tt = pd.read_csv("translation_table_es.csv", dtype=str, keep_default_na=False)
# تغییر شکل به یک ردیف برای هر row_id (فرمت عریض)
wide = (
tt.pivot(index="row_id", columns="field", values="translated_text")
.add_suffix("__translated")
.reset_index()
)
merged = orig.merge(wide, on="row_id", how="left")
# بازنویسی (فیلدهای نمونه)
merged["product_title"] = merged["product_title__translated"].where(
merged["product_title__translated"].ne(""), merged["product_title"]
)
merged["product_desc"] = merged["product_desc__translated"].where(
merged["product_desc__translated"].ne(""), merged["product_desc"]
)
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”)
#### مثال (الگوی join/update در 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 <> '';
پردازش دستهای (چندین فایل CSV)
اگر نیاز دارید تعداد زیادی فایل CSV را ترجمه کنید، از مراحل دستی در صفحه گسترده اجتناب کرده و از یک خط لوله قابل تکرار استفاده کنید:
-
استانداردسازی ورودیها
- نرمالسازی به UTF‑8 (یا UTF‑8 با 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
چکلیست کنترل کیفیت پس از ترجمه
پس از دانلود فایل 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 decode مواجه شدید، ابتدا 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. - URLها/ایمیلها بدون تغییر: فاصله اضافه نشده، دامنهها ترجمه نشدهاند.
- اعداد حفظ شدهاند: قیمتها، مقادیر، اعشارها بدون تغییر باقی ماندهاند.
- جاینگهدارها حفظ شدهاند:
{name}،{{count}}،%s،:valueدست نخورده باقی ماندهاند.
بررسی کیفیت ترجمه
- اصطلاحات یکسان: اصطلاحات کلیدی محصولات به طور یکسان در همه ردیفها ترجمه شدهاند.
- رعایت محدودیت طول: برچسبهای رابط کاربری بیش از حد طولانی نیستند (مهم برای برنامهها).
- بدون باقیمانده زبان اصلی: جستجو برای کلمات رایج منبع که باید ترجمه شوند.
رفع اشکال مشکلات رایج ترجمه CSV
1) ستونها پس از ترجمه جابجا شدهاند
علائم
- ابزار واردکننده شما پیام “تعداد ستونها اشتباه است” میدهد
- مقادیر زیر سرستونهای اشتباه قرار گرفتهاند
دلایل محتمل
- یک فیلد ترجمهشده شامل کوتیشن بدون اسکیپ (
") است - یک فیلد ترجمهشده شامل کاما/خط جدید است اما به درستی کوتیشن نشده است
راهحل
- اطمینان حاصل کنید که CSV از قوانین کوتیشن صحیح استفاده میکند (کوتیشن دوتایی دور فیلدها؛ کوتیشنهای داخلی به صورت
""اسکیپ شوند). - ترجمه را با یک جریان کاری آگاه به CSV انجام دهید (به جای ترجمه متن خام CSV).
2) کاراکترهای بههمریخته (mojibake) مانند ???? یا é
دلایل محتمل
- کدگذاری اشتباه هنگام خروجی/ورودی (UTF‑8 در مقابل قدیمی)
راهحل
- به صورت UTF‑8 خروجی بگیرید.
- اگر Excel روی ویندوز استفاده میشود، UTF‑8 با BOM را امتحان کنید.
- از کپی/پیست دستی که میتواند کدگذاری را تغییر دهد، اجتناب کنید.
3) صفرهای ابتدایی حذف شدهاند (00123 → 123)
دلایل محتمل
- فرمتدهی خودکار صفحهگسترده (Excel/Sheets)
راهحل
- ستونهای شناسه را قبل از ویرایش/خروجی به عنوان متن در نظر بگیرید.
- ترجیحاً با یک جریان کاری آگاه به 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 ترجمه کنید (روش 1)
- “بررسیهای سریع” + چکلیست QA را اجرا کنید تا تعداد سطر/ستون و کوتیشن صحیح را تأیید کنید
- اگر CSV شما فیلدهای حساس و متون کاربر را مخلوط میکند، از “جریان کاری پیشرفته — Translation Table” استفاده کنید
آیا میتوانم فقط یک ستون را در یک CSV ترجمه کنم؟
بله. امنترین روش این است که یک جدول ترجمه (row_id + source_text + context) ایجاد کنید، فقط آن را ترجمه کنید و سپس آن را بازگردانید. این کار از تغییرات تصادفی در شناسهها و فیلدهای عددی جلوگیری میکند.
آیا باید سطر سرآیند را ترجمه کنم؟
این موضوع به مورد استفاده شما بستگی دارد:
- سرآیندها را ترجمه کنید اگر CSV توسط انسانها خوانده میشود (گزارشها، خروجیها).
- سرآیندها را ترجمه نکنید اگر سیستم/واردکننده شما انتظار نامهای فیلد خاصی را دارد (واردات تجارت الکترونیک، پایگاه دادهها، برنامهها).
CSV من به جای کاما از نقطهویرگول (;) استفاده میکند. آیا مشکلی دارد؟
بله، اما مطمئن شوید که ابزار/واردکننده شما به طور ثابت از همان جداکننده استفاده میکند. بسیاری از مناطق اروپایی به طور پیشفرض از نقطهویرگول استفاده میکنند. عدم تطابق جداکننده یکی از دلایل رایج شکست واردات CSV است.
چگونه با متن چندخطی (شکستن خط) در سلولها برخورد کنم؟
سلولهای چندخطی در CSV مجاز هستند، اما باید به درستی نقل قول شوند. اگر محتوای ترجمهشده شما شامل شکستن خط است، استفاده از مترجم آگاه به CSV به شدت توصیه میشود تا از شکستن ردیفها جلوگیری شود.
ابزارها
- OpenL CSV Translator Online (مثال ابزار آگاه به CSV): https://doc.openl.io/translate/csv
- برای گردش کار Excel: همچنین ببینید “How to Translate Excel Online”: /how-to-translate-excel-online
- برای محتوای Markdown: “How to Translate Markdown”: /how-to-translate-markdown
- اگر به قوانین مربوط به مواردی که نباید ترجمه شوند نیاز دارید: “What Not to Translate”: /what-not-to-translate
خلاصه
برای ترجمه ایمن یک فایل CSV، ساختار (جداکننده، نقل قولها، رمزگذاری) را حفظ کنید و فیلدهای “ترجمه نشود” (شناسهها، URLها، جاینگهدارها، اعداد) را محافظت کنید. گردش کار آگاه به CSV را ترجیح دهید و قبل از وارد کردن، با چکلیست کنترل کیفیت بررسی کنید.


