Skip to content

Instantly share code, notes, and snippets.

@soulduse
Last active October 8, 2024 03:31
Show Gist options
  • Save soulduse/8f0adc9dfa7dff1a5e28ed5ee86c2b29 to your computer and use it in GitHub Desktop.
Save soulduse/8f0adc9dfa7dff1a5e28ed5ee86c2b29 to your computer and use it in GitHub Desktop.

사용방법

  1. 해당 파이썬 파일(add_translation.py)을 Android 프로젝트 root 디렉토리(최상단)에 생성한다.
  2. 본인이 번역하고자 하는 언어에 맞게 아래 부분을 수정한다.
languages = ['en', 'ar', 'de', 'es', 'fr', 'it', 'ja', 'ko', 'zh-rTW', 'zh']
  1. ChatGPT로 이동하여 위 prompt.txt 내용을 복붙하여 입력합니다.
import os
def get_folder_name(lang):
"""언어 코드를 받아와 해당 언어의 폴더 이름을 반환합니다."""
return "values" if lang == 'en' else f"values-{lang}"
def ensure_directory(directory):
"""주어진 디렉토리가 있는지 확인하고, 없다면 생성합니다."""
if not os.path.exists(directory):
os.makedirs(directory)
def update_translation_in_file(file_path, key, translation):
"""주어진 파일 경로에서 XML 파일을 업데이트하거나 생성합니다."""
if os.path.exists(file_path):
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
existing_key = f'<string name="{key}">'
if existing_key in content:
# 기존 키를 새로운 번역으로 대체
content = content.replace(f'{existing_key}.*?</string>', f'{existing_key}{translation}</string>')
new_content = content
elif '</resources>' in content:
new_content = content.replace('</resources>', f' <string name="{key}">{translation}</string>\n</resources>')
else:
new_content = content + f'\n<string name="{key}">{translation}</string>\n</resources>'
with open(file_path, 'w', encoding='utf-8') as file:
file.write(new_content)
else:
with open(file_path, 'w', encoding='utf-8') as file:
file.write(f'<?xml version="1.0" encoding="utf-8"?>\n<resources>\n <string name="{key}">{translation}</string>\n</resources>')
def add_translation(key, translations):
"""번역을 추가하는 메인 함수입니다."""
languages = ['en', 'ar', 'de', 'es', 'fr', 'it', 'ja', 'ko', 'zh-rTW', 'zh']
translation_list = translations.split('|')
if len(translation_list) != len(languages):
print("Error: Number of translations provided does not match the number of supported languages.")
return
base_path = "app/src/main/res/"
for lang, translation in zip(languages, translation_list):
folder_name = get_folder_name(lang)
directory = f"{base_path}{folder_name}"
ensure_directory(directory)
file_path = f"{directory}/strings.xml"
update_translation_in_file(file_path, key, translation)
if __name__ == "__main__":
import sys
if len(sys.argv) < 3:
print("Please provide all the required parameters.")
exit()
add_translation(sys.argv[1], sys.argv[2])
Android strings.xml을 자동화 하기 위한 파이썬 스크립트를 작성했어.
코드는 다음과 같아.
```python
import os
def get_folder_name(lang):
"""언어 코드를 받아와 해당 언어의 폴더 이름을 반환합니다."""
return "values" if lang == 'en' else f"values-{lang}"
def ensure_directory(directory):
"""주어진 디렉토리가 있는지 확인하고, 없다면 생성합니다."""
if not os.path.exists(directory):
os.makedirs(directory)
def update_translation_in_file(file_path, key, translation):
"""주어진 파일 경로에서 XML 파일을 업데이트하거나 생성합니다."""
if os.path.exists(file_path):
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
existing_key = f'<string name="{key}">'
if existing_key in content:
# 기존 키를 새로운 번역으로 대체
content = content.replace(f'{existing_key}.*?</string>', f'{existing_key}{translation}</string>')
new_content = content
elif '</resources>' in content:
new_content = content.replace('</resources>', f' <string name="{key}">{translation}</string>\n</resources>')
else:
new_content = content + f'\n<string name="{key}">{translation}</string>\n</resources>'
with open(file_path, 'w', encoding='utf-8') as file:
file.write(new_content)
else:
with open(file_path, 'w', encoding='utf-8') as file:
file.write(f'<?xml version="1.0" encoding="utf-8"?>\n<resources>\n <string name="{key}">{translation}</string>\n</resources>')
def add_translation(key, translations):
"""번역을 추가하는 메인 함수입니다."""
languages = ['en', 'ar', 'de', 'es', 'fr', 'it', 'ja', 'ko', 'zh-rTW', 'zh']
translation_list = translations.split('|')
if len(translation_list) != len(languages):
print("Error: Number of translations provided does not match the number of supported languages.")
return
base_path = "app/src/main/res/"
for lang, translation in zip(languages, translation_list):
folder_name = get_folder_name(lang)
directory = f"{base_path}{folder_name}"
ensure_directory(directory)
file_path = f"{directory}/strings.xml"
update_translation_in_file(file_path, key, translation)
if __name__ == "__main__":
import sys
if len(sys.argv) < 3:
print("Please provide all the required parameters.")
exit()
add_translation(sys.argv[1], sys.argv[2])
```
사용방법은 아래와 같이 사용하면 돼
예시:
```
python3 add_translation.py data_loading "Loading data. Please try again in a moment.|جاري تحميل البيانات. يرجى المحاولة مرة أخرى بعد قليل.|Daten werden geladen. Bitte versuchen Sie es in einem Moment erneut.|Cargando datos. Por favor, inténtelo de nuevo en un momento.|Chargement des données. Veuillez réessayer dans un moment.|Caricamento dati. Si prega di riprovare tra un momento.|データをロード中です。少し待ってから再度お試しください。|데이터 로딩 중입니다. 잠시 후 다시 시도해주세요.|正在加载数据,请稍后再试。|正在載入資料
,請稍後再試。"
```
['en', 'ar', 'de', 'es', 'fr', 'it', 'ja', 'ko', 'zh-rTW', 'zh'] 순서에 맞게 번역 파일을 만들고 싶은데 위에 사용 예시를 바탕으로 스크립트를 작성해줘.
내가 번역할 내용은 아래 적힌 내용이야.
{{ eg. 안녕하세요 }}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment