v2.0.1 업데이트

This commit is contained in:
Gnill82
2025-10-29 15:35:54 +09:00
parent e189a64631
commit 0482c8299b
44 changed files with 89080 additions and 718 deletions

View File

@ -55,14 +55,16 @@ class POHandler:
if po is None:
return 0
# 미번역 항목 필터링
# 전체 항목 및 미번역 항목 필터링
total_entries = len([entry for entry in po if entry.msgid]) # msgid가 있는 항목만 카운트
untranslated = [entry for entry in po if not entry.msgstr.strip()]
if not untranslated:
self.logger.info('미번역 항목이 없습니다.')
translated_count = total_entries
self.logger.info(f'전체 {total_entries}개 항목 중 {translated_count}개 번역 완료 (100%)')
return 0
self.logger.info(f'미번역 항목 {len(untranslated)}건 발견')
self.logger.info(f'전체 {total_entries}개 항목 중 미번역 {len(untranslated)}건 발견')
# TSV 파일로 저장
self._save_to_tsv(untranslated, output_path)
@ -121,14 +123,7 @@ class POHandler:
key = (msgctxt_escaped, source_location_escaped)
if key not in merged_data:
merged_data[key] = {
'msgid': msgid_escaped,
'msgid_ko': None, # ko의 msgid를 별도로 저장
}
# ko 언어의 msgid는 별도로 저장
if lang_code == 'ko':
merged_data[key]['msgid_ko'] = msgid_escaped
merged_data[key] = {}
# 언어별 번역문 저장
merged_data[key][lang_code] = msgstr_escaped
@ -136,19 +131,14 @@ class POHandler:
# CSV 레코드 생성
records = []
for (msgctxt, source_location), data in merged_data.items():
# ko의 msgid가 있으면 우선 사용
msgid = data.get('msgid_ko') if data.get('msgid_ko') else data.get('msgid')
record = {
'msgctxt': msgctxt,
'SourceLocation': source_location,
'msgid': msgid,
}
# 언어별 번역 추가
for key, value in data.items():
if key not in ['msgid', 'msgid_ko']:
record[key] = value
record[key] = value
records.append(record)
@ -160,10 +150,12 @@ class POHandler:
all_langs = set()
for record in records:
all_langs.update(record.keys())
all_langs -= {'msgctxt', 'SourceLocation', 'msgid'}
all_langs -= {'msgctxt', 'SourceLocation'}
# 선호 순서: ko를 맨 앞에, en을 두 번째로
source_lang = self.config.get('languages', {}).get('source', 'ko')
preferred_order = [source_lang] + self.config.get('languages', {}).get('targets', [])
# 선호 순서
preferred_order = self.config.get('languages', {}).get('targets', [])
ordered_langs = [lang for lang in preferred_order if lang in all_langs]
other_langs = sorted([lang for lang in all_langs if lang not in preferred_order])
final_langs = ordered_langs + other_langs
@ -172,7 +164,7 @@ class POHandler:
output_path.parent.mkdir(parents=True, exist_ok=True)
with open(output_path, 'w', newline='', encoding='utf-8-sig') as f:
fieldnames = ['msgctxt', 'SourceLocation', 'msgid'] + final_langs
fieldnames = ['msgctxt', 'SourceLocation'] + final_langs
writer = csv.DictWriter(f, fieldnames=fieldnames, quoting=csv.QUOTE_ALL)
writer.writeheader()
writer.writerows(records)
@ -323,6 +315,8 @@ class POHandler:
for lang in lang_codes:
msgstr = row.get(lang, '')
if msgstr: # 빈 문자열이 아니면 저장
# TSV의 이스케이프된 줄바꿈을 실제 escape sequence로 변환
msgstr = self._unescape_newlines(msgstr)
translations_by_lang[lang][msgctxt] = msgstr
except Exception as e: