t9n-cli 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dictionaries/ar.json +244 -0
- package/dictionaries/de.json +244 -0
- package/dictionaries/el.json +244 -0
- package/dictionaries/en.json +244 -0
- package/dictionaries/es.json +244 -0
- package/dictionaries/fr.json +244 -0
- package/dictionaries/hi.json +244 -0
- package/dictionaries/id.json +244 -0
- package/dictionaries/it.json +244 -0
- package/dictionaries/ja.json +244 -0
- package/dictionaries/ko.json +244 -0
- package/dictionaries/ms.json +244 -0
- package/dictionaries/nl.json +244 -0
- package/dictionaries/pl.json +244 -0
- package/dictionaries/pt.json +244 -0
- package/dictionaries/ru.json +244 -0
- package/dictionaries/sv.json +244 -0
- package/dictionaries/th.json +244 -0
- package/dictionaries/tr.json +244 -0
- package/dictionaries/vi.json +244 -0
- package/dictionaries/yue.json +244 -0
- package/dictionaries/zh-CN.json +244 -0
- package/dictionaries/zh-TW.json +244 -0
- package/dist/api.d.ts +1 -0
- package/dist/api.js +52 -0
- package/dist/commands/auth.d.ts +1 -0
- package/dist/commands/auth.js +41 -0
- package/dist/commands/diff.d.ts +1 -0
- package/dist/commands/diff.js +96 -0
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.js +32 -0
- package/dist/commands/scan.d.ts +1 -0
- package/dist/commands/scan.js +151 -0
- package/dist/commands/status.d.ts +1 -0
- package/dist/commands/status.js +42 -0
- package/dist/commands/translate.d.ts +1 -0
- package/dist/commands/translate.js +76 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.js +60 -0
- package/dist/i18n.d.ts +7 -0
- package/dist/i18n.js +52 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +58 -0
- package/dist/lib/jsonUtils.d.ts +12 -0
- package/dist/lib/jsonUtils.js +151 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
{
|
|
2
|
+
"home": {
|
|
3
|
+
"badge": "t9n - MVP",
|
|
4
|
+
"title": "코드를 존중하는 i18n 번역.",
|
|
5
|
+
"subtitle": "구문 오류 제로. 변수 보호. 문맥 인식.",
|
|
6
|
+
"button": "번역 시작하기"
|
|
7
|
+
},
|
|
8
|
+
"editor": {
|
|
9
|
+
"run": "번역 실행",
|
|
10
|
+
"translating": "번역 중",
|
|
11
|
+
"source": {
|
|
12
|
+
"label": "원본 언어",
|
|
13
|
+
"upload": "JSON 업로드",
|
|
14
|
+
"upload_multiple": "클릭하여 JSON 파일 업로드",
|
|
15
|
+
"context": "문맥 (Context)",
|
|
16
|
+
"context_placeholder": "번역 정확도를 높이기 위한 문맥 추가...",
|
|
17
|
+
"pro_feature": "PRO 기능",
|
|
18
|
+
"pro_context_msg": "더 높은 정확도를 위해 문맥 제공 기능을 업그레이드하세요.",
|
|
19
|
+
"info": "원본",
|
|
20
|
+
"lines": "줄",
|
|
21
|
+
"clear_context": "삭제",
|
|
22
|
+
"large_file_title": "대용량 파일 로드됨 ({size})",
|
|
23
|
+
"large_file_desc": "성능을 위해 미리보기가 비활성화되었습니다. 전체 내용이 번역을 위해 전송됩니다."
|
|
24
|
+
},
|
|
25
|
+
"diff_dialog": {
|
|
26
|
+
"title": "증분 업데이트 (Diff)",
|
|
27
|
+
"files_preview": "파일 미리보기",
|
|
28
|
+
"base_tag": "기준",
|
|
29
|
+
"start_diff": "Diff 시작"
|
|
30
|
+
},
|
|
31
|
+
"target": {
|
|
32
|
+
"label": "대상 언어",
|
|
33
|
+
"copy": "복사",
|
|
34
|
+
"download": "다운로드",
|
|
35
|
+
"no_selection": "선택된 언어 없음",
|
|
36
|
+
"placeholder": "언어를 선택하고 번역을 실행하면 결과가 여기에 표시됩니다",
|
|
37
|
+
"stale_warning": "원본 변경됨 - 번역 만료",
|
|
38
|
+
"max_select": "최대 {n}",
|
|
39
|
+
"more_suffix": "(+{n})"
|
|
40
|
+
},
|
|
41
|
+
"mobile": {
|
|
42
|
+
"view_result": "결과 보기",
|
|
43
|
+
"back_to_code": "코드로 돌아가기"
|
|
44
|
+
},
|
|
45
|
+
"features": {
|
|
46
|
+
"diff_title": "증분 Diff",
|
|
47
|
+
"diff_msg": "Diff / 증분 업데이트 기능이 곧 출시됩니다!",
|
|
48
|
+
"soon": "곧 출시"
|
|
49
|
+
},
|
|
50
|
+
"messages": {
|
|
51
|
+
"pro_feature_title": "Pro 기능 (출시 예정)",
|
|
52
|
+
"upload_pro_msg": "업로드는 Pro 기능입니다.\n\n현재 프리미엄 기능을 빌드 중입니다. 잠시만 기다려 주세요!\n\n도움이 필요하신가요? 문의: {email}",
|
|
53
|
+
"download_pro_msg": "다운로드는 Pro 기능입니다.\n\n현재 프리미엄 기능을 빌드 중입니다. 잠시만 기다려 주세요!\n\n도움이 필요하신가요? 문의: {email}",
|
|
54
|
+
"diff_upload_hint": "모든 번역 파일을 업로드하세요. 가장 완성도가 높은 파일이 기준으로 사용됩니다.",
|
|
55
|
+
"file_too_large_title": "파일이 너무 큼",
|
|
56
|
+
"file_too_large_msg": "파일이 너무 큽니다 ({size}). 최대 제한은 {limit}입니다.\n\n파일 분할 기능이 곧 출시됩니다!",
|
|
57
|
+
"copied": "클립보드에 복사되었습니다!",
|
|
58
|
+
"copy_failed": "클립보드 복사 실패",
|
|
59
|
+
"invalid_json": "유효하지 않은 원본 JSON",
|
|
60
|
+
"translation_complete": "번역 완료!",
|
|
61
|
+
"translation_failed": "번역 실패",
|
|
62
|
+
"daily_limit_reached": "일일 한도 초과",
|
|
63
|
+
"daily_limit_desc": "오늘의 무료 번역 할당량을 모두 사용하셨습니다.",
|
|
64
|
+
"pro_plan_coming_soon": "PRO 플랜 및 무제한 액세스가 곧 출시됩니다!",
|
|
65
|
+
"building_premium": "현재 프리미엄 기능을 빌드 중입니다. 잠시만 기다려 주세요!",
|
|
66
|
+
"contact_us": "더 많은 용량이 필요하신가요? 문의: {email}",
|
|
67
|
+
"error_details": "오류 상세 정보:",
|
|
68
|
+
"limit_exceeded": "제한 초과",
|
|
69
|
+
"limit_exceeded_desc": "{tier} 플랜은 요청당 최대 {max}개의 키를 허용합니다. 현재 파일에는 {keys}개의 키가 있습니다.",
|
|
70
|
+
"insufficient_credits": "크레딧 부족",
|
|
71
|
+
"insufficient_credits_desc": "이 번역에는 {cost} 크레딧이 필요하지만, 남은 크레딧은 {available}입니다.",
|
|
72
|
+
"free_plan_limit_exceeded": "무료 플랜 제한 초과",
|
|
73
|
+
"upgrade_to_pro": "PRO로 업그레이드 (출시 예정)",
|
|
74
|
+
"pro_benefits_1": "파일당 무제한 키",
|
|
75
|
+
"pro_benefits_2": "무제한 문맥 길이",
|
|
76
|
+
"pro_benefits_3": "일괄 번역",
|
|
77
|
+
"reduce_size": "현재는 파일 크기나 문맥을 줄여주세요.",
|
|
78
|
+
"select_target_lang": "최소 하나 이상의 대상 언어를 선택하세요.",
|
|
79
|
+
"up_to_date": "선택한 모든 언어가 최신 상태입니다.",
|
|
80
|
+
"translating_placeholder": "// 번역 중...",
|
|
81
|
+
"error_no_data": "// 오류: 반환된 데이터가 없습니다.",
|
|
82
|
+
"error_failed_generic": "// 오류: 번역에 실패했습니다. 다시 시도해 주세요.",
|
|
83
|
+
"max_langs_reached": "무료 플랜에서는 최대 {n}개의 대상 언어만 허용됩니다.",
|
|
84
|
+
"credits_needed": "필요 크레딧",
|
|
85
|
+
"credits_remaining": "잔여",
|
|
86
|
+
"invalid_base_json": "유효하지 않은 기준 JSON",
|
|
87
|
+
"invalid_base_content": "유효하지 않은 기준 파일 내용"
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"common": {
|
|
91
|
+
"contact": "문의",
|
|
92
|
+
"email": "z17682341097@gmail.com",
|
|
93
|
+
"pro": "PRO",
|
|
94
|
+
"coming_soon": "출시 예정",
|
|
95
|
+
"pricing": "요금제",
|
|
96
|
+
"docs": "문서 및 CLI",
|
|
97
|
+
"cli": "CLI",
|
|
98
|
+
"i18n_note": "이 사이트의 모든 번역은 t9n을 사용하여 생성되었습니다.",
|
|
99
|
+
"upgrade": "업그레이드",
|
|
100
|
+
"auto_detect": "자동 감지",
|
|
101
|
+
"soon": "출시 예정",
|
|
102
|
+
"pro_only": "({pro} 전용)",
|
|
103
|
+
"contact_support": "고객 지원 문의",
|
|
104
|
+
"pricing_limits": "요금 및 제한",
|
|
105
|
+
"back_to_home": "홈으로 돌아가기",
|
|
106
|
+
"back_to_editor": "에디터로 돌아가기",
|
|
107
|
+
"mail_to": "메일 쓰기",
|
|
108
|
+
"cancel": "취소",
|
|
109
|
+
"close": "닫기",
|
|
110
|
+
"confirm": "확인",
|
|
111
|
+
"notification": "알림"
|
|
112
|
+
},
|
|
113
|
+
"auth": {
|
|
114
|
+
"login": "로그인",
|
|
115
|
+
"logout": "로그아웃",
|
|
116
|
+
"welcome_back": "다시 오신 것을 환영합니다",
|
|
117
|
+
"login_desc": "Pro 기능과 더 높은 한도를 사용하려면 로그인하세요",
|
|
118
|
+
"cli_login_required": "먼저 다음 명령어로 로그인하세요: t9n auth <your-api-key>",
|
|
119
|
+
"continue_google": "Google로 계속하기",
|
|
120
|
+
"continue_github": "GitHub로 계속하기",
|
|
121
|
+
"terms": "계속 진행하면 서비스 약관 및 개인정보 처리방침에 동의하게 됩니다."
|
|
122
|
+
},
|
|
123
|
+
"settings": {
|
|
124
|
+
"title": "설정",
|
|
125
|
+
"apikeys": {
|
|
126
|
+
"title": "API 키",
|
|
127
|
+
"desc": "CLI 도구 또는 CI/CD 파이프라인에서 사용할 API 키를 관리하세요.",
|
|
128
|
+
"create": "새 키 생성",
|
|
129
|
+
"name_label": "키 이름",
|
|
130
|
+
"name_placeholder": "예: 내 노트북 CLI",
|
|
131
|
+
"key_secret_warning": "지금 API 키를 복사해 두세요. 보안을 위해 다시는 표시되지 않습니다.",
|
|
132
|
+
"copy_key": "키 복사",
|
|
133
|
+
"list_empty": "생성된 API 키가 없습니다.",
|
|
134
|
+
"revoke": "취소",
|
|
135
|
+
"revoke_confirm": "이 API 키를 취소하시겠습니까? 이 키를 사용하는 도구들의 작동이 중지됩니다.",
|
|
136
|
+
"last_used": "마지막 사용",
|
|
137
|
+
"never_used": "사용 안 함",
|
|
138
|
+
"created": "생성일"
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
"pricing": {
|
|
142
|
+
"title": "단순하고 투명한 요금제",
|
|
143
|
+
"subtitle": "당신의 번역 요구 사항에 맞는 플랜을 선택하세요.",
|
|
144
|
+
"monthly": "월",
|
|
145
|
+
"daily": "일",
|
|
146
|
+
"per_request": "요청당",
|
|
147
|
+
"get_started": "시작하기",
|
|
148
|
+
"upgrade": "지금 업그레이드",
|
|
149
|
+
"contact_sales": "영업팀 문의",
|
|
150
|
+
"features": {
|
|
151
|
+
"credits": "{n} 크레딧",
|
|
152
|
+
"keys": "최대 {n}개 키",
|
|
153
|
+
"langs": "최대 {n}개 언어",
|
|
154
|
+
"upload_download": "업로드 / 다운로드",
|
|
155
|
+
"diff": "증분 업데이트 (Diff)",
|
|
156
|
+
"context": "문맥 인식"
|
|
157
|
+
},
|
|
158
|
+
"most_popular": "가장 인기 있음",
|
|
159
|
+
"custom": "커스텀"
|
|
160
|
+
},
|
|
161
|
+
"metadata": {
|
|
162
|
+
"title": "t9n - 개발자를 위한 JSON 번역기 | i18n AI 번역기",
|
|
163
|
+
"description": "i18n JSON 파일을 위한 개발자 우선 AI 번역기. 구문 오류 제로, 변수 보호 (React Intl, i18next), 스마트 문맥 인식. 단어가 아닌 소프트웨어를 번역합니다.",
|
|
164
|
+
"og_title": "t9n - 개발자를 위한 JSON 번역기",
|
|
165
|
+
"og_description": "코드 변수를 깨뜨리지 않고 i18n JSON 파일을 번역하세요. React Intl, i18next 등을 지원합니다."
|
|
166
|
+
},
|
|
167
|
+
"docs": {
|
|
168
|
+
"title": "문서",
|
|
169
|
+
"subtitle": "기본 사용법부터 고급 증분 업데이트 및 AI 문맥 최적화까지 t9n의 기능을 살펴보세요.",
|
|
170
|
+
"sections": {
|
|
171
|
+
"basic": {
|
|
172
|
+
"title": "기본 기능: 실시간 번역",
|
|
173
|
+
"content": "t9n은 i18n JSON 형식을 위해 설계되었습니다. 번역 과정에서 모든 코드 변수({name} 또는 {{count}} 등)가 엄격하게 보호되도록 프롬프트 전략을 최적화했습니다.",
|
|
174
|
+
"item1": "대상 언어 일괄 선택 지원, 여러 번역 동시 생성.",
|
|
175
|
+
"item2": "실시간 미리보기: 원본과 대상 내용을 나란히 비교."
|
|
176
|
+
},
|
|
177
|
+
"context": {
|
|
178
|
+
"title": "문맥 인식 (Context Awareness)",
|
|
179
|
+
"content": "번역은 단순한 단어 대 단어 치환 그 이상입니다. 애플리케이션 배경지식을 제공함으로써 AI가 더 정확한 어휘를 선택할 수 있습니다.",
|
|
180
|
+
"example": "예를 들어, 똑같은 \"Menu\"라는 단어라도 식당 앱에서는 \"메뉴판\"이고 디자인 소프트웨어에서는 \"기능 목록\"입니다. 문맥을 제공하면 이런 모호함을 해결할 수 있습니다."
|
|
181
|
+
},
|
|
182
|
+
"diff": {
|
|
183
|
+
"title": "지능형 증분 업데이트 (Diff 모드)",
|
|
184
|
+
"content": "원본 언어 파일(예: en.json)에 새로운 내용이 추가되었을 때 전체 파일을 다시 번역할 필요가 없습니다. t9n의 증분 업데이트 모드는 이제 완전 자동화를 지원합니다.",
|
|
185
|
+
"new_feature": "신규: 완전 자동 다중 파일 인식",
|
|
186
|
+
"step1_title": "1. 다중 선택 업로드",
|
|
187
|
+
"step1_desc": "업로드 창에서 영어(기준)와 기존 번역 파일(예: 한국어, 일본어)을 동시에 선택하세요. 수동 비교가 필요 없습니다.",
|
|
188
|
+
"step2_title": "2. 스마트 기준 감지",
|
|
189
|
+
"step2_desc": "시스템이 각 파일의 키 개수를 자동으로 계산하여 가장 완성된 파일을 '번역 기준'으로 간주하고, 다른 파일의 누락된 부분을 자동 채웁니다.",
|
|
190
|
+
"step3_title": "3. 정밀 번역",
|
|
191
|
+
"step3_desc": "누락된 키는 🚧 [MISSING]으로 표시됩니다. AI는 이 마커만 번역하여 크레딧을 90% 이상 절약합니다.",
|
|
192
|
+
"quote": "\"기존 번역을 100% 유지하면서 새로운 요구사항만 해결하세요.\""
|
|
193
|
+
},
|
|
194
|
+
"cli": {
|
|
195
|
+
"tag": "지금 사용 가능",
|
|
196
|
+
"title": "t9n CLI",
|
|
197
|
+
"content": "터미널에서 전문적인 i18n 관리를 수행하세요. 강력한 명령줄 인터페이스로 번역 워크플로우를 자동화하세요.",
|
|
198
|
+
"install": "npm install -g @t9n/cli",
|
|
199
|
+
"command_auth": "t9n auth <key>",
|
|
200
|
+
"command_init": "t9n init",
|
|
201
|
+
"command_scan": "t9n scan ./src",
|
|
202
|
+
"command_translate": "t9n translate ./en.json -t ko,ja",
|
|
203
|
+
"command_diff": "t9n diff ./dictionaries",
|
|
204
|
+
"desc_auth": "로컬 환경을 t9n 계정과 연결합니다.",
|
|
205
|
+
"desc_init": "프로젝트 설정을 저장할 t9n.config.json을 생성합니다.",
|
|
206
|
+
"desc_scan": "소스 코드에서 JSON에 아직 없는 누락된 키를 찾습니다.",
|
|
207
|
+
"desc_translate": "로컬 파일을 직접 번역하고 결과를 자동으로 저장합니다.",
|
|
208
|
+
"desc_diff": "폴더 내 모든 언어에 대한 스마트 증분 업데이트를 실행합니다.",
|
|
209
|
+
"progress": "프로덕션 준비 완료"
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
"example_correct": "Portfolio\" → \"투자 포트폴리오\"",
|
|
213
|
+
"example_incorrect": "Portfolio\" → \"작품 집합\""
|
|
214
|
+
},
|
|
215
|
+
"cli": {
|
|
216
|
+
"diff": {
|
|
217
|
+
"title": "🛰️ T9N CLI - 증분 업데이트",
|
|
218
|
+
"analyzing": "🔍 차이점 분석 중...",
|
|
219
|
+
"comparing": "기존 파일과 비교 중...",
|
|
220
|
+
"new_lang": "새로운 언어 감지됨.",
|
|
221
|
+
"success": "번역을 성공적으로 받았습니다!",
|
|
222
|
+
"updated": "업데이트됨:",
|
|
223
|
+
"all_up_to_date": "✨ 모든 번역이 최신 상태입니다!"
|
|
224
|
+
},
|
|
225
|
+
"scan": {
|
|
226
|
+
"title": "🔍 T9N CLI - 코드 스캐너",
|
|
227
|
+
"scanning": "파일 스캔 중...",
|
|
228
|
+
"scanned": "{n}개의 파일 스캔 완료.",
|
|
229
|
+
"missing_found": "{n}개의 누락된 키 발견 (코드에는 있으나 사전에는 없음):",
|
|
230
|
+
"all_present": "✨ 코드의 모든 키가 사전에 존재합니다.",
|
|
231
|
+
"orphaned": "{n}개의 미사용 추정 키 발견 (사전에는 있으나 코드에는 없음):"
|
|
232
|
+
},
|
|
233
|
+
"auth": {
|
|
234
|
+
"verifying": "API 키 확인 중...",
|
|
235
|
+
"success": "인증 성공! ({target} 설정)",
|
|
236
|
+
"key_missing": "API 키를 제공해주세요. 사용법: t9n auth <key>"
|
|
237
|
+
},
|
|
238
|
+
"init": {
|
|
239
|
+
"title": "🎬 T9N - 프로젝트 초기화",
|
|
240
|
+
"created": "프로젝트 설정 생성됨: {path}",
|
|
241
|
+
"already_exists": "설정 파일이 이미 존재합니다: {path}"
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
{
|
|
2
|
+
"home": {
|
|
3
|
+
"badge": "t9n - MVP",
|
|
4
|
+
"title": "terjemahan i18n yang menghormati kod anda.",
|
|
5
|
+
"subtitle": "Sifar Ralat Sintaks. Perlindungan Pembolehubah. Sedar Konteks.",
|
|
6
|
+
"button": "Mula Menterjemah"
|
|
7
|
+
},
|
|
8
|
+
"editor": {
|
|
9
|
+
"run": "JALANKAN TERJEMAHAN",
|
|
10
|
+
"translating": "MENTERJEMAH",
|
|
11
|
+
"source": {
|
|
12
|
+
"label": "Bahasa Sumber",
|
|
13
|
+
"upload": "Muat Naik JSON",
|
|
14
|
+
"upload_multiple": "Klik untuk muat naik fail JSON",
|
|
15
|
+
"context": "Konteks",
|
|
16
|
+
"context_placeholder": "Tambah konteks untuk meningkatkan ketepatan terjemahan...",
|
|
17
|
+
"pro_feature": "CIRI PRO",
|
|
18
|
+
"pro_context_msg": "Naik taraf untuk memberikan konteks bagi ketepatan yang lebih tinggi.",
|
|
19
|
+
"info": "SUMBER",
|
|
20
|
+
"lines": "Baris",
|
|
21
|
+
"clear_context": "Kosongkan",
|
|
22
|
+
"large_file_title": "Fail besar dimuatkan ({size})",
|
|
23
|
+
"large_file_desc": "Pratonton dilumpuhkan untuk prestasi. Kandungan penuh akan dihantar untuk terjemahan."
|
|
24
|
+
},
|
|
25
|
+
"diff_dialog": {
|
|
26
|
+
"title": "Kemas Kini Inkremental (Diff)",
|
|
27
|
+
"files_preview": "Pratonton Fail",
|
|
28
|
+
"base_tag": "ASAS",
|
|
29
|
+
"start_diff": "Mula Diff"
|
|
30
|
+
},
|
|
31
|
+
"target": {
|
|
32
|
+
"label": "Bahasa Sasaran",
|
|
33
|
+
"copy": "Salin",
|
|
34
|
+
"download": "Muat Turun",
|
|
35
|
+
"no_selection": "Tiada bahasa dipilih",
|
|
36
|
+
"placeholder": "Pilih bahasa & jalankan terjemahan untuk melihat hasil di sini",
|
|
37
|
+
"stale_warning": "Sumber berubah - Terjemahan lapuk",
|
|
38
|
+
"max_select": "MAKS {n}",
|
|
39
|
+
"more_suffix": "(+{n})"
|
|
40
|
+
},
|
|
41
|
+
"mobile": {
|
|
42
|
+
"view_result": "Lihat Hasil",
|
|
43
|
+
"back_to_code": "Kembali ke Kod"
|
|
44
|
+
},
|
|
45
|
+
"features": {
|
|
46
|
+
"diff_title": "Diff Inkremental",
|
|
47
|
+
"diff_msg": "Ciri Diff / Kemas Kini Inkremental akan datang tidak lama lagi!",
|
|
48
|
+
"soon": "AKAN DATANG"
|
|
49
|
+
},
|
|
50
|
+
"messages": {
|
|
51
|
+
"pro_feature_title": "Ciri Pro (Akan Datang)",
|
|
52
|
+
"upload_pro_msg": "Muat naik adalah ciri Pro.\n\nKami sedang membina ciri premium. Nantikan!\n\nPerlukan bantuan? Hubungi: {email}",
|
|
53
|
+
"download_pro_msg": "Muat turun adalah ciri Pro.\n\nKami sedang membina ciri premium. Nantikan!\n\nPerlukan bantuan? Hubungi: {email}",
|
|
54
|
+
"diff_upload_hint": "Muat naik semua fail terjemahan anda. Fail yang paling lengkap akan digunakan sebagai asas.",
|
|
55
|
+
"file_too_large_title": "Fail Terlalu Besar",
|
|
56
|
+
"file_too_large_msg": "Fail terlalu besar ({size}). Had maksimum ialah {limit}.\n\nCiri pembahagian fail akan datang tidak lama lagi!",
|
|
57
|
+
"copied": "Disalin ke papan keratan!",
|
|
58
|
+
"copy_failed": "Gagal menyalin ke papan keratan",
|
|
59
|
+
"invalid_json": "JSON Sumber Tidak Sah",
|
|
60
|
+
"translation_complete": "Terjemahan selesai!",
|
|
61
|
+
"translation_failed": "Terjemahan gagal",
|
|
62
|
+
"daily_limit_reached": "HAD HARIAN DICAPAI",
|
|
63
|
+
"daily_limit_desc": "Anda telah menggunakan terjemahan percuma anda untuk hari ini.",
|
|
64
|
+
"pro_plan_coming_soon": "PELAN PRO & AKSES TANPA HAD AKAN DATANG!",
|
|
65
|
+
"building_premium": "Kami sedang membina ciri premium. Nantikan!",
|
|
66
|
+
"contact_us": "Perlukan lebih? Hubungi kami: {email}",
|
|
67
|
+
"error_details": "Butiran ralat:",
|
|
68
|
+
"limit_exceeded": "Had Dilampaui",
|
|
69
|
+
"limit_exceeded_desc": "Pelan {tier} membenarkan sehingga {max} kunci setiap permintaan. Fail anda mempunyai {keys} kunci.",
|
|
70
|
+
"insufficient_credits": "Kredit Tidak Mencukupi",
|
|
71
|
+
"insufficient_credits_desc": "Terjemahan ini memerlukan {cost} kredit, tetapi anda mempunyai baki {available}.",
|
|
72
|
+
"free_plan_limit_exceeded": "HAD PELAN PERCUMA DILAMPAUI",
|
|
73
|
+
"upgrade_to_pro": "NAIK TARAF KE PRO (Akan Datang)",
|
|
74
|
+
"pro_benefits_1": "Kunci Tanpa Had setiap fail",
|
|
75
|
+
"pro_benefits_2": "Panjang Konteks Tanpa Had",
|
|
76
|
+
"pro_benefits_3": "Terjemahan Berkelompok",
|
|
77
|
+
"reduce_size": "Buat masa ini, sila kurangkan saiz fail atau konteks anda.",
|
|
78
|
+
"select_target_lang": "Sila pilih sekurang-kurangnya satu bahasa sasaran.",
|
|
79
|
+
"up_to_date": "Semua bahasa yang dipilih adalah terkini.",
|
|
80
|
+
"translating_placeholder": "// Menterjemah...",
|
|
81
|
+
"error_no_data": "// Ralat: Tiada data dikembalikan.",
|
|
82
|
+
"error_failed_generic": "// Ralat: Gagal menterjemah. Sila cuba lagi.",
|
|
83
|
+
"max_langs_reached": "Maksimum {n} bahasa sasaran dibenarkan dalam pelan percuma.",
|
|
84
|
+
"credits_needed": "Kredit diperlukan",
|
|
85
|
+
"credits_remaining": "Baki",
|
|
86
|
+
"invalid_base_json": "JSON Asas Tidak Sah",
|
|
87
|
+
"invalid_base_content": "Kandungan Fail Asas Tidak Sah"
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"common": {
|
|
91
|
+
"contact": "Hubungi",
|
|
92
|
+
"email": "z17682341097@gmail.com",
|
|
93
|
+
"pro": "PRO",
|
|
94
|
+
"coming_soon": "Akan Datang",
|
|
95
|
+
"pricing": "Harga",
|
|
96
|
+
"docs": "Dokumen & CLI",
|
|
97
|
+
"cli": "CLI",
|
|
98
|
+
"i18n_note": "Semua terjemahan untuk laman ini dijana menggunakan t9n.",
|
|
99
|
+
"upgrade": "Naik Taraf",
|
|
100
|
+
"auto_detect": "Kesan Automatik",
|
|
101
|
+
"soon": "SOON",
|
|
102
|
+
"pro_only": "(Hanya {pro})",
|
|
103
|
+
"contact_support": "Hubungi Sokongan",
|
|
104
|
+
"pricing_limits": "Harga & Had",
|
|
105
|
+
"back_to_home": "KEMBALI KE LAMAN UTAMA",
|
|
106
|
+
"back_to_editor": "Kembali ke Editor",
|
|
107
|
+
"mail_to": "E-mel ke",
|
|
108
|
+
"cancel": "BATAL",
|
|
109
|
+
"close": "TUTUP",
|
|
110
|
+
"confirm": "SAHKAN",
|
|
111
|
+
"notification": "Notifikasi"
|
|
112
|
+
},
|
|
113
|
+
"auth": {
|
|
114
|
+
"login": "Log Masuk",
|
|
115
|
+
"logout": "Log Keluar",
|
|
116
|
+
"welcome_back": "Selamat Kembali",
|
|
117
|
+
"login_desc": "Log masuk untuk mengakses ciri Pro dan had yang lebih tinggi",
|
|
118
|
+
"cli_login_required": "Sila log masuk terlebih dahulu menggunakan: t9n auth <your-api-key>",
|
|
119
|
+
"continue_google": "Teruskan dengan Google",
|
|
120
|
+
"continue_github": "Teruskan dengan GitHub",
|
|
121
|
+
"terms": "Dengan meneruskan, anda bersetuju dengan Syarat Perkhidmatan dan Dasar Privasi kami."
|
|
122
|
+
},
|
|
123
|
+
"settings": {
|
|
124
|
+
"title": "Tetapan",
|
|
125
|
+
"apikeys": {
|
|
126
|
+
"title": "Kunci API",
|
|
127
|
+
"desc": "Urus kunci API anda untuk digunakan dengan alatan CLI atau dalam talian paip CI/CD.",
|
|
128
|
+
"create": "Cipta Kunci Baru",
|
|
129
|
+
"name_label": "Nama Kunci",
|
|
130
|
+
"name_placeholder": "cth. CLI Laptop Saya",
|
|
131
|
+
"key_secret_warning": "Sila salin kunci API anda sekarang. Untuk keselamatan anda, ia tidak akan dipaparkan lagi.",
|
|
132
|
+
"copy_key": "Salin Kunci",
|
|
133
|
+
"list_empty": "Tiada kunci API dicipta lagi.",
|
|
134
|
+
"revoke": "Batalkan",
|
|
135
|
+
"revoke_confirm": "Adakah anda pasti mahu membatalkan kunci API ini? Alatan yang menggunakannya akan berhenti berfungsi.",
|
|
136
|
+
"last_used": "Terakhir Digunakan",
|
|
137
|
+
"never_used": "Pernah",
|
|
138
|
+
"created": "Dicipta"
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
"pricing": {
|
|
142
|
+
"title": "Harga yang Mudah & Telus",
|
|
143
|
+
"subtitle": "Pilih pelan yang sesuai dengan keperluan terjemahan anda.",
|
|
144
|
+
"monthly": "bulanan",
|
|
145
|
+
"daily": "harian",
|
|
146
|
+
"per_request": "setiap permintaan",
|
|
147
|
+
"get_started": "Bermula",
|
|
148
|
+
"upgrade": "Naik Taraf Sekarang",
|
|
149
|
+
"contact_sales": "Hubungi Jualan",
|
|
150
|
+
"features": {
|
|
151
|
+
"credits": "{n} Kredit",
|
|
152
|
+
"keys": "Sehingga {n} kunci",
|
|
153
|
+
"langs": "Sehingga {n} bahasa",
|
|
154
|
+
"upload_download": "Muat Naik / Muat Turun",
|
|
155
|
+
"diff": "Kemas Kini Inkremental (Diff)",
|
|
156
|
+
"context": "Kesedaran Konteks"
|
|
157
|
+
},
|
|
158
|
+
"most_popular": "Paling Popular",
|
|
159
|
+
"custom": "Custom"
|
|
160
|
+
},
|
|
161
|
+
"metadata": {
|
|
162
|
+
"title": "t9n - Penterjemah JSON untuk Pembangun | Penterjemah AI i18n",
|
|
163
|
+
"description": "Penterjemah AI utamakan pembangun untuk fail JSON i18n. Sifar ralat sintaks, perlindungan pembolehubah (React Intl, i18next), dan kesedaran konteks pintar. Terjemah perisian, bukan sekadar kata-kata.",
|
|
164
|
+
"og_title": "t9n - Penterjemah JSON untuk Pembangun",
|
|
165
|
+
"og_description": "Terjemah fail JSON i18n tanpa merosakkan pembolehubah kod anda. Menyokong React Intl, i18next, dan banyak lagi."
|
|
166
|
+
},
|
|
167
|
+
"docs": {
|
|
168
|
+
"title": "Dokumentasi",
|
|
169
|
+
"subtitle": "Terokai ciri t9n, daripada penggunaan asas hingga kemas kini inkremental lanjutan dan pengoptimuman konteks AI.",
|
|
170
|
+
"sections": {
|
|
171
|
+
"basic": {
|
|
172
|
+
"title": "Ciri Asas: Terjemahan Masa Nyata",
|
|
173
|
+
"content": "t9n direka untuk format JSON i18n. Kami telah mengoptimumkan strategi Prompt untuk memastikan semua pembolehubah kod (seperti {name} atau {{count}}) dilindungi dengan ketat semasa proses terjemahan.",
|
|
174
|
+
"item1": "Sokong pemilihan kelompok bahasa sasaran, menjana pelbagai terjemahan sekaligus.",
|
|
175
|
+
"item2": "Pratonton masa nyata: kandungan sumber dan kandungan sasaran dibandingkan bersebelahan."
|
|
176
|
+
},
|
|
177
|
+
"context": {
|
|
178
|
+
"title": "Kesedaran Konteks",
|
|
179
|
+
"content": "Terjemahan adalah lebih daripada sekadar kata demi kata. Dengan menyediakan latar belakang aplikasi, AI boleh memilih kosa kata dengan lebih tepat.",
|
|
180
|
+
"example": "Sebagai contoh, perkataan yang sama \"Menu\" adalah \"menu\" dalam aplikasi restoran dan \"senarai fungsi\" dalam perisian reka bentuk. Menyediakan Konteks boleh menghapuskan kekaburan."
|
|
181
|
+
},
|
|
182
|
+
"diff": {
|
|
183
|
+
"title": "Kemas Kini Inkremental Pintar (Mod Diff)",
|
|
184
|
+
"content": "Apabila fail bahasa sumber anda (cth. en.json) mempunyai kandungan baru, anda tidak perlu menterjemah semula keseluruhan fail. Mod kemas kini inkremental t9n kini menyokong automasi penuh.",
|
|
185
|
+
"new_feature": "Baru: Pengecaman Berbilang Fail Automatik Sepenuhnya",
|
|
186
|
+
"step1_title": "1. Muat Naik Pelbagai Pilihan",
|
|
187
|
+
"step1_desc": "Pilih Bahasa Inggeris (asas) dan fail terjemahan sedia ada (cth., Cina, Jepun) secara serentak dalam dialog muat naik. Tiada lagi perbandingan manual.",
|
|
188
|
+
"step2_title": "2. Pengesanan Asas Pintar",
|
|
189
|
+
"step2_desc": "Sistem mengira kunci secara automatik dalam setiap fail dan menganggap yang paling lengkap sebagai 'asas terjemahan', mengisi bahagian yang hilang secara automatik dalam fail lain.",
|
|
190
|
+
"step3_title": "3. Terjemahan Tepat",
|
|
191
|
+
"step3_desc": "Kunci yang hilang ditandakan sebagai 🚧 [MISSING]. AI hanya menterjemah penanda ini, menjimatkan anda lebih daripada 90% kredit.",
|
|
192
|
+
"quote": "\"Kekalkan 100% terjemahan sedia ada, hanya tangani keperluan baru.\""
|
|
193
|
+
},
|
|
194
|
+
"cli": {
|
|
195
|
+
"tag": "Tersedia Sekarang",
|
|
196
|
+
"title": "t9n CLI",
|
|
197
|
+
"content": "Pengurusan i18n profesional daripada terminal anda. Automatikkan aliran kerja terjemahan anda dengan antara muka baris perintah kami yang berkuasa.",
|
|
198
|
+
"install": "npm install -g @t9n/cli",
|
|
199
|
+
"command_auth": "t9n auth <key>",
|
|
200
|
+
"command_init": "t9n init",
|
|
201
|
+
"command_scan": "t9n scan ./src",
|
|
202
|
+
"command_translate": "t9n translate ./en.json -t zh-CN,ja",
|
|
203
|
+
"command_diff": "t9n diff ./dictionaries",
|
|
204
|
+
"desc_auth": "Hubungkan persekitaran tempatan anda dengan akaun t9n anda.",
|
|
205
|
+
"desc_init": "Cipta t9n.config.json untuk menyimpan tetapan projek anda.",
|
|
206
|
+
"desc_scan": "Cari kunci yang hilang dalam kod sumber anda yang belum ada dalam JSON anda.",
|
|
207
|
+
"desc_translate": "Terjemah fail tempatan secara terus dan simpan hasil secara automatik.",
|
|
208
|
+
"desc_diff": "Kemas kini inkremental pintar untuk semua bahasa dalam folder.",
|
|
209
|
+
"progress": "Sedia untuk Produksi"
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
"example_correct": "Portfolio\" → \"Portfolio Pelaburan\"",
|
|
213
|
+
"example_incorrect": "Portfolio\" → \"Koleksi Karya Seni\""
|
|
214
|
+
},
|
|
215
|
+
"cli": {
|
|
216
|
+
"diff": {
|
|
217
|
+
"title": "🛰️ T9N CLI - Kemas Kini Inkremental",
|
|
218
|
+
"analyzing": "🔍 Menganalisis perbezaan...",
|
|
219
|
+
"comparing": "Membandingkan dengan fail sedia ada...",
|
|
220
|
+
"new_lang": "Bahasa baru dikesan.",
|
|
221
|
+
"success": "Terjemahan diterima dengan jaya!",
|
|
222
|
+
"updated": "Dikemas kini:",
|
|
223
|
+
"all_up_to_date": "✨ Semua terjemahan adalah terkini!"
|
|
224
|
+
},
|
|
225
|
+
"scan": {
|
|
226
|
+
"title": "🔍 T9N CLI - Pengimbas Kod",
|
|
227
|
+
"scanning": "Mengimbas fail...",
|
|
228
|
+
"scanned": "Mengimbas {n} fail.",
|
|
229
|
+
"missing_found": "Menemui {n} kunci yang hilang (dalam kod tetapi TIADA dalam kamus):",
|
|
230
|
+
"all_present": "✨ Semua kunci dalam kod ada dalam kamus.",
|
|
231
|
+
"orphaned": "Menemui {n} kunci yang berpotensi tidak digunakan (dalam kamus tetapi TIADA dalam kod):"
|
|
232
|
+
},
|
|
233
|
+
"auth": {
|
|
234
|
+
"verifying": "Mengesahkan Kunci API...",
|
|
235
|
+
"success": "Pengesahan berjaya! ({target} konfigurasi)",
|
|
236
|
+
"key_missing": "Sila berikan Kunci API. Penggunaan: t9n auth <key>"
|
|
237
|
+
},
|
|
238
|
+
"init": {
|
|
239
|
+
"title": "🎬 T9N - Permulaan Projek",
|
|
240
|
+
"created": "Konfigurasi projek dicipta: {path}",
|
|
241
|
+
"already_exists": "Fail konfigurasi sudah wujud di: {path}"
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|