Как перевести файл CSV
TABLE OF CONTENTS
CSV выглядит просто, но при его переводе легко допустить ошибки: столбцы могут сместиться, кавычки сломаться, нелатинские символы исказиться, а идентификаторы превратиться во что-то непригодное для использования. В этом руководстве представлен безопасный и практичный рабочий процесс для перевода CSV-файла с сохранением структуры, а также контрольный список для проверки качества и решения распространённых проблем.
Если вам нужен самый простой вариант, используйте переводчик, поддерживающий CSV (Метод 1), вместо копирования текста CSV в обычный текстовый переводчик.
Перед импортом переведённого файла выполните контрольный список из этого руководства, чтобы на раннем этапе выявить проблемы со столбцами или кодировкой.
Почему перевод CSV сложен
CSV — это обычный текст, но с определёнными структурными правилами:
- Разделитель: обычно запятая (
,), иногда точка с запятой (;) в некоторых локалях. - Кавычки: текстовые значения могут быть заключены в двойные кавычки (
"). Кавычки внутри значений должны быть экранированы (обычно""). - Переносы строк внутри ячеек: допускаются, но только если ячейка корректно заключена в кавычки.
- Кодировка: ваш файл может быть в UTF‑8, UTF‑8 с BOM или в устаревших кодировках.
- Смешанные типы данных: числа, даты, SKU, идентификаторы, URL и плейсхолдеры часто должны оставаться без изменений.
Инструменты перевода, которые воспринимают CSV как «просто текст», могут случайно изменить структурные символы (разделители/кавычки/переносы строк) или преобразовать типы данных (даты/числа), что приведёт к ошибкам при импорте.
Перед началом работы
Эти быстрые шаги помогут избежать большинства ошибок при переводе CSV:
-
Сделайте резервную копию
- Сохраните
file.csv→file.original.csv. - Если CSV содержит данные клиентов, удалите или анонимизируйте конфиденциальные поля перед загрузкой куда-либо.
- Сохраните
-
Определите поля «не переводить» Оставьте их без изменений:
- Идентификаторы, ключи, SKU, номера заказов
- URL, email-адреса, пути к файлам
- Плейсхолдеры и переменные (
{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 для многоязычного контента.
- Если вы будете открывать переведённый CSV в Excel на Windows, возможно потребуется 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 и др.) | Терминология/QA, коллаборация | Больше настроек и затрат | Масштабная локализация продуктов/интерфейсов |
| Формулы в таблицах (Sheets/Excel) | Не требует дополнительного ПО | Легко случайно изменить формат или повредить CSV | Только для небольших, низкорискованных файлов |
Ограничения и примечания
- Не загружайте конфиденциальные данные, которые вам запрещено распространять. При необходимости сначала экспортируйте очищенный CSV.
- Если ваша система требует определённых названий заголовков, не переводите строку заголовков.
- Всегда выполняйте проверочный список QA перед импортом переведённого CSV.
- Если вы используете онлайн-инструмент, проверьте лимиты загрузки и поддерживаемые форматы на странице инструмента.
Пошаговая инструкция
-
Откройте инструмент
-
Выберите языки
- Выберите целевые языки.
-
Загрузите ваш CSV
- Загрузите или перетащите ваш файл
.csv. - Если ваш CSV содержит несколько текстовых столбцов, переводчик переведёт содержимое, сохраняя разделители и кавычки в безопасности.
- Загрузите или перетащите ваш файл
-
Скачайте переведённый CSV
- Сохраните его с понятным именем, например
products_es.csv.
- Сохраните его с понятным именем, например
Лучшие практики для получения лучших результатов
- Переводите только столбцы, видимые пользователю: названия продуктов, описания, строки интерфейса, заметки для клиентов.
- Сохраняйте стабильность кодов: не переводите
status,type,sku,category_id,url,handle.
Метод 2 — Google Sheets или Excel
Этот рабочий процесс может работать, но легко случайно изменить форматирование, разделители или типы данных.
Google Sheets (маленькие файлы)
-
Импортируйте CSV
- Google Sheets → Файл → Импорт → Загрузка.
- Если ваши данные отображаются в одном столбце, выберите правильный разделитель (запятая или точка с запятой).
-
Защитите столбцы “не переводить”
- Сначала отформатируйте столбцы с идентификаторами как Обычный текст (например, SKU, order id), чтобы избежать преобразования
00123→123.
- Сначала отформатируйте столбцы с идентификаторами как Обычный текст (например, SKU, order id), чтобы избежать преобразования
-
Переводите только целевые столбцы
- Используйте
=GOOGLETRANSLATE(A2,"en","es")в новом столбце, затем Копировать → Специальная вставка → Только значения. - Не используйте формулы перевода для столбцов, содержащих URL, плейсхолдеры, коды или формулы.
- Используйте
-
Экспорт
- Файл → Скачать → Значения, разделённые запятыми (.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 (Comma delimited) (*.csv) (рекомендуется для многоязычного текста)
- Если ваша система не принимает BOM, экспортируйте UTF‑8 без BOM с помощью скрипта (см. “Пакетная обработка”) или пересохраните с помощью редактора кода.
Типичные ошибки
- Автоформатирование: таблицы могут преобразовать ID, например
00123, в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 | Бесшумные нажатия, батарея на 2 года |
| 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 | Накладные, Bluetooth 5.3 |
Шаг 2: Переведите только source_text
Переведите столбец source_text выбранным вами способом и поместите результат в translated_text. (Онлайн-переводчик, который понимает CSV, обычно безопаснее, чем электронные таблицы.)
Шаг 3: Верните переводы обратно
Соедините по row_id + field и запишите переведённый текст обратно в исходный набор данных. Это гарантирует, что идентификаторы, цены и системные поля никогда не попадут в перевод.
Пример (Python + pandas)
import pandas as pd
# Original data (keep types stable; treat IDs as strings)
orig = pd.read_csv("products.csv", dtype=str, keep_default_na=False)
# Translation table after translation
tt = pd.read_csv("translation_table_es.csv", dtype=str, keep_default_na=False)
# Reshape to one row per row_id (wide format)
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")
# Write back (example fields)
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”)
#### Пример (шаблон 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 с BOM, если это требуется вашему импортеру).
- Убедитесь, что в каждом файле есть стабильный ключ (
row_id/id) для сопоставления.
-
Генерируйте таблицы переводов для каждого файла
- Извлекайте только переводимые поля в
translation_table_<file>.csv. - Оставьте столбец
source_file, если предпочитаете одну объединённую таблицу для всех файлов.
- Извлекайте только переводимые поля в
-
Переводите таблицы
- Используйте API workflow или инструмент с поддержкой CSV для каждого файла.
-
Объединяйте результаты обратно + экспортируйте
- Сопоставляйте по
row_id + field(иsource_file, если используется). - Экспортируйте с кодировкой, которую ожидает ваша downstream-система.
- Сопоставляйте по
Минимальный стартовый цикл (обработка многих файлов последовательно):
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 "Обработано: $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. - URL/электронные адреса не изменились: без добавленных пробелов, без переведённых доменов.
- Числа сохранены: цены, количества, десятичные значения остались прежними.
- Заполнители сохранены:
{name},{{count}},%s,:valueостались без изменений.
Проверки качества перевода
- Терминология согласована: ключевые продуктовые термины переведены одинаково во всех строках.
- Соблюдены ограничения по длине: ярлыки интерфейса не слишком длинные (важно для приложений).
- Нет смешанных языков: проверьте наличие исходных слов, которые должны быть переведены.
Устранение распространённых проблем с переводом CSV
1) Столбцы смещены после перевода
Симптомы
- Ваш импортёр сообщает “неверное количество столбцов”
- Значения отображаются под неправильными заголовками
Возможные причины
- Переведённое поле содержит неэкранированную кавычку (
") - Переведённое поле содержит запятую/перенос строки, но не заключено в кавычки должным образом
Решение
- Убедитесь, что CSV использует правильные правила экранирования (двойные кавычки вокруг полей; внутренние кавычки экранируются как
""). - Переводите с помощью workflow, поддерживающего работу с CSV (а не переводите сырой текст CSV).
2) Искажённые символы (модзибаке) типа ???? или é
Возможные причины
- Неправильная кодировка при экспорте/импорте (UTF‑8 против устаревших кодировок)
Решение
- Экспортируйте в UTF‑8.
- Если используется Excel на Windows, попробуйте UTF‑8 с BOM.
- Избегайте ручного копирования/вставки, которое может изменить кодировку.
3) Пропали ведущие нули (00123 → 123)
Возможные причины
- Автоформатирование таблицы (Excel/Sheets)
Решение
- Обрабатывайте столбцы с идентификаторами как текст до редактирования/экспорта.
- Предпочитайте перевод с помощью workflow, поддерживающего CSV, чтобы не изменять тип данных.
4) Формат дат или десятичных чисел изменился
Примеры
1,234.56становится1.234,562026-01-09становится09/01/2026
Решение
- Не переводите числовые/датированные столбцы.
- Сохраняйте значения в машиночитаемом виде; локализуйте форматы отображения на уровне интерфейса, а не в исходных данных.
5) Проблема безопасности: CSV-инъекция (формулы Excel)
Если переведённая ячейка начинается с =, +, - или @, при открытии файла в Excel это может быть воспринято как формула.
Решение
- Для CSV, которые будут открываться в электронных таблицах, экранируйте опасные ячейки, добавляя апостроф (
') в начале, или очищайте данные при экспорте. - Рассмотрите возможность удаления ведущих символов формул из пользовательского текста до перевода/импорта.
- Ссылка: https://owasp.org/www-community/attacks/CSV_Injection
FAQ
Как перевести CSV, не нарушив структуру столбцов?
Используйте workflow, поддерживающий CSV, и проверьте структуру перед импортом:
- Переводите с помощью метода, поддерживающего CSV (Метод 1)
- Выполните “Быстрые проверки” + чек-лист контроля качества, чтобы убедиться в совпадении количества строк/столбцов и корректности экранирования
- Если ваш CSV содержит как чувствительные поля, так и текст для пользователей, используйте “Расширенный workflow — Translation Table”
Могу ли я перевести только один столбец в CSV?
Да. Самый безопасный способ — создать таблицу перевода (row_id + source_text + context), перевести только её, а затем сопоставить обратно. Это предотвращает случайные изменения идентификаторов и числовых полей.
Нужно ли переводить строку заголовков?
Это зависит от вашего случая использования:
- Переводите заголовки, если CSV будет читаться людьми (отчёты, экспорт).
- Не переводите заголовки, если ваша система/импортёр ожидает конкретные имена полей (импорт в e-commerce, базы данных, приложения).
В моём 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 сохраняйте структуру (разделитель, кавычки, кодировку) и защищайте поля “не переводить” (ID, URL, плейсхолдеры, числа). Предпочитайте процессы с поддержкой CSV, затем проверьте с помощью чек-листа QA перед импортом.


