Как перевести файл CSV

OpenL Team 1/9/2026

TABLE OF CONTENTS

CSV выглядит просто, но при его переводе легко допустить ошибки: столбцы могут сместиться, кавычки сломаться, нелатинские символы исказиться, а идентификаторы превратиться во что-то непригодное для использования. В этом руководстве представлен безопасный и практичный рабочий процесс для перевода CSV-файла с сохранением структуры, а также контрольный список для проверки качества и решения распространённых проблем.

Если вам нужен самый простой вариант, используйте переводчик, поддерживающий CSV (Метод 1), вместо копирования текста CSV в обычный текстовый переводчик.

Перед импортом переведённого файла выполните контрольный список из этого руководства, чтобы на раннем этапе выявить проблемы со столбцами или кодировкой.

Почему перевод CSV сложен

CSV — это обычный текст, но с определёнными структурными правилами:

  • Разделитель: обычно запятая (,), иногда точка с запятой (;) в некоторых локалях.
  • Кавычки: текстовые значения могут быть заключены в двойные кавычки ("). Кавычки внутри значений должны быть экранированы (обычно "").
  • Переносы строк внутри ячеек: допускаются, но только если ячейка корректно заключена в кавычки.
  • Кодировка: ваш файл может быть в UTF‑8, UTF‑8 с BOM или в устаревших кодировках.
  • Смешанные типы данных: числа, даты, SKU, идентификаторы, URL и плейсхолдеры часто должны оставаться без изменений.

Инструменты перевода, которые воспринимают CSV как «просто текст», могут случайно изменить структурные символы (разделители/кавычки/переносы строк) или преобразовать типы данных (даты/числа), что приведёт к ошибкам при импорте.

Перед началом работы

Эти быстрые шаги помогут избежать большинства ошибок при переводе CSV:

  1. Сделайте резервную копию

    • Сохраните file.csvfile.original.csv.
    • Если CSV содержит данные клиентов, удалите или анонимизируйте конфиденциальные поля перед загрузкой куда-либо.
  2. Определите поля «не переводить» Оставьте их без изменений:

    • Идентификаторы, ключи, SKU, номера заказов
    • URL, email-адреса, пути к файлам
    • Плейсхолдеры и переменные ({name}, {{amount}}, %s, :count)
    • Теги, значения перечислений, внутренние коды статусов (PAID, REFUNDED)
    • Любое поле, используемое в коде (API-ключи, JSON-блоки, HTML-фрагменты)
    • Если не уверены, смотрите: /what-not-to-translate
  3. Подтвердите разделитель, правила кавычек и окончания строк

    • Если вы открываете CSV и он «выглядит как один столбец», вероятно, выбран неправильный разделитель.
    • Обычный CSV использует разделитель , и кавычки ". (см. RFC 4180: https://www.rfc-editor.org/rfc/rfc4180).
  4. Подтвердите кодировку

    • Предпочтительно использовать UTF‑8 для многоязычного контента.
    • Если вы будете открывать переведённый CSV в Excel на Windows, возможно потребуется UTF‑8 с BOM, чтобы избежать искажённых символов.
    • Подробнее о BOM: https://unicode.org/faq/utf_bom.html
  5. Необязательно, но рекомендуется: добавьте стабильный 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.
  • Если вы используете онлайн-инструмент, проверьте лимиты загрузки и поддерживаемые форматы на странице инструмента.

Пошаговая инструкция

  1. Откройте инструмент

  2. Выберите языки

    • Выберите целевые языки.
  3. Загрузите ваш CSV

    • Загрузите или перетащите ваш файл .csv.
    • Если ваш CSV содержит несколько текстовых столбцов, переводчик переведёт содержимое, сохраняя разделители и кавычки в безопасности.
  4. Скачайте переведённый CSV

    • Сохраните его с понятным именем, например products_es.csv.

Лучшие практики для получения лучших результатов

  • Переводите только столбцы, видимые пользователю: названия продуктов, описания, строки интерфейса, заметки для клиентов.
  • Сохраняйте стабильность кодов: не переводите status, type, sku, category_id, url, handle.

Метод 2 — Google Sheets или Excel

Этот рабочий процесс может работать, но легко случайно изменить форматирование, разделители или типы данных.

Google Sheets (маленькие файлы)

  1. Импортируйте CSV

    • Google Sheets → Файл → Импорт → Загрузка.
    • Если ваши данные отображаются в одном столбце, выберите правильный разделитель (запятая или точка с запятой).
  2. Защитите столбцы “не переводить”

    • Сначала отформатируйте столбцы с идентификаторами как Обычный текст (например, SKU, order id), чтобы избежать преобразования 00123123.
  3. Переводите только целевые столбцы

    • Используйте =GOOGLETRANSLATE(A2,"en","es") в новом столбце, затем Копировать → Специальная вставка → Только значения.
    • Не используйте формулы перевода для столбцов, содержащих URL, плейсхолдеры, коды или формулы.
  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 (Comma delimited) (*.csv) (рекомендуется для многоязычного текста)
    • Если ваша система не принимает BOM, экспортируйте UTF‑8 без BOM с помощью скрипта (см. “Пакетная обработка”) или пересохраните с помощью редактора кода.

Типичные ошибки

  • Автоформатирование: таблицы могут преобразовать ID, например 00123, в 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Бесшумные нажатия, батарея на 2 года
102product_titleUSB-C ChargerE-commerce product titleЗарядное устройство USB-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Накладные, 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 файлов, избегайте ручных шагов в таблицах и используйте повторяемый конвейер:

  1. Стандартизируйте входные данные

    • Приведите к UTF‑8 (или UTF‑8 с BOM, если это требуется вашему импортеру).
    • Убедитесь, что в каждом файле есть стабильный ключ (row_id / id) для сопоставления.
  2. Генерируйте таблицы переводов для каждого файла

    • Извлекайте только переводимые поля в translation_table_<file>.csv.
    • Оставьте столбец source_file, если предпочитаете одну объединённую таблицу для всех файлов.
  3. Переводите таблицы

    • Используйте API workflow или инструмент с поддержкой CSV для каждого файла.
  4. Объединяйте результаты обратно + экспортируйте

    • Сопоставляйте по row_id + fieldsource_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) Пропали ведущие нули (00123123)

Возможные причины

  • Автоформатирование таблицы (Excel/Sheets)

Решение

  • Обрабатывайте столбцы с идентификаторами как текст до редактирования/экспорта.
  • Предпочитайте перевод с помощью workflow, поддерживающего CSV, чтобы не изменять тип данных.

4) Формат дат или десятичных чисел изменился

Примеры

  • 1,234.56 становится 1.234,56
  • 2026-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 перед импортом.