Skip to content

Commit 39ef5e5

Browse files
committed
Translate UI strings to Traditional Chinese for focus, LLM, settings, and widgets modules, enhancing localization support.
1 parent d08b967 commit 39ef5e5

11 files changed

Lines changed: 812 additions & 772 deletions

File tree

src/i18n/locales/ko/browserUsage.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,5 +55,6 @@
5555
"hideIgnored": "무시한 항목 숨기기",
5656
"totalDomains": "{{count}}개 도메인",
5757
"totalDomains_plural": "{{count}}개 도메인",
58+
"localApiPort": "로컬 API 포트: {{port}}",
5859
"refresh": "새로고침"
5960
}

src/i18n/locales/ko/common.json

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@
3434
"updateAvailableBody": "TimeLens v{{version}}을(를) 사용할 수 있습니다. 현재 v{{current}}입니다.",
3535
"updateAvailableStoreBody": "TimeLens v{{version}}이(가) 사용 가능합니다. 현재 v{{current}}입니다. Microsoft Store 업데이트를 열었습니다.",
3636
"updateInstallReady": "TimeLens v{{version}}이(가) 설치되었습니다. 업데이트를 적용하려면 앱을 다시 시작하세요.",
37-
"downloadUpdate": "Download update",
38-
"downloadingUpdate": "Downloading update",
39-
"installUpdate": "Install update",
40-
"installingUpdate": "Installing update",
41-
"installLater": "Install later",
42-
"updateDownloadReady": "The update package is ready. Install now?",
43-
"downloadUpdateFailed": "Failed to download update",
37+
"downloadUpdate": "업데이트 다운로드",
38+
"downloadingUpdate": "업데이트 다운로드 중",
39+
"installUpdate": "업데이트 설치",
40+
"installingUpdate": "업데이트 설치 중",
41+
"installLater": "나중에 설치",
42+
"updateDownloadReady": "업데이트 패키지가 준비되었습니다. 지금 설치할까요?",
43+
"downloadUpdateFailed": "업데이트 다운로드 실패",
4444
"vscodeExtensionOfflineTitle": "VS Code 확장 프로그램이 연결되지 않음",
4545
"vscodeExtensionOfflineBody": "확장 프로그램이 실행 중이 아니어서 VS Code 통계가 일부 낮아집니다.",
4646
"viewOnGitHub": "GitHub에서 보기",
@@ -59,10 +59,10 @@
5959
"mainNavigation": "주 탐색",
6060
"clearSearch": "검색 지우기",
6161
"openGlobalSearch": "전역 검색 열기",
62-
"browseExecutable": "Browse for executable",
63-
"searchAppPlaceholder": "Search app",
64-
"noAppsFoundBrowse": "No apps found — use the folder button to browse",
65-
"executableFilter": "Executable",
66-
"unknownError": "Unknown error",
67-
"unhandledRejection": "Unhandled promise rejection"
62+
"browseExecutable": "실행 파일 찾아보기",
63+
"searchAppPlaceholder": "앱 검색",
64+
"noAppsFoundBrowse": "앱을 찾을 수 없습니다 — 폴더 버튼을 눌러 찾아보세요",
65+
"executableFilter": "실행 파일",
66+
"unknownError": "알 수 없는 오류",
67+
"unhandledRejection": "처리되지 않은 Promise 거부"
6868
}

src/i18n/locales/ko/focus.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,11 @@
4545
"ruleMetaApp": "앱: {{app}}",
4646
"noMatch": "규칙이 현재 조건과 일치하지 않았습니다.",
4747
"simulationError": "지금 규칙을 평가할 수 없습니다.",
48-
"saveSuccess": "Rule saved.",
49-
"saveFailed": "Could not save rule.",
50-
"nameRequired": "Please enter a rule name.",
51-
"keywordRequired": "Please enter a keyword.",
52-
"appRequired": "Please enter an app name.",
53-
"timeWindowRequired": "Please select a start and end time."
48+
"saveSuccess": "규칙이 저장되었습니다.",
49+
"saveFailed": "규칙을 저장할 수 없습니다.",
50+
"nameRequired": "규칙 이름을 입력하세요.",
51+
"keywordRequired": "키워드를 입력하세요.",
52+
"appRequired": "앱 이름을 입력하세요.",
53+
"timeWindowRequired": "시작 시간과 종료 시간을 선택하세요."
5454
}
5555
}

src/i18n/locales/ko/limits.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,6 @@
2222
"limitReached100Body": "오늘 {{app}}을(를) {{used}} 사용하여 일일 제한 {{limit}}에 도달했습니다. 휴식을 취하는 것을 고려하세요.",
2323
"dismiss": "닫기",
2424
"noAppsFound": "앱을 찾을 수 없습니다",
25-
"hoursShort": "h",
26-
"minutesShort": "m"
25+
"hoursShort": "",
26+
"minutesShort": ""
2727
}

src/i18n/locales/ko/llm.json

Lines changed: 71 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,73 @@
11
{
2-
"navTitle": "AI Insights",
3-
"pageTitle": "AI Insights",
4-
"pageSubtitle": "Ask AI to analyze your screen time and productivity habits.",
5-
"analyzeButton": "Analyze my day",
6-
"emptyState": "Click the button above to get a personalized screen-time analysis.",
7-
"emptyInputPlaceholder": "Start an analysis to ask follow-up questions",
8-
"followUpPlaceholder": "Ask a follow-up question",
9-
"send": "Send",
10-
"newAnalysis": "New analysis",
11-
"missingConfigError": "Please configure an active LLM provider, API key, and model in Settings first.",
12-
"activeProvider": "Active provider",
13-
"referralTitle": "Get an API key",
14-
"referralBody": "Use the link below to sign up and get your API key for this provider.",
15-
"model": "Model",
16-
"modelPlaceholder": "e.g. gpt-4o-mini",
17-
"apiKey": "API key",
18-
"apiKeyPlaceholder": "Enter your API key",
19-
"apiKeyWarning": "Your API key is stored locally in llm_config.toml. Keep the file safe.",
20-
"openConfigFile": "Open config file",
21-
"openConfigDir": "Open config folder",
22-
"baseUrl": "Custom base URL",
23-
"testConnection": "Test connection",
24-
"testMissingFields": "Please fill in the API key, base URL, and model before testing.",
25-
"testSuccess": "Connection successful.",
26-
"configuredModels": "Configured models",
27-
"addModel": "Add model",
28-
"nickname": "Nickname",
29-
"nicknamePlaceholder": "e.g. My OpenAI key",
30-
"modelRequired": "Please enter a model name.",
31-
"baseUrlRequired": "Please enter a base URL.",
32-
"modelNicknameRequired": "Please enter a nickname.",
33-
"nicknameDuplicate": "This nickname is already used by another model.",
34-
"deleteModelConfirm": "Delete model '{{name}}'? This cannot be undone.",
35-
"builtin": "Built-in",
36-
"active": "Active",
37-
"setActive": "Use",
38-
"noModel": "No model",
39-
"noBaseUrl": "No base URL",
40-
"noProvider": "No provider",
41-
"selectModel": "Select model",
42-
"dataSharingTitle": "Data shared with AI",
43-
"dataSharingSubtitle": "Choose which screen-time data the AI assistant can see. All are shared by default.",
44-
"shareTotalTime": "Total active time",
45-
"shareTopApps": "Top apps",
46-
"shareCategories": "Categories",
47-
"shareFocusTime": "Focus time",
48-
"shareGoals": "Usage goals",
49-
"shareInterruptions": "Interruptions",
50-
"defaultRangeTitle": "Default analysis range",
51-
"defaultRangeSubtitle": "Default time range used when starting a new analysis.",
52-
"rangeToday": "Today",
53-
"rangeYesterday": "Yesterday",
54-
"rangeLast7Days": "Last 7 days",
55-
"rangeLast30Days": "Last 30 days",
56-
"rangeThisWeek": "This week",
57-
"rangeLastWeek": "Last week",
58-
"rangeCustom": "Custom range",
59-
"startDate": "Start date",
60-
"endDate": "End date",
61-
"conversations": "Conversations",
62-
"newConversation": "New conversation",
63-
"tabActive": "Active",
64-
"tabArchived": "Archived",
65-
"untitledConversation": "Untitled",
66-
"pin": "Pin",
67-
"unpin": "Unpin",
68-
"archive": "Archive",
69-
"unarchive": "Unarchive",
70-
"summarize": "Summarize",
71-
"summarizeTitle": "Condense conversation history to save tokens",
72-
"analysisSuffix": "Analysis"
2+
"navTitle": "AI 인사이트",
3+
"pageTitle": "AI 인사이트",
4+
"pageSubtitle": "AI에게 화면 사용 시간과 생산성 습관을 분석해 달라고 요청하세요.",
5+
"analyzeButton": "분석 시작",
6+
"emptyState": "위의 버튼을 클릭하여 맞춤형 화면 사용 시간 분석을 받아보세요.",
7+
"emptyInputPlaceholder": "분석을 시작한 후 추가 질문을 합니다",
8+
"followUpPlaceholder": "추가 질문을 입력하세요",
9+
"send": "보내기",
10+
"newAnalysis": "새 분석",
11+
"missingConfigError": "먼저 설정에서 활성 LLM 공급자, API 키, 모델을 구성하세요.",
12+
"activeProvider": "활성 공급자",
13+
"referralTitle": "API 키 받기",
14+
"referralBody": "아래 링크를 통해 가입하고 이 공급자의 API 키를 받으세요.",
15+
"model": "모델",
16+
"modelPlaceholder": "예: gpt-4o-mini",
17+
"apiKey": "API ",
18+
"apiKeyPlaceholder": "API 키 입력",
19+
"apiKeyWarning": "API 키는 로컬 llm_config.toml에 일반 텍스트로 저장됩니다. 파일을 안전하게 보관하세요.",
20+
"openConfigFile": "설정 파일 열기",
21+
"openConfigDir": "설정 폴더 열기",
22+
"baseUrl": "사용자 지정 기본 URL",
23+
"testConnection": "연결 테스트",
24+
"testMissingFields": "테스트하기 전에 API 키, 기본 URL, 모델을 입력하세요.",
25+
"testSuccess": "연결에 성공했습니다.",
26+
"configuredModels": "구성된 모델",
27+
"addModel": "모델 추가",
28+
"nickname": "별칭",
29+
"nicknamePlaceholder": "예: 내 OpenAI ",
30+
"modelRequired": "모델 이름을 입력하세요.",
31+
"baseUrlRequired": "기본 URL을 입력하세요.",
32+
"modelNicknameRequired": "별칭을 입력하세요.",
33+
"nicknameDuplicate": "이 별칭은 이미 다른 모델에서 사용 중입니다.",
34+
"deleteModelConfirm": "모델 '{{name}}'을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
35+
"builtin": "내장",
36+
"active": "활성",
37+
"setActive": "사용",
38+
"noModel": "모델 없음",
39+
"noBaseUrl": "기본 URL 없음",
40+
"noProvider": "공급자 없음",
41+
"selectModel": "모델 선택",
42+
"dataSharingTitle": "AI와 공유하는 데이터",
43+
"dataSharingSubtitle": "AI 어시스턴트가 볼 수 있는 화면 사용 시간 데이터를 선택하세요. 기본적으로 모두 공유됩니다.",
44+
"shareTotalTime": "총 활성 시간",
45+
"shareTopApps": "주요 앱",
46+
"shareCategories": "카테고리",
47+
"shareFocusTime": "집중 시간",
48+
"shareGoals": "사용 목표",
49+
"shareInterruptions": "방해 횟수",
50+
"defaultRangeTitle": "기본 분석 범위",
51+
"defaultRangeSubtitle": "새 분석을 시작할 때 사용되는 기본 기간입니다.",
52+
"rangeToday": "오늘",
53+
"rangeYesterday": "어제",
54+
"rangeLast7Days": "지난 7일",
55+
"rangeLast30Days": "지난 30일",
56+
"rangeThisWeek": "이번 주",
57+
"rangeLastWeek": "지난주",
58+
"rangeCustom": "사용자 지정 범위",
59+
"startDate": "시작일",
60+
"endDate": "종료일",
61+
"conversations": "대화",
62+
"newConversation": "새 대화",
63+
"tabActive": "활성",
64+
"tabArchived": "보관됨",
65+
"untitledConversation": "제목 없음",
66+
"pin": "고정",
67+
"unpin": "고정 해제",
68+
"archive": "보관",
69+
"unarchive": "보관 해제",
70+
"summarize": "요약",
71+
"summarizeTitle": "토큰을 절약하기 위해 대화 기록을 압축",
72+
"analysisSuffix": "분석"
7373
}

src/i18n/locales/ko/settings.json

Lines changed: 57 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,28 @@
33
"subtitle": "TimeLens를 취향에 맞게 사용자 지정",
44
"searchPlaceholder": "설정 검색…",
55
"searchNoResult": "일치하는 설정이 없습니다",
6-
"generalDesc": "Language and region preferences",
7-
"appearanceDesc": "Theme and visual style",
8-
"trayIconDesc": "Tray or taskbar icon appearance",
9-
"trackingDesc": "Monitoring, sampling, and idle settings",
10-
"startupDesc": "Launch behavior and auto-open options",
11-
"widgetsDesc": "Widget visibility and focus behavior",
12-
"shortcutsDesc": "Global keyboard shortcuts",
13-
"dataDesc": "Excluded applications and data export",
14-
"dataHealthDesc": "Integrity checks and repair tools",
15-
"backupDesc": "Export and restore backup packages",
16-
"retentionDesc": "Data archival and compression policy",
17-
"profilesDesc": "Profile management and legacy import",
18-
"encryptionDesc": "Database encryption at rest",
19-
"transparencyDesc": "Tracking and privacy overview",
20-
"extensionBridgeDesc": "Local API and extension authentication",
21-
"aboutDesc": "Version, logs, and updates",
22-
"privacyCenterDesc": "Unified privacy and permission overview",
6+
"generalDesc": "언어 및 지역 설정",
7+
"appearanceDesc": "테마 및 시각 스타일",
8+
"trayIconDesc": "트레이 또는 작업 표시줄 아이콘 모양",
9+
"trackingDesc": "모니터링, 샘플링, 유휴 설정",
10+
"startupDesc": "실행 동작 및 자동 열기 옵션",
11+
"widgetsDesc": "위젯 표시 및 포커스 동작",
12+
"shortcutsDesc": "전역 키보드 단축키",
13+
"dataDesc": "제외된 애플리케이션 및 데이터 내보내기",
14+
"dataHealthDesc": "무결성 검사 및 수리 도구",
15+
"backupDesc": "백업 패키지 내보내기 및 복원",
16+
"retentionDesc": "데이터 보관 및 압축 정책",
17+
"profilesDesc": "프로필 관리 및 레거시 가져오기",
18+
"encryptionDesc": "데이터베이스 저장 중 암호화",
19+
"transparencyDesc": "추적 및 개인정보 보호 개요",
20+
"extensionBridgeDesc": "로컬 API 및 확장 프로그램 인증",
21+
"aboutDesc": "버전, 로그 및 업데이트",
22+
"privacyCenterDesc": "통합 개인정보 및 권한 개요",
2323
"aiAssistant": {
24-
"title": "AI Assistant",
25-
"description": "Large language model integration and insights",
26-
"provider": "Provider",
27-
"apiKey": "API key"
24+
"title": "AI 어시스턴트",
25+
"description": "대형 언어 모델 통합 및 인사이트",
26+
"provider": "공급자",
27+
"apiKey": "API "
2828
},
2929
"general": "일반",
3030
"appearance": "모양",
@@ -78,13 +78,13 @@
7878
"title": "위젯",
7979
"fadeOnBlur": "포커스 잃을 때 흐릿하게",
8080
"fadeHint": "위젯이 가려지면 거의 투명해지고 클릭하면 복원",
81-
"permissionsTitle": "Widget permissions",
82-
"noWidgetsForPermissions": "No widgets installed.",
83-
"noPermissions": "No permissions granted.",
84-
"neverAccessed": "Never accessed",
85-
"autoBlurTitle": "Auto-blur per widget",
86-
"autoBlurDesc": "Choose which widgets blur when unfocused.",
87-
"autoBlurEnabledCount": "widgets auto-blur"
81+
"permissionsTitle": "위젯 권한",
82+
"noWidgetsForPermissions": "설치된 위젯이 없습니다.",
83+
"noPermissions": "부여된 권한이 없습니다.",
84+
"neverAccessed": "접근한 적 없음",
85+
"autoBlurTitle": "위젯별 자동 흐림",
86+
"autoBlurDesc": "포커스를 잃을 때 흐릿하게 처리할 위젯을 선택하세요.",
87+
"autoBlurEnabledCount": "개 위젯 자동 흐림"
8888
},
8989
"browser": {
9090
"title": "브라우저 확장 프로그램",
@@ -191,7 +191,7 @@
191191
"currentPath": "선택한 파일",
192192
"saveTitle": "TimeLens 백업 저장",
193193
"openTitle": "TimeLens 백업 열기",
194-
"filterName": "TimeLens Backup",
194+
"filterName": "TimeLens 백업",
195195
"previewVersion": "패키지 v{{version}}, 앱 {{appVersion}}",
196196
"previewSchema": "스키마: {{schema}}",
197197
"previewCounts": "사용 {{appUsage}}, 할 일 {{todos}}, 위젯 {{widgets}}",
@@ -209,26 +209,26 @@
209209
"diffToUpdate": "{{count}} 업데이트",
210210
"diffConflicts": "{{count}} 충돌",
211211
"diffSettingsConflicts": "설정 충돌",
212-
"exportTitle": "Export Backup",
213-
"exportDesc": "Package your current data into a .timelens-backup file. Optional encryption is supported.",
214-
"restoreTitle": "Restore from Backup",
215-
"restoreDesc": "Select a .timelens-backup file, validate it, and restore to the current or a new profile.",
216-
"chooseFile": "Choose file",
217-
"noFileSelected": "No file selected",
218-
"fileSelected": "Selected: {{name}}",
219-
"selectFileFirst": "Please select a backup file first",
220-
"exporting": "Exporting...",
221-
"restoring": "Restoring...",
222-
"validating": "Validating...",
212+
"exportTitle": "백업 내보내기",
213+
"exportDesc": "현재 데이터를 .timelens-backup 파일로 패키징합니다. 선택적 암호화를 지원합니다.",
214+
"restoreTitle": "백업에서 복원",
215+
"restoreDesc": ".timelens-backup 파일을 선택하고 검증한 후 현재 프로필 또는 새 프로필로 복원합니다.",
216+
"chooseFile": "파일 선택",
217+
"noFileSelected": "선택된 파일 없음",
218+
"fileSelected": "선택됨: {{name}}",
219+
"selectFileFirst": "먼저 백업 파일을 선택하세요",
220+
"exporting": "내보내기는 중…",
221+
"restoring": "복원 중…",
222+
"validating": "검증 중…",
223223
"notification": {
224-
"exportTitle": "Backup exported",
225-
"restoreTitle": "Restore completed"
224+
"exportTitle": "백업 내보내기 버림",
225+
"restoreTitle": "복원 완료"
226226
},
227-
"importJsonSuccess": "JSON data imported. The page will refresh shortly.",
228-
"importJsonFailed": "Failed to import JSON data",
229-
"overwriteConfirm": "Overwrite mode will erase current data and replace it with the backup. Continue?",
230-
"mergeConfirm": "Merge mode will merge backup contents into current data and may overwrite conflicts. Continue?",
231-
"newProfileConfirm": "A new profile will be created and TimeLens will restart. Continue?"
227+
"importJsonSuccess": "JSON 데이터를 가져왔습니다. 페이지가 곧 새로고침됩니다.",
228+
"importJsonFailed": "JSON 데이터 가져오기 실패",
229+
"overwriteConfirm": "덮어쓰기 모드는 현재 데이터를 지우고 백업으로 대체합니다. 계속하시겠습니까?",
230+
"mergeConfirm": "병합 모드는 백업 내용을 현재 데이터에 병합하고 충돌을 덮어쓸 수 있습니다. 계속하시겠습니까?",
231+
"newProfileConfirm": "새 프로필이 생성되고 TimeLens가 다시 시작됩니다. 계속하시겠습니까?"
232232
},
233233
"retention": {
234234
"title": "데이터 보관 정책",
@@ -354,10 +354,10 @@
354354
"version": "버전",
355355
"logs": "로그",
356356
"openLogFolder": "로그 폴더 열기",
357-
"updateMode": "Update checks",
358-
"updateModeOff": "Off",
359-
"updateModeNotify": "Notify only",
360-
"updateModeAuto": "Download and install automatically",
357+
"updateMode": "업데이트 확인",
358+
"updateModeOff": "",
359+
"updateModeNotify": "알림만",
360+
"updateModeAuto": "자동으로 다운로드 및 설치",
361361
"checkUpdate": "업데이트 확인",
362362
"checking": "확인 중…",
363363
"checkFailed": "업데이트 확인 실패",
@@ -382,7 +382,12 @@
382382
"createConfirm": "만들기",
383383
"switchConfirm": "프로필 '{{profile}}'(으)로 전환하면 TimeLens가 다시 시작됩니다. 계속하시겠습니까?",
384384
"switchFailed": "프로필 전환 실패",
385-
"createFailed": "프로필 생성 실패"
385+
"createFailed": "프로필 생성 실패",
386+
"importLegacy": "레거시 데이터 가져오기",
387+
"importLegacyBusy": "가져오는 중…",
388+
"importLegacyPrompt": "기본 프로필이 비어 있습니다. 이전 버전의 레거시 데이터가 감지되었습니다. 지금 가져오시겠습니까?",
389+
"importLegacyConfirm": "{{path}}에서 레거시 데이터를 가져오시겠습니까? TimeLens가 가져오기를 적용하기 위해 다시 시작됩니다.",
390+
"importLegacyFailed": "레거시 데이터 가져오기 실패"
386391
},
387392
"encryption": {
388393
"title": "데이터베이스 암호화",

0 commit comments

Comments
 (0)