User Tools

Site Tools


en:arkhalia-translate-script

This is an old revision of the document!


# Input parameters

CHATGPT_API_KEY = “”
INPUT_DIRECTORY_ABSOLUTE = “/Users/jiri/projekty/my_python_scripts/arkhalia_translate/en”
OUTPUT_DIRECTORY_ABSOLUTE = “/Users/jiri/projekty/my_python_scripts/arkhalia_translate/cs”
INPUT_LANGUAGE_AND_FOLDER_NAME = “en”
OUTPUT_LANGUAGE_AND_FOLDER_NAME = “cs”
CHATGPT_COMMAND = f“”“
You are a helpful translator from {INPUT_LANGUAGE_AND_FOLDER_NAME} to {OUTPUT_LANGUAGE_AND_FOLDER_NAME}.

The text I will give you to translate is the DokuWiki Article text. It contains some DokuWiki special formatting syntax, like caption ”===== Some caption =====“,
or link to other pages ”Dotykový útok“, or ”<WRAP group>“. Is is important that during your translation
you will not malform the original syntax of the DokuWiki elements. You are smart enough to do it, I know that.

Maybe it will be handy for you that the DokuWiki Articles you are going to translate is the community driven DokuWiki related
to the game Neverwinter Nights 1 online persistent world. Maybe, if you will be unsure how to translate something,
like names of game feats, or spells, it will help you to know it.

Also, this is the set of rules I want you to comprehend during the translation:
1. When you encounter a link like ”Forging & Smelting Guide“, then I want your output to be the exact original version: ”Forging & Smelting Guide
2. When you encounter a link containing custom text like ”This is a custom caption“, then I want your output to translate the custom caption like this: ”Tohle je custom popisek
3. The word “Feats” shall be translated as “Odbornosti”
3. The word “Classes” shall be translated as “Povolání”
4. Consider not to translate names of some Classes and keep the name original, like “Acolyte of Skin” sounds weird in Czech to be translated.
5. The word “Skills” shall be translated as “Dovednosti”

That's all.
”“”

# Import

import os
from openai import OpenAI
from pathlib import Path

# Configuration

client = OpenAI(api_key=CHATGPT_API_KEY)

# Function definitions

def translate_text(text):

  response = client.chat.completions.create(
      model="gpt-4o",
      messages=[
          {"role": "system", "content": f"{CHATGPT_COMMAND}"},
          {"role": "user", "content": f"Translate this:\n\n{text}"}
      ],
      temperature=0.5,
  )
  return response.choices[0].message.content

def find_all_txt_files_in_directory(folder_path):

  txt_file_paths = []
  for subdir, dirs, files in os.walk(folder_path):
      for file in files:
          path = os.path.join(subdir, file)
          if not path.endswith(".txt"):
              print(f"Skipping file: {path}")
              continue
          txt_file_paths.append(path)
  txt_file_paths = sorted(txt_file_paths)
  return txt_file_paths

def load_file_content(path):

  with open(path, 'r') as f:
      return f.read()

def save_file_content(path, content):

  file_path = Path(path)
  file_path.parent.mkdir(parents=True, exist_ok=True)
  with open(file_path, 'w') as f:
      return f.write(content)

def modify_links_in_dokuwiki_article(content: str):

  return content.replace(f"[[{INPUT_LANGUAGE_AND_FOLDER_NAME}:", f"[[{OUTPUT_LANGUAGE_AND_FOLDER_NAME}:")

# Execute

if name == “main”:

  txt_file_paths = find_all_txt_files_in_directory(INPUT_DIRECTORY_ABSOLUTE)
  try:
      for file_path in txt_file_paths:
          # Translate
          file_content = load_file_content(file_path)
          translated = translate_text(file_content)
          # Modify links
          translated = modify_links_in_dokuwiki_article(translated)
          # Convert input path to output path
          relative_file_path = file_path.replace(INPUT_DIRECTORY_ABSOLUTE, '')
          output_path = OUTPUT_DIRECTORY_ABSOLUTE + relative_file_path
          # Save
          save_file_content(output_path, translated)
          print(f'Stored ({txt_file_paths.index(file_path)}/{len(txt_file_paths)}): {output_path}')
  except BaseException as e:
      print(f"An error occured. Input file path: {file_path}, exception: {e}")
👮‍️ Arkhalia Wiki guard: Please add h1 title into the Article. Reason: It doesn't look good to not have h1 caption in the Article.
en/arkhalia-translate-script.1749195755.txt.gz · Last modified: 2025/06/06 07:42 by juras17