|
@@ -31,6 +31,7 @@ def read_csv_with_header(file_path: str, encoding: str = 'cp936') -> List[List[s
|
|
|
|
|
|
|
|
def translate_columns_data(
|
|
def translate_columns_data(
|
|
|
data: List[List[str]],
|
|
data: List[List[str]],
|
|
|
|
|
+ header: List[str],
|
|
|
column_indices: List[int],
|
|
column_indices: List[int],
|
|
|
start_row: int = 1,
|
|
start_row: int = 1,
|
|
|
end_row: Optional[int] = None,
|
|
end_row: Optional[int] = None,
|
|
@@ -45,26 +46,33 @@ def translate_columns_data(
|
|
|
|
|
|
|
|
logger.info(f"开始翻译 {start_row} 到 {end_row} 行的数据")
|
|
logger.info(f"开始翻译 {start_row} 到 {end_row} 行的数据")
|
|
|
|
|
|
|
|
- # 为每个列插入空列
|
|
|
|
|
|
|
+ # 按顺序处理每一列
|
|
|
for i, col_index in enumerate(column_indices):
|
|
for i, col_index in enumerate(column_indices):
|
|
|
|
|
+ # 计算当前列的实际索引(考虑之前插入的列)
|
|
|
|
|
+ current_col_index = col_index + i
|
|
|
|
|
+
|
|
|
|
|
+ # 插入新列
|
|
|
for row in data:
|
|
for row in data:
|
|
|
- row.insert(col_index + i + 1, '')
|
|
|
|
|
-
|
|
|
|
|
- # 逐个列翻译
|
|
|
|
|
- for col_index in column_indices:
|
|
|
|
|
|
|
+ row.insert(current_col_index + 1, '')
|
|
|
|
|
+
|
|
|
|
|
+ # 更新表头
|
|
|
|
|
+ header.insert(current_col_index + 1, f"{header[current_col_index]}_translated")
|
|
|
|
|
+
|
|
|
# 提取要翻译的文本
|
|
# 提取要翻译的文本
|
|
|
- texts_to_translate = [row[col_index] for row in rows_to_translate]
|
|
|
|
|
- logger.debug(f"待翻译文本示例(列 {col_index}):{texts_to_translate[:3]}")
|
|
|
|
|
|
|
+ texts_to_translate = [row[current_col_index] for row in rows_to_translate]
|
|
|
|
|
+ logger.debug(f"待翻译文本示例(列 {current_col_index}):{texts_to_translate[:3]}")
|
|
|
|
|
|
|
|
# 批量翻译
|
|
# 批量翻译
|
|
|
translated_texts = translator._batch_translate(texts_to_translate)
|
|
translated_texts = translator._batch_translate(texts_to_translate)
|
|
|
|
|
|
|
|
# 将翻译结果插入新列
|
|
# 将翻译结果插入新列
|
|
|
- for i, row in enumerate(rows_to_translate):
|
|
|
|
|
- row[col_index + 1] = translated_texts[i]
|
|
|
|
|
|
|
+ for j, row in enumerate(rows_to_translate):
|
|
|
|
|
+ row[current_col_index + 1] = translated_texts[j]
|
|
|
|
|
+
|
|
|
|
|
+ logger.info(f"列 {current_col_index} 翻译完成")
|
|
|
|
|
|
|
|
logger.info("所有列翻译完成")
|
|
logger.info("所有列翻译完成")
|
|
|
- return data
|
|
|
|
|
|
|
+ return data, header
|
|
|
|
|
|
|
|
def save_csv(
|
|
def save_csv(
|
|
|
data: List[List[str]],
|
|
data: List[List[str]],
|
|
@@ -104,8 +112,9 @@ def process_csv(
|
|
|
header, data = read_csv_with_header(input_file, encoding=encoding)
|
|
header, data = read_csv_with_header(input_file, encoding=encoding)
|
|
|
|
|
|
|
|
# 翻译指定列
|
|
# 翻译指定列
|
|
|
- data = translate_columns_data(
|
|
|
|
|
|
|
+ data, header = translate_columns_data(
|
|
|
data,
|
|
data,
|
|
|
|
|
+ header,
|
|
|
column_indices,
|
|
column_indices,
|
|
|
start_row,
|
|
start_row,
|
|
|
end_row,
|
|
end_row,
|