Skip to content

Instantly share code, notes, and snippets.

@bannzai
Created October 6, 2023 09:50
Show Gist options
  • Save bannzai/971bd7ec5a9b9df069aaff754c401752 to your computer and use it in GitHub Desktop.
Save bannzai/971bd7ec5a9b9df069aaff754c401752 to your computer and use it in GitHub Desktop.
generate_translated_localizable_strings.py
import json
import os
import openai
openai.organization = os.environ.get("OPENAI_ORGANIZATION")
openai.api_key = os.environ.get("OPENAI_API_KEY")
langs = ['fr']
os.chdir('./DigitalDetox/Resources/')
def create_lang_directory(lang):
path = f'{lang}.lproj'
os.makedirs(path, exist_ok=True)
return os.path.join(path, 'Localizable.strings')
def read_original_strings(file_path):
with open(file_path, 'r') as file:
return file.readlines()
def translate_text(target_lang, ja_text):
translated_localization_strings = [
{
"name": "translated_localization_strings",
"description": f'「Focus」というiOSのスクリーンタイムAPIを利用してユーザーが指定したアプリの制限時間を超えた場合に指定したアプリの利用を制限できる機能を持っているアプリを開発してます。ユーザーのアプリの使いすぎを防ぎ本来やりたかったことに集中(Focus)できるアプリになります。このアプリでローカライズをしたいです。指定された言語が使われている文化圏に相応しいFocusのアプリ上で表示するための翻訳を返してください',
"parameters": {
"type": "object",
"properties": {
"translated": {
"type": "string",
"description": "Translated Localizable.strings value for specify language",
}
},
"required": ["translated"]
}
}
]
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": f'{ja_text}を{target_lang}向けの翻訳をしてください。{target_lang}はISO言語コードと一致しています。`%1$lld`,`%2$lld`,`%3$lld`や`%@` についてはそのままにしてください'},
],
max_tokens=1000,
n=1,
stop=None,
functions=translated_localization_strings,
function_call={ "name": "translated_localization_strings" }
)
message = response["choices"][0]["message"]
if message.get("function_call"):
arguments = json.loads(message["function_call"]["arguments"])
return arguments.get("translated");
# main
original_strings = read_original_strings('ja.lproj/Localizable.strings')
for lang in langs:
print(f"Start {lang}")
translated_strings = []
for line in original_strings:
if '=' not in line:
# 空白やコメント業はそのまま追加して次に進む
translated_strings.append(line)
continue
# 英語部分と日本語部分に分割
key, value = line.split(' = ')
key = key.strip('"')
value = value.strip('";\n')
translated_value = translate_text(lang, value)
print(f'Translated lang:{lang} en_text:{key} ja_text:{value} to "{translated_value}"')
translated_strings.append(f'"{key}" = "{translated_value}";\n')
# 翻訳した結果を新しいファイルに書き込み
new_file_path = create_lang_directory(lang)
print(f"Start of writing {new_file_path}")
with open(new_file_path, 'w') as file:
file.writelines(translated_strings)
print(f"End of writing {new_file_path}")
# 完了メッセージを表示
"Localizable.strings files have been created for the specified languages."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment