main.py의 모든 UI 텍스트(버튼, 레이블, 메시지 박스 등)가 지역화되어 있습니다.
- 지원 언어: 한국어 (ko), 영어 (en)
- 번역 파일 위치:
locales/{lang}/main.json - 자동 Fallback: ko → en
{
"window.title": "DART - Drone Analytics & Routing Tool",
"window.waypoint_editor.title": "웨이포인트 편집",
"label.waypoint_name": "웨이포인트 이름",
"button.save": "SAVE",
"button.convert": "변환",
...
}{
"window.title": "DART - Drone Analytics & Routing Tool",
"window.waypoint_editor.title": "WAYPOINT EDITOR",
"label.waypoint_name": "WAYPOINT NAME",
"button.save": "SAVE",
"button.convert": "CONVERT",
...
}메인 윈도우에는 self.loc (LocalizationManager) 인스턴스가 있습니다.
# 번역 가져오기
title = self.loc.get_text("main.window.title")
label = self.loc.get_text("main.label.waypoint_name")
# 항상 Fallback 제공
title = self.loc.get_text("main.window.title") if self.loc else "DART - Drone Analytics & Routing Tool"생성자에서 localization_manager를 받아야 합니다:
def __init__(self, waypoint: Waypoint, parent=None, localization_manager=None):
super().__init__(parent)
self.waypoint = waypoint
self.loc = localization_manager
self.init_ui()
def init_ui(self):
window_title = self.loc.get_text("main.window.waypoint_editor.title") if self.loc else "WAYPOINT EDITOR"
self.setWindowTitle(window_title)# main.py의 main 함수에서
localization_manager = LocalizationManager()
localization_manager.set_language("ko") # 또는 "en"
window = DARTMainWindow(splash, localization_manager)main.window.title- 메인 윈도우 제목main.window.waypoint_editor.title- 웨이포인트 편집 다이얼로그 제목
main.label.waypoint_name- 웨이포인트 이름main.label.nato_phonetic- NATO 포네틱main.label.latitude- 위도main.label.longitude- 경도main.label.mgrs- MGRS 좌표main.label.altitude- 고도main.label.task- 임무main.label.speed- 속도main.label.target_eta- 목표 ETAmain.label.mission_name- 미션 이름main.label.mission_details- 미션 상세정보main.label.id- IDmain.label.name- 이름main.label.created- 생성일main.label.waypoints- 웨이포인트main.label.waypoint_list- 웨이포인트 목록main.label.start_waypoint- 시작 웨이포인트main.label.end_waypoint- 종료 웨이포인트
main.button.convert- 변환main.button.delete- 삭제main.button.cancel- 취소main.button.save- 저장main.button.new_mission- 새 미션 추가main.button.insert_waypoint- 웨이포인트 삽입main.button.local_save- 로컬 저장main.button.export_json- JSON 내보내기main.button.export_csv- CSV 내보내기main.button.create_mission- 미션 생성main.button.mgrs_grid- MGRS 그리드main.button.coords- 좌표main.button.control_zone- 관제권
main.dialog.confirm- 확인main.dialog.delete_confirm- 정말 삭제하시겠습니까?main.dialog.warning- 경고main.dialog.success- 성공main.dialog.create_new_mission- 새 미션 생성main.dialog.insert_waypoint- 웨이포인트 삽입
main.message.mission_not_selected- 먼저 미션을 선택하세요main.message.waypoint_not_found- 웨이포인트를 찾을 수 없습니다main.message.waypoint_inserted- 웨이포인트가 {wp1}과 {wp2} 사이에 삽입되었습니다main.message.waypoint_min_required- 웨이포인트가 2개 이상 필요합니다
main.status.initializing_main_window- 메인 창 초기화...main.status.connecting_database- 데이터베이스 연결...main.status.creating_ui- UI 컴포넌트 생성...main.status.loading_missions- 미션 데이터 로딩...
main.placeholder.waypoint_name- 예: Alpha, Waypoint-1main.placeholder.eta- HH:MM (예: 14:30)
localization_manager = get_localization_manager()
localization_manager.set_language("en") # 영어로 변경main.py에서:
localization_manager.set_language("ko") # 기본값: 한국어locales/ko/main.json에 새 키 추가locales/en/main.json에 동일 키 추가- main.py에서 사용:
text = self.loc.get_text("main.new_key") if self.loc else "Default Text"
번역 파일이 제대로 로드되는지 테스트:
python test_main_localization.py- LocalizationManager는 플러그인별 번역도 지원합니다
- 권한 기반 접근 제어로 플러그인이 메인 번역에 접근할 수 없도록 제한 가능
- 모든 번역은 UTF-8로 인코딩되어 있습니다