diff --git a/.scripts/chatgpt_translate.sh b/.scripts/chatgpt_translate.sh new file mode 100755 index 0000000000..88bce42ee5 --- /dev/null +++ b/.scripts/chatgpt_translate.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +WORK_DIR=.scripts +cd $WORK_DIR + +source utils/install_poetry.sh + +TEMP=tmp.po +TARGET=../$2 + +poetry lock +poetry install +poetry run bash -c " + python google_translate/main.py $2 $TARGET $3 > $TEMP + pomerge -t $TARGET -i $TEMP -o $TARGET +" +rm $TEMP diff --git a/.scripts/google_translate/chatgpt.py b/.scripts/google_translate/chatgpt.py new file mode 100644 index 0000000000..94335587d8 --- /dev/null +++ b/.scripts/google_translate/chatgpt.py @@ -0,0 +1,24 @@ +import json +import requests + +def translate(api_key, ipt): + prompt = f'假設你是一位python工程師,請將下列文件翻譯為繁體中文 “{ipt}”' + response = requests.post( + 'https://api.openai.com/v1/completions', + headers = { + 'Content-Type': 'application/json', + 'Authorization': f'Bearer {api_key}' + }, + json = { + 'model': 'text-davinci-003', + 'prompt': prompt, + 'temperature': 0.4, + 'max_tokens': 1000 + } + ) + return response + +def Translator(ipt, api_key): + response = translate(api_key, ipt) + opt = json.loads(response.text)['choices'][0]['text'] + print(opt) \ No newline at end of file diff --git a/.scripts/google_translate/main.py b/.scripts/google_translate/main.py index 667fcc5950..07075d35c6 100644 --- a/.scripts/google_translate/main.py +++ b/.scripts/google_translate/main.py @@ -5,6 +5,7 @@ import polib from googletrans import Translator +import chatgpt from utils import refine_translations @@ -25,13 +26,23 @@ def _get_po_paths(path: Path) -> List[Path]: if __name__ == '__main__': parser = argparse.ArgumentParser() + parser.add_argument( + "translator", + help="the translator to use", + choices=["google", "chatgpt"], + default="google" + ) parser.add_argument( "path", help="the path of a PO file or a directory containing PO files" ) + parser.add_argument( + "key", + help="api key for chatGPT use", + default="" + ) args = parser.parse_args() - translator = Translator() po_files = _get_po_paths(Path(args.path).resolve()) errors = [] for path in po_files: @@ -41,11 +52,24 @@ def _get_po_paths(path: Path) -> List[Path]: errors.append(f"{path} doesn't seem to be a .po file") continue - for entry in pofile.untranslated_entries()[::-1]: - translation = translator.translate(entry.msgid, src='en', dest='zh-TW') + if args.translator == "google": + translator = Translator() + for entry in pofile.untranslated_entries()[::-1]: + translation = translator.translate(entry.msgid, src='en', dest='zh-TW') + + print( + '#, fuzzy\n' + f'msgid "{repr(entry.msgid)[1:-1]}"\n' + f'msgstr "{repr(refine_translations(translation.text))[1:-1]}"\n' + ) + + elif args.translator == "chatgpt": + api_key = args.key + for entry in pofile.untranslated_entries()[::-1]: + translation = chatgpt.Translator(api_key, entry.msgid) - print( - '#, fuzzy\n' - f'msgid "{repr(entry.msgid)[1:-1]}"\n' - f'msgstr "{repr(refine_translations(translation.text))[1:-1]}"\n' - ) + print( + '#, fuzzy\n' + f'msgid "{repr(entry.msgid)[1:-1]}"\n' + f'msgstr "{repr(refine_translations(translation.text))[1:-1]}"\n' + ) \ No newline at end of file diff --git a/.scripts/pyproject.toml b/.scripts/pyproject.toml index cdb505ad0e..34d3740eb4 100644 --- a/.scripts/pyproject.toml +++ b/.scripts/pyproject.toml @@ -10,6 +10,7 @@ python = "^3.10" polib = "1.1.1" googletrans = "3.1.0a0" translate-toolkit = "3.8.1" +requests = "2.31.0" [build-system]