From ba9d5ed6bacee835d597c76f528b790be33c8010 Mon Sep 17 00:00:00 2001 From: Heiner Lohaus Date: Mon, 20 Nov 2023 14:02:12 +0100 Subject: Add translate readme module Translate readme to german --- etc/tool/translate_readme.py | 88 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 etc/tool/translate_readme.py (limited to 'etc/tool/translate_readme.py') diff --git a/etc/tool/translate_readme.py b/etc/tool/translate_readme.py new file mode 100644 index 00000000..43bfdcde --- /dev/null +++ b/etc/tool/translate_readme.py @@ -0,0 +1,88 @@ + +import sys +from pathlib import Path +import asyncio + +sys.path.append(str(Path(__file__).parent.parent.parent)) + +import g4f +g4f.debug.logging = True +from g4f.debug import access_token +provider = g4f.Provider.OpenaiChat + +iso = "GE" +language = "german" +translate_prompt = f""" +Translate this markdown document to {language}. +Don't translate or change inline code examples. +```md +""" +keep_note = "Keep this: [!Note] as [!Note].\n" +blacklist = [ + '## Šī¸ Copyright', + '## 🚀 Providers and Models', + '## 🔗 Related GPT4Free Projects' +] +whitelist = [ + "### Other", + "### Models" +] + +def read_text(text): + start = end = 0 + new = text.strip().split('\n') + for i, line in enumerate(new): + if line.startswith('```'): + if not start: + start = i + 1 + end = i + return '\n'.join(new[start:end]).strip() + +async def translate(text): + prompt = translate_prompt + text.strip() + '\n```' + if "[!Note]" in text: + prompt = keep_note + prompt + result = read_text(await provider.create_async( + model="", + messages=[{"role": "user", "content": prompt}], + access_token=access_token + )) + if text.endswith("```") and not result.endswith("```"): + result += "\n```" + return result + +async def translate_part(part, i): + blacklisted = False + for headline in blacklist: + if headline in part: + blacklisted = True + if blacklisted: + lines = part.split('\n') + lines[0] = await translate(lines[0]) + part = '\n'.join(lines) + for trans in whitelist: + if trans in part: + part = part.replace(trans, await translate(trans)) + else: + part = await translate(part) + print(f"[{i}] translated") + return part + +async def translate_readme(readme) -> str: + parts = readme.split('\n## ') + print(f"{len(parts)} parts...") + parts = await asyncio.gather( + *[translate_part("## " + part, i) for i, part in enumerate(parts)] + ) + return "\n\n".join(parts) + +with open("README.md", "r") as fp: + readme = fp.read() + +print("Translate readme...") +readme = asyncio.run(translate_readme(readme)) + +file = f"README-{iso}.md" +with open(file, "w") as fp: + fp.write(readme) +print(f'"{file}" saved') \ No newline at end of file -- cgit v1.2.3