Website/translate.py
Martin Gasque 0ba3f3c7c5 Initial commit
Will it deploy one day ?
2024-02-20 08:59:37 +01:00

108 lines
5.2 KiB
Python

import os
import requests
import re
# Function to create a directory structure in the destination directory
def create_directory_structure(source_dir, dest_dir):
for root, dirs, files in os.walk(source_dir):
for dir_name in dirs:
source_path = os.path.join(root, dir_name)
dest_path = source_path.replace(source_dir, dest_dir)
if not os.path.exists(dest_path):
os.makedirs(dest_path)
# Function to translate a file using DeepL API
def translate_file(file_path, target_language='EN', auth_key='81580059-dfcc-8cdb-48ac-fe80c6e11baa:fx'):
translated_file_path = file_path.replace(source_directory, target_directory)
if os.path.exists(translated_file_path):
print(f"File '{file_path}' already translated. Skipping...")
with open(translated_file_path, 'r', encoding='utf-8') as translated_file:
return translated_file.read()
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
# Find the front-matter delimiter '---'
front_matter_delimiter = '---\n'
front_matter_end = content.find(front_matter_delimiter)
front_matter = ""
if front_matter_end != -1:
front_matter_end = content.find(front_matter_delimiter, front_matter_end + len(front_matter_delimiter))
if front_matter_end != -1:
front_matter = content[:front_matter_end + len(front_matter_delimiter)]
content = content[front_matter_end + len(front_matter_delimiter):]
summary_regex = r'summary:\s*\"(.*?)\"'
description_regex = r'description:\s*\"(.*?)\"'
def translate_field(field_value):
translated_value = translate_text(field_value, target_language, auth_key)
return f'"{translated_value}"' if translated_value else '""'
if re.search(summary_regex, front_matter, re.IGNORECASE):
translated_summary = translate_field(re.search(summary_regex, front_matter, re.IGNORECASE).group(1))
front_matter = re.sub(summary_regex, f'summary: {translated_summary}', front_matter, flags=re.IGNORECASE)
if re.search(description_regex, front_matter, re.IGNORECASE):
translated_description = translate_field(re.search(description_regex, front_matter, re.IGNORECASE).group(1))
front_matter = re.sub(description_regex, f'description: {translated_description}', front_matter, flags=re.IGNORECASE)
# Translate the content using DeepL API
url = "https://api-free.deepl.com/v2/translate"
params = {
'auth_key': auth_key,
'text': content,
'target_lang': target_language
}
headers = {
'Authorization': f'DeepL-Auth-Key {auth_key}'
}
response = requests.post(url, data=params, headers=headers)
if response.status_code == 200:
translated_content = response.json()['translations'][0]['text']
return front_matter + translated_content
else:
print(f"Translation failed for file: {file_path} with status code: {response.status_code}")
return None
# Function to duplicate .png files
def duplicate_png_files(source_dir, dest_dir):
for root, _, files in os.walk(source_dir):
for file in files:
if file.endswith('.png'):
source_file_path = os.path.join(root, file)
dest_file_path = source_file_path.replace(source_dir, dest_dir)
dest_file_path = os.path.join(dest_file_path, file)
with open(source_file_path, 'rb') as src, open(dest_file_path, 'wb') as dst:
dst.write(src.read())
print(f"Copié '{source_file_path}' vers '{dest_file_path}'")
# Function to translate all files in a directory and duplicate the structure
def translate_and_duplicate_directory(source_dir, dest_dir, target_language='EN',auth_key='81580059-dfcc-8cdb-48ac-fe80c6e11baa:fx'):
create_directory_structure(source_dir, dest_dir)
for root, _, files in os.walk(source_dir):
for file in files:
if file.endswith('.md'):
source_file_path = os.path.join(root, file)
dest_file_path = source_file_path.replace(source_dir, dest_dir)
translated_content = translate_file(source_file_path, target_language, auth_key)
with open(dest_file_path, 'w', encoding='utf-8') as translated_file:
translated_file.write(translated_content)
print(f"Taduction de '{source_file_path}' en '{target_language}' et sauvegardé sur '{dest_file_path}'")
if __name__ == "__main__":
# Specify the source directory to duplicate
source_directory = 'content/fr'
# Specify the target directory to create with translated content
target_directory = 'content/en'
# DeepL API authentication details
deepl_auth_key = '81580059-dfcc-8cdb-48ac-fe80c6e11baa:fx'
# Translate content and duplicate directory structure
translate_and_duplicate_directory(source_directory, target_directory, target_language='EN', auth_key=deepl_auth_key)
# Duplicate .png files
duplicate_png_files(source_directory, target_directory)