12 files changed
+8013
-29
assets/images/flag_br.png
Binary files /dev/null and b/assets/images/flag_br.png differ
assets/images/flag_kr.png
Binary files /dev/null and b/assets/images/flag_kr.png differ
lib/features/chat/providers/chat_notifier.dart
+3
-10
@@ -26,10 +26,8 @@ import 'package:localmind/features/servers/providers/server_providers.dart';
26
import 'package:localmind/objectbox.g.dart';
27
import '../data/chat_service.dart';
28
import '../data/models/chat_parameters.dart';
29
-import '../data/models/mcp_integration.dart';
29
import '../data/models/message.dart' hide ToolCallData;
31
-import '../data/models/message.dart' as msg_model
32
- show ToolCallData;
30
+import '../data/models/message.dart' as msg_model show ToolCallData;
31
import '../data/title_generation_service.dart';
32
import '../data/tools/tool_definition.dart';
33
import '../data/tools/tool_event.dart';
@@ -1241,9 +1239,7 @@ class ChatNotifier extends Notifier<ChatState> {
1239
final completedResults = toolEvents
1240
.where((e) => e.status == ToolEventStatus.completed)
1241
.toList();
1244
- if (ref.mounted &&
1245
- completedResults.isNotEmpty &&
1246
- chatService != null) {
1242
+ if (ref.mounted && completedResults.isNotEmpty) {
1243
await _sendFollowupWithToolResults(
1244
previousAssistant: finalMessage,
1245
toolEvents: toolEvents,
@@ -2153,10 +2149,7 @@ class ChatNotifier extends Notifier<ChatState> {
2149
// the tool history and the model would re-emit the same tool call.
2150
final newAll = [...state.allMessages, ...toolMessages];
2151
final activeTimeline = MessageVariants.resolveActiveTimeline(newAll);
2156
- state = state.copyWith(
2157
- allMessages: newAll,
2158
- messages: activeTimeline,
2159
- );
2152
+ state = state.copyWith(allMessages: newAll, messages: activeTimeline);
2153
2154
// Create a new assistant message that will receive the model's final
2155
// answer. It shares the variant group with the previous assistant turn
lib/features/onboarding/screens/onboarding_language_screen.dart
+40
-18
@@ -162,6 +162,26 @@ const _languages = [
162
shortText: 'De',
163
gradient: [Color(0xFFF59E0B), Color(0xFFEF4444)],
164
),
165
+ _LanguageOption(
166
+ code: 'pt',
167
+ nativeName: 'Português',
168
+ englishName: 'Portuguese',
169
+ flag: '🇧🇷',
170
+ flagAsset: 'assets/images/flag_br.png',
171
+ countryCode: 'BR',
172
+ shortText: 'Pt',
173
+ gradient: [Color(0xFF10B981), Color(0xFF059669)],
174
+ ),
175
+ _LanguageOption(
176
+ code: 'ko',
177
+ nativeName: '한국어',
178
+ englishName: 'Korean',
179
+ flag: '🇰🇷',
180
+ flagAsset: 'assets/images/flag_kr.png',
181
+ countryCode: 'KR',
182
+ shortText: 'Ko',
183
+ gradient: [Color(0xFF3B82F6), Color(0xFF1D4ED8)],
184
+ ),
185
];
186
187
class OnboardingLanguageScreen extends ConsumerStatefulWidget {
@@ -238,7 +258,7 @@ class _OnboardingLanguageScreenState
258
child: Column(
259
crossAxisAlignment: CrossAxisAlignment.stretch,
260
children: [
241
- const SizedBox(height: 24),
261
+ const SizedBox(height: 16),
262
Actor(
263
acts: [.fadeIn(), .slideY(from: 0.08)],
264
child: Column(
@@ -252,7 +272,7 @@ class _OnboardingLanguageScreenState
272
height: 1.1,
273
),
274
),
255
- const SizedBox(height: 12),
275
+ const SizedBox(height: 10),
276
Text(
277
l10n.onboarding_choose_language,
278
textAlign: TextAlign.center,
@@ -261,7 +281,7 @@ class _OnboardingLanguageScreenState
281
color: theme.colorScheme.primary,
282
),
283
),
264
- const SizedBox(height: 8),
284
+ const SizedBox(height: 6),
285
Text(
286
l10n.onboarding_choose_language_desc,
287
textAlign: TextAlign.center,
@@ -269,13 +289,13 @@ class _OnboardingLanguageScreenState
289
color: theme.colorScheme.onSurface.withValues(
290
alpha: 0.7,
291
),
272
- height: 1.5,
292
+ height: 1.4,
293
),
294
),
295
],
296
),
297
),
278
- const SizedBox(height: 32),
298
+ const SizedBox(height: 20),
299
Actor(
300
delay: 60.ms,
301
acts: [.fadeIn(), .slideY(from: 0.08)],
@@ -284,10 +304,10 @@ class _OnboardingLanguageScreenState
304
physics: const NeverScrollableScrollPhysics(),
305
gridDelegate:
306
const SliverGridDelegateWithFixedCrossAxisCount(
287
- crossAxisCount: 2,
288
- mainAxisSpacing: 12,
289
- crossAxisSpacing: 12,
290
- mainAxisExtent: 92,
307
+ crossAxisCount: 3,
308
+ mainAxisSpacing: 8,
309
+ crossAxisSpacing: 8,
310
+ mainAxisExtent: 108,
311
),
312
itemCount: _languages.length,
313
itemBuilder: (context, index) {
@@ -306,7 +326,7 @@ class _OnboardingLanguageScreenState
326
},
327
child: AnimatedContainer(
328
duration: const Duration(milliseconds: 200),
309
- padding: const EdgeInsets.all(12),
329
+ padding: const EdgeInsets.all(10),
330
decoration: BoxDecoration(
331
color: theme.colorScheme.surface,
332
borderRadius: BorderRadius.circular(16),
@@ -339,8 +359,8 @@ class _OnboardingLanguageScreenState
359
MainAxisAlignment.spaceBetween,
360
children: [
361
Container(
342
- width: 36,
343
- height: 24,
362
+ width: 34,
363
+ height: 23,
364
decoration: BoxDecoration(
365
color: Colors.white,
366
borderRadius: BorderRadius.circular(
@@ -368,8 +388,8 @@ class _OnboardingLanguageScreenState
388
),
389
child: Image.asset(
390
lang.flagAsset,
371
- width: 36,
372
- height: 24,
391
+ width: 34,
392
+ height: 23,
393
fit: BoxFit.cover,
394
errorBuilder:
395
(context, error, stackTrace) {
@@ -387,8 +407,8 @@ class _OnboardingLanguageScreenState
407
duration: const Duration(
408
milliseconds: 200,
409
),
390
- width: 20,
391
- height: 20,
410
+ width: 18,
411
+ height: 18,
412
decoration: BoxDecoration(
413
shape: BoxShape.circle,
414
color: isSelected
@@ -407,7 +427,7 @@ class _OnboardingLanguageScreenState
427
icon: HugeIcons
428
.strokeRoundedTick01,
429
color: Colors.white,
410
- size: 12,
430
+ size: 11,
431
)
432
: null,
433
),
@@ -425,12 +445,13 @@ class _OnboardingLanguageScreenState
445
style: theme.textTheme.titleSmall
446
?.copyWith(
447
fontWeight: FontWeight.bold,
448
+ fontSize: 13,
449
),
450
),
451
const SizedBox(height: 2),
452
Text(
453
'${lang.englishName} • ${lang.shortText.toUpperCase()}',
433
- maxLines: 1,
454
+ maxLines: 2,
455
overflow: TextOverflow.ellipsis,
456
style: theme.textTheme.labelSmall
457
?.copyWith(
@@ -439,6 +460,7 @@ class _OnboardingLanguageScreenState
460
.onSurface
461
.withValues(alpha: 0.5),
462
fontSize: 10,
463
+ height: 1.15,
464
),
465
),
466
],
lib/features/settings/views/data_backup_actions.dart
+2
@@ -208,12 +208,14 @@ class DataBackupActions extends ConsumerWidget {
208
final db = ref.read(databaseProvider);
209
await DataBackupService().importZip(db.store, bytes);
210
211
+ if (!context.mounted) return;
212
final archive = ZipDecoder().decodeBytes(bytes);
213
for (final file in archive.files) {
214
if (!file.isFile || file.name != 'settings.json') continue;
215
final decoded =
216
jsonDecode(utf8.decode(file.content as List<int>))
217
as Map<String, dynamic>;
218
+ if (!context.mounted) return;
219
await _applySettingsPayload(ref, decoded, context: context);
220
}
221
lib/features/settings/views/settings_screen.dart
+2
@@ -1230,6 +1230,8 @@ class _LanguageSetting extends StatelessWidget {
1230
('tr', 'Türkçe', 'assets/images/flag_tr.png', '🇹🇷'),
1231
('fr', 'Français', 'assets/images/flag_fr.png', '🇫🇷'),
1232
('de', 'Deutsch', 'assets/images/flag_de.png', '🇩🇪'),
1233
+ ('pt', 'Português', 'assets/images/flag_br.png', '🇧🇷'),
1234
+ ('ko', '한국어', 'assets/images/flag_kr.png', '🇰🇷'),
1235
];
1236
1237
final String? current;
lib/l10n/app_ko.arb
new
+933
@@ -0,0 +1,933 @@
1
+{
2
+ "@@locale": "ko",
3
+ "app_name": "LocalMind",
4
+ "app_tagline": "당신의 AI. 귀하의 장치. 귀하의 규칙.",
5
+ "app_version": "1.0.0",
6
+ "cancel": "취소",
7
+ "confirm": "확인",
8
+ "delete": "삭제",
9
+ "save": "저장",
10
+ "retry": "재시도",
11
+ "close": "닫기",
12
+ "done": "완료",
13
+ "continue_action": "계속",
14
+ "skip": "건너뛰기",
15
+ "install": "설치",
16
+ "download": "다운로드",
17
+ "resume": "이력서",
18
+ "pause": "일시중지",
19
+ "stop": "중지",
20
+ "edit": "편집",
21
+ "preview": "미리보기",
22
+ "unload": "언로드",
23
+ "load": "로드",
24
+ "rename": "이름 바꾸기",
25
+ "pin": "핀",
26
+ "unpin": "고정 해제",
27
+ "share": "공유",
28
+ "copy": "복사",
29
+ "copied": "복사되었습니다!",
30
+ "copied_to_clipboard": "클립보드에 복사됨",
31
+ "select": "선택",
32
+ "active": "활성",
33
+ "all": "모두",
34
+ "none": "없음",
35
+ "none_selected": "선택한 항목 없음",
36
+ "online": "온라인",
37
+ "connected": "연결됨",
38
+ "checking": "확인 중",
39
+ "offline": "오프라인",
40
+ "error": "오류",
41
+ "unknown_error": "알 수 없는 오류",
42
+ "not_now": "지금은 아님",
43
+ "enable": "활성화",
44
+ "proceed_anyway": "어쨌든 진행",
45
+ "test_connection": "연결 테스트",
46
+ "testing": "테스트 중...",
47
+ "connection_successful": "연결 성공!",
48
+ "connection_failed": "연결에 실패했습니다. 설정을 확인하세요.",
49
+ "save_continue": "저장하고 계속하기",
50
+ "save_changes": "변경 사항 저장",
51
+ "finish_setup": "설정 완료",
52
+ "start_new_chat": "새 채팅 시작",
53
+ "cannot_undo": "이 작업은 취소할 수 없습니다.",
54
+ "ram_warning": "RAM 경고",
55
+ "recommended": "추천",
56
+ "may_be_large": "이 기기에 비해 너무 클 수 있습니다.",
57
+ "calculating": "계산 중...",
58
+ "download_failed": "다운로드 실패",
59
+ "downloaded": "다운로드됨",
60
+ "not_downloaded": "다운로드되지 않음",
61
+ "installed": "설치됨",
62
+ "not_installed": "설치되지 않음",
63
+ "loading": "로드 중...",
64
+ "thinking": "생각",
65
+ "processing": "처리 중...",
66
+ "initializing": "초기화 중...",
67
+ "ready": "준비",
68
+ "preparing_app": "앱 준비 중...",
69
+ "initializing_services": "서비스 초기화 중...",
70
+ "configuring_server": "서버 구성 중...",
71
+ "startup_failed": "시작 실패",
72
+ "something_went_wrong": "문제가 발생했습니다.",
73
+ "delete_model_title": "모델 삭제",
74
+ "delete_model_body": "{name}을 삭제하시겠습니까?",
75
+ "delete_model_body_with_size": "{name}을 삭제하시겠습니까? 이렇게 하면 약 {size} 정도의 공간이 확보됩니다.\n\n필요한 경우 나중에 이 모델을 다시 다운로드할 수 있습니다.",
76
+ "delete_voice_title": "음성 삭제",
77
+ "delete_voice_body": "{name}을 삭제하시겠습니까? 이렇게 하면 약 {size} 정도의 공간이 확보됩니다.\n\n필요한 경우 나중에 이 음성을 다시 다운로드할 수 있습니다.",
78
+ "delete_server_title": "서버 삭제",
79
+ "delete_server_body": "정말로 \"{name}\"을 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.",
80
+ "delete_conversation_title": "대화를 삭제하시겠습니까?",
81
+ "delete_conversation_body": "정말로 \"{title}\"을 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.",
82
+ "delete_message_title": "메시지를 삭제하시겠습니까?",
83
+ "delete_persona_title": "'{name}'를 삭제하시겠습니까?",
84
+ "delete_persona_body": "이 작업은 취소할 수 없습니다.",
85
+ "delete_builtin_persona_body": "이것은 내장된 페르소나입니다. 나중에 설정에서 복원할 수 있습니다.",
86
+ "restore_builtin_personas": "기본 페르소나 복원",
87
+ "restore_builtin_personas_desc": "삭제한 내장 페르소나를 다시 추가하세요.",
88
+ "restore_builtin_personas_success": "기본 페르소나가 복원되었습니다.",
89
+ "clear_personas": "명확한 페르소나",
90
+ "enable_image_compression": "보내기 전에 이미지를 압축하세요",
91
+ "enable_image_compression_desc": "업로드가 서버 제한 내에서 유지되도록 첨부된 이미지의 크기를 조정하고 압축합니다.",
92
+ "image_compression_level": "압축 공격성",
93
+ "image_compression_level_desc": "공격성이 높을수록 품질이 낮을수록 업로드 크기가 작아집니다.",
94
+ "image_compression_level_low": "낮음",
95
+ "image_compression_level_medium": "중간",
96
+ "image_compression_level_high": "높음",
97
+ "sort_models_tooltip": "모델 정렬",
98
+ "sort_by_favorites": "즐겨찾기 먼저",
99
+ "sort_by_name": "이름(A~Z)",
100
+ "sort_by_size_smallest": "크기(가장 작은 것부터)",
101
+ "sort_by_size_largest": "크기(큰 것부터)",
102
+ "sort_by_context_length": "컨텍스트 길이",
103
+ "bulk_ai_rename_progress": "{done}/{total} 이름 바꾸기...",
104
+ "selected_count": "{count} 선택됨",
105
+ "ai_rename_tooltip": "AI로 선택한 이름 바꾸기",
106
+ "new_chat_in_folder_tooltip": "이 폴더의 새 채팅",
107
+ "total_tokens_count": "{count} 토큰",
108
+ "smart_replies_use_persona": "스마트 답장에 페르소나 사용",
109
+ "smart_replies_use_persona_desc": "제안된 답변은 일반적인 어시스턴트가 아닌 활성 페르소나의 어조와 일치합니다.",
110
+ "keep_persona_on_new_chat": "새 채팅에서 페르소나 유지",
111
+ "keep_persona_on_new_chat_desc": "새 채팅을 시작한 후 선택한 페르소나를 지우지 마세요.",
112
+ "role_swap_button_enabled": "역할 전환 버튼 표시",
113
+ "role_swap_button_enabled_desc": "응답을 생성하지 않고 사용자 대신 어시스턴트로 메시지를 보내려면 채팅 입력에 버튼을 표시하세요.",
114
+ "send_as_user_tooltip": "사용자로 보내기",
115
+ "send_as_assistant_tooltip": "어시스턴트로 보내기(응답 없음)",
116
+ "insert_without_generating_tooltip": "생성하지 않고 삽입",
117
+ "token_usage_title": "토큰 사용",
118
+ "total_tokens_label": "사용된 토큰",
119
+ "usage_percent_label": "사용된 컨텍스트",
120
+ "export_choice_title": "수출",
121
+ "export_choice_body": "이것을 어떻게 내보내시겠습니까?",
122
+ "copy_to_clipboard": "클립보드에 복사",
123
+ "bulk_export_conversations_success": "{count} 대화를 내보냈습니다.",
124
+ "bulk_ai_rename_confirm_title": "AI로 이름을 바꾸시겠습니까?",
125
+ "bulk_ai_rename_confirm_body": "이는 AI에게 {count}가 선택한 각 대화에 대해 현재 제목을 대체하는 새로운 제목을 생성하도록 요청합니다. 이 작업은 시간이 좀 걸릴 수 있으며 취소할 수 없습니다.",
126
+ "sort_by_modified_date": "최종 수정됨",
127
+ "sort_by_created_date": "생성된 날짜",
128
+ "sort_title": "정렬",
129
+ "clear_conversation_title": "명확한 대화?",
130
+ "clear_conversation_body": "이 대화의 모든 메시지가 삭제됩니다.",
131
+ "clear": "지우기",
132
+ "label_completed": "{label} 완료",
133
+ "error_with_message": "오류: {error}",
134
+ "preview_failed": "미리보기 실패: {error}",
135
+ "loading_model": "{modelId} 로드 중...",
136
+ "model_loaded": "로드된 모델: {modelId}({backend})",
137
+ "no_model_loaded": "로드된 모델이 없습니다. 모델을 다운로드하고 로드하려면 \"기기 내 모델 관리\"를 탭하세요.",
138
+ "loading_model_error": "오류: {error}",
139
+ "delete_conversation": "대화를 삭제하시겠습니까?",
140
+ "nav_history": "역사",
141
+ "nav_servers": "서버",
142
+ "nav_local_models": "지역 모델",
143
+ "nav_tts": "텍스트 음성 변환",
144
+ "nav_personas": "페르소나",
145
+ "nav_settings": "설정",
146
+ "nav_new_chat": "새 채팅",
147
+ "search_hint": "대화 검색...",
148
+ "no_server_selected": "서버를 선택하지 않았습니다.",
149
+ "switch_server": "서버 전환",
150
+ "switch_server_subtitle": "연결할 서버를 선택하세요",
151
+ "manage_servers": "서버 관리",
152
+ "open_source": "오픈 소스",
153
+ "open_source_desc": "LocalMind는 오픈 소스입니다. 진행 상황을 따르거나 GitHub에 기여해 보세요.",
154
+ "star_on_github": "GitHub의 스타",
155
+ "add_more": "더 추가",
156
+ "on_github": "GitHub에서",
157
+ "could_not_open_github": "GitHub를 열 수 없습니다.",
158
+ "settings_title": "설정",
159
+ "settings_appearance": "외관",
160
+ "settings_language": "언어",
161
+ "language_system_default": "시스템 기본값",
162
+ "settings_tts": "텍스트 음성 변환",
163
+ "settings_android_assistant": "안드로이드 어시스턴트",
164
+ "assistant_default_title": "LocalMind를 보조자로 사용",
165
+ "assistant_default_description": "Android의 보조 제스처 또는 전원 버튼 단축키를 사용하여 음성 모드를 시작하세요.",
166
+ "assistant_status_active": "활성",
167
+ "assistant_status_available": "비활성",
168
+ "assistant_status_manual": "설정 확인",
169
+ "assistant_status_unsupported": "이용 불가",
170
+ "assistant_status_checking": "확인 중…",
171
+ "assistant_set_default": "기본 도우미로 설정",
172
+ "assistant_open_settings": "Android 어시스턴트 설정 열기",
173
+ "assistant_error": "Android 어시스턴트 설정을 열 수 없습니다.",
174
+ "settings_behavior": "행동",
175
+ "settings_on_device": "온디바이스 추론",
176
+ "settings_default_server": "기본 서버",
177
+ "settings_default_persona": "기본 페르소나",
178
+ "settings_default_model": "기본 모델",
179
+ "settings_default_model_desc": "새 채팅을 시작하면 자동으로 선택됩니다.",
180
+ "settings_privacy": "개인 정보 보호",
181
+ "settings_data_management": "데이터 관리",
182
+ "settings_about": "소개",
183
+ "theme": "테마",
184
+ "theme_system": "시스템",
185
+ "theme_light": "빛",
186
+ "theme_dark": "어둠",
187
+ "theme_claude": "클로드",
188
+ "font_size": "글꼴 크기",
189
+ "font_size_desc": "채팅에서 텍스트 크기를 조정합니다.",
190
+ "font_preview": "날렵한 갈색여우가 게으른 개를 뛰어넘습니다.",
191
+ "code_theme_dark": "코드 테마(어두움)",
192
+ "code_theme_light": "코드 테마(빛)",
193
+ "code_theme_desc": "코드 블록에 대한 구문 강조 테마를 선택합니다.",
194
+ "tts_engine": "TTS 엔진",
195
+ "tts_engine_system": "시스템 TTS",
196
+ "tts_engine_kitten": "새끼 고양이 TTS",
197
+ "voice": "음성",
198
+ "voice_female": "여성",
199
+ "voice_male": "남성",
200
+ "voice_other": "기타",
201
+ "tts_speed": "TTS 속도",
202
+ "tts_speed_desc": "재생 속도를 조정합니다.",
203
+ "manage_tts_models": "TTS 모델 관리",
204
+ "manage_on_device_models": "온디바이스 모델 관리",
205
+ "enable_smart_reply": "기기 내 스마트 답장",
206
+ "ai_user_response_enabled": "AI 사용자 메시지(보류 보내기)",
207
+ "ai_user_response_enabled_desc": "AI가 다음 메시지를 쓰고 보내도록 하려면 보내기 버튼을 3초 동안 누르세요.",
208
+ "ai_user_response_tooltip": "AI로 사용자 메시지 생성",
209
+ "streaming_responses": "스트리밍 응답",
210
+ "auto_generate_titles": "제목 자동 생성",
211
+ "send_on_enter": "입력 시 보내기",
212
+ "show_system_messages": "기본 시스템 프롬프트 보내기",
213
+ "show_system_messages_desc": "페르소나가 선택되지 않은 경우 각 요청과 함께 기본 보조 시스템 프롬프트를 보냅니다.",
214
+ "show_system_messages_in_chat": "채팅에 시스템 메시지 표시",
215
+ "show_system_messages_in_chat_desc": "대화에서 눈에 보이는 풍선으로 시스템 메시지(예: 가져온 백업의 메시지)를 표시합니다.",
216
+ "auto_collapse_thinking": "자동 붕괴 사고",
217
+ "auto_collapse_thinking_desc": "주요 답변이 있는 경우 응답 생성이 완료된 후 추론 프로세스를 자동으로 축소합니다.",
218
+ "haptic_feedback": "햅틱 피드백",
219
+ "enable_mcp": "MCP 활성화",
220
+ "new_chat_mcp_default": "새 채팅 MCP 기본값",
221
+ "show_data_indicator": "데이터 표시기 표시",
222
+ "privacy_info": "\"LocalMind는 귀하의 데이터를 결코 볼 수 없습니다\"",
223
+ "delete_all_conversations": "모든 대화 삭제",
224
+ "reset_settings_defaults": "설정을 기본값으로 재설정",
225
+ "chat_title": "로컬마인드",
226
+ "chat_parameters_tooltip": "채팅 매개변수",
227
+ "change_persona": "페르소나 변경",
228
+ "set_persona": "페르소나 설정",
229
+ "remove_persona": "페르소나 제거",
230
+ "clear_conversation": "명확한 대화",
231
+ "connection_error": "연결 오류입니다. 서버를 확인하세요.",
232
+ "disconnected": "서버와의 연결이 끊어졌습니다.",
233
+ "configure": "구성",
234
+ "select_model": "모델 선택",
235
+ "select_persona": "페르소나 선택",
236
+ "manage_personas": "페르소나 관리",
237
+ "personas_combine_hint": "채팅에서 여러 페르소나를 선택하여 시스템 프롬프트를 쌓으세요.",
238
+ "start_conversation": "대화 시작",
239
+ "recent_chats": "최근 채팅",
240
+ "see_all": "모두 보기",
241
+ "quick_write": "함수 작성 도와주세요",
242
+ "quick_explain": "이 코드를 설명해보세요",
243
+ "quick_debug": "나를 위해 디버깅해 주세요",
244
+ "quick_async": "비동기/대기를 어떻게 사용하나요?",
245
+ "history_missing_title": "기록 누락",
246
+ "history_missing_desc": "이 채팅의 메시지가 삭제되었거나 기록 기록이 손상되었습니다.",
247
+ "technical_details": "기술적인 세부사항",
248
+ "last_error": "마지막 오류:",
249
+ "copy_info": "정보 복사",
250
+ "conversation_id": "대화 ID",
251
+ "created_at": "생성 날짜",
252
+ "expected_messages": "예상되는 메시지",
253
+ "debug_dialog_desc": "동기화 문제를 식별하는 데 도움이 되는 진단 정보입니다.",
254
+ "chat_input_hint": "무엇이든 물어보세요",
255
+ "send_message_tooltip": "메시지 보내기",
256
+ "stop_generation_tooltip": "생성 중지",
257
+ "attach_images_tooltip": "이미지 또는 텍스트 첨부",
258
+ "start_listening_tooltip": "듣기 시작",
259
+ "stop_listening_tooltip": "듣기 중지",
260
+ "tool_label": "도구: {toolCallId}",
261
+ "tool_unknown": "도구: 알 수 없음",
262
+ "message_options": "메시지 옵션",
263
+ "copy_markdown": "마크다운으로 복사",
264
+ "copied_markdown": "마크다운으로 복사됨",
265
+ "read_aloud": "소리내어 읽기",
266
+ "stop_reading": "읽기 중지",
267
+ "more": "더보기",
268
+ "character_count": "{length} 문자",
269
+ "edit_message": "메시지 편집",
270
+ "edit_message_desc": "저장하면 아래 어시스턴트 응답이 제거되고 다시 생성됩니다.",
271
+ "save_regenerate": "저장 및 재생성",
272
+ "chat_settings_title": "채팅 설정",
273
+ "reset_defaults": "기본값 재설정",
274
+ "parameters_tab": "매개변수",
275
+ "mcp_tab": "MCP",
276
+ "temperature": "온도",
277
+ "temperature_desc": "무작위성 제어: 높음 = 창의적, 낮음 = 집중",
278
+ "top_p": "탑 P",
279
+ "top_p_desc": "핵 샘플링 임계값",
280
+ "max_tokens": "최대 토큰",
281
+ "max_tokens_desc": "응답 한도",
282
+ "context_length": "컨텍스트 길이",
283
+ "context_length_desc": "기록 창",
284
+ "mcp_disabled_warning": "MCP는 전역적으로 비활성화됩니다. 이러한 기능을 사용하려면 설정에서 활성화하세요.",
285
+ "mcp_enable_chat": "이 채팅에 대해 MCP를 활성화합니다.",
286
+ "auto_execute_tools": "자동 실행 도구",
287
+ "beta_label": "베타",
288
+ "experimental_label": "실험적",
289
+ "add_ephemeral_mcp": "임시 MCP 서버 추가",
290
+ "mcp_label_placeholder": "라벨",
291
+ "mcp_url_placeholder": "URL(https://...)",
292
+ "active_integrations": "활성 통합",
293
+ "import_mcp_json": "JSON 가져오기",
294
+ "import_mcp_json_dialog_title": "MCP 구성 JSON 가져오기",
295
+ "import_mcp_json_instructions": "LM Studio(mcp.json)에서 직접 mcpServers JSON을 복사하거나 아래에 플러그인 배열을 붙여넣으세요.",
296
+ "import_mcp_json_placeholder": "여기에 mcpServers JSON 또는 플러그인 목록을 붙여넣으세요...",
297
+ "mcp_import_success": "{count} 통합을 성공적으로 가져왔습니다.",
298
+ "mcp_import_failed": "JSON에 유효한 MCP 통합이 없습니다.",
299
+ "enable_notifications": "알림 활성화",
300
+ "enable_notifications_desc": "모델 다운로드가 완료되면 알림을 받습니다.",
301
+ "chat_history_title": "채팅 기록",
302
+ "conversation_just_now": "지금 막",
303
+ "conversation_minutes_ago": "{minutes}분 전",
304
+ "conversation_hours_ago": "{hours}시간 전",
305
+ "conversation_yesterday": "어제",
306
+ "conversation_days_ago": "{days}일 전",
307
+ "conversation_date": "{month}/{day}/{year}",
308
+ "options_tooltip": "옵션",
309
+ "no_results_found": "검색결과가 없습니다",
310
+ "no_conversations_yet": "아직 대화가 없습니다.",
311
+ "try_different_search": "다른 검색어를 사용해 보세요.",
312
+ "start_new_conversation": "새로운 대화를 시작하세요",
313
+ "rename_conversation": "대화 이름 바꾸기",
314
+ "enter_new_title": "새 제목을 입력하세요",
315
+ "pinned_section": "고정됨",
316
+ "today_section": "오늘",
317
+ "yesterday_section": "어제",
318
+ "previous_7_days": "이전 7일",
319
+ "previous_30_days": "이전 30일",
320
+ "older_section": "나이가 많은",
321
+ "onboarding_choose_language": "언어 선택",
322
+ "onboarding_choose_language_desc": "원하는 언어를 선택하세요. 언제든지 설정에서 변경할 수 있습니다.",
323
+ "onboarding_localmind": "지역 마인드",
324
+ "onboarding_connect_server": "당신의 연결\n서버",
325
+ "onboarding_connect_desc": "LM Studio, Ollama에 연결하세요.\nOllama Cloud 또는 OpenRouter를 사용하여\n개인 AI 경험을 시작하세요.",
326
+ "openai_compatible_api": "OpenAI 호환 API",
327
+ "https_requires_ssl": "HTTPS에는 SSL이 필요합니다",
328
+ "most_local_setups_use_http": "대부분의 로컬 설정에서는 http://를 사용합니다.",
329
+ "onboarding_welcome": "로컬마인드에 오신 것을 환영합니다",
330
+ "server_type_on_device": "기기 내",
331
+ "server_type_lm_studio": "LM스튜디오",
332
+ "server_type_ollama": "올라마",
333
+ "server_type_ollama_cloud": "올라마 클라우드",
334
+ "server_type_ollama_cloud_sub": "클라우드 관리",
335
+ "server_type_ollama_cloud_display": "올라마 클라우드",
336
+ "server_address_ollama_cloud": "ollama.com",
337
+ "ollama_cloud_disclosure": "Ollama Cloud를 연결하면 채팅 메시지와 입력 내용이 추론을 위해 Ollama의 관리 서버로 전송됩니다. LocalMind는 대화를 추적하거나 저장하지 않습니다. ollama.com/settings/keys에서 언제든지 이 키를 취소할 수 있습니다.",
338
+ "api_key_required_ollama_cloud": "Ollama Cloud에 필요한 API 키",
339
+ "api_key_hint_ollama_cloud": "Ollama Cloud API 키를 붙여넣으세요.",
340
+ "add_server_ollama_cloud_subtitle": "관리형 클라우드 모델에 액세스하려면 ollama.com/settings/keys의 API 키를 사용하여 Ollama Cloud에 연결하세요.",
341
+ "add_server_openrouter_subtitle": "유효한 API 키를 사용하여 OpenRouter를 통해 연결하고 모델 라우팅을 위해 이 프로필을 준비하세요.",
342
+ "add_server_endpoint_subtitle": "로컬 또는 자체 호스팅 끝점을 구성한 다음 저장하기 전에 연결을 확인하세요.",
343
+ "server_type_openrouter": "오픈라우터",
344
+ "server_type_openrouter_sub": "통합 클라우드",
345
+ "ready_continue": "계속할 준비가 되었습니다",
346
+ "waiting_selection": "선택을 기다리는 중",
347
+ "setup_connection": "연결 설정",
348
+ "setup_connection_desc": "채팅을 시작하려면 {server} 서버를 구성하세요.",
349
+ "server_name": "서버 이름",
350
+ "name_required": "이름이 필요합니다",
351
+ "name_max_50": "최대 50자",
352
+ "host_label": "호스트/IP 주소",
353
+ "host_required": "호스트 필수",
354
+ "port_label": "항구",
355
+ "port_required": "포트 필요",
356
+ "port_invalid": "숫자여야 합니다.",
357
+ "port_range": "유효한 포트(1-65535)를 입력하세요.",
358
+ "api_key_required": "API 키 *",
359
+ "api_key_optional": "API 키(선택사항)",
360
+ "api_key_required_openrouter": "OpenRouter에 필요한 API 키",
361
+ "api_key_format": "OpenRouter API 키는 sk-로 시작합니다.",
362
+ "my_server_hint": "내 서버",
363
+ "name_length_validation": "이름은 50자 이하여야 합니다.",
364
+ "host_valid": "유효한 호스트 이름 또는 IP 주소를 입력하세요.",
365
+ "api_key_hint_openrouter": "sk-...",
366
+ "api_key_hint_generic": "인증된 서버의 경우",
367
+ "update_server": "업데이트 서버",
368
+ "save_server": "서버 저장",
369
+ "server_updated": "서버가 업데이트되었습니다.",
370
+ "server_added": "서버가 추가되었습니다",
371
+ "download_model_title": "모델 다운로드",
372
+ "download_model_desc": "다운로드할 모델을 선택하세요.\n장치에서 로컬로 실행됩니다.",
373
+ "on_device_android_only": "기기 내 추론은 현재 Android에서만 사용할 수 있습니다.",
374
+ "total_ram": "총 RAM",
375
+ "available": "가능",
376
+ "ram_min_required": "{fileSize} GB RAM 최소",
377
+ "download_progress": "{percent}% • {speed}",
378
+ "eta_label": "도착 예정 시간: {eta}",
379
+ "paused_progress": "일시중지됨 - {percent}%",
380
+ "ram_warning_body_download": "이 모델에는 최소 {ram}GB RAM이 필요하지만 장치에는 {totalMemory}가 있습니다. 제대로 실행되지 않거나 앱이 충돌할 수 있습니다.",
381
+ "ram_warning_body_load": "장치에는 {availableRAM} 사용 가능한 RAM이 있지만 이 모델에서는 최소 {ram} GB를 권장합니다. 로드가 실패하거나 불안정해질 수 있습니다.",
382
+ "choose_theme": "테마 선택",
383
+ "choose_theme_desc": "앱 모양을 개인화하세요. 나중에 설정에서 언제든지 변경할 수 있습니다.",
384
+ "theme_card_system": "시스템",
385
+ "theme_card_system_sub": "기기 설정과 일치",
386
+ "theme_card_light": "빛",
387
+ "theme_card_light_sub": "깨끗하고 밝다",
388
+ "theme_card_dark": "어둠",
389
+ "theme_card_dark_sub": "눈이 편하다",
390
+ "theme_card_claude": "클로드",
391
+ "theme_card_claude_sub": "따뜻한 복숭아빛 테마",
392
+ "stay_updated": "최신 정보 유지",
393
+ "stay_updated_desc": "AI 모델 다운로드가 완료되거나 장기 실행 작업이 완료되면 알림을 받으세요.",
394
+ "notification_benefit_downloads": "모델 다운로드 진행",
395
+ "notification_benefit_completions": "세대 완료",
396
+ "notification_benefit_background": "백그라운드 작업 상태",
397
+ "allow_notifications": "알림 허용",
398
+ "servers_title": "서버",
399
+ "no_servers_yet": "아직 서버가 없습니다",
400
+ "no_servers_desc": "AI 모델과 채팅을 시작하려면 첫 번째 서버를 추가하세요.",
401
+ "add_server": "서버 추가",
402
+ "switched_to_server": "{name}로 전환됨",
403
+ "edit_server": "서버 편집",
404
+ "add_server_title": "서버 추가",
405
+ "server_type_label": "서버 유형",
406
+ "server_icon_label": "서버 아이콘",
407
+ "default_icon": "기본 아이콘",
408
+ "server_type_lm_studio_display": "LM스튜디오",
409
+ "server_type_openai_display": "OpenAI 호환",
410
+ "server_type_ollama_display": "올라마",
411
+ "server_type_openrouter_display": "오픈라우터",
412
+ "server_type_on_device_display": "기기 내",
413
+ "server_address_openrouter": "openrouter.ai",
414
+ "server_address_on_device": "국소 추론",
415
+ "server_address_format": "{host}:{port}",
416
+ "default_badge": "기본값",
417
+ "set_as_default": "기본값으로 설정",
418
+ "select_icon": "아이콘 선택",
419
+ "select_icon_desc": "서버 아이콘을 선택하세요",
420
+ "search_icons_hint": "아이콘 검색...",
421
+ "server_icon_stack": "서버 스택",
422
+ "server_icon_stack2": "서버 스택 02",
423
+ "server_icon_stack3": "서버 스택 03",
424
+ "server_icon_cloud": "클라우드",
425
+ "server_icon_cloud_server": "클라우드 서버",
426
+ "server_icon_mcp": "MCP 서버",
427
+ "server_icon_database": "데이터베이스",
428
+ "server_icon_database1": "데이터베이스 01",
429
+ "server_icon_database2": "데이터베이스 02",
430
+ "server_icon_cpu": "CPU",
431
+ "server_icon_chip": "칩",
432
+ "server_icon_chip2": "칩 02",
433
+ "server_icon_computer": "컴퓨터",
434
+ "server_icon_laptop": "노트북",
435
+ "server_icon_terminal": "컴퓨터 터미널",
436
+ "server_icon_code": "코드",
437
+ "server_icon_ai_brain": "AI 브레인",
438
+ "server_icon_ai_brain2": "AI 브레인 02",
439
+ "server_icon_ai_cloud": "AI 클라우드",
440
+ "server_icon_ai_network": "AI 네트워크",
441
+ "server_icon_ai_chat": "AI채팅",
442
+ "server_icon_cellular": "셀룰러 네트워크",
443
+ "server_icon_plug1": "플러그 01",
444
+ "server_icon_plug2": "플러그 02",
445
+ "server_icon_bot": "봇",
446
+ "server_icon_bot2": "봇 02",
447
+ "server_icon_robotic": "로봇식",
448
+ "server_icon_rocket": "로켓",
449
+ "server_icon_star": "스타",
450
+ "server_icon_settings1": "설정 01",
451
+ "server_icon_settings2": "설정 02",
452
+ "server_icon_home1": "홈 01",
453
+ "server_icon_home2": "홈 02",
454
+ "server_icon_folder1": "폴더 01",
455
+ "server_icon_folder2": "폴더 02",
456
+ "server_icon_file1": "파일 01",
457
+ "server_icon_lock": "잠금",
458
+ "server_icon_key": "키 01",
459
+ "server_icon_link": "링크 01",
460
+ "server_icon_globe": "지구본",
461
+ "server_icon_api": "API",
462
+ "server_icon_arrow_right": "화살표 오른쪽 01",
463
+ "server_icon_check": "서클 확인",
464
+ "server_icon_alert": "경고 서클",
465
+ "server_icon_info": "정보 서클",
466
+ "server_icon_zap": "잽",
467
+ "server_icon_cloud_upload": "클라우드 업로드",
468
+ "server_icon_cloud_download": "클라우드 다운로드",
469
+ "server_icon_refresh": "새로고침",
470
+ "server_icon_hard_drive": "하드 드라이브",
471
+ "server_icon_drive": "드라이브",
472
+ "personas_title": "페르소나",
473
+ "persona_category_general": "일반",
474
+ "persona_category_coding": "코딩",
475
+ "persona_category_education": "교육",
476
+ "persona_category_creative": "크리에이티브",
477
+ "persona_builtin_section": "내장",
478
+ "persona_my_section": "내 페르소나",
479
+ "clone_edit": "복제 및 편집",
480
+ "builtin_badge": "내장",
481
+ "no_personas_found": "페르소나를 찾을 수 없습니다.",
482
+ "no_personas_desc": "AI 동작을 맞춤화하기 위한 첫 번째 페르소나를 만드세요.",
483
+ "edit_persona": "페르소나 편집",
484
+ "create_persona": "페르소나 생성",
485
+ "create_persona_button": "만들기",
486
+ "emoji_label": "이모티콘",
487
+ "name_label": "이름",
488
+ "my_persona_hint": "내 페르소나",
489
+ "category_label": "카테고리",
490
+ "description_optional": "설명(선택사항)",
491
+ "description_hint": "이 인물이 하는 일은...",
492
+ "system_prompt": "시스템 프롬프트",
493
+ "character_count_max": "{currentLen}/4000",
494
+ "no_prompt_placeholder": "아직 프롬프트가 없습니다...",
495
+ "prompt_hint": "당신은 도움이되는 조수입니다 ...",
496
+ "prompt_required": "시스템 프롬프트가 필요합니다",
497
+ "prompt_max_chars": "최대 4000자",
498
+ "advanced_settings": "고급 설정",
499
+ "temperature_label": "온도(0.0-2.0)",
500
+ "top_p_label": "상위 P(0.0-1.0)",
501
+ "temp_hint": "0.7",
502
+ "top_p_hint": "0.9",
503
+ "range_0_2": "0.0-2.0",
504
+ "range_0_1": "0.0-1.0",
505
+ "persona_updated": "페르소나가 업데이트되었습니다.",
506
+ "persona_created": "페르소나가 생성되었습니다.",
507
+ "tts_models_title": "텍스트 음성 변환 모델",
508
+ "always_available": "항상 사용 가능",
509
+ "tts_system_desc": "기기에 내장된 텍스트 음성 변환 엔진을 사용합니다.\n다운로드가 필요하지 않습니다. 음성 선택에는 장치의 시스템 설정이 사용됩니다.",
510
+ "downloading_status": "다운로드 중...",
511
+ "tts_kitten_desc": "8가지 표정이 풍부한 음성을 갖춘 번개처럼 빠른 신경 TTS입니다.\n{size} 다운로드가 필요합니다.",
512
+ "tts_piper_desc": "표현력이 풍부한 2개의 음성을 갖춘 빠른 오프라인 파이퍼 음성입니다.\n음성당 {size} 다운로드가 필요합니다.",
513
+ "engine_spec": "{sizeMb} MB · {ramMb} MB RAM · {voiceCount} 음성",
514
+ "on_device_models_title": "온디바이스 모델",
515
+ "settings_huggingface_token": "포옹 얼굴 토큰(선택 사항)",
516
+ "settings_huggingface_token_desc": "게이트 모델(예: Gemma)에만 필요합니다. Huggingface.co/settings/tokens에서 토큰을 받으세요.",
517
+ "settings_huggingface_token_set": "토큰이 저장되었습니다",
518
+ "settings_huggingface_token_cleared": "토큰이 삭제되었습니다",
519
+ "model_requires_huggingface_token": "포옹하는 얼굴 토큰이 필요합니다.",
520
+ "model_missing_huggingface_token": "이 모델은 Hugging Face에 적용되었습니다. 설정 → 온디바이스 추론에서 토큰을 추가하여 다운로드하세요.",
521
+ "set_huggingface_token": "토큰 설정",
522
+ "clear_huggingface_token": "지우기",
523
+ "edit_huggingface_token_dialog_title": "포옹 얼굴 액세스 토큰",
524
+ "huggingface_token_dialog_hint": "HF_…",
525
+ "server_type_ollama_desc": "로컬 AI 엔진. API 키가 필요하지 않습니다.",
526
+ "server_type_on_device_desc": "휴대전화에서 실행됩니다. 일부 모델에는 Hugging Face 토큰이 필요합니다.",
527
+ "server_type_lm_studio_desc": "로컬 API 서버. API 키가 필요하지 않습니다.",
528
+ "available_models": "사용 가능한 모델",
529
+ "device_memory": "장치 메모리",
530
+ "ram_usage": "RAM 사용량",
531
+ "memory_healthy": "건강하다",
532
+ "memory_critical": "심각",
533
+ "memory_low": "낮음",
534
+ "ram_used": "{percent}% 사용됨",
535
+ "available_ram": "사용 가능한 RAM",
536
+ "total_capacity": "총 용량",
537
+ "loaded_status": "로드됨",
538
+ "inference_backend": "추론 백엔드",
539
+ "backend_ios_notice": "iOS에서는 CPU 백엔드만 사용할 수 있습니다.",
540
+ "backend_cpu_desc": "모든 장치에서 작동합니다. 가장 호환됩니다.",
541
+ "backend_gpu_desc": "OpenCL 가속. 지원되는 장치에서는 더 빠릅니다.",
542
+ "backend_npu_desc": "공급업체 NPU(Qualcomm/MediaTek). 가장 빠른 추론.",
543
+ "select_model_title": "모델 선택",
544
+ "refresh_models": "모델 새로 고침",
545
+ "search_models_hint": "모델 검색...",
546
+ "no_server_connected": "연결된 서버가 없습니다",
547
+ "add_server_first": "사용 가능한 모델을 보려면 먼저 서버를 추가하세요.",
548
+ "failed_load_models": "모델을 로드하지 못했습니다.",
549
+ "no_models_available": "사용 가능한 모델이 없습니다.",
550
+ "no_models_match": "\"{searchQuery}\"와 일치하는 모델이 없습니다.",
551
+ "model_load_failed": "모델을 로드하지 못했습니다: {error}",
552
+ "model_unloaded_ollama": "{name}에 대한 언로드가 요청되었습니다. Ollama에 접근할 수 있으면 모델이 즉시 출시됩니다.",
553
+ "model_unloaded_success": "{name}가 성공적으로 언로드되었습니다.",
554
+ "model_unload_failed": "모델 언로드 실패: {error}",
555
+ "unload_from_server": "서버에서 언로드",
556
+ "context_chip": "{ctx} ctx",
557
+ "unload_all_models": "모두 언로드",
558
+ "loaded_models_count": "{count} 로드됨",
559
+ "all_models_unloaded": "모든 모델이 언로드됨",
560
+ "branch_chat": "지점채팅",
561
+ "branch_chat_desc": "이 메시지로 새 대화를 시작하세요",
562
+ "edit_assistant_message_desc": "어시스턴트 응답 텍스트를 편집합니다.",
563
+ "switch_to_model": "{modelName}로 전환",
564
+ "download_notification_title": "{modelName} 다운로드 중...",
565
+ "download_complete_notification": "다운로드가 완료되었습니다!",
566
+ "download_complete_body": "{modelName}가 성공적으로 다운로드되었습니다.",
567
+ "download_failed_notification": "다운로드 실패: {error}",
568
+ "download_failed_body": "{modelName}를 다운로드하지 못했습니다.",
569
+ "engine_name_system": "시스템 TTS",
570
+ "engine_tagline_system": "내장 장치 엔진",
571
+ "engine_name_kitten": "새끼 고양이 TTS",
572
+ "engine_tagline_kitten": "고속 신경 TTS",
573
+ "engine_name_sherpa": "셰르파 ONNX VITS",
574
+ "engine_tagline_sherpa": "오프라인 파이퍼 목소리",
575
+ "voice_jasper": "재스퍼",
576
+ "voice_bella": "벨라",
577
+ "voice_bruno": "브루노",
578
+ "voice_luna": "루나",
579
+ "voice_hugo": "휴고",
580
+ "voice_rosie": "로지",
581
+ "voice_leo": "레오",
582
+ "voice_kiki": "키키",
583
+ "voice_lessac": "레삭(미국)",
584
+ "voice_ryan": "라이언(미국)",
585
+ "model_qwen_3": "퀀 3 0.6B",
586
+ "model_qwen_3_desc": "가장 작은 범용 채팅 모델. 빠른 응답, 낮은 메모리 사용량.",
587
+ "model_license_apache": "아파치-2.0",
588
+ "model_qwen_25": "Qwen 2.5 1.5B 지시",
589
+ "model_qwen_25_desc": "균형 잡힌 품질과 크기. 일반적인 대화에 좋습니다.",
590
+ "model_deepseek": "DeepSeek R1 증류 Qwen 1.5B",
591
+ "model_deepseek_desc": "추론 및 사고 사슬 모델. 논리적 작업에 가장 적합합니다.",
592
+ "model_license_mit": "MIT",
593
+ "model_gemma": "젬마 4 E2B 교육",
594
+ "model_gemma_desc": "구글 플래그십 모델. 최고 품질, 더 많은 RAM이 필요합니다.",
595
+ "export_header": "*LocalMind에서 내보내기 — {date}*",
596
+ "export_role_user": "## 👤 사용자",
597
+ "export_role_assistant": "## 🤖 어시스턴트",
598
+ "export_role_system": "## ⚙️ 시스템",
599
+ "export_role_tool": "## 🔧 도구",
600
+ "export_text_user": "[사용자]",
601
+ "export_text_assistant": "[어시스턴트]",
602
+ "export_text_system": "[시스템]",
603
+ "export_text_tool": "[도구]",
604
+ "export_label_user": "사용자",
605
+ "export_label_assistant": "어시스턴트",
606
+ "export_label_system": "시스템",
607
+ "export_label_tool": "도구",
608
+ "select_model_hint": "채팅을 시작하려면 모델을 선택하세요",
609
+ "test_notification_title": "테스트 알림",
610
+ "test_notification_body": "모델 다운로드 진행에 대한 테스트 알림입니다.",
611
+ "tts_supports_background": "네이티브 오디오로 백그라운드 재생 지원",
612
+ "tts_other_services_background_note": "참고: 다른 TTS 서비스는 기본 오디오로 백그라운드 재생을 지원합니다.",
613
+ "gguf_imported_models_title": "가져온 GGUF 모델",
614
+ "gguf_imported_models_empty_subtitle": "장치에서 GGUF를 가져오거나 Hugging Face에서 추가하세요. 가져온 모델은 llama.cpp를 사용하여 로컬로 실행됩니다.",
615
+ "gguf_imported_models_ready": "로컬 추론을 위해 준비된 가져온 모델.",
616
+ "gguf_curated_models_subtitle": "LocalMind 내에서 다운로드하고 관리할 수 있는 엄선된 온디바이스 모델.",
617
+ "gguf_only_supported": "이 가져오기에는 GGUF 모델만 지원됩니다.",
618
+ "gguf_imported_from_local_file": "로컬 파일에서 가져왔습니다.",
619
+ "gguf_import_failed": "GGUF 모델을 가져오지 못했습니다.",
620
+ "gguf_imported_from_huggingface": "Hugging Face에서 가져왔습니다.",
621
+ "gguf_import_canceled": "GGUF 가져오기가 취소되었습니다.",
622
+ "gguf_enter_huggingface_url": "포옹 얼굴 GGUF URL을 입력하세요.",
623
+ "gguf_only_official_huggingface_urls": "공식 Hugging Face GGUF URL만 지원됩니다.",
624
+ "gguf_use_https_url": "GGUF 가져오기에는 HTTPS 허깅 페이스 URL을 사용하세요.",
625
+ "gguf_url_must_point_to_file": "Hugging Face URL은 .gguf 파일을 직접 가리켜야 합니다.",
626
+ "gguf_unable_to_detect_file_name": "GGUF 파일 이름을 확인할 수 없습니다.",
627
+ "gguf_download_empty": "다운로드한 GGUF 파일이 비어 있거나 누락되었습니다.",
628
+ "gguf_selected_file_missing": "선택한 모델 파일이 존재하지 않습니다.",
629
+ "gguf_import_action": "GGUF 가져오기",
630
+ "gguf_overview_title": "나만의 GGUF 모델 가져오기",
631
+ "gguf_overview_subtitle": "로컬 저장소에서 .gguf를 가져오거나 Hugging Face에서 바로 다운로드하세요. 가져온 모델은 이 장치에 유지되며 llama.cpp로 로드됩니다.",
632
+ "gguf_imported_count_label": "수입됨",
633
+ "gguf_local_files_label": "로컬 파일",
634
+ "gguf_huggingface_label": "포옹하는 얼굴",
635
+ "gguf_import_local_title": "로컬 GGUF 가져오기",
636
+ "gguf_import_local_subtitle": "이 장치에서 .gguf 파일을 복사하세요.",
637
+ "gguf_import_huggingface_title": "포옹 얼굴에서 가져오기",
638
+ "gguf_import_huggingface_subtitle": "GGUF URL 또는 저장소 경로 붙여넣기",
639
+ "gguf_no_imported_title": "아직 가져온 GGUF 모델이 없습니다.",
640
+ "gguf_no_imported_subtitle": "장치 저장소에서 자체 GGUF 파일을 가져오거나 Hugging Face URL 또는 .gguf 파일을 가리키는 저장소 경로를 붙여넣을 수 있습니다.",
641
+ "gguf_import_huggingface_dialog_title": "Hugging Face에서 GGUF 가져오기",
642
+ "gguf_import_huggingface_dialog_subtitle": "직접 GGUF URL이나 'owner/repo/blob/main/model.gguf'와 같은 Hugging Face 저장소 경로를 붙여넣으세요. Blob 링크는 자동으로 변환됩니다.",
643
+ "gguf_url_or_repo_path": "GGUF URL 또는 저장소 경로",
644
+ "paste": "붙여넣기",
645
+ "gguf_browse": "GGUF 찾아보기",
646
+ "gguf_huggingface_token_ready": "허깅 페이스 토큰 준비 완료",
647
+ "gguf_huggingface_token_optional": "토큰은 선택사항이지만 권장됨",
648
+ "gguf_huggingface_token_ready_desc": "저장된 토큰은 게이트 저장소 또는 개인 저장소에 자동으로 사용됩니다.",
649
+ "gguf_huggingface_token_optional_desc": "포옹하는 얼굴 토큰이 필요합니다. 이 GGUF가 제한되거나 비공개인 경우 설정에서 하나를 추가하세요.",
650
+ "gguf_downloading": "GGUF 다운로드 중",
651
+ "gguf_preparing": "준비 중",
652
+ "gguf_preparing_download": "다운로드 준비 중...",
653
+ "gguf_cancel_import": "가져오기 취소",
654
+ "clipboard_empty": "클립보드가 비어 있습니다.",
655
+ "could_not_open_huggingface": "포옹 얼굴을 열 수 없습니다.",
656
+ "gguf_paste_url_error": "Hugging Face GGUF URL 또는 저장소 경로를 붙여넣으세요.",
657
+ "gguf_blob_link": "블롭 링크",
658
+ "gguf_repository_label": "저장소",
659
+ "gguf_detected_path_label": "감지된 경로",
660
+ "gguf_imported_section_label": "가져온 GGUF",
661
+ "gguf_already_available": "이 기기에서는 이미 사용 가능합니다.",
662
+ "gguf_curated_models_short": "선별된 온디바이스 모델",
663
+ "execute_tool_title": "도구 실행",
664
+ "execute_tool_request_desc": "모델은 다음 도구 실행을 요청합니다.",
665
+ "reject": "거부",
666
+ "approve": "승인하다",
667
+ "server_type_help": "연결 세부정보를 입력하기 전에 공급자를 선택하세요.",
668
+ "server_identity_title": "아이덴티티",
669
+ "server_identity_desc": "이 서버의 이름을 지정하고 목록에 표시되는 방식을 선택합니다.",
670
+ "server_connection_title": "연결",
671
+ "server_connection_desc": "서버에서 노출된 주소와 포트를 사용하세요.",
672
+ "server_authentication_title": "인증",
673
+ "server_authentication_required_desc": "OpenRouter는 테스트하기 전에 API 키가 필요합니다.",
674
+ "server_authentication_optional_desc": "이 서버에 API 키가 필요하지 않은 경우 API 키를 비워 두세요.",
675
+ "mcp_tools_title": "MCP 도구",
676
+ "available_tools": "사용 가능한 도구",
677
+ "unable_load_tools": "도구를 로드할 수 없습니다.",
678
+ "no_tools_registered": "등록된 도구가 없습니다.",
679
+ "no_tools_registered_desc": "예제 MCP 서버를 활성화하거나 채팅 설정에서 MCP 통합을 추가하세요.",
680
+ "example_mcp_server_title": "MCP 서버 예",
681
+ "example_mcp_server_desc": "외부 서버에서 사용하는 것과 동일한 MCP 도구 공급자를 통해 example.echo 및 example.word_count를 등록합니다.",
682
+ "disable_example_server": "예제 서버 비활성화",
683
+ "enable_example_server": "예제 서버 활성화",
684
+ "built_in_label": "내장",
685
+ "highlights_label": "하이라이트",
686
+ "built_with_label": "다음으로 제작됨",
687
+ "local_label": "지역",
688
+ "gguf_format_label": "GGUF",
689
+ "tool_status_requested": "요청됨",
690
+ "tool_status_approved": "승인됨",
691
+ "tool_status_rejected": "거부됨",
692
+ "tool_status_running": "달리기",
693
+ "tool_status_done": "완료",
694
+ "tool_status_failed": "실패",
695
+ "model_favorite_toggle": "즐겨찾기 전환",
696
+ "model_set_default": "기본 모델로 설정",
697
+ "model_clear_default": "기본 모델로 제거",
698
+ "model_default_badge": "기본값",
699
+ "model_note_label": "참고",
700
+ "model_note_hint": "이 모델에 대한 메모를 추가하세요…",
701
+ "unload_models_before_load": "새 모델을 로드하기 전에 모든 모델을 언로드하세요.",
702
+ "temp_chat_keyboard_incognito": "임시 채팅의 시크릿 키보드",
703
+ "temp_chat_keyboard_incognito_desc": "임시 채팅(예: SwiftKey 시크릿 모드)에서 키보드 학습 및 제안을 비활성화합니다.",
704
+ "resume_last_chat": "실행 시 마지막 채팅 재개",
705
+ "resume_last_chat_desc": "앱을 다시 열 때 마지막으로 열린 대화를 복원하세요.",
706
+ "export_all_data": "모든 데이터 내보내기",
707
+ "import_all_data": "모든 데이터 가져오기",
708
+ "export_data_success": "백업을 성공적으로 내보냈습니다.",
709
+ "import_data_success": "백업을 성공적으로 가져왔습니다.",
710
+ "import_data_failed": "백업을 가져오지 못했습니다: {error}",
711
+ "import_data_confirm": "이 백업에서 대화와 맞춤 캐릭터를 가져오시겠습니까? 동일한 ID를 가진 기존 항목이 업데이트됩니다.",
712
+ "import_settings_confirm": "현재 설정을 가져온 백업으로 바꾸시겠습니까?",
713
+ "export_conversations": "대화 내보내기",
714
+ "import_conversations": "대화 가져오기",
715
+ "export_personas": "페르소나 내보내기",
716
+ "import_personas": "페르소나 가져오기",
717
+ "export_settings": "설정 내보내기",
718
+ "import_settings": "가져오기 설정",
719
+ "export_all_zip": "모두 내보내기(ZIP)",
720
+ "import_all_zip": "모두 가져오기(ZIP)",
721
+ "duplicate_chat": "중복된 채팅",
722
+ "duplicate_chat_success": "채팅이 중복되었습니다.",
723
+ "move_to_folder": "폴더로 이동",
724
+ "remove_from_folder": "폴더에서 제거",
725
+ "create_folder": "폴더 생성",
726
+ "new_folder": "새 폴더",
727
+ "folder_name_hint": "폴더 이름",
728
+ "all_chats": "모두",
729
+ "unfiled_chats": "미제출",
730
+ "create": "만들기",
731
+ "server_path_prefix_label": "API 경로 접두사",
732
+ "server_path_prefix_hint": "/당신의 비밀 토큰",
733
+ "search_message_contents": "메시지 내용 검색",
734
+ "message_search_results": "메시지 일치",
735
+ "saved_messages_title": "저장된 메시지",
736
+ "nav_saved_messages": "저장된 메시지",
737
+ "saved_messages_empty": "아직 저장된 메시지가 없습니다. 옵션 메뉴에서 메시지를 북마크에 추가하세요.",
738
+ "save_message": "메시지 저장",
739
+ "message_saved": "메시지가 저장되었습니다",
740
+ "token_count": "{count} 토큰",
741
+ "estimated_token_count": "~{count} 토큰(추정)",
742
+ "test_tts_section_title": "테스트 음성",
743
+ "test_tts_hint": "현재 TTS 엔진을 들으려면 텍스트를 입력하세요…",
744
+ "test_speak_button": "말하기",
745
+ "scroll_to_bottom": "맨 아래로 스크롤",
746
+ "generate_ai_response": "AI 응답 생성",
747
+ "no_response": "응답 없음",
748
+ "export": "수출",
749
+ "import": "가져오기",
750
+ "conversations_label": "대화",
751
+ "personas_label": "페르소나",
752
+ "settings_label": "설정",
753
+ "export_conversation": "대화 내보내기",
754
+ "tts_process_markdown": "음성에 대한 마크다운 처리",
755
+ "tts_process_markdown_desc": "소리내어 읽기 전에 **굵게** 같은 서식을 제거하세요.",
756
+ "tts_skip_seconds": "건너뛰기 간격",
757
+ "tts_skip_seconds_desc": "재생 중 앞으로 및 되감기 점프 크기",
758
+ "tts_skip_seconds_value": "{seconds}",
759
+ "preview_system_prompts": "미리보기 시스템 프롬프트",
760
+ "welcome_message_1": "오늘은 무엇을 도와드릴까요?",
761
+ "welcome_message_2": "무엇이든 물어보세요. 귀하가 준비되면 저는 준비되어 있습니다.",
762
+ "welcome_message_3": "귀하의 데이터는 로컬에서 처리되며 절대로 귀하의 장치를 떠나지 않습니다.",
763
+ "welcome_message_4": "아이디어가 필요하신가요? 빠른 프롬프트 중 하나를 시도해 보세요.",
764
+ "temporary_chat": "임시 채팅",
765
+ "temporary_chat_desc": "채팅은 기록에 저장되지 않습니다.",
766
+ "temporary_chat_banner": "임시 채팅 - 기록에 저장되지 않음",
767
+ "temporary_chat_save_warning_title": "임시 채팅에 메시지를 저장하시겠습니까?",
768
+ "temporary_chat_save_warning_body": "이 채팅은 일시적이며 기록에서 숨겨집니다. 저장된 메시지는 저장된 메시지에 계속 표시됩니다.",
769
+ "save_to_history": "기록에 저장",
770
+ "share_conversation": "대화 공유",
771
+ "download_tts_audio": "오디오 다운로드",
772
+ "tts_download_unavailable": "다운로드는 Piper 및 Kitten TTS에서만 가능합니다.",
773
+ "tts_download_no_audio": "아직 다운로드할 수 있는 오디오가 없습니다.",
774
+ "tts_download_success": "오디오가 저장되었습니다",
775
+ "return_to_chat": "채팅으로 돌아가기",
776
+ "return_to_temp_chat": "임시 채팅으로 돌아가기",
777
+ "insert_saved_message": "저장된 메시지 삽입",
778
+ "insert_saved_message_desc": "입력에 추가할 저장된 메시지를 선택하세요.",
779
+ "model_info": "모델 정보",
780
+ "model_name": "모델명",
781
+ "model_identifier": "식별자",
782
+ "model_capabilities": "기능",
783
+ "model_api_pricing": "API 가격(100만 개 토큰당)",
784
+ "not_available": "사용할 수 없음",
785
+ "save_message_folders": "메시지 저장",
786
+ "remove_from_saved": "저장된 항목에서 삭제",
787
+ "message_already_saved": "저장됨",
788
+ "stream_ttft": "첫 번째 토큰까지의 시간",
789
+ "stream_tokens_per_sec": "초당 토큰",
790
+ "stream_stop_reason": "중지 이유",
791
+ "stream_input_tokens": "입력 토큰",
792
+ "stream_output_tokens": "출력 토큰",
793
+ "stream_generation_time": "생성 시간",
794
+ "attach_image": "사진",
795
+ "attach_text_document": "문서",
796
+ "attach_shortcut_images": "사진",
797
+ "attach_shortcut_documents": "파일",
798
+ "attach_shortcut_saved": "저장됨",
799
+ "add_attachment": "첨부파일 추가",
800
+ "add_to_chat": "채팅에 추가",
801
+ "choose_what_to_attach": "무엇을 추가하고 싶으신가요?",
802
+ "choose_attachment_subtitle": "메시지에 첨부할 소스를 선택하세요.",
803
+ "photo_permission_denied": "이미지를 첨부하려면 사진 접근권한이 필요합니다",
804
+ "select_model_prompt": "모델 선택",
805
+ "characters_label": "캐릭터",
806
+ "exit_temporary_chat_title": "임시 채팅을 종료하시겠습니까?",
807
+ "exit_temporary_chat_body": "현재 임시 채팅이 삭제되고 새 채팅으로 돌아갑니다.",
808
+ "saved_message_temp_snap_unavailable": "이 메시지는 임시 채팅에서 저장되었으므로 원래 대화에서는 열 수 없습니다.",
809
+ "filter_title": "필터",
810
+ "filter_pinned": "고정됨",
811
+ "filter_archived": "보관됨",
812
+ "filter_temp_chats": "임시 채팅",
813
+ "filter_user_messages": "사용자 메시지",
814
+ "filter_assistant_messages": "어시스턴트 메시지",
815
+ "archive_chat": "아카이브",
816
+ "unarchive_chat": "보관 취소",
817
+ "conversation_message_count": "{count}개의 메시지",
818
+ "conversation_character_count": "{count} 문자",
819
+ "generate_title_with_ai": "AI로 생성",
820
+ "generating_title": "생성 중...",
821
+ "generate_title_failed": "제목을 생성할 수 없습니다.",
822
+ "lm_studio_model_browser_title": "모델 찾아보기",
823
+ "lm_studio_model_search_hint": "이름이나 작성자로 모델 검색…",
824
+ "lm_studio_staff_picks": "직원 추천",
825
+ "lm_studio_community_models": "커뮤니티 모델",
826
+ "lm_studio_no_models": "모델을 찾을 수 없습니다.",
827
+ "lm_studio_models_count": "{count} 모델",
828
+ "lm_studio_browse_models": "탐색 및 다운로드",
829
+ "lm_studio_model_search": "LMS 모델 검색",
830
+ "lm_studio_downloads_title": "다운로드",
831
+ "lm_studio_choose_quant": "다운로드 옵션을 선택하세요",
832
+ "lm_studio_use_default_quant": "기본값 사용",
833
+ "lm_studio_recommended": "추천",
834
+ "lm_studio_clear_downloads": "클리어 완료",
835
+ "lm_studio_no_downloads": "아직 다운로드가 없습니다.",
836
+ "lm_studio_downloads_disclaimer": "다운로드는 LM Studio 호스트에서 실행됩니다. 모델 일시 중지, 중지 및 삭제는 이 앱이 아닌 해당 컴퓨터에서 수행되어야 합니다.",
837
+ "lm_studio_staff_pick": "스탭픽",
838
+ "lm_studio_params": "매개변수",
839
+ "lm_studio_arch": "아치",
840
+ "lm_studio_domain": "도메인",
841
+ "lm_studio_format": "형식",
842
+ "lm_studio_vision": "비전",
843
+ "lm_studio_tool_use": "도구 사용",
844
+ "lm_studio_reasoning": "추론",
845
+ "openrouter_pricing_free": "무료",
846
+ "openrouter_pricing_tooltip": "입력 {input} / 1M 토큰당 {output} 출력",
847
+ "lm_studio_download_options": "다운로드 옵션",
848
+ "lm_studio_download": "다운로드",
849
+ "lm_studio_download_size": "{size} 다운로드",
850
+ "lm_studio_downloading_percent": "{percent}% 다운로드 중",
851
+ "lm_studio_readme_unavailable": "이 모델에는 README가 제공되지 않습니다.",
852
+ "lm_studio_full_gpu_offload": "전체 GPU 오프로드 가능",
853
+ "lm_studio_partial_gpu_offload": "부분 GPU 오프로드 가능",
854
+ "lm_studio_likely_too_large": "너무 클 것 같음",
855
+ "lm_studio_available_ram_gb": "사용 가능한 RAM(GB, 옵션)",
856
+ "lm_studio_available_vram_gb": "사용 가능한 VRAM(GB, 옵션)",
857
+ "lm_studio_memory_settings_title": "추천을 위한 메모리",
858
+ "lm_studio_memory_settings_desc": "모델 브라우저에서 모델이 귀하의 컴퓨터에 적합한지 여부를 추정하는 데 사용됩니다.",
859
+ "think_button_label": "생각하다",
860
+ "thinking_mode_title": "사고 모드",
861
+ "reasoning_effort_low": "낮음",
862
+ "reasoning_effort_medium": "중간",
863
+ "reasoning_effort_high": "높음",
864
+ "reasoning_effort_minimal": "최소",
865
+ "reasoning_effort_xhigh": "엑스하이",
866
+ "reasoning_effort_max": "맥스",
867
+ "reasoning_effort_off": "끄기",
868
+ "could_not_read_file": "파일을 읽을 수 없습니다.",
869
+ "server_offline": "서버 오프라인",
870
+ "could_not_establish_connection": "서버에 연결을 설정할 수 없습니다. 서버가 실행 중인지, 호스트/포트 설정이 올바른지 확인하세요.",
871
+ "retry_connection": "연결 재시도",
872
+ "tokens_label": "토큰",
873
+ "enter_context_length": "컨텍스트 길이를 입력하세요...",
874
+ "openrouter_disclosure": "이 공급자를 연결하면 귀하의 채팅 메시지와 입력 내용이 해당 공급자의 서버로 전송됩니다. LocalMind는 대화를 추적하거나 저장하지 않습니다.",
875
+ "welcome_message_cloud": "귀하의 메시지는 연결된 공급자에게 전송됩니다.",
876
+ "privacy_policy": "개인 정보 보호 정책",
877
+ "cloud_sync": "S3 클라우드 동기화",
878
+ "cloud_sync_description": "자체 S3 호환 서버에 대한 엔드투엔드 암호화 동기화",
879
+ "cloud_sync_endpoint": "엔드포인트 URL",
880
+ "cloud_sync_bucket": "버킷",
881
+ "cloud_sync_region": "지역",
882
+ "cloud_sync_prefix": "접두사",
883
+ "cloud_sync_access_key": "액세스 키 ID",
884
+ "cloud_sync_secret_key": "비밀 액세스 키",
885
+ "cloud_sync_session_token": "세션 토큰(선택사항)",
886
+ "cloud_sync_passphrase": "암호화 암호",
887
+ "cloud_sync_confirm_passphrase": "암호 확인",
888
+ "cloud_sync_path_style": "경로 스타일 주소 지정 사용",
889
+ "cloud_sync_allow_http": "안전하지 않은 HTTP 허용",
890
+ "cloud_sync_http_warning": "HTTP는 요청 메타데이터와 자격 증명을 네트워크에 노출합니다. 신뢰할 수 있는 로컬 S3 서버에만 사용하세요.",
891
+ "cloud_sync_test": "테스트 연결",
892
+ "cloud_sync_enable": "암호화된 동기화 활성화",
893
+ "cloud_sync_now": "지금 동기화",
894
+ "cloud_sync_disconnect": "이 장치를 연결 해제하세요",
895
+ "cloud_sync_last_synced": "마지막 동기화",
896
+ "cloud_sync_never": "절대로",
897
+ "cloud_sync_conflicts": "충돌이 보존됨",
898
+ "cloud_sync_passphrase_mismatch": "암호가 일치하지 않습니다.",
899
+ "crash_report_title": "문제가 발생했습니다.",
900
+ "crash_report_stack_trace": "스택 추적",
901
+ "crash_report_tap_to_expand": "펼치려면 탭하세요.",
902
+ "crash_report_button": "충돌 신고",
903
+ "crash_try_again": "다시 시도하세요",
904
+ "crash_report_empty_stack": "<비어있음>",
905
+ "crash_report_disclaimer": "보고를 수행하면 진단이 미리 입력된 GitHub가 열립니다. 귀하가 직접 제어할 수 있습니다. 아무것도 자동으로 제출되지 않습니다. 제출하기 전에 민감한 콘텐츠를 검토하고 삭제하시기 바랍니다.",
906
+ "crash_report_copied": "클립보드에 복사됨",
907
+ "report_a_problem": "문제 신고",
908
+ "rename_folder": "폴더 이름 바꾸기",
909
+ "delete_folder": "폴더 삭제",
910
+ "delete_folder_title": "폴더를 삭제하시겠습니까?",
911
+ "delete_folder_body": "정말로 \"{name}\"을 삭제하시겠습니까? 대화 또는 내부에 저장된 메시지는 '파일 없음'으로 다시 이동됩니다. 이 작업은 취소할 수 없습니다.",
912
+ "folder_name_required": "폴더 이름을 입력하세요.",
913
+ "model_required_toast": "먼저 모델을 선택해야 합니다.",
914
+ "settings_concise_voice_responses": "간결한 음성 모드 응답",
915
+ "settings_concise_voice_responses_desc": "LLM 응답을 간략하게(짧은 문단 1개) 유지하고 음성 모드에서 후속 질문을 하세요.",
916
+ "s3_connection_succeeded": "S3 연결에 성공했습니다.",
917
+ "failed_to_open_url": "URL을 열지 못했습니다: {error}",
918
+ "failed_to_copy": "복사 실패: {error}",
919
+ "file_explorer_not_found": "파일 탐색기를 찾을 수 없습니다. 파일 관리자 앱이 장치에 설치되어 활성화되어 있는지 확인하세요.",
920
+ "export_data_failed": "백업 내보내기 실패: {error}",
921
+ "file_pick_failed": "파일 선택 실패: {error}",
922
+ "image_pick_failed": "이미지 선택 실패: {error}",
923
+ "calendar_access": "캘린더 액세스",
924
+ "calendar_access_desc": "AI가 캘린더 이벤트를 읽고 생성하도록 허용",
925
+ "calendar_permission_denied": "캘린더 권한이 거부되었습니다. 기기 설정에서 캘린더 액세스 권한을 부여하세요.",
926
+ "location_access": "위치 접근",
927
+ "location_access_desc": "AI가 장소 이름으로 현재 위치를 가져오도록 허용",
928
+ "location_permission_denied": "위치 권한이 거부되었습니다. 기기 설정에서 위치 액세스 권한을 부여하세요.",
929
+ "builtin_ai_not_supported": "내장 AI는 이 장치에서 지원되지 않습니다.",
930
+ "builtin_ai_unsupported_desc": "귀하의 장치 하드웨어 또는 OS는 온디바이스 시스템 AI(예: Gemini Nano / Apple Intelligence)를 지원하지 않습니다. 대신 다운로드 가능한 모델을 선택하세요.",
931
+ "builtin_ai_unsupported_chip": "지원되지 않음",
932
+ "builtin_ai_enable": "활성화"
933
+}
\ No newline at end of file
lib/l10n/app_localizations.dart
+10
@@ -14,6 +14,8 @@ import 'app_localizations_fr.dart';
14
import 'app_localizations_hi.dart';
15
import 'app_localizations_it.dart';
16
import 'app_localizations_ja.dart';
17
+import 'app_localizations_ko.dart';
18
+import 'app_localizations_pt.dart';
19
import 'app_localizations_ru.dart';
20
import 'app_localizations_tr.dart';
21
import 'app_localizations_zh.dart';
@@ -113,6 +115,8 @@ abstract class AppLocalizations {
115
Locale('hi'),
116
Locale('it'),
117
Locale('ja'),
118
+ Locale('ko'),
119
+ Locale('pt'),
120
Locale('ru'),
121
Locale('tr'),
122
Locale('zh'),
@@ -5720,6 +5724,8 @@ class _AppLocalizationsDelegate
5724
'hi',
5725
'it',
5726
'ja',
5727
+ 'ko',
5728
+ 'pt',
5729
'ru',
5730
'tr',
5731
'zh',
@@ -5762,6 +5768,10 @@ AppLocalizations lookupAppLocalizations(Locale locale) {
5768
return AppLocalizationsIt();
5769
case 'ja':
5770
return AppLocalizationsJa();
5771
+ case 'ko':
5772
+ return AppLocalizationsKo();
5773
+ case 'pt':
5774
+ return AppLocalizationsPt();
5775
case 'ru':
5776
return AppLocalizationsRu();
5777
case 'tr':
lib/l10n/app_localizations_ko.dart
new
+2991
@@ -0,0 +1,2991 @@
1
+// ignore: unused_import
2
+import 'package:intl/intl.dart' as intl;
3
+import 'app_localizations.dart';
4
+
5
+// ignore_for_file: type=lint
6
+
7
+/// The translations for Korean (`ko`).
8
+class AppLocalizationsKo extends AppLocalizations {
9
+ AppLocalizationsKo([String locale = 'ko']) : super(locale);
10
+
11
+ @override
12
+ String get app_name => 'LocalMind';
13
+
14
+ @override
15
+ String get app_tagline => '당신의 AI. 귀하의 장치. 귀하의 규칙.';
16
+
17
+ @override
18
+ String get app_version => '1.0.0';
19
+
20
+ @override
21
+ String get cancel => '취소';
22
+
23
+ @override
24
+ String get confirm => '확인';
25
+
26
+ @override
27
+ String get delete => '삭제';
28
+
29
+ @override
30
+ String get save => '저장';
31
+
32
+ @override
33
+ String get retry => '재시도';
34
+
35
+ @override
36
+ String get close => '닫기';
37
+
38
+ @override
39
+ String get done => '완료';
40
+
41
+ @override
42
+ String get continue_action => '계속';
43
+
44
+ @override
45
+ String get skip => '건너뛰기';
46
+
47
+ @override
48
+ String get install => '설치';
49
+
50
+ @override
51
+ String get download => '다운로드';
52
+
53
+ @override
54
+ String get resume => '이력서';
55
+
56
+ @override
57
+ String get pause => '일시중지';
58
+
59
+ @override
60
+ String get stop => '중지';
61
+
62
+ @override
63
+ String get edit => '편집';
64
+
65
+ @override
66
+ String get preview => '미리보기';
67
+
68
+ @override
69
+ String get unload => '언로드';
70
+
71
+ @override
72
+ String get load => '로드';
73
+
74
+ @override
75
+ String get rename => '이름 바꾸기';
76
+
77
+ @override
78
+ String get pin => '핀';
79
+
80
+ @override
81
+ String get unpin => '고정 해제';
82
+
83
+ @override
84
+ String get share => '공유';
85
+
86
+ @override
87
+ String get copy => '복사';
88
+
89
+ @override
90
+ String get copied => '복사되었습니다!';
91
+
92
+ @override
93
+ String get copied_to_clipboard => '클립보드에 복사됨';
94
+
95
+ @override
96
+ String get select => '선택';
97
+
98
+ @override
99
+ String get active => '활성';
100
+
101
+ @override
102
+ String get all => '모두';
103
+
104
+ @override
105
+ String get none => '없음';
106
+
107
+ @override
108
+ String get none_selected => '선택한 항목 없음';
109
+
110
+ @override
111
+ String get online => '온라인';
112
+
113
+ @override
114
+ String get connected => '연결됨';
115
+
116
+ @override
117
+ String get checking => '확인 중';
118
+
119
+ @override
120
+ String get offline => '오프라인';
121
+
122
+ @override
123
+ String get error => '오류';
124
+
125
+ @override
126
+ String get unknown_error => '알 수 없는 오류';
127
+
128
+ @override
129
+ String get not_now => '지금은 아님';
130
+
131
+ @override
132
+ String get enable => '활성화';
133
+
134
+ @override
135
+ String get proceed_anyway => '어쨌든 진행';
136
+
137
+ @override
138
+ String get test_connection => '연결 테스트';
139
+
140
+ @override
141
+ String get testing => '테스트 중...';
142
+
143
+ @override
144
+ String get connection_successful => '연결 성공!';
145
+
146
+ @override
147
+ String get connection_failed => '연결에 실패했습니다. 설정을 확인하세요.';
148
+
149
+ @override
150
+ String get save_continue => '저장하고 계속하기';
151
+
152
+ @override
153
+ String get save_changes => '변경 사항 저장';
154
+
155
+ @override
156
+ String get finish_setup => '설정 완료';
157
+
158
+ @override
159
+ String get start_new_chat => '새 채팅 시작';
160
+
161
+ @override
162
+ String get cannot_undo => '이 작업은 취소할 수 없습니다.';
163
+
164
+ @override
165
+ String get ram_warning => 'RAM 경고';
166
+
167
+ @override
168
+ String get recommended => '추천';
169
+
170
+ @override
171
+ String get may_be_large => '이 기기에 비해 너무 클 수 있습니다.';
172
+
173
+ @override
174
+ String get calculating => '계산 중...';
175
+
176
+ @override
177
+ String get download_failed => '다운로드 실패';
178
+
179
+ @override
180
+ String get downloaded => '다운로드됨';
181
+
182
+ @override
183
+ String get not_downloaded => '다운로드되지 않음';
184
+
185
+ @override
186
+ String get installed => '설치됨';
187
+
188
+ @override
189
+ String get not_installed => '설치되지 않음';
190
+
191
+ @override
192
+ String get loading => '로드 중...';
193
+
194
+ @override
195
+ String get thinking => '생각';
196
+
197
+ @override
198
+ String get processing => '처리 중...';
199
+
200
+ @override
201
+ String get initializing => '초기화 중...';
202
+
203
+ @override
204
+ String get ready => '준비';
205
+
206
+ @override
207
+ String get preparing_app => '앱 준비 중...';
208
+
209
+ @override
210
+ String get initializing_services => '서비스 초기화 중...';
211
+
212
+ @override
213
+ String get configuring_server => '서버 구성 중...';
214
+
215
+ @override
216
+ String get startup_failed => '시작 실패';
217
+
218
+ @override
219
+ String get something_went_wrong => '문제가 발생했습니다.';
220
+
221
+ @override
222
+ String get delete_model_title => '모델 삭제';
223
+
224
+ @override
225
+ String delete_model_body(String name) {
226
+ return '$name을 삭제하시겠습니까?';
227
+ }
228
+
229
+ @override
230
+ String delete_model_body_with_size(String name, String size) {
231
+ return '$name을 삭제하시겠습니까? 이렇게 하면 약 $size 정도의 공간이 확보됩니다.\n\n필요한 경우 나중에 이 모델을 다시 다운로드할 수 있습니다.';
232
+ }
233
+
234
+ @override
235
+ String get delete_voice_title => '음성 삭제';
236
+
237
+ @override
238
+ String delete_voice_body(String name, String size) {
239
+ return '$name을 삭제하시겠습니까? 이렇게 하면 약 $size 정도의 공간이 확보됩니다.\n\n필요한 경우 나중에 이 음성을 다시 다운로드할 수 있습니다.';
240
+ }
241
+
242
+ @override
243
+ String get delete_server_title => '서버 삭제';
244
+
245
+ @override
246
+ String delete_server_body(String name) {
247
+ return '정말로 \"$name\"을 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.';
248
+ }
249
+
250
+ @override
251
+ String get delete_conversation_title => '대화를 삭제하시겠습니까?';
252
+
253
+ @override
254
+ String delete_conversation_body(String title) {
255
+ return '정말로 \"$title\"을 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.';
256
+ }
257
+
258
+ @override
259
+ String get delete_message_title => '메시지를 삭제하시겠습니까?';
260
+
261
+ @override
262
+ String delete_persona_title(String name) {
263
+ return '\'$name\'를 삭제하시겠습니까?';
264
+ }
265
+
266
+ @override
267
+ String get delete_persona_body => '이 작업은 취소할 수 없습니다.';
268
+
269
+ @override
270
+ String get delete_builtin_persona_body =>
271
+ '이것은 내장된 페르소나입니다. 나중에 설정에서 복원할 수 있습니다.';
272
+
273
+ @override
274
+ String get restore_builtin_personas => '기본 페르소나 복원';
275
+
276
+ @override
277
+ String get restore_builtin_personas_desc => '삭제한 내장 페르소나를 다시 추가하세요.';
278
+
279
+ @override
280
+ String get restore_builtin_personas_success => '기본 페르소나가 복원되었습니다.';
281
+
282
+ @override
283
+ String get clear_personas => '명확한 페르소나';
284
+
285
+ @override
286
+ String get enable_image_compression => '보내기 전에 이미지를 압축하세요';
287
+
288
+ @override
289
+ String get enable_image_compression_desc =>
290
+ '업로드가 서버 제한 내에서 유지되도록 첨부된 이미지의 크기를 조정하고 압축합니다.';
291
+
292
+ @override
293
+ String get image_compression_level => '압축 공격성';
294
+
295
+ @override
296
+ String get image_compression_level_desc =>
297
+ '공격성이 높을수록 품질이 낮을수록 업로드 크기가 작아집니다.';
298
+
299
+ @override
300
+ String get image_compression_level_low => '낮음';
301
+
302
+ @override
303
+ String get image_compression_level_medium => '중간';
304
+
305
+ @override
306
+ String get image_compression_level_high => '높음';
307
+
308
+ @override
309
+ String get sort_models_tooltip => '모델 정렬';
310
+
311
+ @override
312
+ String get sort_by_favorites => '즐겨찾기 먼저';
313
+
314
+ @override
315
+ String get sort_by_name => '이름(A~Z)';
316
+
317
+ @override
318
+ String get sort_by_size_smallest => '크기(가장 작은 것부터)';
319
+
320
+ @override
321
+ String get sort_by_size_largest => '크기(큰 것부터)';
322
+
323
+ @override
324
+ String get sort_by_context_length => '컨텍스트 길이';
325
+
326
+ @override
327
+ String bulk_ai_rename_progress(int done, int total) {
328
+ return '$done/$total 이름 바꾸기...';
329
+ }
330
+
331
+ @override
332
+ String selected_count(int count) {
333
+ return '$count 선택됨';
334
+ }
335
+
336
+ @override
337
+ String get ai_rename_tooltip => 'AI로 선택한 이름 바꾸기';
338
+
339
+ @override
340
+ String get new_chat_in_folder_tooltip => '이 폴더의 새 채팅';
341
+
342
+ @override
343
+ String total_tokens_count(int count) {
344
+ return '$count 토큰';
345
+ }
346
+
347
+ @override
348
+ String get smart_replies_use_persona => '스마트 답장에 페르소나 사용';
349
+
350
+ @override
351
+ String get smart_replies_use_persona_desc =>
352
+ '제안된 답변은 일반적인 어시스턴트가 아닌 활성 페르소나의 어조와 일치합니다.';
353
+
354
+ @override
355
+ String get keep_persona_on_new_chat => '새 채팅에서 페르소나 유지';
356
+
357
+ @override
358
+ String get keep_persona_on_new_chat_desc => '새 채팅을 시작한 후 선택한 페르소나를 지우지 마세요.';
359
+
360
+ @override
361
+ String get role_swap_button_enabled => '역할 전환 버튼 표시';
362
+
363
+ @override
364
+ String get role_swap_button_enabled_desc =>
365
+ '응답을 생성하지 않고 사용자 대신 어시스턴트로 메시지를 보내려면 채팅 입력에 버튼을 표시하세요.';
366
+
367
+ @override
368
+ String get send_as_user_tooltip => '사용자로 보내기';
369
+
370
+ @override
371
+ String get send_as_assistant_tooltip => '어시스턴트로 보내기(응답 없음)';
372
+
373
+ @override
374
+ String get insert_without_generating_tooltip => '생성하지 않고 삽입';
375
+
376
+ @override
377
+ String get token_usage_title => '토큰 사용';
378
+
379
+ @override
380
+ String get total_tokens_label => '사용된 토큰';
381
+
382
+ @override
383
+ String get usage_percent_label => '사용된 컨텍스트';
384
+
385
+ @override
386
+ String get export_choice_title => '수출';
387
+
388
+ @override
389
+ String get export_choice_body => '이것을 어떻게 내보내시겠습니까?';
390
+
391
+ @override
392
+ String get copy_to_clipboard => '클립보드에 복사';
393
+
394
+ @override
395
+ String bulk_export_conversations_success(int count) {
396
+ return '$count 대화를 내보냈습니다.';
397
+ }
398
+
399
+ @override
400
+ String get bulk_ai_rename_confirm_title => 'AI로 이름을 바꾸시겠습니까?';
401
+
402
+ @override
403
+ String bulk_ai_rename_confirm_body(int count) {
404
+ return '이는 AI에게 $count가 선택한 각 대화에 대해 현재 제목을 대체하는 새로운 제목을 생성하도록 요청합니다. 이 작업은 시간이 좀 걸릴 수 있으며 취소할 수 없습니다.';
405
+ }
406
+
407
+ @override
408
+ String get sort_by_modified_date => '최종 수정됨';
409
+
410
+ @override
411
+ String get sort_by_created_date => '생성된 날짜';
412
+
413
+ @override
414
+ String get sort_title => '정렬';
415
+
416
+ @override
417
+ String get clear_conversation_title => '명확한 대화?';
418
+
419
+ @override
420
+ String get clear_conversation_body => '이 대화의 모든 메시지가 삭제됩니다.';
421
+
422
+ @override
423
+ String get clear => '지우기';
424
+
425
+ @override
426
+ String label_completed(String label) {
427
+ return '$label 완료';
428
+ }
429
+
430
+ @override
431
+ String error_with_message(String error) {
432
+ return '오류: $error';
433
+ }
434
+
435
+ @override
436
+ String preview_failed(String error) {
437
+ return '미리보기 실패: $error';
438
+ }
439
+
440
+ @override
441
+ String loading_model(String modelId) {
442
+ return '$modelId 로드 중...';
443
+ }
444
+
445
+ @override
446
+ String model_loaded(String modelId, String backend) {
447
+ return '로드된 모델: $modelId($backend)';
448
+ }
449
+
450
+ @override
451
+ String get no_model_loaded =>
452
+ '로드된 모델이 없습니다. 모델을 다운로드하고 로드하려면 \"기기 내 모델 관리\"를 탭하세요.';
453
+
454
+ @override
455
+ String loading_model_error(String error) {
456
+ return '오류: $error';
457
+ }
458
+
459
+ @override
460
+ String get delete_conversation => '대화를 삭제하시겠습니까?';
461
+
462
+ @override
463
+ String get nav_history => '역사';
464
+
465
+ @override
466
+ String get nav_servers => '서버';
467
+
468
+ @override
469
+ String get nav_local_models => '지역 모델';
470
+
471
+ @override
472
+ String get nav_tts => '텍스트 음성 변환';
473
+
474
+ @override
475
+ String get nav_personas => '페르소나';
476
+
477
+ @override
478
+ String get nav_settings => '설정';
479
+
480
+ @override
481
+ String get nav_new_chat => '새 채팅';
482
+
483
+ @override
484
+ String get search_hint => '대화 검색...';
485
+
486
+ @override
487
+ String get no_server_selected => '서버를 선택하지 않았습니다.';
488
+
489
+ @override
490
+ String get switch_server => '서버 전환';
491
+
492
+ @override
493
+ String get switch_server_subtitle => '연결할 서버를 선택하세요';
494
+
495
+ @override
496
+ String get manage_servers => '서버 관리';
497
+
498
+ @override
499
+ String get open_source => '오픈 소스';
500
+
501
+ @override
502
+ String get open_source_desc =>
503
+ 'LocalMind는 오픈 소스입니다. 진행 상황을 따르거나 GitHub에 기여해 보세요.';
504
+
505
+ @override
506
+ String get star_on_github => 'GitHub의 스타';
507
+
508
+ @override
509
+ String get add_more => '더 추가';
510
+
511
+ @override
512
+ String get on_github => 'GitHub에서';
513
+
514
+ @override
515
+ String get could_not_open_github => 'GitHub를 열 수 없습니다.';
516
+
517
+ @override
518
+ String get settings_title => '설정';
519
+
520
+ @override
521
+ String get settings_appearance => '외관';
522
+
523
+ @override
524
+ String get settings_language => '언어';
525
+
526
+ @override
527
+ String get language_system_default => '시스템 기본값';
528
+
529
+ @override
530
+ String get settings_tts => '텍스트 음성 변환';
531
+
532
+ @override
533
+ String get settings_android_assistant => '안드로이드 어시스턴트';
534
+
535
+ @override
536
+ String get assistant_default_title => 'LocalMind를 보조자로 사용';
537
+
538
+ @override
539
+ String get assistant_default_description =>
540
+ 'Android의 보조 제스처 또는 전원 버튼 단축키를 사용하여 음성 모드를 시작하세요.';
541
+
542
+ @override
543
+ String get assistant_status_active => '활성';
544
+
545
+ @override
546
+ String get assistant_status_available => '비활성';
547
+
548
+ @override
549
+ String get assistant_status_manual => '설정 확인';
550
+
551
+ @override
552
+ String get assistant_status_unsupported => '이용 불가';
553
+
554
+ @override
555
+ String get assistant_status_checking => '확인 중…';
556
+
557
+ @override
558
+ String get assistant_set_default => '기본 도우미로 설정';
559
+
560
+ @override
561
+ String get assistant_open_settings => 'Android 어시스턴트 설정 열기';
562
+
563
+ @override
564
+ String assistant_error(Object error) {
565
+ return 'Android 어시스턴트 설정을 열 수 없습니다.';
566
+ }
567
+
568
+ @override
569
+ String get settings_behavior => '행동';
570
+
571
+ @override
572
+ String get settings_on_device => '온디바이스 추론';
573
+
574
+ @override
575
+ String get settings_default_server => '기본 서버';
576
+
577
+ @override
578
+ String get settings_default_persona => '기본 페르소나';
579
+
580
+ @override
581
+ String get settings_default_model => '기본 모델';
582
+
583
+ @override
584
+ String get settings_default_model_desc => '새 채팅을 시작하면 자동으로 선택됩니다.';
585
+
586
+ @override
587
+ String get settings_privacy => '개인 정보 보호';
588
+
589
+ @override
590
+ String get settings_data_management => '데이터 관리';
591
+
592
+ @override
593
+ String get settings_about => '소개';
594
+
595
+ @override
596
+ String get theme => '테마';
597
+
598
+ @override
599
+ String get theme_system => '시스템';
600
+
601
+ @override
602
+ String get theme_light => '빛';
603
+
604
+ @override
605
+ String get theme_dark => '어둠';
606
+
607
+ @override
608
+ String get theme_claude => '클로드';
609
+
610
+ @override
611
+ String get font_size => '글꼴 크기';
612
+
613
+ @override
614
+ String get font_size_desc => '채팅에서 텍스트 크기를 조정합니다.';
615
+
616
+ @override
617
+ String get font_preview => '날렵한 갈색여우가 게으른 개를 뛰어넘습니다.';
618
+
619
+ @override
620
+ String get code_theme_dark => '코드 테마(어두움)';
621
+
622
+ @override
623
+ String get code_theme_light => '코드 테마(빛)';
624
+
625
+ @override
626
+ String get code_theme_desc => '코드 블록에 대한 구문 강조 테마를 선택합니다.';
627
+
628
+ @override
629
+ String get tts_engine => 'TTS 엔진';
630
+
631
+ @override
632
+ String get tts_engine_system => '시스템 TTS';
633
+
634
+ @override
635
+ String get tts_engine_kitten => '새끼 고양이 TTS';
636
+
637
+ @override
638
+ String get voice => '음성';
639
+
640
+ @override
641
+ String get voice_female => '여성';
642
+
643
+ @override
644
+ String get voice_male => '남성';
645
+
646
+ @override
647
+ String get voice_other => '기타';
648
+
649
+ @override
650
+ String get tts_speed => 'TTS 속도';
651
+
652
+ @override
653
+ String get tts_speed_desc => '재생 속도를 조정합니다.';
654
+
655
+ @override
656
+ String get manage_tts_models => 'TTS 모델 관리';
657
+
658
+ @override
659
+ String get manage_on_device_models => '온디바이스 모델 관리';
660
+
661
+ @override
662
+ String get enable_smart_reply => '기기 내 스마트 답장';
663
+
664
+ @override
665
+ String get ai_user_response_enabled => 'AI 사용자 메시지(보류 보내기)';
666
+
667
+ @override
668
+ String get ai_user_response_enabled_desc =>
669
+ 'AI가 다음 메시지를 쓰고 보내도록 하려면 보내기 버튼을 3초 동안 누르세요.';
670
+
671
+ @override
672
+ String get ai_user_response_tooltip => 'AI로 사용자 메시지 생성';
673
+
674
+ @override
675
+ String get streaming_responses => '스트리밍 응답';
676
+
677
+ @override
678
+ String get auto_generate_titles => '제목 자동 생성';
679
+
680
+ @override
681
+ String get send_on_enter => '입력 시 보내기';
682
+
683
+ @override
684
+ String get show_system_messages => '기본 시스템 프롬프트 보내기';
685
+
686
+ @override
687
+ String get show_system_messages_desc =>
688
+ '페르소나가 선택되지 않은 경우 각 요청과 함께 기본 보조 시스템 프롬프트를 보냅니다.';
689
+
690
+ @override
691
+ String get show_system_messages_in_chat => '채팅에 시스템 메시지 표시';
692
+
693
+ @override
694
+ String get show_system_messages_in_chat_desc =>
695
+ '대화에서 눈에 보이는 풍선으로 시스템 메시지(예: 가져온 백업의 메시지)를 표시합니다.';
696
+
697
+ @override
698
+ String get auto_collapse_thinking => '자동 붕괴 사고';
699
+
700
+ @override
701
+ String get auto_collapse_thinking_desc =>
702
+ '주요 답변이 있는 경우 응답 생성이 완료된 후 추론 프로세스를 자동으로 축소합니다.';
703
+
704
+ @override
705
+ String get haptic_feedback => '햅틱 피드백';
706
+
707
+ @override
708
+ String get enable_mcp => 'MCP 활성화';
709
+
710
+ @override
711
+ String get new_chat_mcp_default => '새 채팅 MCP 기본값';
712
+
713
+ @override
714
+ String get show_data_indicator => '데이터 표시기 표시';
715
+
716
+ @override
717
+ String get privacy_info => '\"LocalMind는 귀하의 데이터를 결코 볼 수 없습니다\"';
718
+
719
+ @override
720
+ String get delete_all_conversations => '모든 대화 삭제';
721
+
722
+ @override
723
+ String get reset_settings_defaults => '설정을 기본값으로 재설정';
724
+
725
+ @override
726
+ String get chat_title => '로컬마인드';
727
+
728
+ @override
729
+ String get chat_parameters_tooltip => '채팅 매개변수';
730
+
731
+ @override
732
+ String get change_persona => '페르소나 변경';
733
+
734
+ @override
735
+ String get set_persona => '페르소나 설정';
736
+
737
+ @override
738
+ String get remove_persona => '페르소나 제거';
739
+
740
+ @override
741
+ String get clear_conversation => '명확한 대화';
742
+
743
+ @override
744
+ String get connection_error => '연결 오류입니다. 서버를 확인하세요.';
745
+
746
+ @override
747
+ String get disconnected => '서버와의 연결이 끊어졌습니다.';
748
+
749
+ @override
750
+ String get configure => '구성';
751
+
752
+ @override
753
+ String get select_model => '모델 선택';
754
+
755
+ @override
756
+ String get select_persona => '페르소나 선택';
757
+
758
+ @override
759
+ String get manage_personas => '페르소나 관리';
760
+
761
+ @override
762
+ String get personas_combine_hint => '채팅에서 여러 페르소나를 선택하여 시스템 프롬프트를 쌓으세요.';
763
+
764
+ @override
765
+ String get start_conversation => '대화 시작';
766
+
767
+ @override
768
+ String get recent_chats => '최근 채팅';
769
+
770
+ @override
771
+ String get see_all => '모두 보기';
772
+
773
+ @override
774
+ String get quick_write => '함수 작성 도와주세요';
775
+
776
+ @override
777
+ String get quick_explain => '이 코드를 설명해보세요';
778
+
779
+ @override
780
+ String get quick_debug => '나를 위해 디버깅해 주세요';
781
+
782
+ @override
783
+ String get quick_async => '비동기/대기를 어떻게 사용하나요?';
784
+
785
+ @override
786
+ String get history_missing_title => '기록 누락';
787
+
788
+ @override
789
+ String get history_missing_desc => '이 채팅의 메시지가 삭제되었거나 기록 기록이 손상되었습니다.';
790
+
791
+ @override
792
+ String get technical_details => '기술적인 세부사항';
793
+
794
+ @override
795
+ String get last_error => '마지막 오류:';
796
+
797
+ @override
798
+ String get copy_info => '정보 복사';
799
+
800
+ @override
801
+ String get conversation_id => '대화 ID';
802
+
803
+ @override
804
+ String get created_at => '생성 날짜';
805
+
806
+ @override
807
+ String get expected_messages => '예상되는 메시지';
808
+
809
+ @override
810
+ String get debug_dialog_desc => '동기화 문제를 식별하는 데 도움이 되는 진단 정보입니다.';
811
+
812
+ @override
813
+ String get chat_input_hint => '무엇이든 물어보세요';
814
+
815
+ @override
816
+ String get send_message_tooltip => '메시지 보내기';
817
+
818
+ @override
819
+ String get stop_generation_tooltip => '생성 중지';
820
+
821
+ @override
822
+ String get attach_images_tooltip => '이미지 또는 텍스트 첨부';
823
+
824
+ @override
825
+ String get start_listening_tooltip => '듣기 시작';
826
+
827
+ @override
828
+ String get stop_listening_tooltip => '듣기 중지';
829
+
830
+ @override
831
+ String tool_label(String toolCallId) {
832
+ return '도구: $toolCallId';
833
+ }
834
+
835
+ @override
836
+ String get tool_unknown => '도구: 알 수 없음';
837
+
838
+ @override
839
+ String get message_options => '메시지 옵션';
840
+
841
+ @override
842
+ String get copy_markdown => '마크다운으로 복사';
843
+
844
+ @override
845
+ String get copied_markdown => '마크다운으로 복사됨';
846
+
847
+ @override
848
+ String get read_aloud => '소리내어 읽기';
849
+
850
+ @override
851
+ String get stop_reading => '읽기 중지';
852
+
853
+ @override
854
+ String get more => '더보기';
855
+
856
+ @override
857
+ String character_count(int length) {
858
+ return '$length 문자';
859
+ }
860
+
861
+ @override
862
+ String get edit_message => '메시지 편집';
863
+
864
+ @override
865
+ String get edit_message_desc => '저장하면 아래 어시스턴트 응답이 제거되고 다시 생성됩니다.';
866
+
867
+ @override
868
+ String get save_regenerate => '저장 및 재생성';
869
+
870
+ @override
871
+ String get chat_settings_title => '채팅 설정';
872
+
873
+ @override
874
+ String get reset_defaults => '기본값 재설정';
875
+
876
+ @override
877
+ String get parameters_tab => '매개변수';
878
+
879
+ @override
880
+ String get mcp_tab => 'MCP';
881
+
882
+ @override
883
+ String get temperature => '온도';
884
+
885
+ @override
886
+ String get temperature_desc => '무작위성 제어: 높음 = 창의적, 낮음 = 집중';
887
+
888
+ @override
889
+ String get top_p => '탑 P';
890
+
891
+ @override
892
+ String get top_p_desc => '핵 샘플링 임계값';
893
+
894
+ @override
895
+ String get max_tokens => '최대 토큰';
896
+
897
+ @override
898
+ String get max_tokens_desc => '응답 한도';
899
+
900
+ @override
901
+ String get context_length => '컨텍스트 길이';
902
+
903
+ @override
904
+ String get context_length_desc => '기록 창';
905
+
906
+ @override
907
+ String get mcp_disabled_warning =>
908
+ 'MCP는 전역적으로 비활성화됩니다. 이러한 기능을 사용하려면 설정에서 활성화하세요.';
909
+
910
+ @override
911
+ String get mcp_enable_chat => '이 채팅에 대해 MCP를 활성화합니다.';
912
+
913
+ @override
914
+ String get auto_execute_tools => '자동 실행 도구';
915
+
916
+ @override
917
+ String get beta_label => '베타';
918
+
919
+ @override
920
+ String get experimental_label => '실험적';
921
+
922
+ @override
923
+ String get add_ephemeral_mcp => '임시 MCP 서버 추가';
924
+
925
+ @override
926
+ String get mcp_label_placeholder => '라벨';
927
+
928
+ @override
929
+ String get mcp_url_placeholder => 'URL(https://...)';
930
+
931
+ @override
932
+ String get active_integrations => '활성 통합';
933
+
934
+ @override
935
+ String get import_mcp_json => 'JSON 가져오기';
936
+
937
+ @override
938
+ String get import_mcp_json_dialog_title => 'MCP 구성 JSON 가져오기';
939
+
940
+ @override
941
+ String get import_mcp_json_instructions =>
942
+ 'LM Studio(mcp.json)에서 직접 mcpServers JSON을 복사하거나 아래에 플러그인 배열을 붙여넣으세요.';
943
+
944
+ @override
945
+ String get import_mcp_json_placeholder =>
946
+ '여기에 mcpServers JSON 또는 플러그인 목록을 붙여넣으세요...';
947
+
948
+ @override
949
+ String mcp_import_success(int count) {
950
+ return '$count 통합을 성공적으로 가져왔습니다.';
951
+ }
952
+
953
+ @override
954
+ String get mcp_import_failed => 'JSON에 유효한 MCP 통합이 없습니다.';
955
+
956
+ @override
957
+ String get enable_notifications => '알림 활성화';
958
+
959
+ @override
960
+ String get enable_notifications_desc => '모델 다운로드가 완료되면 알림을 받습니다.';
961
+
962
+ @override
963
+ String get chat_history_title => '채팅 기록';
964
+
965
+ @override
966
+ String get conversation_just_now => '지금 막';
967
+
968
+ @override
969
+ String conversation_minutes_ago(int minutes) {
970
+ return '$minutes분 전';
971
+ }
972
+
973
+ @override
974
+ String conversation_hours_ago(int hours) {
975
+ return '$hours시간 전';
976
+ }
977
+
978
+ @override
979
+ String get conversation_yesterday => '어제';
980
+
981
+ @override
982
+ String conversation_days_ago(int days) {
983
+ return '$days일 전';
984
+ }
985
+
986
+ @override
987
+ String conversation_date(int month, int day, int year) {
988
+ return '$month/$day/$year';
989
+ }
990
+
991
+ @override
992
+ String get options_tooltip => '옵션';
993
+
994
+ @override
995
+ String get no_results_found => '검색결과가 없습니다';
996
+
997
+ @override
998
+ String get no_conversations_yet => '아직 대화가 없습니다.';
999
+
1000
+ @override
1001
+ String get try_different_search => '다른 검색어를 사용해 보세요.';
1002
+
1003
+ @override
1004
+ String get start_new_conversation => '새로운 대화를 시작하세요';
1005
+
1006
+ @override
1007
+ String get rename_conversation => '대화 이름 바꾸기';
1008
+
1009
+ @override
1010
+ String get enter_new_title => '새 제목을 입력하세요';
1011
+
1012
+ @override
1013
+ String get pinned_section => '고정됨';
1014
+
1015
+ @override
1016
+ String get today_section => '오늘';
1017
+
1018
+ @override
1019
+ String get yesterday_section => '어제';
1020
+
1021
+ @override
1022
+ String get previous_7_days => '이전 7일';
1023
+
1024
+ @override
1025
+ String get previous_30_days => '이전 30일';
1026
+
1027
+ @override
1028
+ String get older_section => '나이가 많은';
1029
+
1030
+ @override
1031
+ String get onboarding_choose_language => '언어 선택';
1032
+
1033
+ @override
1034
+ String get onboarding_choose_language_desc =>
1035
+ '원하는 언어를 선택하세요. 언제든지 설정에서 변경할 수 있습니다.';
1036
+
1037
+ @override
1038
+ String get onboarding_localmind => '지역 마인드';
1039
+
1040
+ @override
1041
+ String get onboarding_connect_server => '당신의 연결\n서버';
1042
+
1043
+ @override
1044
+ String get onboarding_connect_desc =>
1045
+ 'LM Studio, Ollama에 연결하세요.\nOllama Cloud 또는 OpenRouter를 사용하여\n개인 AI 경험을 시작하세요.';
1046
+
1047
+ @override
1048
+ String get openai_compatible_api => 'OpenAI 호환 API';
1049
+
1050
+ @override
1051
+ String get https_requires_ssl => 'HTTPS에는 SSL이 필요합니다';
1052
+
1053
+ @override
1054
+ String get most_local_setups_use_http => '대부분의 로컬 설정에서는 http://를 사용합니다.';
1055
+
1056
+ @override
1057
+ String get onboarding_welcome => '로컬마인드에 오신 것을 환영합니다';
1058
+
1059
+ @override
1060
+ String get server_type_on_device => '기기 내';
1061
+
1062
+ @override
1063
+ String get server_type_lm_studio => 'LM스튜디오';
1064
+
1065
+ @override
1066
+ String get server_type_ollama => '올라마';
1067
+
1068
+ @override
1069
+ String get server_type_ollama_cloud => '올라마 클라우드';
1070
+
1071
+ @override
1072
+ String get server_type_ollama_cloud_sub => '클라우드 관리';
1073
+
1074
+ @override
1075
+ String get server_type_ollama_cloud_display => '올라마 클라우드';
1076
+
1077
+ @override
1078
+ String get server_address_ollama_cloud => 'ollama.com';
1079
+
1080
+ @override
1081
+ String get ollama_cloud_disclosure =>
1082
+ 'Ollama Cloud를 연결하면 채팅 메시지와 입력 내용이 추론을 위해 Ollama의 관리 서버로 전송됩니다. LocalMind는 대화를 추적하거나 저장하지 않습니다. ollama.com/settings/keys에서 언제든지 이 키를 취소할 수 있습니다.';
1083
+
1084
+ @override
1085
+ String get api_key_required_ollama_cloud => 'Ollama Cloud에 필요한 API 키';
1086
+
1087
+ @override
1088
+ String get api_key_hint_ollama_cloud => 'Ollama Cloud API 키를 붙여넣으세요.';
1089
+
1090
+ @override
1091
+ String get add_server_ollama_cloud_subtitle =>
1092
+ '관리형 클라우드 모델에 액세스하려면 ollama.com/settings/keys의 API 키를 사용하여 Ollama Cloud에 연결하세요.';
1093
+
1094
+ @override
1095
+ String get add_server_openrouter_subtitle =>
1096
+ '유효한 API 키를 사용하여 OpenRouter를 통해 연결하고 모델 라우팅을 위해 이 프로필을 준비하세요.';
1097
+
1098
+ @override
1099
+ String get add_server_endpoint_subtitle =>
1100
+ '로컬 또는 자체 호스팅 끝점을 구성한 다음 저장하기 전에 연결을 확인하세요.';
1101
+
1102
+ @override
1103
+ String get server_type_openrouter => '오픈라우터';
1104
+
1105
+ @override
1106
+ String get server_type_openrouter_sub => '통합 클라우드';
1107
+
1108
+ @override
1109
+ String get ready_continue => '계속할 준비가 되었습니다';
1110
+
1111
+ @override
1112
+ String get waiting_selection => '선택을 기다리는 중';
1113
+
1114
+ @override
1115
+ String get setup_connection => '연결 설정';
1116
+
1117
+ @override
1118
+ String setup_connection_desc(String server) {
1119
+ return '채팅을 시작하려면 $server 서버를 구성하세요.';
1120
+ }
1121
+
1122
+ @override
1123
+ String get server_name => '서버 이름';
1124
+
1125
+ @override
1126
+ String get name_required => '이름이 필요합니다';
1127
+
1128
+ @override
1129
+ String get name_max_50 => '최대 50자';
1130
+
1131
+ @override
1132
+ String get host_label => '호스트/IP 주소';
1133
+
1134
+ @override
1135
+ String get host_required => '호스트 필수';
1136
+
1137
+ @override
1138
+ String get port_label => '항구';
1139
+
1140
+ @override
1141
+ String get port_required => '포트 필요';
1142
+
1143
+ @override
1144
+ String get port_invalid => '숫자여야 합니다.';
1145
+
1146
+ @override
1147
+ String get port_range => '유효한 포트(1-65535)를 입력하세요.';
1148
+
1149
+ @override
1150
+ String get api_key_required => 'API 키 *';
1151
+
1152
+ @override
1153
+ String get api_key_optional => 'API 키(선택사항)';
1154
+
1155
+ @override
1156
+ String get api_key_required_openrouter => 'OpenRouter에 필요한 API 키';
1157
+
1158
+ @override
1159
+ String get api_key_format => 'OpenRouter API 키는 sk-로 시작합니다.';
1160
+
1161
+ @override
1162
+ String get my_server_hint => '내 서버';
1163
+
1164
+ @override
1165
+ String get name_length_validation => '이름은 50자 이하여야 합니다.';
1166
+
1167
+ @override
1168
+ String get host_valid => '유효한 호스트 이름 또는 IP 주소를 입력하세요.';
1169
+
1170
+ @override
1171
+ String get api_key_hint_openrouter => 'sk-...';
1172
+
1173
+ @override
1174
+ String get api_key_hint_generic => '인증된 서버의 경우';
1175
+
1176
+ @override
1177
+ String get update_server => '업데이트 서버';
1178
+
1179
+ @override
1180
+ String get save_server => '서버 저장';
1181
+
1182
+ @override
1183
+ String get server_updated => '서버가 업데이트되었습니다.';
1184
+
1185
+ @override
1186
+ String get server_added => '서버가 추가되었습니다';
1187
+
1188
+ @override
1189
+ String get download_model_title => '모델 다운로드';
1190
+
1191
+ @override
1192
+ String get download_model_desc => '다운로드할 모델을 선택하세요.\n장치에서 로컬로 실행됩니다.';
1193
+
1194
+ @override
1195
+ String get on_device_android_only => '기기 내 추론은 현재 Android에서만 사용할 수 있습니다.';
1196
+
1197
+ @override
1198
+ String get total_ram => '총 RAM';
1199
+
1200
+ @override
1201
+ String get available => '가능';
1202
+
1203
+ @override
1204
+ String ram_min_required(String fileSize) {
1205
+ return '$fileSize GB RAM 최소';
1206
+ }
1207
+
1208
+ @override
1209
+ String download_progress(String percent, String speed) {
1210
+ return '$percent% • $speed';
1211
+ }
1212
+
1213
+ @override
1214
+ String eta_label(String eta) {
1215
+ return '도착 예정 시간: $eta';
1216
+ }
1217
+
1218
+ @override
1219
+ String paused_progress(String percent) {
1220
+ return '일시중지됨 - $percent%';
1221
+ }
1222
+
1223
+ @override
1224
+ String ram_warning_body_download(String ram, String totalMemory) {
1225
+ return '이 모델에는 최소 ${ram}GB RAM이 필요하지만 장치에는 $totalMemory가 있습니다. 제대로 실행되지 않거나 앱이 충돌할 수 있습니다.';
1226
+ }
1227
+
1228
+ @override
1229
+ String ram_warning_body_load(String availableRAM, String ram) {
1230
+ return '장치에는 $availableRAM 사용 가능한 RAM이 있지만 이 모델에서는 최소 $ram GB를 권장합니다. 로드가 실패하거나 불안정해질 수 있습니다.';
1231
+ }
1232
+
1233
+ @override
1234
+ String get choose_theme => '테마 선택';
1235
+
1236
+ @override
1237
+ String get choose_theme_desc => '앱 모양을 개인화하세요. 나중에 설정에서 언제든지 변경할 수 있습니다.';
1238
+
1239
+ @override
1240
+ String get theme_card_system => '시스템';
1241
+
1242
+ @override
1243
+ String get theme_card_system_sub => '기기 설정과 일치';
1244
+
1245
+ @override
1246
+ String get theme_card_light => '빛';
1247
+
1248
+ @override
1249
+ String get theme_card_light_sub => '깨끗하고 밝다';
1250
+
1251
+ @override
1252
+ String get theme_card_dark => '어둠';
1253
+
1254
+ @override
1255
+ String get theme_card_dark_sub => '눈이 편하다';
1256
+
1257
+ @override
1258
+ String get theme_card_claude => '클로드';
1259
+
1260
+ @override
1261
+ String get theme_card_claude_sub => '따뜻한 복숭아빛 테마';
1262
+
1263
+ @override
1264
+ String get stay_updated => '최신 정보 유지';
1265
+
1266
+ @override
1267
+ String get stay_updated_desc => 'AI 모델 다운로드가 완료되거나 장기 실행 작업이 완료되면 알림을 받으세요.';
1268
+
1269
+ @override
1270
+ String get notification_benefit_downloads => '모델 다운로드 진행';
1271
+
1272
+ @override
1273
+ String get notification_benefit_completions => '세대 완료';
1274
+
1275
+ @override
1276
+ String get notification_benefit_background => '백그라운드 작업 상태';
1277
+
1278
+ @override
1279
+ String get allow_notifications => '알림 허용';
1280
+
1281
+ @override
1282
+ String get servers_title => '서버';
1283
+
1284
+ @override
1285
+ String get no_servers_yet => '아직 서버가 없습니다';
1286
+
1287
+ @override
1288
+ String get no_servers_desc => 'AI 모델과 채팅을 시작하려면 첫 번째 서버를 추가하세요.';
1289
+
1290
+ @override
1291
+ String get add_server => '서버 추가';
1292
+
1293
+ @override
1294
+ String switched_to_server(String name) {
1295
+ return '$name로 전환됨';
1296
+ }
1297
+
1298
+ @override
1299
+ String get edit_server => '서버 편집';
1300
+
1301
+ @override
1302
+ String get add_server_title => '서버 추가';
1303
+
1304
+ @override
1305
+ String get server_type_label => '서버 유형';
1306
+
1307
+ @override
1308
+ String get server_icon_label => '서버 아이콘';
1309
+
1310
+ @override
1311
+ String get default_icon => '기본 아이콘';
1312
+
1313
+ @override
1314
+ String get server_type_lm_studio_display => 'LM스튜디오';
1315
+
1316
+ @override
1317
+ String get server_type_openai_display => 'OpenAI 호환';
1318
+
1319
+ @override
1320
+ String get server_type_ollama_display => '올라마';
1321
+
1322
+ @override
1323
+ String get server_type_openrouter_display => '오픈라우터';
1324
+
1325
+ @override
1326
+ String get server_type_on_device_display => '기기 내';
1327
+
1328
+ @override
1329
+ String get server_address_openrouter => 'openrouter.ai';
1330
+
1331
+ @override
1332
+ String get server_address_on_device => '국소 추론';
1333
+
1334
+ @override
1335
+ String server_address_format(String host, String port) {
1336
+ return '$host:$port';
1337
+ }
1338
+
1339
+ @override
1340
+ String get default_badge => '기본값';
1341
+
1342
+ @override
1343
+ String get set_as_default => '기본값으로 설정';
1344
+
1345
+ @override
1346
+ String get select_icon => '아이콘 선택';
1347
+
1348
+ @override
1349
+ String get select_icon_desc => '서버 아이콘을 선택하세요';
1350
+
1351
+ @override
1352
+ String get search_icons_hint => '아이콘 검색...';
1353
+
1354
+ @override
1355
+ String get server_icon_stack => '서버 스택';
1356
+
1357
+ @override
1358
+ String get server_icon_stack2 => '서버 스택 02';
1359
+
1360
+ @override
1361
+ String get server_icon_stack3 => '서버 스택 03';
1362
+
1363
+ @override
1364
+ String get server_icon_cloud => '클라우드';
1365
+
1366
+ @override
1367
+ String get server_icon_cloud_server => '클라우드 서버';
1368
+
1369
+ @override
1370
+ String get server_icon_mcp => 'MCP 서버';
1371
+
1372
+ @override
1373
+ String get server_icon_database => '데이터베이스';
1374
+
1375
+ @override
1376
+ String get server_icon_database1 => '데이터베이스 01';
1377
+
1378
+ @override
1379
+ String get server_icon_database2 => '데이터베이스 02';
1380
+
1381
+ @override
1382
+ String get server_icon_cpu => 'CPU';
1383
+
1384
+ @override
1385
+ String get server_icon_chip => '칩';
1386
+
1387
+ @override
1388
+ String get server_icon_chip2 => '칩 02';
1389
+
1390
+ @override
1391
+ String get server_icon_computer => '컴퓨터';
1392
+
1393
+ @override
1394
+ String get server_icon_laptop => '노트북';
1395
+
1396
+ @override
1397
+ String get server_icon_terminal => '컴퓨터 터미널';
1398
+
1399
+ @override
1400
+ String get server_icon_code => '코드';
1401
+
1402
+ @override
1403
+ String get server_icon_ai_brain => 'AI 브레인';
1404
+
1405
+ @override
1406
+ String get server_icon_ai_brain2 => 'AI 브레인 02';
1407
+
1408
+ @override
1409
+ String get server_icon_ai_cloud => 'AI 클라우드';
1410
+
1411
+ @override
1412
+ String get server_icon_ai_network => 'AI 네트워크';
1413
+
1414
+ @override
1415
+ String get server_icon_ai_chat => 'AI채팅';
1416
+
1417
+ @override
1418
+ String get server_icon_cellular => '셀룰러 네트워크';
1419
+
1420
+ @override
1421
+ String get server_icon_plug1 => '플러그 01';
1422
+
1423
+ @override
1424
+ String get server_icon_plug2 => '플러그 02';
1425
+
1426
+ @override
1427
+ String get server_icon_bot => '봇';
1428
+
1429
+ @override
1430
+ String get server_icon_bot2 => '봇 02';
1431
+
1432
+ @override
1433
+ String get server_icon_robotic => '로봇식';
1434
+
1435
+ @override
1436
+ String get server_icon_rocket => '로켓';
1437
+
1438
+ @override
1439
+ String get server_icon_star => '스타';
1440
+
1441
+ @override
1442
+ String get server_icon_settings1 => '설정 01';
1443
+
1444
+ @override
1445
+ String get server_icon_settings2 => '설정 02';
1446
+
1447
+ @override
1448
+ String get server_icon_home1 => '홈 01';
1449
+
1450
+ @override
1451
+ String get server_icon_home2 => '홈 02';
1452
+
1453
+ @override
1454
+ String get server_icon_folder1 => '폴더 01';
1455
+
1456
+ @override
1457
+ String get server_icon_folder2 => '폴더 02';
1458
+
1459
+ @override
1460
+ String get server_icon_file1 => '파일 01';
1461
+
1462
+ @override
1463
+ String get server_icon_lock => '잠금';
1464
+
1465
+ @override
1466
+ String get server_icon_key => '키 01';
1467
+
1468
+ @override
1469
+ String get server_icon_link => '링크 01';
1470
+
1471
+ @override
1472
+ String get server_icon_globe => '지구본';
1473
+
1474
+ @override
1475
+ String get server_icon_api => 'API';
1476
+
1477
+ @override
1478
+ String get server_icon_arrow_right => '화살표 오른쪽 01';
1479
+
1480
+ @override
1481
+ String get server_icon_check => '서클 확인';
1482
+
1483
+ @override
1484
+ String get server_icon_alert => '경고 서클';
1485
+
1486
+ @override
1487
+ String get server_icon_info => '정보 서클';
1488
+
1489
+ @override
1490
+ String get server_icon_zap => '잽';
1491
+
1492
+ @override
1493
+ String get server_icon_cloud_upload => '클라우드 업로드';
1494
+
1495
+ @override
1496
+ String get server_icon_cloud_download => '클라우드 다운로드';
1497
+
1498
+ @override
1499
+ String get server_icon_refresh => '새로고침';
1500
+
1501
+ @override
1502
+ String get server_icon_hard_drive => '하드 드라이브';
1503
+
1504
+ @override
1505
+ String get server_icon_drive => '드라이브';
1506
+
1507
+ @override
1508
+ String get personas_title => '페르소나';
1509
+
1510
+ @override
1511
+ String get persona_category_general => '일반';
1512
+
1513
+ @override
1514
+ String get persona_category_coding => '코딩';
1515
+
1516
+ @override
1517
+ String get persona_category_education => '교육';
1518
+
1519
+ @override
1520
+ String get persona_category_creative => '크리에이티브';
1521
+
1522
+ @override
1523
+ String get persona_builtin_section => '내장';
1524
+
1525
+ @override
1526
+ String get persona_my_section => '내 페르소나';
1527
+
1528
+ @override
1529
+ String get clone_edit => '복제 및 편집';
1530
+
1531
+ @override
1532
+ String get builtin_badge => '내장';
1533
+
1534
+ @override
1535
+ String get no_personas_found => '페르소나를 찾을 수 없습니다.';
1536
+
1537
+ @override
1538
+ String get no_personas_desc => 'AI 동작을 맞춤화하기 위한 첫 번째 페르소나를 만드세요.';
1539
+
1540
+ @override
1541
+ String get edit_persona => '페르소나 편집';
1542
+
1543
+ @override
1544
+ String get create_persona => '페르소나 생성';
1545
+
1546
+ @override
1547
+ String get create_persona_button => '만들기';
1548
+
1549
+ @override
1550
+ String get emoji_label => '이모티콘';
1551
+
1552
+ @override
1553
+ String get name_label => '이름';
1554
+
1555
+ @override
1556
+ String get my_persona_hint => '내 페르소나';
1557
+
1558
+ @override
1559
+ String get category_label => '카테고리';
1560
+
1561
+ @override
1562
+ String get description_optional => '설명(선택사항)';
1563
+
1564
+ @override
1565
+ String get description_hint => '이 인물이 하는 일은...';
1566
+
1567
+ @override
1568
+ String get system_prompt => '시스템 프롬프트';
1569
+
1570
+ @override
1571
+ String character_count_max(int currentLen) {
1572
+ return '$currentLen/4000';
1573
+ }
1574
+
1575
+ @override
1576
+ String get no_prompt_placeholder => '아직 프롬프트가 없습니다...';
1577
+
1578
+ @override
1579
+ String get prompt_hint => '당신은 도움이되는 조수입니다 ...';
1580
+
1581
+ @override
1582
+ String get prompt_required => '시스템 프롬프트가 필요합니다';
1583
+
1584
+ @override
1585
+ String get prompt_max_chars => '최대 4000자';
1586
+
1587
+ @override
1588
+ String get advanced_settings => '고급 설정';
1589
+
1590
+ @override
1591
+ String get temperature_label => '온도(0.0-2.0)';
1592
+
1593
+ @override
1594
+ String get top_p_label => '상위 P(0.0-1.0)';
1595
+
1596
+ @override
1597
+ String get temp_hint => '0.7';
1598
+
1599
+ @override
1600
+ String get top_p_hint => '0.9';
1601
+
1602
+ @override
1603
+ String get range_0_2 => '0.0-2.0';
1604
+
1605
+ @override
1606
+ String get range_0_1 => '0.0-1.0';
1607
+
1608
+ @override
1609
+ String get persona_updated => '페르소나가 업데이트되었습니다.';
1610
+
1611
+ @override
1612
+ String get persona_created => '페르소나가 생성되었습니다.';
1613
+
1614
+ @override
1615
+ String get tts_models_title => '텍스트 음성 변환 모델';
1616
+
1617
+ @override
1618
+ String get always_available => '항상 사용 가능';
1619
+
1620
+ @override
1621
+ String get tts_system_desc =>
1622
+ '기기에 내장된 텍스트 음성 변환 엔진을 사용합니다.\n다운로드가 필요하지 않습니다. 음성 선택에는 장치의 시스템 설정이 사용됩니다.';
1623
+
1624
+ @override
1625
+ String get downloading_status => '다운로드 중...';
1626
+
1627
+ @override
1628
+ String tts_kitten_desc(String size) {
1629
+ return '8가지 표정이 풍부한 음성을 갖춘 번개처럼 빠른 신경 TTS입니다.\n$size 다운로드가 필요합니다.';
1630
+ }
1631
+
1632
+ @override
1633
+ String tts_piper_desc(String size) {
1634
+ return '표현력이 풍부한 2개의 음성을 갖춘 빠른 오프라인 파이퍼 음성입니다.\n음성당 $size 다운로드가 필요합니다.';
1635
+ }
1636
+
1637
+ @override
1638
+ String engine_spec(String sizeMb, String ramMb, int voiceCount) {
1639
+ return '$sizeMb MB · $ramMb MB RAM · $voiceCount 음성';
1640
+ }
1641
+
1642
+ @override
1643
+ String get on_device_models_title => '온디바이스 모델';
1644
+
1645
+ @override
1646
+ String get settings_huggingface_token => '포옹 얼굴 토큰(선택 사항)';
1647
+
1648
+ @override
1649
+ String get settings_huggingface_token_desc =>
1650
+ '게이트 모델(예: Gemma)에만 필요합니다. Huggingface.co/settings/tokens에서 토큰을 받으세요.';
1651
+
1652
+ @override
1653
+ String get settings_huggingface_token_set => '토큰이 저장되었습니다';
1654
+
1655
+ @override
1656
+ String get settings_huggingface_token_cleared => '토큰이 삭제되었습니다';
1657
+
1658
+ @override
1659
+ String get model_requires_huggingface_token => '포옹하는 얼굴 토큰이 필요합니다.';
1660
+
1661
+ @override
1662
+ String get model_missing_huggingface_token =>
1663
+ '이 모델은 Hugging Face에 적용되었습니다. 설정 → 온디바이스 추론에서 토큰을 추가하여 다운로드하세요.';
1664
+
1665
+ @override
1666
+ String get set_huggingface_token => '토큰 설정';
1667
+
1668
+ @override
1669
+ String get clear_huggingface_token => '지우기';
1670
+
1671
+ @override
1672
+ String get edit_huggingface_token_dialog_title => '포옹 얼굴 액세스 토큰';
1673
+
1674
+ @override
1675
+ String get huggingface_token_dialog_hint => 'HF_…';
1676
+
1677
+ @override
1678
+ String get server_type_ollama_desc => '로컬 AI 엔진. API 키가 필요하지 않습니다.';
1679
+
1680
+ @override
1681
+ String get server_type_on_device_desc =>
1682
+ '휴대전화에서 실행됩니다. 일부 모델에는 Hugging Face 토큰이 필요합니다.';
1683
+
1684
+ @override
1685
+ String get server_type_lm_studio_desc => '로컬 API 서버. API 키가 필요하지 않습니다.';
1686
+
1687
+ @override
1688
+ String get available_models => '사용 가능한 모델';
1689
+
1690
+ @override
1691
+ String get device_memory => '장치 메모리';
1692
+
1693
+ @override
1694
+ String get ram_usage => 'RAM 사용량';
1695
+
1696
+ @override
1697
+ String get memory_healthy => '건강하다';
1698
+
1699
+ @override
1700
+ String get memory_critical => '심각';
1701
+
1702
+ @override
1703
+ String get memory_low => '낮음';
1704
+
1705
+ @override
1706
+ String ram_used(String percent) {
1707
+ return '$percent% 사용됨';
1708
+ }
1709
+
1710
+ @override
1711
+ String get available_ram => '사용 가능한 RAM';
1712
+
1713
+ @override
1714
+ String get total_capacity => '총 용량';
1715
+
1716
+ @override
1717
+ String get loaded_status => '로드됨';
1718
+
1719
+ @override
1720
+ String get inference_backend => '추론 백엔드';
1721
+
1722
+ @override
1723
+ String get backend_ios_notice => 'iOS에서는 CPU 백엔드만 사용할 수 있습니다.';
1724
+
1725
+ @override
1726
+ String get backend_cpu_desc => '모든 장치에서 작동합니다. 가장 호환됩니다.';
1727
+
1728
+ @override
1729
+ String get backend_gpu_desc => 'OpenCL 가속. 지원되는 장치에서는 더 빠릅니다.';
1730
+
1731
+ @override
1732
+ String get backend_npu_desc => '공급업체 NPU(Qualcomm/MediaTek). 가장 빠른 추론.';
1733
+
1734
+ @override
1735
+ String get select_model_title => '모델 선택';
1736
+
1737
+ @override
1738
+ String get refresh_models => '모델 새로 고침';
1739
+
1740
+ @override
1741
+ String get search_models_hint => '모델 검색...';
1742
+
1743
+ @override
1744
+ String get no_server_connected => '연결된 서버가 없습니다';
1745
+
1746
+ @override
1747
+ String get add_server_first => '사용 가능한 모델을 보려면 먼저 서버를 추가하세요.';
1748
+
1749
+ @override
1750
+ String get failed_load_models => '모델을 로드하지 못했습니다.';
1751
+
1752
+ @override
1753
+ String get no_models_available => '사용 가능한 모델이 없습니다.';
1754
+
1755
+ @override
1756
+ String no_models_match(String searchQuery) {
1757
+ return '\"$searchQuery\"와 일치하는 모델이 없습니다.';
1758
+ }
1759
+
1760
+ @override
1761
+ String model_load_failed(String error) {
1762
+ return '모델을 로드하지 못했습니다: $error';
1763
+ }
1764
+
1765
+ @override
1766
+ String model_unloaded_ollama(String name) {
1767
+ return '$name에 대한 언로드가 요청되었습니다. Ollama에 접근할 수 있으면 모델이 즉시 출시됩니다.';
1768
+ }
1769
+
1770
+ @override
1771
+ String model_unloaded_success(String name) {
1772
+ return '$name가 성공적으로 언로드되었습니다.';
1773
+ }
1774
+
1775
+ @override
1776
+ String model_unload_failed(String error) {
1777
+ return '모델 언로드 실패: $error';
1778
+ }
1779
+
1780
+ @override
1781
+ String get unload_from_server => '서버에서 언로드';
1782
+
1783
+ @override
1784
+ String context_chip(String ctx) {
1785
+ return '$ctx ctx';
1786
+ }
1787
+
1788
+ @override
1789
+ String get unload_all_models => '모두 언로드';
1790
+
1791
+ @override
1792
+ String loaded_models_count(int count) {
1793
+ return '$count 로드됨';
1794
+ }
1795
+
1796
+ @override
1797
+ String get all_models_unloaded => '모든 모델이 언로드됨';
1798
+
1799
+ @override
1800
+ String get branch_chat => '지점채팅';
1801
+
1802
+ @override
1803
+ String get branch_chat_desc => '이 메시지로 새 대화를 시작하세요';
1804
+
1805
+ @override
1806
+ String get edit_assistant_message_desc => '어시스턴트 응답 텍스트를 편집합니다.';
1807
+
1808
+ @override
1809
+ String switch_to_model(String modelName, Object model) {
1810
+ return '$modelName로 전환';
1811
+ }
1812
+
1813
+ @override
1814
+ String download_notification_title(String modelName) {
1815
+ return '$modelName 다운로드 중...';
1816
+ }
1817
+
1818
+ @override
1819
+ String get download_complete_notification => '다운로드가 완료되었습니다!';
1820
+
1821
+ @override
1822
+ String download_complete_body(String modelName) {
1823
+ return '$modelName가 성공적으로 다운로드되었습니다.';
1824
+ }
1825
+
1826
+ @override
1827
+ String download_failed_notification(String error) {
1828
+ return '다운로드 실패: $error';
1829
+ }
1830
+
1831
+ @override
1832
+ String download_failed_body(String modelName) {
1833
+ return '$modelName를 다운로드하지 못했습니다.';
1834
+ }
1835
+
1836
+ @override
1837
+ String get engine_name_system => '시스템 TTS';
1838
+
1839
+ @override
1840
+ String get engine_tagline_system => '내장 장치 엔진';
1841
+
1842
+ @override
1843
+ String get engine_name_kitten => '새끼 고양이 TTS';
1844
+
1845
+ @override
1846
+ String get engine_tagline_kitten => '고속 신경 TTS';
1847
+
1848
+ @override
1849
+ String get engine_name_sherpa => '셰르파 ONNX VITS';
1850
+
1851
+ @override
1852
+ String get engine_tagline_sherpa => '오프라인 파이퍼 목소리';
1853
+
1854
+ @override
1855
+ String get voice_jasper => '재스퍼';
1856
+
1857
+ @override
1858
+ String get voice_bella => '벨라';
1859
+
1860
+ @override
1861
+ String get voice_bruno => '브루노';
1862
+
1863
+ @override
1864
+ String get voice_luna => '루나';
1865
+
1866
+ @override
1867
+ String get voice_hugo => '휴고';
1868
+
1869
+ @override
1870
+ String get voice_rosie => '로지';
1871
+
1872
+ @override
1873
+ String get voice_leo => '레오';
1874
+
1875
+ @override
1876
+ String get voice_kiki => '키키';
1877
+
1878
+ @override
1879
+ String get voice_lessac => '레삭(미국)';
1880
+
1881
+ @override
1882
+ String get voice_ryan => '라이언(미국)';
1883
+
1884
+ @override
1885
+ String get model_qwen_3 => '퀀 3 0.6B';
1886
+
1887
+ @override
1888
+ String get model_qwen_3_desc => '가장 작은 범용 채팅 모델. 빠른 응답, 낮은 메모리 사용량.';
1889
+
1890
+ @override
1891
+ String get model_license_apache => '아파치-2.0';
1892
+
1893
+ @override
1894
+ String get model_qwen_25 => 'Qwen 2.5 1.5B 지시';
1895
+
1896
+ @override
1897
+ String get model_qwen_25_desc => '균형 잡힌 품질과 크기. 일반적인 대화에 좋습니다.';
1898
+
1899
+ @override
1900
+ String get model_deepseek => 'DeepSeek R1 증류 Qwen 1.5B';
1901
+
1902
+ @override
1903
+ String get model_deepseek_desc => '추론 및 사고 사슬 모델. 논리적 작업에 가장 적합합니다.';
1904
+
1905
+ @override
1906
+ String get model_license_mit => 'MIT';
1907
+
1908
+ @override
1909
+ String get model_gemma => '젬마 4 E2B 교육';
1910
+
1911
+ @override
1912
+ String get model_gemma_desc => '구글 플래그십 모델. 최고 품질, 더 많은 RAM이 필요합니다.';
1913
+
1914
+ @override
1915
+ String export_header(String date) {
1916
+ return '*LocalMind에서 내보내기 — $date*';
1917
+ }
1918
+
1919
+ @override
1920
+ String get export_role_user => '## 👤 사용자';
1921
+
1922
+ @override
1923
+ String get export_role_assistant => '## 🤖 어시스턴트';
1924
+
1925
+ @override
1926
+ String get export_role_system => '## ⚙️ 시스템';
1927
+
1928
+ @override
1929
+ String get export_role_tool => '## 🔧 도구';
1930
+
1931
+ @override
1932
+ String get export_text_user => '[사용자]';
1933
+
1934
+ @override
1935
+ String get export_text_assistant => '[어시스턴트]';
1936
+
1937
+ @override
1938
+ String get export_text_system => '[시스템]';
1939
+
1940
+ @override
1941
+ String get export_text_tool => '[도구]';
1942
+
1943
+ @override
1944
+ String get export_label_user => '사용자';
1945
+
1946
+ @override
1947
+ String get export_label_assistant => '어시스턴트';
1948
+
1949
+ @override
1950
+ String get export_label_system => '시스템';
1951
+
1952
+ @override
1953
+ String get export_label_tool => '도구';
1954
+
1955
+ @override
1956
+ String get select_model_hint => '채팅을 시작하려면 모델을 선택하세요';
1957
+
1958
+ @override
1959
+ String get test_notification_title => '테스트 알림';
1960
+
1961
+ @override
1962
+ String get test_notification_body => '모델 다운로드 진행에 대한 테스트 알림입니다.';
1963
+
1964
+ @override
1965
+ String get tts_supports_background => '네이티브 오디오로 백그라운드 재생 지원';
1966
+
1967
+ @override
1968
+ String get tts_other_services_background_note =>
1969
+ '참고: 다른 TTS 서비스는 기본 오디오로 백그라운드 재생을 지원합니다.';
1970
+
1971
+ @override
1972
+ String get gguf_imported_models_title => '가져온 GGUF 모델';
1973
+
1974
+ @override
1975
+ String get gguf_imported_models_empty_subtitle =>
1976
+ '장치에서 GGUF를 가져오거나 Hugging Face에서 추가하세요. 가져온 모델은 llama.cpp를 사용하여 로컬로 실행됩니다.';
1977
+
1978
+ @override
1979
+ String get gguf_imported_models_ready => '로컬 추론을 위해 준비된 가져온 모델.';
1980
+
1981
+ @override
1982
+ String get gguf_curated_models_subtitle =>
1983
+ 'LocalMind 내에서 다운로드하고 관리할 수 있는 엄선된 온디바이스 모델.';
1984
+
1985
+ @override
1986
+ String get gguf_only_supported => '이 가져오기에는 GGUF 모델만 지원됩니다.';
1987
+
1988
+ @override
1989
+ String get gguf_imported_from_local_file => '로컬 파일에서 가져왔습니다.';
1990
+
1991
+ @override
1992
+ String get gguf_import_failed => 'GGUF 모델을 가져오지 못했습니다.';
1993
+
1994
+ @override
1995
+ String get gguf_imported_from_huggingface => 'Hugging Face에서 가져왔습니다.';
1996
+
1997
+ @override
1998
+ String get gguf_import_canceled => 'GGUF 가져오기가 취소되었습니다.';
1999
+
2000
+ @override
2001
+ String get gguf_enter_huggingface_url => '포옹 얼굴 GGUF URL을 입력하세요.';
2002
+
2003
+ @override
2004
+ String get gguf_only_official_huggingface_urls =>
2005
+ '공식 Hugging Face GGUF URL만 지원됩니다.';
2006
+
2007
+ @override
2008
+ String get gguf_use_https_url => 'GGUF 가져오기에는 HTTPS 허깅 페이스 URL을 사용하세요.';
2009
+
2010
+ @override
2011
+ String get gguf_url_must_point_to_file =>
2012
+ 'Hugging Face URL은 .gguf 파일을 직접 가리켜야 합니다.';
2013
+
2014
+ @override
2015
+ String get gguf_unable_to_detect_file_name => 'GGUF 파일 이름을 확인할 수 없습니다.';
2016
+
2017
+ @override
2018
+ String get gguf_download_empty => '다운로드한 GGUF 파일이 비어 있거나 누락되었습니다.';
2019
+
2020
+ @override
2021
+ String get gguf_selected_file_missing => '선택한 모델 파일이 존재하지 않습니다.';
2022
+
2023
+ @override
2024
+ String get gguf_import_action => 'GGUF 가져오기';
2025
+
2026
+ @override
2027
+ String get gguf_overview_title => '나만의 GGUF 모델 가져오기';
2028
+
2029
+ @override
2030
+ String get gguf_overview_subtitle =>
2031
+ '로컬 저장소에서 .gguf를 가져오거나 Hugging Face에서 바로 다운로드하세요. 가져온 모델은 이 장치에 유지되며 llama.cpp로 로드됩니다.';
2032
+
2033
+ @override
2034
+ String get gguf_imported_count_label => '수입됨';
2035
+
2036
+ @override
2037
+ String get gguf_local_files_label => '로컬 파일';
2038
+
2039
+ @override
2040
+ String get gguf_huggingface_label => '포옹하는 얼굴';
2041
+
2042
+ @override
2043
+ String get gguf_import_local_title => '로컬 GGUF 가져오기';
2044
+
2045
+ @override
2046
+ String get gguf_import_local_subtitle => '이 장치에서 .gguf 파일을 복사하세요.';
2047
+
2048
+ @override
2049
+ String get gguf_import_huggingface_title => '포옹 얼굴에서 가져오기';
2050
+
2051
+ @override
2052
+ String get gguf_import_huggingface_subtitle => 'GGUF URL 또는 저장소 경로 붙여넣기';
2053
+
2054
+ @override
2055
+ String get gguf_no_imported_title => '아직 가져온 GGUF 모델이 없습니다.';
2056
+
2057
+ @override
2058
+ String get gguf_no_imported_subtitle =>
2059
+ '장치 저장소에서 자체 GGUF 파일을 가져오거나 Hugging Face URL 또는 .gguf 파일을 가리키는 저장소 경로를 붙여넣을 수 있습니다.';
2060
+
2061
+ @override
2062
+ String get gguf_import_huggingface_dialog_title => 'Hugging Face에서 GGUF 가져오기';
2063
+
2064
+ @override
2065
+ String get gguf_import_huggingface_dialog_subtitle =>
2066
+ '직접 GGUF URL이나 \'owner/repo/blob/main/model.gguf\'와 같은 Hugging Face 저장소 경로를 붙여넣으세요. Blob 링크는 자동으로 변환됩니다.';
2067
+
2068
+ @override
2069
+ String get gguf_url_or_repo_path => 'GGUF URL 또는 저장소 경로';
2070
+
2071
+ @override
2072
+ String get paste => '붙여넣기';
2073
+
2074
+ @override
2075
+ String get gguf_browse => 'GGUF 찾아보기';
2076
+
2077
+ @override
2078
+ String get gguf_huggingface_token_ready => '허깅 페이스 토큰 준비 완료';
2079
+
2080
+ @override
2081
+ String get gguf_huggingface_token_optional => '토큰은 선택사항이지만 권장됨';
2082
+
2083
+ @override
2084
+ String get gguf_huggingface_token_ready_desc =>
2085
+ '저장된 토큰은 게이트 저장소 또는 개인 저장소에 자동으로 사용됩니다.';
2086
+
2087
+ @override
2088
+ String get gguf_huggingface_token_optional_desc =>
2089
+ '포옹하는 얼굴 토큰이 필요합니다. 이 GGUF가 제한되거나 비공개인 경우 설정에서 하나를 추가하세요.';
2090
+
2091
+ @override
2092
+ String get gguf_downloading => 'GGUF 다운로드 중';
2093
+
2094
+ @override
2095
+ String get gguf_preparing => '준비 중';
2096
+
2097
+ @override
2098
+ String get gguf_preparing_download => '다운로드 준비 중...';
2099
+
2100
+ @override
2101
+ String get gguf_cancel_import => '가져오기 취소';
2102
+
2103
+ @override
2104
+ String get clipboard_empty => '클립보드가 비어 있습니다.';
2105
+
2106
+ @override
2107
+ String get could_not_open_huggingface => '포옹 얼굴을 열 수 없습니다.';
2108
+
2109
+ @override
2110
+ String get gguf_paste_url_error => 'Hugging Face GGUF URL 또는 저장소 경로를 붙여넣으세요.';
2111
+
2112
+ @override
2113
+ String get gguf_blob_link => '블롭 링크';
2114
+
2115
+ @override
2116
+ String get gguf_repository_label => '저장소';
2117
+
2118
+ @override
2119
+ String get gguf_detected_path_label => '감지된 경로';
2120
+
2121
+ @override
2122
+ String get gguf_imported_section_label => '가져온 GGUF';
2123
+
2124
+ @override
2125
+ String get gguf_already_available => '이 기기에서는 이미 사용 가능합니다.';
2126
+
2127
+ @override
2128
+ String get gguf_curated_models_short => '선별된 온디바이스 모델';
2129
+
2130
+ @override
2131
+ String get execute_tool_title => '도구 실행';
2132
+
2133
+ @override
2134
+ String get execute_tool_request_desc => '모델은 다음 도구 실행을 요청합니다.';
2135
+
2136
+ @override
2137
+ String get reject => '거부';
2138
+
2139
+ @override
2140
+ String get approve => '승인하다';
2141
+
2142
+ @override
2143
+ String get server_type_help => '연결 세부정보를 입력하기 전에 공급자를 선택하세요.';
2144
+
2145
+ @override
2146
+ String get server_identity_title => '아이덴티티';
2147
+
2148
+ @override
2149
+ String get server_identity_desc => '이 서버의 이름을 지정하고 목록에 표시되는 방식을 선택합니다.';
2150
+
2151
+ @override
2152
+ String get server_connection_title => '연결';
2153
+
2154
+ @override
2155
+ String get server_connection_desc => '서버에서 노출된 주소와 포트를 사용하세요.';
2156
+
2157
+ @override
2158
+ String get server_authentication_title => '인증';
2159
+
2160
+ @override
2161
+ String get server_authentication_required_desc =>
2162
+ 'OpenRouter는 테스트하기 전에 API 키가 필요합니다.';
2163
+
2164
+ @override
2165
+ String get server_authentication_optional_desc =>
2166
+ '이 서버에 API 키가 필요하지 않은 경우 API 키를 비워 두세요.';
2167
+
2168
+ @override
2169
+ String get mcp_tools_title => 'MCP 도구';
2170
+
2171
+ @override
2172
+ String get available_tools => '사용 가능한 도구';
2173
+
2174
+ @override
2175
+ String get unable_load_tools => '도구를 로드할 수 없습니다.';
2176
+
2177
+ @override
2178
+ String get no_tools_registered => '등록된 도구가 없습니다.';
2179
+
2180
+ @override
2181
+ String get no_tools_registered_desc =>
2182
+ '예제 MCP 서버를 활성화하거나 채팅 설정에서 MCP 통합을 추가하세요.';
2183
+
2184
+ @override
2185
+ String get example_mcp_server_title => 'MCP 서버 예';
2186
+
2187
+ @override
2188
+ String get example_mcp_server_desc =>
2189
+ '외부 서버에서 사용하는 것과 동일한 MCP 도구 공급자를 통해 example.echo 및 example.word_count를 등록합니다.';
2190
+
2191
+ @override
2192
+ String get disable_example_server => '예제 서버 비활성화';
2193
+
2194
+ @override
2195
+ String get enable_example_server => '예제 서버 활성화';
2196
+
2197
+ @override
2198
+ String get built_in_label => '내장';
2199
+
2200
+ @override
2201
+ String get highlights_label => '하이라이트';
2202
+
2203
+ @override
2204
+ String get built_with_label => '다음으로 제작됨';
2205
+
2206
+ @override
2207
+ String get local_label => '지역';
2208
+
2209
+ @override
2210
+ String get gguf_format_label => 'GGUF';
2211
+
2212
+ @override
2213
+ String get tool_status_requested => '요청됨';
2214
+
2215
+ @override
2216
+ String get tool_status_approved => '승인됨';
2217
+
2218
+ @override
2219
+ String get tool_status_rejected => '거부됨';
2220
+
2221
+ @override
2222
+ String get tool_status_running => '달리기';
2223
+
2224
+ @override
2225
+ String get tool_status_done => '완료';
2226
+
2227
+ @override
2228
+ String get tool_status_failed => '실패';
2229
+
2230
+ @override
2231
+ String get model_favorite_toggle => '즐겨찾기 전환';
2232
+
2233
+ @override
2234
+ String get model_set_default => '기본 모델로 설정';
2235
+
2236
+ @override
2237
+ String get model_clear_default => '기본 모델로 제거';
2238
+
2239
+ @override
2240
+ String get model_default_badge => '기본값';
2241
+
2242
+ @override
2243
+ String get model_note_label => '참고';
2244
+
2245
+ @override
2246
+ String get model_note_hint => '이 모델에 대한 메모를 추가하세요…';
2247
+
2248
+ @override
2249
+ String get unload_models_before_load => '새 모델을 로드하기 전에 모든 모델을 언로드하세요.';
2250
+
2251
+ @override
2252
+ String get temp_chat_keyboard_incognito => '임시 채팅의 시크릿 키보드';
2253
+
2254
+ @override
2255
+ String get temp_chat_keyboard_incognito_desc =>
2256
+ '임시 채팅(예: SwiftKey 시크릿 모드)에서 키보드 학습 및 제안을 비활성화합니다.';
2257
+
2258
+ @override
2259
+ String get resume_last_chat => '실행 시 마지막 채팅 재개';
2260
+
2261
+ @override
2262
+ String get resume_last_chat_desc => '앱을 다시 열 때 마지막으로 열린 대화를 복원하세요.';
2263
+
2264
+ @override
2265
+ String get export_all_data => '모든 데이터 내보내기';
2266
+
2267
+ @override
2268
+ String get import_all_data => '모든 데이터 가져오기';
2269
+
2270
+ @override
2271
+ String get export_data_success => '백업을 성공적으로 내보냈습니다.';
2272
+
2273
+ @override
2274
+ String get import_data_success => '백업을 성공적으로 가져왔습니다.';
2275
+
2276
+ @override
2277
+ String import_data_failed(String error) {
2278
+ return '백업을 가져오지 못했습니다: $error';
2279
+ }
2280
+
2281
+ @override
2282
+ String get import_data_confirm =>
2283
+ '이 백업에서 대화와 맞춤 캐릭터를 가져오시겠습니까? 동일한 ID를 가진 기존 항목이 업데이트됩니다.';
2284
+
2285
+ @override
2286
+ String get import_settings_confirm => '현재 설정을 가져온 백업으로 바꾸시겠습니까?';
2287
+
2288
+ @override
2289
+ String get export_conversations => '대화 내보내기';
2290
+
2291
+ @override
2292
+ String get import_conversations => '대화 가져오기';
2293
+
2294
+ @override
2295
+ String get export_personas => '페르소나 내보내기';
2296
+
2297
+ @override
2298
+ String get import_personas => '페르소나 가져오기';
2299
+
2300
+ @override
2301
+ String get export_settings => '설정 내보내기';
2302
+
2303
+ @override
2304
+ String get import_settings => '가져오기 설정';
2305
+
2306
+ @override
2307
+ String get export_all_zip => '모두 내보내기(ZIP)';
2308
+
2309
+ @override
2310
+ String get import_all_zip => '모두 가져오기(ZIP)';
2311
+
2312
+ @override
2313
+ String get duplicate_chat => '중복된 채팅';
2314
+
2315
+ @override
2316
+ String get duplicate_chat_success => '채팅이 중복되었습니다.';
2317
+
2318
+ @override
2319
+ String get move_to_folder => '폴더로 이동';
2320
+
2321
+ @override
2322
+ String get remove_from_folder => '폴더에서 제거';
2323
+
2324
+ @override
2325
+ String get create_folder => '폴더 생성';
2326
+
2327
+ @override
2328
+ String get new_folder => '새 폴더';
2329
+
2330
+ @override
2331
+ String get folder_name_hint => '폴더 이름';
2332
+
2333
+ @override
2334
+ String get all_chats => '모두';
2335
+
2336
+ @override
2337
+ String get unfiled_chats => '미제출';
2338
+
2339
+ @override
2340
+ String get create => '만들기';
2341
+
2342
+ @override
2343
+ String get server_path_prefix_label => 'API 경로 접두사';
2344
+
2345
+ @override
2346
+ String get server_path_prefix_hint => '/당신의 비밀 토큰';
2347
+
2348
+ @override
2349
+ String get search_message_contents => '메시지 내용 검색';
2350
+
2351
+ @override
2352
+ String get message_search_results => '메시지 일치';
2353
+
2354
+ @override
2355
+ String get saved_messages_title => '저장된 메시지';
2356
+
2357
+ @override
2358
+ String get nav_saved_messages => '저장된 메시지';
2359
+
2360
+ @override
2361
+ String get saved_messages_empty =>
2362
+ '아직 저장된 메시지가 없습니다. 옵션 메뉴에서 메시지를 북마크에 추가하세요.';
2363
+
2364
+ @override
2365
+ String get save_message => '메시지 저장';
2366
+
2367
+ @override
2368
+ String get message_saved => '메시지가 저장되었습니다';
2369
+
2370
+ @override
2371
+ String token_count(int count) {
2372
+ return '$count 토큰';
2373
+ }
2374
+
2375
+ @override
2376
+ String estimated_token_count(int count) {
2377
+ return '~$count 토큰(추정)';
2378
+ }
2379
+
2380
+ @override
2381
+ String get test_tts_section_title => '테스트 음성';
2382
+
2383
+ @override
2384
+ String get test_tts_hint => '현재 TTS 엔진을 들으려면 텍스트를 입력하세요…';
2385
+
2386
+ @override
2387
+ String get test_speak_button => '말하기';
2388
+
2389
+ @override
2390
+ String get scroll_to_bottom => '맨 아래로 스크롤';
2391
+
2392
+ @override
2393
+ String get generate_ai_response => 'AI 응답 생성';
2394
+
2395
+ @override
2396
+ String get no_response => '응답 없음';
2397
+
2398
+ @override
2399
+ String get export => '수출';
2400
+
2401
+ @override
2402
+ String get import => '가져오기';
2403
+
2404
+ @override
2405
+ String get conversations_label => '대화';
2406
+
2407
+ @override
2408
+ String get personas_label => '페르소나';
2409
+
2410
+ @override
2411
+ String get settings_label => '설정';
2412
+
2413
+ @override
2414
+ String get export_conversation => '대화 내보내기';
2415
+
2416
+ @override
2417
+ String get tts_process_markdown => '음성에 대한 마크다운 처리';
2418
+
2419
+ @override
2420
+ String get tts_process_markdown_desc => '소리내어 읽기 전에 **굵게** 같은 서식을 제거하세요.';
2421
+
2422
+ @override
2423
+ String get tts_skip_seconds => '건너뛰기 간격';
2424
+
2425
+ @override
2426
+ String get tts_skip_seconds_desc => '재생 중 앞으로 및 되감기 점프 크기';
2427
+
2428
+ @override
2429
+ String tts_skip_seconds_value(int seconds) {
2430
+ return '$seconds';
2431
+ }
2432
+
2433
+ @override
2434
+ String get preview_system_prompts => '미리보기 시스템 프롬프트';
2435
+
2436
+ @override
2437
+ String get welcome_message_1 => '오늘은 무엇을 도와드릴까요?';
2438
+
2439
+ @override
2440
+ String get welcome_message_2 => '무엇이든 물어보세요. 귀하가 준비되면 저는 준비되어 있습니다.';
2441
+
2442
+ @override
2443
+ String get welcome_message_3 => '귀하의 데이터는 로컬에서 처리되며 절대로 귀하의 장치를 떠나지 않습니다.';
2444
+
2445
+ @override
2446
+ String get welcome_message_4 => '아이디어가 필요하신가요? 빠른 프롬프트 중 하나를 시도해 보세요.';
2447
+
2448
+ @override
2449
+ String get temporary_chat => '임시 채팅';
2450
+
2451
+ @override
2452
+ String get temporary_chat_desc => '채팅은 기록에 저장되지 않습니다.';
2453
+
2454
+ @override
2455
+ String get temporary_chat_banner => '임시 채팅 - 기록에 저장되지 않음';
2456
+
2457
+ @override
2458
+ String get temporary_chat_save_warning_title => '임시 채팅에 메시지를 저장하시겠습니까?';
2459
+
2460
+ @override
2461
+ String get temporary_chat_save_warning_body =>
2462
+ '이 채팅은 일시적이며 기록에서 숨겨집니다. 저장된 메시지는 저장된 메시지에 계속 표시됩니다.';
2463
+
2464
+ @override
2465
+ String get save_to_history => '기록에 저장';
2466
+
2467
+ @override
2468
+ String get share_conversation => '대화 공유';
2469
+
2470
+ @override
2471
+ String get download_tts_audio => '오디오 다운로드';
2472
+
2473
+ @override
2474
+ String get tts_download_unavailable => '다운로드는 Piper 및 Kitten TTS에서만 가능합니다.';
2475
+
2476
+ @override
2477
+ String get tts_download_no_audio => '아직 다운로드할 수 있는 오디오가 없습니다.';
2478
+
2479
+ @override
2480
+ String get tts_download_success => '오디오가 저장되었습니다';
2481
+
2482
+ @override
2483
+ String get return_to_chat => '채팅으로 돌아가기';
2484
+
2485
+ @override
2486
+ String get return_to_temp_chat => '임시 채팅으로 돌아가기';
2487
+
2488
+ @override
2489
+ String get insert_saved_message => '저장된 메시지 삽입';
2490
+
2491
+ @override
2492
+ String get insert_saved_message_desc => '입력에 추가할 저장된 메시지를 선택하세요.';
2493
+
2494
+ @override
2495
+ String get model_info => '모델 정보';
2496
+
2497
+ @override
2498
+ String get model_name => '모델명';
2499
+
2500
+ @override
2501
+ String get model_identifier => '식별자';
2502
+
2503
+ @override
2504
+ String get model_capabilities => '기능';
2505
+
2506
+ @override
2507
+ String get model_api_pricing => 'API 가격(100만 개 토큰당)';
2508
+
2509
+ @override
2510
+ String get not_available => '사용할 수 없음';
2511
+
2512
+ @override
2513
+ String get save_message_folders => '메시지 저장';
2514
+
2515
+ @override
2516
+ String get remove_from_saved => '저장된 항목에서 삭제';
2517
+
2518
+ @override
2519
+ String get message_already_saved => '저장됨';
2520
+
2521
+ @override
2522
+ String get stream_ttft => '첫 번째 토큰까지의 시간';
2523
+
2524
+ @override
2525
+ String get stream_tokens_per_sec => '초당 토큰';
2526
+
2527
+ @override
2528
+ String get stream_stop_reason => '중지 이유';
2529
+
2530
+ @override
2531
+ String get stream_input_tokens => '입력 토큰';
2532
+
2533
+ @override
2534
+ String get stream_output_tokens => '출력 토큰';
2535
+
2536
+ @override
2537
+ String get stream_generation_time => '생성 시간';
2538
+
2539
+ @override
2540
+ String get attach_image => '사진';
2541
+
2542
+ @override
2543
+ String get attach_text_document => '문서';
2544
+
2545
+ @override
2546
+ String get attach_shortcut_images => '사진';
2547
+
2548
+ @override
2549
+ String get attach_shortcut_documents => '파일';
2550
+
2551
+ @override
2552
+ String get attach_shortcut_saved => '저장됨';
2553
+
2554
+ @override
2555
+ String get add_attachment => '첨부파일 추가';
2556
+
2557
+ @override
2558
+ String get add_to_chat => '채팅에 추가';
2559
+
2560
+ @override
2561
+ String get choose_what_to_attach => '무엇을 추가하고 싶으신가요?';
2562
+
2563
+ @override
2564
+ String get choose_attachment_subtitle => '메시지에 첨부할 소스를 선택하세요.';
2565
+
2566
+ @override
2567
+ String get photo_permission_denied => '이미지를 첨부하려면 사진 접근권한이 필요합니다';
2568
+
2569
+ @override
2570
+ String get select_model_prompt => '모델 선택';
2571
+
2572
+ @override
2573
+ String get characters_label => '캐릭터';
2574
+
2575
+ @override
2576
+ String get exit_temporary_chat_title => '임시 채팅을 종료하시겠습니까?';
2577
+
2578
+ @override
2579
+ String get exit_temporary_chat_body => '현재 임시 채팅이 삭제되고 새 채팅으로 돌아갑니다.';
2580
+
2581
+ @override
2582
+ String get saved_message_temp_snap_unavailable =>
2583
+ '이 메시지는 임시 채팅에서 저장되었으므로 원래 대화에서는 열 수 없습니다.';
2584
+
2585
+ @override
2586
+ String get filter_title => '필터';
2587
+
2588
+ @override
2589
+ String get filter_pinned => '고정됨';
2590
+
2591
+ @override
2592
+ String get filter_archived => '보관됨';
2593
+
2594
+ @override
2595
+ String get filter_temp_chats => '임시 채팅';
2596
+
2597
+ @override
2598
+ String get filter_user_messages => '사용자 메시지';
2599
+
2600
+ @override
2601
+ String get filter_assistant_messages => '어시스턴트 메시지';
2602
+
2603
+ @override
2604
+ String get archive_chat => '아카이브';
2605
+
2606
+ @override
2607
+ String get unarchive_chat => '보관 취소';
2608
+
2609
+ @override
2610
+ String conversation_message_count(int count) {
2611
+ return '$count개의 메시지';
2612
+ }
2613
+
2614
+ @override
2615
+ String conversation_character_count(int count) {
2616
+ return '$count 문자';
2617
+ }
2618
+
2619
+ @override
2620
+ String get generate_title_with_ai => 'AI로 생성';
2621
+
2622
+ @override
2623
+ String get generating_title => '생성 중...';
2624
+
2625
+ @override
2626
+ String get generate_title_failed => '제목을 생성할 수 없습니다.';
2627
+
2628
+ @override
2629
+ String get lm_studio_model_browser_title => '모델 찾아보기';
2630
+
2631
+ @override
2632
+ String get lm_studio_model_search_hint => '이름이나 작성자로 모델 검색…';
2633
+
2634
+ @override
2635
+ String get lm_studio_staff_picks => '직원 추천';
2636
+
2637
+ @override
2638
+ String get lm_studio_community_models => '커뮤니티 모델';
2639
+
2640
+ @override
2641
+ String get lm_studio_no_models => '모델을 찾을 수 없습니다.';
2642
+
2643
+ @override
2644
+ String lm_studio_models_count(int count) {
2645
+ return '$count 모델';
2646
+ }
2647
+
2648
+ @override
2649
+ String get lm_studio_browse_models => '탐색 및 다운로드';
2650
+
2651
+ @override
2652
+ String get lm_studio_model_search => 'LMS 모델 검색';
2653
+
2654
+ @override
2655
+ String get lm_studio_downloads_title => '다운로드';
2656
+
2657
+ @override
2658
+ String get lm_studio_choose_quant => '다운로드 옵션을 선택하세요';
2659
+
2660
+ @override
2661
+ String get lm_studio_use_default_quant => '기본값 사용';
2662
+
2663
+ @override
2664
+ String get lm_studio_recommended => '추천';
2665
+
2666
+ @override
2667
+ String get lm_studio_clear_downloads => '클리어 완료';
2668
+
2669
+ @override
2670
+ String get lm_studio_no_downloads => '아직 다운로드가 없습니다.';
2671
+
2672
+ @override
2673
+ String get lm_studio_downloads_disclaimer =>
2674
+ '다운로드는 LM Studio 호스트에서 실행됩니다. 모델 일시 중지, 중지 및 삭제는 이 앱이 아닌 해당 컴퓨터에서 수행되어야 합니다.';
2675
+
2676
+ @override
2677
+ String get lm_studio_staff_pick => '스탭픽';
2678
+
2679
+ @override
2680
+ String get lm_studio_params => '매개변수';
2681
+
2682
+ @override
2683
+ String get lm_studio_arch => '아치';
2684
+
2685
+ @override
2686
+ String get lm_studio_domain => '도메인';
2687
+
2688
+ @override
2689
+ String get lm_studio_format => '형식';
2690
+
2691
+ @override
2692
+ String get lm_studio_vision => '비전';
2693
+
2694
+ @override
2695
+ String get lm_studio_tool_use => '도구 사용';
2696
+
2697
+ @override
2698
+ String get lm_studio_reasoning => '추론';
2699
+
2700
+ @override
2701
+ String get openrouter_pricing_free => '무료';
2702
+
2703
+ @override
2704
+ String openrouter_pricing_tooltip(String input, String output) {
2705
+ return '입력 $input / 1M 토큰당 $output 출력';
2706
+ }
2707
+
2708
+ @override
2709
+ String get lm_studio_download_options => '다운로드 옵션';
2710
+
2711
+ @override
2712
+ String get lm_studio_download => '다운로드';
2713
+
2714
+ @override
2715
+ String lm_studio_download_size(String size) {
2716
+ return '$size 다운로드';
2717
+ }
2718
+
2719
+ @override
2720
+ String lm_studio_downloading_percent(int percent) {
2721
+ return '$percent% 다운로드 중';
2722
+ }
2723
+
2724
+ @override
2725
+ String get lm_studio_readme_unavailable => '이 모델에는 README가 제공되지 않습니다.';
2726
+
2727
+ @override
2728
+ String get lm_studio_full_gpu_offload => '전체 GPU 오프로드 가능';
2729
+
2730
+ @override
2731
+ String get lm_studio_partial_gpu_offload => '부분 GPU 오프로드 가능';
2732
+
2733
+ @override
2734
+ String get lm_studio_likely_too_large => '너무 클 것 같음';
2735
+
2736
+ @override
2737
+ String get lm_studio_available_ram_gb => '사용 가능한 RAM(GB, 옵션)';
2738
+
2739
+ @override
2740
+ String get lm_studio_available_vram_gb => '사용 가능한 VRAM(GB, 옵션)';
2741
+
2742
+ @override
2743
+ String get lm_studio_memory_settings_title => '추천을 위한 메모리';
2744
+
2745
+ @override
2746
+ String get lm_studio_memory_settings_desc =>
2747
+ '모델 브라우저에서 모델이 귀하의 컴퓨터에 적합한지 여부를 추정하는 데 사용됩니다.';
2748
+
2749
+ @override
2750
+ String get think_button_label => '생각하다';
2751
+
2752
+ @override
2753
+ String get thinking_mode_title => '사고 모드';
2754
+
2755
+ @override
2756
+ String get reasoning_effort_low => '낮음';
2757
+
2758
+ @override
2759
+ String get reasoning_effort_medium => '중간';
2760
+
2761
+ @override
2762
+ String get reasoning_effort_high => '높음';
2763
+
2764
+ @override
2765
+ String get reasoning_effort_minimal => '최소';
2766
+
2767
+ @override
2768
+ String get reasoning_effort_xhigh => '엑스하이';
2769
+
2770
+ @override
2771
+ String get reasoning_effort_max => '맥스';
2772
+
2773
+ @override
2774
+ String get reasoning_effort_off => '끄기';
2775
+
2776
+ @override
2777
+ String get could_not_read_file => '파일을 읽을 수 없습니다.';
2778
+
2779
+ @override
2780
+ String get server_offline => '서버 오프라인';
2781
+
2782
+ @override
2783
+ String get could_not_establish_connection =>
2784
+ '서버에 연결을 설정할 수 없습니다. 서버가 실행 중인지, 호스트/포트 설정이 올바른지 확인하세요.';
2785
+
2786
+ @override
2787
+ String get retry_connection => '연결 재시도';
2788
+
2789
+ @override
2790
+ String get tokens_label => '토큰';
2791
+
2792
+ @override
2793
+ String get enter_context_length => '컨텍스트 길이를 입력하세요...';
2794
+
2795
+ @override
2796
+ String get openrouter_disclosure =>
2797
+ '이 공급자를 연결하면 귀하의 채팅 메시지와 입력 내용이 해당 공급자의 서버로 전송됩니다. LocalMind는 대화를 추적하거나 저장하지 않습니다.';
2798
+
2799
+ @override
2800
+ String get welcome_message_cloud => '귀하의 메시지는 연결된 공급자에게 전송됩니다.';
2801
+
2802
+ @override
2803
+ String get privacy_policy => '개인 정보 보호 정책';
2804
+
2805
+ @override
2806
+ String get cloud_sync => 'S3 클라우드 동기화';
2807
+
2808
+ @override
2809
+ String get cloud_sync_description => '자체 S3 호환 서버에 대한 엔드투엔드 암호화 동기화';
2810
+
2811
+ @override
2812
+ String get cloud_sync_endpoint => '엔드포인트 URL';
2813
+
2814
+ @override
2815
+ String get cloud_sync_bucket => '버킷';
2816
+
2817
+ @override
2818
+ String get cloud_sync_region => '지역';
2819
+
2820
+ @override
2821
+ String get cloud_sync_prefix => '접두사';
2822
+
2823
+ @override
2824
+ String get cloud_sync_access_key => '액세스 키 ID';
2825
+
2826
+ @override
2827
+ String get cloud_sync_secret_key => '비밀 액세스 키';
2828
+
2829
+ @override
2830
+ String get cloud_sync_session_token => '세션 토큰(선택사항)';
2831
+
2832
+ @override
2833
+ String get cloud_sync_passphrase => '암호화 암호';
2834
+
2835
+ @override
2836
+ String get cloud_sync_confirm_passphrase => '암호 확인';
2837
+
2838
+ @override
2839
+ String get cloud_sync_path_style => '경로 스타일 주소 지정 사용';
2840
+
2841
+ @override
2842
+ String get cloud_sync_allow_http => '안전하지 않은 HTTP 허용';
2843
+
2844
+ @override
2845
+ String get cloud_sync_http_warning =>
2846
+ 'HTTP는 요청 메타데이터와 자격 증명을 네트워크에 노출합니다. 신뢰할 수 있는 로컬 S3 서버에만 사용하세요.';
2847
+
2848
+ @override
2849
+ String get cloud_sync_test => '테스트 연결';
2850
+
2851
+ @override
2852
+ String get cloud_sync_enable => '암호화된 동기화 활성화';
2853
+
2854
+ @override
2855
+ String get cloud_sync_now => '지금 동기화';
2856
+
2857
+ @override
2858
+ String get cloud_sync_disconnect => '이 장치를 연결 해제하세요';
2859
+
2860
+ @override
2861
+ String get cloud_sync_last_synced => '마지막 동기화';
2862
+
2863
+ @override
2864
+ String get cloud_sync_never => '절대로';
2865
+
2866
+ @override
2867
+ String get cloud_sync_conflicts => '충돌이 보존됨';
2868
+
2869
+ @override
2870
+ String get cloud_sync_passphrase_mismatch => '암호가 일치하지 않습니다.';
2871
+
2872
+ @override
2873
+ String get crash_report_title => '문제가 발생했습니다.';
2874
+
2875
+ @override
2876
+ String get crash_report_stack_trace => '스택 추적';
2877
+
2878
+ @override
2879
+ String get crash_report_tap_to_expand => '펼치려면 탭하세요.';
2880
+
2881
+ @override
2882
+ String get crash_report_button => '충돌 신고';
2883
+
2884
+ @override
2885
+ String get crash_try_again => '다시 시도하세요';
2886
+
2887
+ @override
2888
+ String get crash_report_empty_stack => '<비어있음>';
2889
+
2890
+ @override
2891
+ String get crash_report_disclaimer =>
2892
+ '보고를 수행하면 진단이 미리 입력된 GitHub가 열립니다. 귀하가 직접 제어할 수 있습니다. 아무것도 자동으로 제출되지 않습니다. 제출하기 전에 민감한 콘텐츠를 검토하고 삭제하시기 바랍니다.';
2893
+
2894
+ @override
2895
+ String get crash_report_copied => '클립보드에 복사됨';
2896
+
2897
+ @override
2898
+ String get report_a_problem => '문제 신고';
2899
+
2900
+ @override
2901
+ String get rename_folder => '폴더 이름 바꾸기';
2902
+
2903
+ @override
2904
+ String get delete_folder => '폴더 삭제';
2905
+
2906
+ @override
2907
+ String get delete_folder_title => '폴더를 삭제하시겠습니까?';
2908
+
2909
+ @override
2910
+ String delete_folder_body(String name) {
2911
+ return '정말로 \"$name\"을 삭제하시겠습니까? 대화 또는 내부에 저장된 메시지는 \'파일 없음\'으로 다시 이동됩니다. 이 작업은 취소할 수 없습니다.';
2912
+ }
2913
+
2914
+ @override
2915
+ String get folder_name_required => '폴더 이름을 입력하세요.';
2916
+
2917
+ @override
2918
+ String get model_required_toast => '먼저 모델을 선택해야 합니다.';
2919
+
2920
+ @override
2921
+ String get settings_concise_voice_responses => '간결한 음성 모드 응답';
2922
+
2923
+ @override
2924
+ String get settings_concise_voice_responses_desc =>
2925
+ 'LLM 응답을 간략하게(짧은 문단 1개) 유지하고 음성 모드에서 후속 질문을 하세요.';
2926
+
2927
+ @override
2928
+ String get s3_connection_succeeded => 'S3 연결에 성공했습니다.';
2929
+
2930
+ @override
2931
+ String failed_to_open_url(String error) {
2932
+ return 'URL을 열지 못했습니다: $error';
2933
+ }
2934
+
2935
+ @override
2936
+ String failed_to_copy(String error) {
2937
+ return '복사 실패: $error';
2938
+ }
2939
+
2940
+ @override
2941
+ String get file_explorer_not_found =>
2942
+ '파일 탐색기를 찾을 수 없습니다. 파일 관리자 앱이 장치에 설치되어 활성화되어 있는지 확인하세요.';
2943
+
2944
+ @override
2945
+ String export_data_failed(String error) {
2946
+ return '백업 내보내기 실패: $error';
2947
+ }
2948
+
2949
+ @override
2950
+ String file_pick_failed(String error) {
2951
+ return '파일 선택 실패: $error';
2952
+ }
2953
+
2954
+ @override
2955
+ String image_pick_failed(String error) {
2956
+ return '이미지 선택 실패: $error';
2957
+ }
2958
+
2959
+ @override
2960
+ String get calendar_access => '캘린더 액세스';
2961
+
2962
+ @override
2963
+ String get calendar_access_desc => 'AI가 캘린더 이벤트를 읽고 생성하도록 허용';
2964
+
2965
+ @override
2966
+ String get calendar_permission_denied =>
2967
+ '캘린더 권한이 거부되었습니다. 기기 설정에서 캘린더 액세스 권한을 부여하세요.';
2968
+
2969
+ @override
2970
+ String get location_access => '위치 접근';
2971
+
2972
+ @override
2973
+ String get location_access_desc => 'AI가 장소 이름으로 현재 위치를 가져오도록 허용';
2974
+
2975
+ @override
2976
+ String get location_permission_denied =>
2977
+ '위치 권한이 거부되었습니다. 기기 설정에서 위치 액세스 권한을 부여하세요.';
2978
+
2979
+ @override
2980
+ String get builtin_ai_not_supported => '내장 AI는 이 장치에서 지원되지 않습니다.';
2981
+
2982
+ @override
2983
+ String get builtin_ai_unsupported_desc =>
2984
+ '귀하의 장치 하드웨어 또는 OS는 온디바이스 시스템 AI(예: Gemini Nano / Apple Intelligence)를 지원하지 않습니다. 대신 다운로드 가능한 모델을 선택하세요.';
2985
+
2986
+ @override
2987
+ String get builtin_ai_unsupported_chip => '지원되지 않음';
2988
+
2989
+ @override
2990
+ String get builtin_ai_enable => '활성화';
2991
+}
lib/l10n/app_localizations_pt.dart
new
+3098
@@ -0,0 +1,3098 @@
1
+// ignore: unused_import
2
+import 'package:intl/intl.dart' as intl;
3
+import 'app_localizations.dart';
4
+
5
+// ignore_for_file: type=lint
6
+
7
+/// The translations for Portuguese (`pt`).
8
+class AppLocalizationsPt extends AppLocalizations {
9
+ AppLocalizationsPt([String locale = 'pt']) : super(locale);
10
+
11
+ @override
12
+ String get app_name => 'LocalMind';
13
+
14
+ @override
15
+ String get app_tagline => 'Sua IA. Seu dispositivo. Suas regras.';
16
+
17
+ @override
18
+ String get app_version => '1.0.0';
19
+
20
+ @override
21
+ String get cancel => 'Cancelar';
22
+
23
+ @override
24
+ String get confirm => 'Confirmar';
25
+
26
+ @override
27
+ String get delete => 'Excluir';
28
+
29
+ @override
30
+ String get save => 'Salvar';
31
+
32
+ @override
33
+ String get retry => 'Tentar novamente';
34
+
35
+ @override
36
+ String get close => 'Fechar';
37
+
38
+ @override
39
+ String get done => 'Concluído';
40
+
41
+ @override
42
+ String get continue_action => 'Continuar';
43
+
44
+ @override
45
+ String get skip => 'Pular';
46
+
47
+ @override
48
+ String get install => 'Instalar';
49
+
50
+ @override
51
+ String get download => 'Baixar';
52
+
53
+ @override
54
+ String get resume => 'Currículo';
55
+
56
+ @override
57
+ String get pause => 'Pausa';
58
+
59
+ @override
60
+ String get stop => 'Pare';
61
+
62
+ @override
63
+ String get edit => 'Editar';
64
+
65
+ @override
66
+ String get preview => 'Visualização';
67
+
68
+ @override
69
+ String get unload => 'Descarregar';
70
+
71
+ @override
72
+ String get load => 'Carregar';
73
+
74
+ @override
75
+ String get rename => 'Renomear';
76
+
77
+ @override
78
+ String get pin => 'Fixar';
79
+
80
+ @override
81
+ String get unpin => 'Liberar';
82
+
83
+ @override
84
+ String get share => 'Compartilhar';
85
+
86
+ @override
87
+ String get copy => 'Copiar';
88
+
89
+ @override
90
+ String get copied => 'Copiado!';
91
+
92
+ @override
93
+ String get copied_to_clipboard => 'Copiado para a área de transferência';
94
+
95
+ @override
96
+ String get select => 'Selecione';
97
+
98
+ @override
99
+ String get active => 'Ativo';
100
+
101
+ @override
102
+ String get all => 'Todos';
103
+
104
+ @override
105
+ String get none => 'Nenhum';
106
+
107
+ @override
108
+ String get none_selected => 'Nenhum selecionado';
109
+
110
+ @override
111
+ String get online => 'On-line';
112
+
113
+ @override
114
+ String get connected => 'Conectado';
115
+
116
+ @override
117
+ String get checking => 'Verificando';
118
+
119
+ @override
120
+ String get offline => 'Off-line';
121
+
122
+ @override
123
+ String get error => 'Erro';
124
+
125
+ @override
126
+ String get unknown_error => 'Erro desconhecido';
127
+
128
+ @override
129
+ String get not_now => 'Agora não';
130
+
131
+ @override
132
+ String get enable => 'Habilitar';
133
+
134
+ @override
135
+ String get proceed_anyway => 'Prossiga de qualquer maneira';
136
+
137
+ @override
138
+ String get test_connection => 'Conexão de teste';
139
+
140
+ @override
141
+ String get testing => 'Testando...';
142
+
143
+ @override
144
+ String get connection_successful => 'Conexão bem-sucedida!';
145
+
146
+ @override
147
+ String get connection_failed =>
148
+ 'Falha na conexão. Verifique suas configurações.';
149
+
150
+ @override
151
+ String get save_continue => 'Salvar e continuar';
152
+
153
+ @override
154
+ String get save_changes => 'Salvar alterações';
155
+
156
+ @override
157
+ String get finish_setup => 'Concluir configuração';
158
+
159
+ @override
160
+ String get start_new_chat => 'Iniciar novo bate-papo';
161
+
162
+ @override
163
+ String get cannot_undo => 'Esta ação não pode ser desfeita.';
164
+
165
+ @override
166
+ String get ram_warning => 'Aviso de RAM';
167
+
168
+ @override
169
+ String get recommended => 'RECOMENDADO';
170
+
171
+ @override
172
+ String get may_be_large => 'Pode ser muito grande para este dispositivo';
173
+
174
+ @override
175
+ String get calculating => 'Calculando...';
176
+
177
+ @override
178
+ String get download_failed => 'Falha no download';
179
+
180
+ @override
181
+ String get downloaded => 'Baixado';
182
+
183
+ @override
184
+ String get not_downloaded => 'Não baixado';
185
+
186
+ @override
187
+ String get installed => 'Instalado';
188
+
189
+ @override
190
+ String get not_installed => 'Não instalado';
191
+
192
+ @override
193
+ String get loading => 'Carregando...';
194
+
195
+ @override
196
+ String get thinking => 'Pensando';
197
+
198
+ @override
199
+ String get processing => 'Processando...';
200
+
201
+ @override
202
+ String get initializing => 'Inicializando...';
203
+
204
+ @override
205
+ String get ready => 'Pronto';
206
+
207
+ @override
208
+ String get preparing_app => 'Preparando aplicativo...';
209
+
210
+ @override
211
+ String get initializing_services => 'Inicializando serviços...';
212
+
213
+ @override
214
+ String get configuring_server => 'Configurando servidor...';
215
+
216
+ @override
217
+ String get startup_failed => 'Falha na inicialização';
218
+
219
+ @override
220
+ String get something_went_wrong => 'Algo deu errado';
221
+
222
+ @override
223
+ String get delete_model_title => 'Excluir modelo';
224
+
225
+ @override
226
+ String delete_model_body(String name) {
227
+ return 'Tem certeza de que deseja excluir o $name?';
228
+ }
229
+
230
+ @override
231
+ String delete_model_body_with_size(String name, String size) {
232
+ return 'Tem certeza de que deseja excluir o $name? Isso liberará aproximadamente $size de espaço.\n\nVocê pode baixar este modelo novamente mais tarde, se necessário.';
233
+ }
234
+
235
+ @override
236
+ String get delete_voice_title => 'Excluir voz';
237
+
238
+ @override
239
+ String delete_voice_body(String name, String size) {
240
+ return 'Tem certeza de que deseja excluir o $name? Isso liberará aproximadamente $size de espaço.\n\nVocê pode baixar esta voz novamente mais tarde, se necessário.';
241
+ }
242
+
243
+ @override
244
+ String get delete_server_title => 'Excluir servidor';
245
+
246
+ @override
247
+ String delete_server_body(String name) {
248
+ return 'Tem certeza de que deseja excluir \"$name\"? Isto não pode ser desfeito.';
249
+ }
250
+
251
+ @override
252
+ String get delete_conversation_title => 'Excluir conversa?';
253
+
254
+ @override
255
+ String delete_conversation_body(String title) {
256
+ return 'Tem certeza de que deseja excluir \"$title\"? Isto não pode ser desfeito.';
257
+ }
258
+
259
+ @override
260
+ String get delete_message_title => 'Excluir mensagem?';
261
+
262
+ @override
263
+ String delete_persona_title(String name) {
264
+ return 'Excluir \"$name\"?';
265
+ }
266
+
267
+ @override
268
+ String get delete_persona_body => 'Isto não pode ser desfeito.';
269
+
270
+ @override
271
+ String get delete_builtin_persona_body =>
272
+ 'Esta é uma persona embutida. Você pode restaurá-lo mais tarde em Configurações.';
273
+
274
+ @override
275
+ String get restore_builtin_personas => 'Restaurar personas padrão';
276
+
277
+ @override
278
+ String get restore_builtin_personas_desc =>
279
+ 'Adicione novamente quaisquer personas integradas que você excluiu';
280
+
281
+ @override
282
+ String get restore_builtin_personas_success => 'Personas padrão restauradas';
283
+
284
+ @override
285
+ String get clear_personas => 'Personalidades claras';
286
+
287
+ @override
288
+ String get enable_image_compression => 'Compacte imagens antes de enviar';
289
+
290
+ @override
291
+ String get enable_image_compression_desc =>
292
+ 'Redimensione e compacte imagens anexadas para que os uploads permaneçam dentro dos limites do servidor';
293
+
294
+ @override
295
+ String get image_compression_level => 'Agressividade de compressão';
296
+
297
+ @override
298
+ String get image_compression_level_desc =>
299
+ 'Maior agressividade produz uploads menores com qualidade inferior';
300
+
301
+ @override
302
+ String get image_compression_level_low => 'Baixo';
303
+
304
+ @override
305
+ String get image_compression_level_medium => 'Médio';
306
+
307
+ @override
308
+ String get image_compression_level_high => 'Alto';
309
+
310
+ @override
311
+ String get sort_models_tooltip => 'Classificar modelos';
312
+
313
+ @override
314
+ String get sort_by_favorites => 'Favoritos primeiro';
315
+
316
+ @override
317
+ String get sort_by_name => 'Nome (A-Z)';
318
+
319
+ @override
320
+ String get sort_by_size_smallest => 'Tamanho (menor primeiro)';
321
+
322
+ @override
323
+ String get sort_by_size_largest => 'Tamanho (maior primeiro)';
324
+
325
+ @override
326
+ String get sort_by_context_length => 'Comprimento do contexto';
327
+
328
+ @override
329
+ String bulk_ai_rename_progress(int done, int total) {
330
+ return 'Renomeando $done/$total...';
331
+ }
332
+
333
+ @override
334
+ String selected_count(int count) {
335
+ return '$count selecionado';
336
+ }
337
+
338
+ @override
339
+ String get ai_rename_tooltip => 'Renomear selecionado com IA';
340
+
341
+ @override
342
+ String get new_chat_in_folder_tooltip => 'Novo bate-papo nesta pasta';
343
+
344
+ @override
345
+ String total_tokens_count(int count) {
346
+ return 'Tokens $count';
347
+ }
348
+
349
+ @override
350
+ String get smart_replies_use_persona =>
351
+ 'Use persona em respostas inteligentes';
352
+
353
+ @override
354
+ String get smart_replies_use_persona_desc =>
355
+ 'As respostas sugeridas correspondem ao tom da persona ativa, em vez de um assistente genérico';
356
+
357
+ @override
358
+ String get keep_persona_on_new_chat => 'Mantenha a persona no novo chat';
359
+
360
+ @override
361
+ String get keep_persona_on_new_chat_desc =>
362
+ 'Não limpe a(s) persona(s) selecionada(s) após iniciar um novo chat';
363
+
364
+ @override
365
+ String get role_swap_button_enabled => 'Mostrar botão de troca de função';
366
+
367
+ @override
368
+ String get role_swap_button_enabled_desc =>
369
+ 'Mostrar um botão na entrada do chat para enviar sua mensagem como assistente em vez de usuário, sem gerar resposta';
370
+
371
+ @override
372
+ String get send_as_user_tooltip => 'Enviar como usuário';
373
+
374
+ @override
375
+ String get send_as_assistant_tooltip =>
376
+ 'Enviar como assistente (sem resposta)';
377
+
378
+ @override
379
+ String get insert_without_generating_tooltip => 'Inserir sem gerar';
380
+
381
+ @override
382
+ String get token_usage_title => 'Uso de token';
383
+
384
+ @override
385
+ String get total_tokens_label => 'Tokens usados';
386
+
387
+ @override
388
+ String get usage_percent_label => 'Contexto usado';
389
+
390
+ @override
391
+ String get export_choice_title => 'Exportar';
392
+
393
+ @override
394
+ String get export_choice_body => 'Como você gostaria de exportar isso?';
395
+
396
+ @override
397
+ String get copy_to_clipboard => 'Copiar para a área de transferência';
398
+
399
+ @override
400
+ String bulk_export_conversations_success(int count) {
401
+ return 'Conversas $count exportadas';
402
+ }
403
+
404
+ @override
405
+ String get bulk_ai_rename_confirm_title => 'Renomear com IA?';
406
+
407
+ @override
408
+ String bulk_ai_rename_confirm_body(int count) {
409
+ return 'Isso solicitará que a IA gere um novo título para cada uma das conversas selecionadas pelo $count, substituindo os títulos atuais. Isso pode demorar um pouco e não pode ser desfeito.';
410
+ }
411
+
412
+ @override
413
+ String get sort_by_modified_date => 'Última modificação';
414
+
415
+ @override
416
+ String get sort_by_created_date => 'Data de criação';
417
+
418
+ @override
419
+ String get sort_title => 'Classificar';
420
+
421
+ @override
422
+ String get clear_conversation_title => 'Conversa clara?';
423
+
424
+ @override
425
+ String get clear_conversation_body =>
426
+ 'Isso excluirá todas as mensagens desta conversa.';
427
+
428
+ @override
429
+ String get clear => 'Limpar';
430
+
431
+ @override
432
+ String label_completed(String label) {
433
+ return '$label concluído';
434
+ }
435
+
436
+ @override
437
+ String error_with_message(String error) {
438
+ return 'Erro: $error';
439
+ }
440
+
441
+ @override
442
+ String preview_failed(String error) {
443
+ return 'Falha na visualização: $error';
444
+ }
445
+
446
+ @override
447
+ String loading_model(String modelId) {
448
+ return 'Carregando $modelId...';
449
+ }
450
+
451
+ @override
452
+ String model_loaded(String modelId, String backend) {
453
+ return 'Modelo carregado: $modelId ($backend)';
454
+ }
455
+
456
+ @override
457
+ String get no_model_loaded =>
458
+ 'Nenhum modelo carregado. Toque em “Gerenciar modelos no dispositivo” para baixar e carregar um modelo.';
459
+
460
+ @override
461
+ String loading_model_error(String error) {
462
+ return 'Erro: $error';
463
+ }
464
+
465
+ @override
466
+ String get delete_conversation => 'Excluir conversa?';
467
+
468
+ @override
469
+ String get nav_history => 'História';
470
+
471
+ @override
472
+ String get nav_servers => 'Servidores';
473
+
474
+ @override
475
+ String get nav_local_models => 'Modelos Locais';
476
+
477
+ @override
478
+ String get nav_tts => 'Texto para fala';
479
+
480
+ @override
481
+ String get nav_personas => 'Personagens';
482
+
483
+ @override
484
+ String get nav_settings => 'Configurações';
485
+
486
+ @override
487
+ String get nav_new_chat => 'Novo bate-papo';
488
+
489
+ @override
490
+ String get search_hint => 'Pesquisar conversas...';
491
+
492
+ @override
493
+ String get no_server_selected => 'Nenhum servidor selecionado';
494
+
495
+ @override
496
+ String get switch_server => 'Trocar servidor';
497
+
498
+ @override
499
+ String get switch_server_subtitle => 'Escolha um servidor para se conectar';
500
+
501
+ @override
502
+ String get manage_servers => 'Gerenciar servidores';
503
+
504
+ @override
505
+ String get open_source => 'Código aberto';
506
+
507
+ @override
508
+ String get open_source_desc =>
509
+ 'LocalMind é de código aberto. Acompanhe nosso progresso ou contribua no GitHub.';
510
+
511
+ @override
512
+ String get star_on_github => 'Estrela no GitHub';
513
+
514
+ @override
515
+ String get add_more => 'Adicionar mais';
516
+
517
+ @override
518
+ String get on_github => 'no GitHub';
519
+
520
+ @override
521
+ String get could_not_open_github => 'Não foi possível abrir o GitHub.';
522
+
523
+ @override
524
+ String get settings_title => 'Configurações';
525
+
526
+ @override
527
+ String get settings_appearance => 'Aparência';
528
+
529
+ @override
530
+ String get settings_language => 'Idioma';
531
+
532
+ @override
533
+ String get language_system_default => 'Padrão do sistema';
534
+
535
+ @override
536
+ String get settings_tts => 'Conversão de texto para fala';
537
+
538
+ @override
539
+ String get settings_android_assistant => 'Assistente Android';
540
+
541
+ @override
542
+ String get assistant_default_title => 'Use LocalMind como seu assistente';
543
+
544
+ @override
545
+ String get assistant_default_description =>
546
+ 'Inicie o modo de voz com o gesto do assistente do Android ou o atalho do botão liga / desliga.';
547
+
548
+ @override
549
+ String get assistant_status_active => 'Ativo';
550
+
551
+ @override
552
+ String get assistant_status_available => 'Não ativo';
553
+
554
+ @override
555
+ String get assistant_status_manual => 'Verifique as configurações';
556
+
557
+ @override
558
+ String get assistant_status_unsupported => 'Indisponível';
559
+
560
+ @override
561
+ String get assistant_status_checking => 'Verificando…';
562
+
563
+ @override
564
+ String get assistant_set_default => 'Definir como assistente padrão';
565
+
566
+ @override
567
+ String get assistant_open_settings =>
568
+ 'Abra as configurações do assistente Android';
569
+
570
+ @override
571
+ String assistant_error(Object error) {
572
+ return 'Não foi possível abrir as configurações do assistente Android.';
573
+ }
574
+
575
+ @override
576
+ String get settings_behavior => 'Comportamento';
577
+
578
+ @override
579
+ String get settings_on_device => 'Inferência no dispositivo';
580
+
581
+ @override
582
+ String get settings_default_server => 'Servidor padrão';
583
+
584
+ @override
585
+ String get settings_default_persona => 'Personagem padrão';
586
+
587
+ @override
588
+ String get settings_default_model => 'Modelo padrão';
589
+
590
+ @override
591
+ String get settings_default_model_desc =>
592
+ 'Selecionado automaticamente quando você inicia um novo bate-papo.';
593
+
594
+ @override
595
+ String get settings_privacy => 'Privacidade';
596
+
597
+ @override
598
+ String get settings_data_management => 'Gerenciamento de dados';
599
+
600
+ @override
601
+ String get settings_about => 'Sobre';
602
+
603
+ @override
604
+ String get theme => 'Tema';
605
+
606
+ @override
607
+ String get theme_system => 'Sistema';
608
+
609
+ @override
610
+ String get theme_light => 'Luz';
611
+
612
+ @override
613
+ String get theme_dark => 'Escuro';
614
+
615
+ @override
616
+ String get theme_claude => 'Cláudio';
617
+
618
+ @override
619
+ String get font_size => 'Tamanho da fonte';
620
+
621
+ @override
622
+ String get font_size_desc => 'Ajuste o tamanho do texto no chat.';
623
+
624
+ @override
625
+ String get font_preview =>
626
+ 'A rápida raposa marrom salta sobre o cachorro preguiçoso.';
627
+
628
+ @override
629
+ String get code_theme_dark => 'Tema de código (escuro)';
630
+
631
+ @override
632
+ String get code_theme_light => 'Tema de código (claro)';
633
+
634
+ @override
635
+ String get code_theme_desc =>
636
+ 'Escolha o tema de destaque de sintaxe para blocos de código.';
637
+
638
+ @override
639
+ String get tts_engine => 'Motor TTS';
640
+
641
+ @override
642
+ String get tts_engine_system => 'Sistema TTS';
643
+
644
+ @override
645
+ String get tts_engine_kitten => 'Gatinho TTS';
646
+
647
+ @override
648
+ String get voice => 'Voz';
649
+
650
+ @override
651
+ String get voice_female => 'Feminino';
652
+
653
+ @override
654
+ String get voice_male => 'Masculino';
655
+
656
+ @override
657
+ String get voice_other => 'Outro';
658
+
659
+ @override
660
+ String get tts_speed => 'Velocidade TTS';
661
+
662
+ @override
663
+ String get tts_speed_desc => 'Ajuste a taxa de reprodução.';
664
+
665
+ @override
666
+ String get manage_tts_models => 'Gerenciar modelos TTS';
667
+
668
+ @override
669
+ String get manage_on_device_models => 'Gerenciar modelos no dispositivo';
670
+
671
+ @override
672
+ String get enable_smart_reply => 'Respostas inteligentes no dispositivo';
673
+
674
+ @override
675
+ String get ai_user_response_enabled =>
676
+ 'Mensagem do usuário AI (manter envio)';
677
+
678
+ @override
679
+ String get ai_user_response_enabled_desc =>
680
+ 'Segure o botão enviar por 3 segundos para que a IA escreva e envie sua próxima mensagem';
681
+
682
+ @override
683
+ String get ai_user_response_tooltip => 'Gere mensagem do usuário com IA';
684
+
685
+ @override
686
+ String get streaming_responses => 'Respostas de streaming';
687
+
688
+ @override
689
+ String get auto_generate_titles => 'Gerar títulos automaticamente';
690
+
691
+ @override
692
+ String get send_on_enter => 'Enviar ao entrar';
693
+
694
+ @override
695
+ String get show_system_messages => 'Enviar prompt padrão do sistema';
696
+
697
+ @override
698
+ String get show_system_messages_desc =>
699
+ 'Quando nenhuma persona for selecionada, envie um prompt padrão do sistema do assistente com cada solicitação';
700
+
701
+ @override
702
+ String get show_system_messages_in_chat =>
703
+ 'Mostrar mensagens do sistema no bate-papo';
704
+
705
+ @override
706
+ String get show_system_messages_in_chat_desc =>
707
+ 'Exibir mensagens do sistema (por exemplo, de um backup importado) como balões visíveis na conversa';
708
+
709
+ @override
710
+ String get auto_collapse_thinking => 'Pensamento de colapso automático';
711
+
712
+ @override
713
+ String get auto_collapse_thinking_desc =>
714
+ 'Recolher automaticamente o processo de raciocínio após a geração da resposta ser concluída quando uma resposta principal estiver presente';
715
+
716
+ @override
717
+ String get haptic_feedback => 'Feedback tátil';
718
+
719
+ @override
720
+ String get enable_mcp => 'Habilitar MCP';
721
+
722
+ @override
723
+ String get new_chat_mcp_default => 'Novo padrão MCP de bate-papo';
724
+
725
+ @override
726
+ String get show_data_indicator => 'Mostrar indicador de dados';
727
+
728
+ @override
729
+ String get privacy_info => '\"LocalMind nunca vê seus dados\"';
730
+
731
+ @override
732
+ String get delete_all_conversations => 'Excluir todas as conversas';
733
+
734
+ @override
735
+ String get reset_settings_defaults =>
736
+ 'Redefinir as configurações para os padrões';
737
+
738
+ @override
739
+ String get chat_title => 'LocalMind';
740
+
741
+ @override
742
+ String get chat_parameters_tooltip => 'Parâmetros de bate-papo';
743
+
744
+ @override
745
+ String get change_persona => 'Mudar de personalidade';
746
+
747
+ @override
748
+ String get set_persona => 'Definir personalidade';
749
+
750
+ @override
751
+ String get remove_persona => 'Remover personalidade';
752
+
753
+ @override
754
+ String get clear_conversation => 'Conversa clara';
755
+
756
+ @override
757
+ String get connection_error => 'Erro de conexão. Verifique seu servidor.';
758
+
759
+ @override
760
+ String get disconnected => 'Desconectado do servidor.';
761
+
762
+ @override
763
+ String get configure => 'Configurar';
764
+
765
+ @override
766
+ String get select_model => 'Selecione o modelo';
767
+
768
+ @override
769
+ String get select_persona => 'Selecione a personalidade';
770
+
771
+ @override
772
+ String get manage_personas => 'Gerenciar personas';
773
+
774
+ @override
775
+ String get personas_combine_hint =>
776
+ 'Selecione várias personas no chat para empilhar as solicitações do sistema.';
777
+
778
+ @override
779
+ String get start_conversation => 'Inicie uma conversa';
780
+
781
+ @override
782
+ String get recent_chats => 'Bate-papos recentes';
783
+
784
+ @override
785
+ String get see_all => 'Ver tudo';
786
+
787
+ @override
788
+ String get quick_write => 'Ajude-me a escrever uma função';
789
+
790
+ @override
791
+ String get quick_explain => 'Explique este código';
792
+
793
+ @override
794
+ String get quick_debug => 'Depure isso para mim';
795
+
796
+ @override
797
+ String get quick_async => 'Como faço para usar assíncrono/aguardar?';
798
+
799
+ @override
800
+ String get history_missing_title => 'História ausente';
801
+
802
+ @override
803
+ String get history_missing_desc =>
804
+ 'As mensagens neste bate-papo foram excluídas ou o registro do histórico está corrompido.';
805
+
806
+ @override
807
+ String get technical_details => 'Detalhes técnicos';
808
+
809
+ @override
810
+ String get last_error => 'Último erro:';
811
+
812
+ @override
813
+ String get copy_info => 'Copiar informações';
814
+
815
+ @override
816
+ String get conversation_id => 'ID da conversa';
817
+
818
+ @override
819
+ String get created_at => 'Criado em';
820
+
821
+ @override
822
+ String get expected_messages => 'Mensagens esperadas';
823
+
824
+ @override
825
+ String get debug_dialog_desc =>
826
+ 'Informações de diagnóstico para ajudar a identificar problemas de sincronização.';
827
+
828
+ @override
829
+ String get chat_input_hint => 'Pergunte qualquer coisa';
830
+
831
+ @override
832
+ String get send_message_tooltip => 'Enviar mensagem';
833
+
834
+ @override
835
+ String get stop_generation_tooltip => 'Parar geração';
836
+
837
+ @override
838
+ String get attach_images_tooltip => 'Anexe imagens ou texto';
839
+
840
+ @override
841
+ String get start_listening_tooltip => 'Comece a ouvir';
842
+
843
+ @override
844
+ String get stop_listening_tooltip => 'Pare de ouvir';
845
+
846
+ @override
847
+ String tool_label(String toolCallId) {
848
+ return 'Ferramenta: $toolCallId';
849
+ }
850
+
851
+ @override
852
+ String get tool_unknown => 'Ferramenta: Desconhecida';
853
+
854
+ @override
855
+ String get message_options => 'Opções de mensagem';
856
+
857
+ @override
858
+ String get copy_markdown => 'Copiar como Markdown';
859
+
860
+ @override
861
+ String get copied_markdown => 'Copiado como Markdown';
862
+
863
+ @override
864
+ String get read_aloud => 'Leia em voz alta';
865
+
866
+ @override
867
+ String get stop_reading => 'Pare de ler';
868
+
869
+ @override
870
+ String get more => 'Mais';
871
+
872
+ @override
873
+ String character_count(int length) {
874
+ return 'Caracteres $length';
875
+ }
876
+
877
+ @override
878
+ String get edit_message => 'Editar mensagem';
879
+
880
+ @override
881
+ String get edit_message_desc =>
882
+ 'Salvar removerá a resposta do assistente abaixo e a regenerará.';
883
+
884
+ @override
885
+ String get save_regenerate => 'Salvar e regenerar';
886
+
887
+ @override
888
+ String get chat_settings_title => 'Configurações de bate-papo';
889
+
890
+ @override
891
+ String get reset_defaults => 'Redefinir padrões';
892
+
893
+ @override
894
+ String get parameters_tab => 'Parâmetros';
895
+
896
+ @override
897
+ String get mcp_tab => 'PCM';
898
+
899
+ @override
900
+ String get temperature => 'Temperatura';
901
+
902
+ @override
903
+ String get temperature_desc =>
904
+ 'Controla a aleatoriedade: Superior = Criativo, Inferior = Focado';
905
+
906
+ @override
907
+ String get top_p => 'Parte superior P';
908
+
909
+ @override
910
+ String get top_p_desc => 'Limite de amostragem de núcleo';
911
+
912
+ @override
913
+ String get max_tokens => 'Máximo de tokens';
914
+
915
+ @override
916
+ String get max_tokens_desc => 'Limite de resposta';
917
+
918
+ @override
919
+ String get context_length => 'Comprimento do contexto';
920
+
921
+ @override
922
+ String get context_length_desc => 'Janela de histórico';
923
+
924
+ @override
925
+ String get mcp_disabled_warning =>
926
+ 'O MCP está desabilitado globalmente. Ative-o em Configurações para usar esses recursos.';
927
+
928
+ @override
929
+ String get mcp_enable_chat => 'Habilite o MCP para este chat';
930
+
931
+ @override
932
+ String get auto_execute_tools => 'Ferramentas de execução automática';
933
+
934
+ @override
935
+ String get beta_label => 'Beta';
936
+
937
+ @override
938
+ String get experimental_label => 'Experimental';
939
+
940
+ @override
941
+ String get add_ephemeral_mcp => 'Adicionar servidor MCP efêmero';
942
+
943
+ @override
944
+ String get mcp_label_placeholder => 'Etiqueta';
945
+
946
+ @override
947
+ String get mcp_url_placeholder => 'URL (https://...)';
948
+
949
+ @override
950
+ String get active_integrations => 'Integrações Ativas';
951
+
952
+ @override
953
+ String get import_mcp_json => 'Importar JSON';
954
+
955
+ @override
956
+ String get import_mcp_json_dialog_title =>
957
+ 'Importar JSON de configuração do MCP';
958
+
959
+ @override
960
+ String get import_mcp_json_instructions =>
961
+ 'Copie seu JSON mcpServers diretamente do LM Studio (mcp.json) ou cole um array de plugins abaixo:';
962
+
963
+ @override
964
+ String get import_mcp_json_placeholder =>
965
+ 'Cole mcpServers JSON ou lista de plugins aqui...';
966
+
967
+ @override
968
+ String mcp_import_success(int count) {
969
+ return 'Integrações $count importadas com sucesso';
970
+ }
971
+
972
+ @override
973
+ String get mcp_import_failed =>
974
+ 'Nenhuma integração MCP válida encontrada em JSON';
975
+
976
+ @override
977
+ String get enable_notifications => 'Habilitar notificações';
978
+
979
+ @override
980
+ String get enable_notifications_desc =>
981
+ 'Seja notificado quando o download dos modelos terminar.';
982
+
983
+ @override
984
+ String get chat_history_title => 'Histórico de bate-papo';
985
+
986
+ @override
987
+ String get conversation_just_now => 'Agora mesmo';
988
+
989
+ @override
990
+ String conversation_minutes_ago(int minutes) {
991
+ return '${minutes}m atrás';
992
+ }
993
+
994
+ @override
995
+ String conversation_hours_ago(int hours) {
996
+ return '${hours}h atrás';
997
+ }
998
+
999
+ @override
1000
+ String get conversation_yesterday => 'Ontem';
1001
+
1002
+ @override
1003
+ String conversation_days_ago(int days) {
1004
+ return '${days}d atrás';
1005
+ }
1006
+
1007
+ @override
1008
+ String conversation_date(int month, int day, int year) {
1009
+ return '$month/$day/$year';
1010
+ }
1011
+
1012
+ @override
1013
+ String get options_tooltip => 'Opções';
1014
+
1015
+ @override
1016
+ String get no_results_found => 'Nenhum resultado encontrado';
1017
+
1018
+ @override
1019
+ String get no_conversations_yet => 'Ainda não há conversas';
1020
+
1021
+ @override
1022
+ String get try_different_search =>
1023
+ 'Experimente um termo de pesquisa diferente';
1024
+
1025
+ @override
1026
+ String get start_new_conversation => 'Inicie uma nova conversa';
1027
+
1028
+ @override
1029
+ String get rename_conversation => 'Renomear conversa';
1030
+
1031
+ @override
1032
+ String get enter_new_title => 'Insira o novo título';
1033
+
1034
+ @override
1035
+ String get pinned_section => 'FIXADO';
1036
+
1037
+ @override
1038
+ String get today_section => 'HOJE';
1039
+
1040
+ @override
1041
+ String get yesterday_section => 'ONTEM';
1042
+
1043
+ @override
1044
+ String get previous_7_days => '7 DIAS ANTERIORES';
1045
+
1046
+ @override
1047
+ String get previous_30_days => '30 DIAS ANTERIORES';
1048
+
1049
+ @override
1050
+ String get older_section => 'MAIS ANTIGO';
1051
+
1052
+ @override
1053
+ String get onboarding_choose_language => 'Escolha o idioma';
1054
+
1055
+ @override
1056
+ String get onboarding_choose_language_desc =>
1057
+ 'Selecione seu idioma preferido. Você pode alterar isso a qualquer momento nas configurações.';
1058
+
1059
+ @override
1060
+ String get onboarding_localmind => 'MENTE LOCAL';
1061
+
1062
+ @override
1063
+ String get onboarding_connect_server => 'Conecte seu\nServidor';
1064
+
1065
+ @override
1066
+ String get onboarding_connect_desc =>
1067
+ 'Conecte-se ao LM Studio, Ollama,\nOllama Cloud ou OpenRouter para\ncomece sua experiência privada de IA.';
1068
+
1069
+ @override
1070
+ String get openai_compatible_api => 'API compatível com OpenAI';
1071
+
1072
+ @override
1073
+ String get https_requires_ssl => 'HTTPS requer SSL';
1074
+
1075
+ @override
1076
+ String get most_local_setups_use_http =>
1077
+ 'A maioria das configurações locais usa http://';
1078
+
1079
+ @override
1080
+ String get onboarding_welcome => 'Bem-vindo à LocalMind';
1081
+
1082
+ @override
1083
+ String get server_type_on_device => 'No dispositivo';
1084
+
1085
+ @override
1086
+ String get server_type_lm_studio => 'Estúdio LM';
1087
+
1088
+ @override
1089
+ String get server_type_ollama => 'Ollama';
1090
+
1091
+ @override
1092
+ String get server_type_ollama_cloud => 'Nuvem de Ollama';
1093
+
1094
+ @override
1095
+ String get server_type_ollama_cloud_sub => 'GERENCIADO NA NUVEM';
1096
+
1097
+ @override
1098
+ String get server_type_ollama_cloud_display => 'Nuvem de Ollama';
1099
+
1100
+ @override
1101
+ String get server_address_ollama_cloud => 'ollama. com';
1102
+
1103
+ @override
1104
+ String get ollama_cloud_disclosure =>
1105
+ 'Ao conectar o Ollama Cloud, suas mensagens de bate-papo e entradas são enviadas aos servidores gerenciados do Ollama para inferência. LocalMind não rastreia nem armazena suas conversas. Você pode revogar essa chave a qualquer momento em ollama.com/settings/keys.';
1106
+
1107
+ @override
1108
+ String get api_key_required_ollama_cloud =>
1109
+ 'Chave de API necessária para Ollama Cloud';
1110
+
1111
+ @override
1112
+ String get api_key_hint_ollama_cloud =>
1113
+ 'Cole sua chave de API do Ollama Cloud';
1114
+
1115
+ @override
1116
+ String get add_server_ollama_cloud_subtitle =>
1117
+ 'Conecte-se ao Ollama Cloud com uma chave de API em ollama.com/settings/keys para acessar modelos de nuvem gerenciados.';
1118
+
1119
+ @override
1120
+ String get add_server_openrouter_subtitle =>
1121
+ 'Conecte-se através do OpenRouter com uma chave de API válida e mantenha este perfil pronto para roteamento de modelo.';
1122
+
1123
+ @override
1124
+ String get add_server_endpoint_subtitle =>
1125
+ 'Configure um endpoint local ou auto-hospedado e verifique a conexão antes de salvar.';
1126
+
1127
+ @override
1128
+ String get server_type_openrouter => 'OpenRouter';
1129
+
1130
+ @override
1131
+ String get server_type_openrouter_sub => 'NUVEM UNIFICADA';
1132
+
1133
+ @override
1134
+ String get ready_continue => 'PRONTO PARA CONTINUAR';
1135
+
1136
+ @override
1137
+ String get waiting_selection => 'AGUARDANDO SELEÇÃO';
1138
+
1139
+ @override
1140
+ String get setup_connection => 'Configurar conexão';
1141
+
1142
+ @override
1143
+ String setup_connection_desc(String server) {
1144
+ return 'Configure seu servidor $server para começar a conversar.';
1145
+ }
1146
+
1147
+ @override
1148
+ String get server_name => 'Nome do servidor';
1149
+
1150
+ @override
1151
+ String get name_required => 'Nome obrigatório';
1152
+
1153
+ @override
1154
+ String get name_max_50 => 'Máximo de 50 caracteres';
1155
+
1156
+ @override
1157
+ String get host_label => 'Host/Endereço IP';
1158
+
1159
+ @override
1160
+ String get host_required => 'Anfitrião necessário';
1161
+
1162
+ @override
1163
+ String get port_label => 'Porto';
1164
+
1165
+ @override
1166
+ String get port_required => 'Porta necessária';
1167
+
1168
+ @override
1169
+ String get port_invalid => 'Deve ser um número';
1170
+
1171
+ @override
1172
+ String get port_range => 'Insira uma porta válida (1-65535)';
1173
+
1174
+ @override
1175
+ String get api_key_required => 'Chave API *';
1176
+
1177
+ @override
1178
+ String get api_key_optional => 'Chave de API (opcional)';
1179
+
1180
+ @override
1181
+ String get api_key_required_openrouter =>
1182
+ 'Chave de API necessária para OpenRouter';
1183
+
1184
+ @override
1185
+ String get api_key_format => 'As chaves da API OpenRouter começam com sk-';
1186
+
1187
+ @override
1188
+ String get my_server_hint => 'Meu servidor';
1189
+
1190
+ @override
1191
+ String get name_length_validation => 'O nome deve ter 50 caracteres ou menos';
1192
+
1193
+ @override
1194
+ String get host_valid => 'Insira um nome de host ou endereço IP válido';
1195
+
1196
+ @override
1197
+ String get api_key_hint_openrouter => 'sk-...';
1198
+
1199
+ @override
1200
+ String get api_key_hint_generic => 'Para servidores autenticados';
1201
+
1202
+ @override
1203
+ String get update_server => 'Servidor de atualização';
1204
+
1205
+ @override
1206
+ String get save_server => 'Salvar servidor';
1207
+
1208
+ @override
1209
+ String get server_updated => 'Servidor atualizado';
1210
+
1211
+ @override
1212
+ String get server_added => 'Servidor adicionado';
1213
+
1214
+ @override
1215
+ String get download_model_title => 'Baixe um modelo';
1216
+
1217
+ @override
1218
+ String get download_model_desc =>
1219
+ 'Escolha um modelo para baixar.\nEle será executado localmente no seu dispositivo.';
1220
+
1221
+ @override
1222
+ String get on_device_android_only =>
1223
+ 'Atualmente, a inferência no dispositivo está disponível apenas no Android.';
1224
+
1225
+ @override
1226
+ String get total_ram => 'RAM total';
1227
+
1228
+ @override
1229
+ String get available => 'Disponível';
1230
+
1231
+ @override
1232
+ String ram_min_required(String fileSize) {
1233
+ return '$fileSize GB de RAM mínimo';
1234
+ }
1235
+
1236
+ @override
1237
+ String download_progress(String percent, String speed) {
1238
+ return '$percent% • $speed';
1239
+ }
1240
+
1241
+ @override
1242
+ String eta_label(String eta) {
1243
+ return 'Hora prevista de chegada: $eta';
1244
+ }
1245
+
1246
+ @override
1247
+ String paused_progress(String percent) {
1248
+ return 'Pausado - $percent%';
1249
+ }
1250
+
1251
+ @override
1252
+ String ram_warning_body_download(String ram, String totalMemory) {
1253
+ return 'Este modelo requer pelo menos $ram GB de RAM, mas seu dispositivo possui $totalMemory. Ele pode não funcionar corretamente ou causar falha no aplicativo.';
1254
+ }
1255
+
1256
+ @override
1257
+ String ram_warning_body_load(String availableRAM, String ram) {
1258
+ return 'Seu dispositivo possui RAM disponível $availableRAM, mas este modelo recomenda pelo menos $ram GB. Carregá-lo pode falhar ou causar instabilidade.';
1259
+ }
1260
+
1261
+ @override
1262
+ String get choose_theme => 'Escolha o tema';
1263
+
1264
+ @override
1265
+ String get choose_theme_desc =>
1266
+ 'Personalize a aparência do aplicativo. Você sempre pode alterar isso mais tarde nas configurações.';
1267
+
1268
+ @override
1269
+ String get theme_card_system => 'Sistema';
1270
+
1271
+ @override
1272
+ String get theme_card_system_sub =>
1273
+ 'Corresponde às configurações do seu dispositivo';
1274
+
1275
+ @override
1276
+ String get theme_card_light => 'Luz';
1277
+
1278
+ @override
1279
+ String get theme_card_light_sub => 'Limpo e brilhante';
1280
+
1281
+ @override
1282
+ String get theme_card_dark => 'Escuro';
1283
+
1284
+ @override
1285
+ String get theme_card_dark_sub => 'Fácil para os olhos';
1286
+
1287
+ @override
1288
+ String get theme_card_claude => 'Cláudio';
1289
+
1290
+ @override
1291
+ String get theme_card_claude_sub => 'Um tema quente com tons de pêssego';
1292
+
1293
+ @override
1294
+ String get stay_updated => 'Fique atualizado';
1295
+
1296
+ @override
1297
+ String get stay_updated_desc =>
1298
+ 'Seja notificado quando o download dos seus modelos de IA terminar ou quando tarefas de longa execução forem concluídas.';
1299
+
1300
+ @override
1301
+ String get notification_benefit_downloads =>
1302
+ 'Progresso do download do modelo';
1303
+
1304
+ @override
1305
+ String get notification_benefit_completions => 'Conclusões de geração';
1306
+
1307
+ @override
1308
+ String get notification_benefit_background =>
1309
+ 'Status das tarefas em segundo plano';
1310
+
1311
+ @override
1312
+ String get allow_notifications => 'Permitir notificações';
1313
+
1314
+ @override
1315
+ String get servers_title => 'Servidores';
1316
+
1317
+ @override
1318
+ String get no_servers_yet => 'Ainda não há servidores';
1319
+
1320
+ @override
1321
+ String get no_servers_desc =>
1322
+ 'Adicione seu primeiro servidor para começar a conversar com modelos de IA.';
1323
+
1324
+ @override
1325
+ String get add_server => 'Adicionar servidor';
1326
+
1327
+ @override
1328
+ String switched_to_server(String name) {
1329
+ return 'Mudou para $name';
1330
+ }
1331
+
1332
+ @override
1333
+ String get edit_server => 'Editar servidor';
1334
+
1335
+ @override
1336
+ String get add_server_title => 'Adicionar servidor';
1337
+
1338
+ @override
1339
+ String get server_type_label => 'Tipo de servidor';
1340
+
1341
+ @override
1342
+ String get server_icon_label => 'Ícone do servidor';
1343
+
1344
+ @override
1345
+ String get default_icon => 'Ícone padrão';
1346
+
1347
+ @override
1348
+ String get server_type_lm_studio_display => 'Estúdio LM';
1349
+
1350
+ @override
1351
+ String get server_type_openai_display => 'Compatível com OpenAI';
1352
+
1353
+ @override
1354
+ String get server_type_ollama_display => 'Ollama';
1355
+
1356
+ @override
1357
+ String get server_type_openrouter_display => 'OpenRouter';
1358
+
1359
+ @override
1360
+ String get server_type_on_device_display => 'No dispositivo';
1361
+
1362
+ @override
1363
+ String get server_address_openrouter => 'openrouter.ai';
1364
+
1365
+ @override
1366
+ String get server_address_on_device => 'Inferência local';
1367
+
1368
+ @override
1369
+ String server_address_format(String host, String port) {
1370
+ return '$host:$port';
1371
+ }
1372
+
1373
+ @override
1374
+ String get default_badge => 'Padrão';
1375
+
1376
+ @override
1377
+ String get set_as_default => 'Definir como padrão';
1378
+
1379
+ @override
1380
+ String get select_icon => 'Selecione o ícone';
1381
+
1382
+ @override
1383
+ String get select_icon_desc => 'Escolha um ícone para o seu servidor';
1384
+
1385
+ @override
1386
+ String get search_icons_hint => 'Pesquisar ícones...';
1387
+
1388
+ @override
1389
+ String get server_icon_stack => 'Pilha de servidores';
1390
+
1391
+ @override
1392
+ String get server_icon_stack2 => 'Pilha de servidores 02';
1393
+
1394
+ @override
1395
+ String get server_icon_stack3 => 'Pilha de servidores 03';
1396
+
1397
+ @override
1398
+ String get server_icon_cloud => 'Nuvem';
1399
+
1400
+ @override
1401
+ String get server_icon_cloud_server => 'Servidor em nuvem';
1402
+
1403
+ @override
1404
+ String get server_icon_mcp => 'Servidor MCP';
1405
+
1406
+ @override
1407
+ String get server_icon_database => 'Banco de dados';
1408
+
1409
+ @override
1410
+ String get server_icon_database1 => 'Banco de dados 01';
1411
+
1412
+ @override
1413
+ String get server_icon_database2 => 'Banco de dados 02';
1414
+
1415
+ @override
1416
+ String get server_icon_cpu => 'CPU';
1417
+
1418
+ @override
1419
+ String get server_icon_chip => 'Chip';
1420
+
1421
+ @override
1422
+ String get server_icon_chip2 => 'Ficha 02';
1423
+
1424
+ @override
1425
+ String get server_icon_computer => 'Computador';
1426
+
1427
+ @override
1428
+ String get server_icon_laptop => 'Portátil';
1429
+
1430
+ @override
1431
+ String get server_icon_terminal => 'Terminal de computador';
1432
+
1433
+ @override
1434
+ String get server_icon_code => 'Código';
1435
+
1436
+ @override
1437
+ String get server_icon_ai_brain => 'Cérebro de IA';
1438
+
1439
+ @override
1440
+ String get server_icon_ai_brain2 => 'Cérebro IA 02';
1441
+
1442
+ @override
1443
+ String get server_icon_ai_cloud => 'Nuvem de IA';
1444
+
1445
+ @override
1446
+ String get server_icon_ai_network => 'Rede de IA';
1447
+
1448
+ @override
1449
+ String get server_icon_ai_chat => 'Bate-papo com IA';
1450
+
1451
+ @override
1452
+ String get server_icon_cellular => 'Rede Celular';
1453
+
1454
+ @override
1455
+ String get server_icon_plug1 => 'Plugue 01';
1456
+
1457
+ @override
1458
+ String get server_icon_plug2 => 'Plugue 02';
1459
+
1460
+ @override
1461
+ String get server_icon_bot => 'Robô';
1462
+
1463
+ @override
1464
+ String get server_icon_bot2 => 'Robô 02';
1465
+
1466
+ @override
1467
+ String get server_icon_robotic => 'Robótico';
1468
+
1469
+ @override
1470
+ String get server_icon_rocket => 'Foguete';
1471
+
1472
+ @override
1473
+ String get server_icon_star => 'Estrela';
1474
+
1475
+ @override
1476
+ String get server_icon_settings1 => 'Configurações 01';
1477
+
1478
+ @override
1479
+ String get server_icon_settings2 => 'Configurações 02';
1480
+
1481
+ @override
1482
+ String get server_icon_home1 => 'Casa 01';
1483
+
1484
+ @override
1485
+ String get server_icon_home2 => 'Casa 02';
1486
+
1487
+ @override
1488
+ String get server_icon_folder1 => 'Pasta 01';
1489
+
1490
+ @override
1491
+ String get server_icon_folder2 => 'Pasta 02';
1492
+
1493
+ @override
1494
+ String get server_icon_file1 => 'Arquivo 01';
1495
+
1496
+ @override
1497
+ String get server_icon_lock => 'Bloquear';
1498
+
1499
+ @override
1500
+ String get server_icon_key => 'Chave 01';
1501
+
1502
+ @override
1503
+ String get server_icon_link => 'Ligação 01';
1504
+
1505
+ @override
1506
+ String get server_icon_globe => 'Globo';
1507
+
1508
+ @override
1509
+ String get server_icon_api => 'API';
1510
+
1511
+ @override
1512
+ String get server_icon_arrow_right => 'Seta para a Direita 01';
1513
+
1514
+ @override
1515
+ String get server_icon_check => 'Verifique o círculo';
1516
+
1517
+ @override
1518
+ String get server_icon_alert => 'Círculo de Alerta';
1519
+
1520
+ @override
1521
+ String get server_icon_info => 'Círculo de Informações';
1522
+
1523
+ @override
1524
+ String get server_icon_zap => 'Zap';
1525
+
1526
+ @override
1527
+ String get server_icon_cloud_upload => 'Carregamento na nuvem';
1528
+
1529
+ @override
1530
+ String get server_icon_cloud_download => 'Download na nuvem';
1531
+
1532
+ @override
1533
+ String get server_icon_refresh => 'Atualizar';
1534
+
1535
+ @override
1536
+ String get server_icon_hard_drive => 'Disco rígido';
1537
+
1538
+ @override
1539
+ String get server_icon_drive => 'Dirigir';
1540
+
1541
+ @override
1542
+ String get personas_title => 'Personagens';
1543
+
1544
+ @override
1545
+ String get persona_category_general => 'Geral';
1546
+
1547
+ @override
1548
+ String get persona_category_coding => 'Codificação';
1549
+
1550
+ @override
1551
+ String get persona_category_education => 'Educação';
1552
+
1553
+ @override
1554
+ String get persona_category_creative => 'Criativo';
1555
+
1556
+ @override
1557
+ String get persona_builtin_section => 'INTEGRADO';
1558
+
1559
+ @override
1560
+ String get persona_my_section => 'MINHAS PESSOAS';
1561
+
1562
+ @override
1563
+ String get clone_edit => 'Clonar e editar';
1564
+
1565
+ @override
1566
+ String get builtin_badge => 'Integrado';
1567
+
1568
+ @override
1569
+ String get no_personas_found => 'Nenhuma persona encontrada';
1570
+
1571
+ @override
1572
+ String get no_personas_desc =>
1573
+ 'Crie sua primeira persona para personalizar o comportamento da IA.';
1574
+
1575
+ @override
1576
+ String get edit_persona => 'Editar personalidade';
1577
+
1578
+ @override
1579
+ String get create_persona => 'Criar personalidade';
1580
+
1581
+ @override
1582
+ String get create_persona_button => 'Criar';
1583
+
1584
+ @override
1585
+ String get emoji_label => 'Emoji';
1586
+
1587
+ @override
1588
+ String get name_label => 'Nome';
1589
+
1590
+ @override
1591
+ String get my_persona_hint => 'Minha personalidade';
1592
+
1593
+ @override
1594
+ String get category_label => 'Categoria';
1595
+
1596
+ @override
1597
+ String get description_optional => 'Descrição (opcional)';
1598
+
1599
+ @override
1600
+ String get description_hint => 'O que essa pessoa faz...';
1601
+
1602
+ @override
1603
+ String get system_prompt => 'Alerta do sistema';
1604
+
1605
+ @override
1606
+ String character_count_max(int currentLen) {
1607
+ return '$currentLen/4000';
1608
+ }
1609
+
1610
+ @override
1611
+ String get no_prompt_placeholder => 'Nenhum aviso ainda...';
1612
+
1613
+ @override
1614
+ String get prompt_hint => 'Você é um assistente prestativo...';
1615
+
1616
+ @override
1617
+ String get prompt_required => 'O prompt do sistema é obrigatório';
1618
+
1619
+ @override
1620
+ String get prompt_max_chars => 'Máximo de 4.000 caracteres';
1621
+
1622
+ @override
1623
+ String get advanced_settings => 'Configurações avançadas';
1624
+
1625
+ @override
1626
+ String get temperature_label => 'Temperatura (0,0-2,0)';
1627
+
1628
+ @override
1629
+ String get top_p_label => 'P superior (0,0-1,0)';
1630
+
1631
+ @override
1632
+ String get temp_hint => '0,7';
1633
+
1634
+ @override
1635
+ String get top_p_hint => '0,9';
1636
+
1637
+ @override
1638
+ String get range_0_2 => '0,0-2,0';
1639
+
1640
+ @override
1641
+ String get range_0_1 => '0,0-1,0';
1642
+
1643
+ @override
1644
+ String get persona_updated => 'Personagem atualizada';
1645
+
1646
+ @override
1647
+ String get persona_created => 'Personagem criada';
1648
+
1649
+ @override
1650
+ String get tts_models_title => 'Modelos de texto para fala';
1651
+
1652
+ @override
1653
+ String get always_available => 'Sempre disponível';
1654
+
1655
+ @override
1656
+ String get tts_system_desc =>
1657
+ 'Usa o mecanismo de conversão de texto em fala integrado do seu dispositivo.\nNão são necessários downloads. A seleção de voz usa as configurações do sistema do seu dispositivo.';
1658
+
1659
+ @override
1660
+ String get downloading_status => 'Baixando...';
1661
+
1662
+ @override
1663
+ String tts_kitten_desc(String size) {
1664
+ return 'TTS neural ultrarrápido com 8 vozes expressivas.\nRequer download do $size.';
1665
+ }
1666
+
1667
+ @override
1668
+ String tts_piper_desc(String size) {
1669
+ return 'Vozes offline rápidas do Piper com 2 vozes expressivas.\nRequer download de $size por voz.';
1670
+ }
1671
+
1672
+ @override
1673
+ String engine_spec(String sizeMb, String ramMb, int voiceCount) {
1674
+ return '$sizeMb MB · $ramMb MB RAM · Vozes $voiceCount';
1675
+ }
1676
+
1677
+ @override
1678
+ String get on_device_models_title => 'Modelos no dispositivo';
1679
+
1680
+ @override
1681
+ String get settings_huggingface_token =>
1682
+ 'Abraçando o token de rosto (opcional)';
1683
+
1684
+ @override
1685
+ String get settings_huggingface_token_desc =>
1686
+ 'Necessário apenas para modelos fechados (por exemplo, Gemma). Obtenha um token em huggingface.co/settings/tokens.';
1687
+
1688
+ @override
1689
+ String get settings_huggingface_token_set => 'Token salvo';
1690
+
1691
+ @override
1692
+ String get settings_huggingface_token_cleared => 'Token limpo';
1693
+
1694
+ @override
1695
+ String get model_requires_huggingface_token =>
1696
+ 'Requer um token de Rosto Abraçado';
1697
+
1698
+ @override
1699
+ String get model_missing_huggingface_token =>
1700
+ 'Este modelo está bloqueado no Hugging Face. Adicione um token em Configurações → Inferência no dispositivo para baixá-lo.';
1701
+
1702
+ @override
1703
+ String get set_huggingface_token => 'Definir token';
1704
+
1705
+ @override
1706
+ String get clear_huggingface_token => 'Limpar';
1707
+
1708
+ @override
1709
+ String get edit_huggingface_token_dialog_title =>
1710
+ 'Abraçando o token de acesso facial';
1711
+
1712
+ @override
1713
+ String get huggingface_token_dialog_hint => 'ah_…';
1714
+
1715
+ @override
1716
+ String get server_type_ollama_desc =>
1717
+ 'Mecanismo de IA local. Nenhuma chave de API é necessária.';
1718
+
1719
+ @override
1720
+ String get server_type_on_device_desc =>
1721
+ 'Funciona no seu telefone. Alguns modelos precisam de um token Hugging Face.';
1722
+
1723
+ @override
1724
+ String get server_type_lm_studio_desc =>
1725
+ 'Servidor API local. Nenhuma chave de API é necessária.';
1726
+
1727
+ @override
1728
+ String get available_models => 'Modelos Disponíveis';
1729
+
1730
+ @override
1731
+ String get device_memory => 'Memória do dispositivo';
1732
+
1733
+ @override
1734
+ String get ram_usage => 'Uso de RAM';
1735
+
1736
+ @override
1737
+ String get memory_healthy => 'Saudável';
1738
+
1739
+ @override
1740
+ String get memory_critical => 'Crítico';
1741
+
1742
+ @override
1743
+ String get memory_low => 'Baixo';
1744
+
1745
+ @override
1746
+ String ram_used(String percent) {
1747
+ return '$percent% usado';
1748
+ }
1749
+
1750
+ @override
1751
+ String get available_ram => 'RAM disponível';
1752
+
1753
+ @override
1754
+ String get total_capacity => 'Capacidade total';
1755
+
1756
+ @override
1757
+ String get loaded_status => 'Carregado';
1758
+
1759
+ @override
1760
+ String get inference_backend => 'Back-end de inferência';
1761
+
1762
+ @override
1763
+ String get backend_ios_notice =>
1764
+ 'Apenas o back-end da CPU está disponível no iOS.';
1765
+
1766
+ @override
1767
+ String get backend_cpu_desc =>
1768
+ 'Funciona em todos os dispositivos. Mais compatível.';
1769
+
1770
+ @override
1771
+ String get backend_gpu_desc =>
1772
+ 'Aceleração OpenCL. Mais rápido em dispositivos suportados.';
1773
+
1774
+ @override
1775
+ String get backend_npu_desc =>
1776
+ 'NPU do fornecedor (Qualcomm/MediaTek). Inferência mais rápida.';
1777
+
1778
+ @override
1779
+ String get select_model_title => 'Selecione o modelo';
1780
+
1781
+ @override
1782
+ String get refresh_models => 'Atualizar modelos';
1783
+
1784
+ @override
1785
+ String get search_models_hint => 'Pesquisar modelos...';
1786
+
1787
+ @override
1788
+ String get no_server_connected => 'Nenhum servidor conectado';
1789
+
1790
+ @override
1791
+ String get add_server_first =>
1792
+ 'Adicione um servidor primeiro para ver os modelos disponíveis.';
1793
+
1794
+ @override
1795
+ String get failed_load_models => 'Falha ao carregar modelos';
1796
+
1797
+ @override
1798
+ String get no_models_available => 'Nenhum modelo disponível';
1799
+
1800
+ @override
1801
+ String no_models_match(String searchQuery) {
1802
+ return 'Nenhum modelo corresponde a \"$searchQuery\"';
1803
+ }
1804
+
1805
+ @override
1806
+ String model_load_failed(String error) {
1807
+ return 'Falha ao carregar modelo: $error';
1808
+ }
1809
+
1810
+ @override
1811
+ String model_unloaded_ollama(String name) {
1812
+ return 'Descarregamento solicitado para $name. Se Ollama estiver acessível, o modelo será liberado imediatamente.';
1813
+ }
1814
+
1815
+ @override
1816
+ String model_unloaded_success(String name) {
1817
+ return '$name descarregado com sucesso';
1818
+ }
1819
+
1820
+ @override
1821
+ String model_unload_failed(String error) {
1822
+ return 'Falha ao descarregar modelo: $error';
1823
+ }
1824
+
1825
+ @override
1826
+ String get unload_from_server => 'Descarregar do servidor';
1827
+
1828
+ @override
1829
+ String context_chip(String ctx) {
1830
+ return '$ctx ctx';
1831
+ }
1832
+
1833
+ @override
1834
+ String get unload_all_models => 'Descarregar tudo';
1835
+
1836
+ @override
1837
+ String loaded_models_count(int count) {
1838
+ return '$count carregado';
1839
+ }
1840
+
1841
+ @override
1842
+ String get all_models_unloaded => 'Todos os modelos descarregados';
1843
+
1844
+ @override
1845
+ String get branch_chat => 'Bate-papo da filial';
1846
+
1847
+ @override
1848
+ String get branch_chat_desc =>
1849
+ 'Iniciar uma nova conversa a partir desta mensagem';
1850
+
1851
+ @override
1852
+ String get edit_assistant_message_desc =>
1853
+ 'Edite o texto da resposta do assistente.';
1854
+
1855
+ @override
1856
+ String switch_to_model(String modelName, Object model) {
1857
+ return 'Mudar para $modelName';
1858
+ }
1859
+
1860
+ @override
1861
+ String download_notification_title(String modelName) {
1862
+ return 'Baixando $modelName...';
1863
+ }
1864
+
1865
+ @override
1866
+ String get download_complete_notification => 'Download concluído!';
1867
+
1868
+ @override
1869
+ String download_complete_body(String modelName) {
1870
+ return '$modelName foi baixado com sucesso.';
1871
+ }
1872
+
1873
+ @override
1874
+ String download_failed_notification(String error) {
1875
+ return 'Falha no download: $error';
1876
+ }
1877
+
1878
+ @override
1879
+ String download_failed_body(String modelName) {
1880
+ return 'Falha ao baixar $modelName.';
1881
+ }
1882
+
1883
+ @override
1884
+ String get engine_name_system => 'Sistema TTS';
1885
+
1886
+ @override
1887
+ String get engine_tagline_system => 'Mecanismo de dispositivo integrado';
1888
+
1889
+ @override
1890
+ String get engine_name_kitten => 'Gatinho TTS';
1891
+
1892
+ @override
1893
+ String get engine_tagline_kitten => 'TTS neural de alta velocidade';
1894
+
1895
+ @override
1896
+ String get engine_name_sherpa => 'Sherpa ONNX VITS';
1897
+
1898
+ @override
1899
+ String get engine_tagline_sherpa => 'Vozes off-line do Piper';
1900
+
1901
+ @override
1902
+ String get voice_jasper => 'Jaspe';
1903
+
1904
+ @override
1905
+ String get voice_bella => 'Bela';
1906
+
1907
+ @override
1908
+ String get voice_bruno => 'Bruno';
1909
+
1910
+ @override
1911
+ String get voice_luna => 'Lua';
1912
+
1913
+ @override
1914
+ String get voice_hugo => 'Hugo';
1915
+
1916
+ @override
1917
+ String get voice_rosie => 'Rosie';
1918
+
1919
+ @override
1920
+ String get voice_leo => 'Leão';
1921
+
1922
+ @override
1923
+ String get voice_kiki => 'Kiki';
1924
+
1925
+ @override
1926
+ String get voice_lessac => 'Lessac (EUA)';
1927
+
1928
+ @override
1929
+ String get voice_ryan => 'Ryan (EUA)';
1930
+
1931
+ @override
1932
+ String get model_qwen_3 => 'Qwen3 0,6B';
1933
+
1934
+ @override
1935
+ String get model_qwen_3_desc =>
1936
+ 'O menor modelo de chat de uso geral. Respostas rápidas, baixo uso de memória.';
1937
+
1938
+ @override
1939
+ String get model_license_apache => 'Apache-2.0';
1940
+
1941
+ @override
1942
+ String get model_qwen_25 => 'Instrução Qwen 2.5 1.5B';
1943
+
1944
+ @override
1945
+ String get model_qwen_25_desc =>
1946
+ 'Qualidade e tamanho equilibrados. Bom para conversas gerais.';
1947
+
1948
+ @override
1949
+ String get model_deepseek => 'DeepSeek R1 Destilar Qwen 1.5B';
1950
+
1951
+ @override
1952
+ String get model_deepseek_desc =>
1953
+ 'Modelo de raciocínio e cadeia de pensamento. Melhor para tarefas lógicas.';
1954
+
1955
+ @override
1956
+ String get model_license_mit => 'MIT';
1957
+
1958
+ @override
1959
+ String get model_gemma => 'Instrução Gemma 4 E2B';
1960
+
1961
+ @override
1962
+ String get model_gemma_desc =>
1963
+ 'Modelo carro-chefe do Google. A mais alta qualidade, requer mais RAM.';
1964
+
1965
+ @override
1966
+ String export_header(String date) {
1967
+ return '*Exportado de LocalMind — $date*';
1968
+ }
1969
+
1970
+ @override
1971
+ String get export_role_user => '## 👤 Usuário';
1972
+
1973
+ @override
1974
+ String get export_role_assistant => '## 🤖 Assistente';
1975
+
1976
+ @override
1977
+ String get export_role_system => '## ⚙️ Sistema';
1978
+
1979
+ @override
1980
+ String get export_role_tool => '## 🔧 Ferramenta';
1981
+
1982
+ @override
1983
+ String get export_text_user => '[USUÁRIO]';
1984
+
1985
+ @override
1986
+ String get export_text_assistant => '[ASSISTENTE]';
1987
+
1988
+ @override
1989
+ String get export_text_system => '[SISTEMA]';
1990
+
1991
+ @override
1992
+ String get export_text_tool => '[FERRAMENTA]';
1993
+
1994
+ @override
1995
+ String get export_label_user => 'USUÁRIO';
1996
+
1997
+ @override
1998
+ String get export_label_assistant => 'ASSISTENTE';
1999
+
2000
+ @override
2001
+ String get export_label_system => 'SISTEMA';
2002
+
2003
+ @override
2004
+ String get export_label_tool => 'FERRAMENTA';
2005
+
2006
+ @override
2007
+ String get select_model_hint =>
2008
+ 'Selecione um modelo para começar a conversar';
2009
+
2010
+ @override
2011
+ String get test_notification_title => 'Notificação de teste';
2012
+
2013
+ @override
2014
+ String get test_notification_body =>
2015
+ 'Esta é uma notificação de teste para o progresso do download do modelo.';
2016
+
2017
+ @override
2018
+ String get tts_supports_background =>
2019
+ 'Suporta reprodução em segundo plano como áudio nativo';
2020
+
2021
+ @override
2022
+ String get tts_other_services_background_note =>
2023
+ 'Nota: Os outros serviços TTS suportam reprodução em segundo plano como áudio nativo.';
2024
+
2025
+ @override
2026
+ String get gguf_imported_models_title => 'Modelos GGUF importados';
2027
+
2028
+ @override
2029
+ String get gguf_imported_models_empty_subtitle =>
2030
+ 'Importe um GGUF do seu dispositivo ou adicione um do Hugging Face. Os modelos importados são executados localmente com llama.cpp.';
2031
+
2032
+ @override
2033
+ String get gguf_imported_models_ready =>
2034
+ 'modelos importados prontos para inferência local.';
2035
+
2036
+ @override
2037
+ String get gguf_curated_models_subtitle =>
2038
+ 'Modelos selecionados no dispositivo que você pode baixar e gerenciar dentro do LocalMind.';
2039
+
2040
+ @override
2041
+ String get gguf_only_supported =>
2042
+ 'Somente modelos GGUF são suportados para esta importação.';
2043
+
2044
+ @override
2045
+ String get gguf_imported_from_local_file => 'importado do arquivo local.';
2046
+
2047
+ @override
2048
+ String get gguf_import_failed => 'Falha ao importar o modelo GGUF';
2049
+
2050
+ @override
2051
+ String get gguf_imported_from_huggingface => 'importado de Hugging Face.';
2052
+
2053
+ @override
2054
+ String get gguf_import_canceled => 'Importação de GGUF cancelada.';
2055
+
2056
+ @override
2057
+ String get gguf_enter_huggingface_url =>
2058
+ 'Insira um URL GGUF de rosto abraçado.';
2059
+
2060
+ @override
2061
+ String get gguf_only_official_huggingface_urls =>
2062
+ 'Apenas URLs oficiais do Hugging Face GGUF são suportados.';
2063
+
2064
+ @override
2065
+ String get gguf_use_https_url =>
2066
+ 'Use um URL HTTPS Hugging Face para importação de GGUF.';
2067
+
2068
+ @override
2069
+ String get gguf_url_must_point_to_file =>
2070
+ 'O URL do Hugging Face deve apontar diretamente para um arquivo .gguf.';
2071
+
2072
+ @override
2073
+ String get gguf_unable_to_detect_file_name =>
2074
+ 'Não foi possível determinar o nome do arquivo GGUF.';
2075
+
2076
+ @override
2077
+ String get gguf_download_empty =>
2078
+ 'O arquivo GGUF baixado estava vazio ou ausente.';
2079
+
2080
+ @override
2081
+ String get gguf_selected_file_missing =>
2082
+ 'O arquivo de modelo selecionado não existe.';
2083
+
2084
+ @override
2085
+ String get gguf_import_action => 'Importar GGUF';
2086
+
2087
+ @override
2088
+ String get gguf_overview_title => 'Traga seus próprios modelos GGUF';
2089
+
2090
+ @override
2091
+ String get gguf_overview_subtitle =>
2092
+ 'Importe um .gguf do armazenamento local ou baixe um diretamente do Hugging Face. Os modelos importados permanecem neste dispositivo e carregam com llama.cpp.';
2093
+
2094
+ @override
2095
+ String get gguf_imported_count_label => 'importado';
2096
+
2097
+ @override
2098
+ String get gguf_local_files_label => 'arquivos locais';
2099
+
2100
+ @override
2101
+ String get gguf_huggingface_label => 'Abraçando o rosto';
2102
+
2103
+ @override
2104
+ String get gguf_import_local_title => 'Importar GGUF local';
2105
+
2106
+ @override
2107
+ String get gguf_import_local_subtitle =>
2108
+ 'Copie um arquivo .gguf deste dispositivo';
2109
+
2110
+ @override
2111
+ String get gguf_import_huggingface_title => 'Importar do rosto que abraça';
2112
+
2113
+ @override
2114
+ String get gguf_import_huggingface_subtitle =>
2115
+ 'Cole um URL GGUF ou caminho de repositório';
2116
+
2117
+ @override
2118
+ String get gguf_no_imported_title => 'Nenhum modelo GGUF importado ainda';
2119
+
2120
+ @override
2121
+ String get gguf_no_imported_subtitle =>
2122
+ 'Você pode trazer seu próprio arquivo GGUF do armazenamento do dispositivo ou colar um URL do Hugging Face ou um caminho de repositório que aponte para um arquivo .gguf.';
2123
+
2124
+ @override
2125
+ String get gguf_import_huggingface_dialog_title =>
2126
+ 'Importar GGUF do Hugging Face';
2127
+
2128
+ @override
2129
+ String get gguf_import_huggingface_dialog_subtitle =>
2130
+ 'Cole um URL direto do GGUF ou um caminho de repositório Hugging Face como `owner/repo/blob/main/model.gguf`. Os links de blob são convertidos automaticamente.';
2131
+
2132
+ @override
2133
+ String get gguf_url_or_repo_path => 'URL GGUF ou caminho do repositório';
2134
+
2135
+ @override
2136
+ String get paste => 'Colar';
2137
+
2138
+ @override
2139
+ String get gguf_browse => 'Navegar pelos GGUFs';
2140
+
2141
+ @override
2142
+ String get gguf_huggingface_token_ready => 'Abraçando o token Face pronto';
2143
+
2144
+ @override
2145
+ String get gguf_huggingface_token_optional =>
2146
+ 'Token opcional, mas recomendado';
2147
+
2148
+ @override
2149
+ String get gguf_huggingface_token_ready_desc =>
2150
+ 'Seu token salvo será usado automaticamente para repositórios fechados ou privados.';
2151
+
2152
+ @override
2153
+ String get gguf_huggingface_token_optional_desc =>
2154
+ 'Requer uma ficha de Abraço de Rosto. Adicione um em Configurações se este GGUF for fechado ou privado.';
2155
+
2156
+ @override
2157
+ String get gguf_downloading => 'Baixando GGUF';
2158
+
2159
+ @override
2160
+ String get gguf_preparing => 'Preparando';
2161
+
2162
+ @override
2163
+ String get gguf_preparing_download => 'Preparando download...';
2164
+
2165
+ @override
2166
+ String get gguf_cancel_import => 'Cancelar importação';
2167
+
2168
+ @override
2169
+ String get clipboard_empty => 'A área de transferência está vazia.';
2170
+
2171
+ @override
2172
+ String get could_not_open_huggingface =>
2173
+ 'Não foi possível abrir o Hugging Face.';
2174
+
2175
+ @override
2176
+ String get gguf_paste_url_error =>
2177
+ 'Cole um URL do Hugging Face GGUF ou um caminho de repositório.';
2178
+
2179
+ @override
2180
+ String get gguf_blob_link => 'Link do blob';
2181
+
2182
+ @override
2183
+ String get gguf_repository_label => 'Repositório';
2184
+
2185
+ @override
2186
+ String get gguf_detected_path_label => 'Caminho detectado';
2187
+
2188
+ @override
2189
+ String get gguf_imported_section_label => 'GGUF importado';
2190
+
2191
+ @override
2192
+ String get gguf_already_available => 'Já disponível neste dispositivo';
2193
+
2194
+ @override
2195
+ String get gguf_curated_models_short => 'Modelos selecionados no dispositivo';
2196
+
2197
+ @override
2198
+ String get execute_tool_title => 'Executar ferramenta';
2199
+
2200
+ @override
2201
+ String get execute_tool_request_desc =>
2202
+ 'O modelo está solicitando a execução da seguinte ferramenta:';
2203
+
2204
+ @override
2205
+ String get reject => 'Rejeitar';
2206
+
2207
+ @override
2208
+ String get approve => 'Aprovar';
2209
+
2210
+ @override
2211
+ String get server_type_help =>
2212
+ 'Escolha o provedor antes de preencher os detalhes da conexão.';
2213
+
2214
+ @override
2215
+ String get server_identity_title => 'Identidade';
2216
+
2217
+ @override
2218
+ String get server_identity_desc =>
2219
+ 'Nomeie este servidor e escolha como ele aparece na lista.';
2220
+
2221
+ @override
2222
+ String get server_connection_title => 'Conexão';
2223
+
2224
+ @override
2225
+ String get server_connection_desc =>
2226
+ 'Use o endereço e a porta expostos pelo seu servidor.';
2227
+
2228
+ @override
2229
+ String get server_authentication_title => 'Autenticação';
2230
+
2231
+ @override
2232
+ String get server_authentication_required_desc =>
2233
+ 'OpenRouter requer uma chave API antes do teste.';
2234
+
2235
+ @override
2236
+ String get server_authentication_optional_desc =>
2237
+ 'Deixe a chave de API vazia se este servidor não exigir uma.';
2238
+
2239
+ @override
2240
+ String get mcp_tools_title => 'Ferramentas MCP';
2241
+
2242
+ @override
2243
+ String get available_tools => 'Ferramentas disponíveis';
2244
+
2245
+ @override
2246
+ String get unable_load_tools => 'Não foi possível carregar ferramentas';
2247
+
2248
+ @override
2249
+ String get no_tools_registered => 'Nenhuma ferramenta cadastrada';
2250
+
2251
+ @override
2252
+ String get no_tools_registered_desc =>
2253
+ 'Ative o servidor MCP de exemplo ou adicione integrações MCP nas configurações de chat.';
2254
+
2255
+ @override
2256
+ String get example_mcp_server_title => 'Exemplo de servidor MCP';
2257
+
2258
+ @override
2259
+ String get example_mcp_server_desc =>
2260
+ 'Registra example.echo e example.word_count por meio do mesmo provedor de ferramentas MCP usado por servidores externos.';
2261
+
2262
+ @override
2263
+ String get disable_example_server => 'Desativar servidor de exemplo';
2264
+
2265
+ @override
2266
+ String get enable_example_server => 'Habilitar servidor de exemplo';
2267
+
2268
+ @override
2269
+ String get built_in_label => 'Integrado';
2270
+
2271
+ @override
2272
+ String get highlights_label => 'Destaques';
2273
+
2274
+ @override
2275
+ String get built_with_label => 'Construído com';
2276
+
2277
+ @override
2278
+ String get local_label => 'Locais';
2279
+
2280
+ @override
2281
+ String get gguf_format_label => 'GGUF';
2282
+
2283
+ @override
2284
+ String get tool_status_requested => 'Solicitado';
2285
+
2286
+ @override
2287
+ String get tool_status_approved => 'Aprovado';
2288
+
2289
+ @override
2290
+ String get tool_status_rejected => 'Rejeitado';
2291
+
2292
+ @override
2293
+ String get tool_status_running => 'Correndo';
2294
+
2295
+ @override
2296
+ String get tool_status_done => 'Concluído';
2297
+
2298
+ @override
2299
+ String get tool_status_failed => 'Falha';
2300
+
2301
+ @override
2302
+ String get model_favorite_toggle => 'Alternar favorito';
2303
+
2304
+ @override
2305
+ String get model_set_default => 'Definir como modelo padrão';
2306
+
2307
+ @override
2308
+ String get model_clear_default => 'Remover como modelo padrão';
2309
+
2310
+ @override
2311
+ String get model_default_badge => 'Padrão';
2312
+
2313
+ @override
2314
+ String get model_note_label => 'Nota';
2315
+
2316
+ @override
2317
+ String get model_note_hint => 'Adicione uma observação sobre este modelo…';
2318
+
2319
+ @override
2320
+ String get unload_models_before_load =>
2321
+ 'Descarregue todos os modelos antes de carregar um novo';
2322
+
2323
+ @override
2324
+ String get temp_chat_keyboard_incognito =>
2325
+ 'Teclado anônimo em bate-papo temporário';
2326
+
2327
+ @override
2328
+ String get temp_chat_keyboard_incognito_desc =>
2329
+ 'Desativa o aprendizado do teclado e sugestões em bate-papos temporários (por exemplo, SwiftKey incógnito).';
2330
+
2331
+ @override
2332
+ String get resume_last_chat => 'Retomar o último bate-papo no lançamento';
2333
+
2334
+ @override
2335
+ String get resume_last_chat_desc =>
2336
+ 'Restaure sua última conversa aberta ao reabrir o aplicativo.';
2337
+
2338
+ @override
2339
+ String get export_all_data => 'Exportar todos os dados';
2340
+
2341
+ @override
2342
+ String get import_all_data => 'Importe todos os dados';
2343
+
2344
+ @override
2345
+ String get export_data_success => 'Backup exportado com sucesso';
2346
+
2347
+ @override
2348
+ String get import_data_success => 'Backup importado com sucesso';
2349
+
2350
+ @override
2351
+ String import_data_failed(String error) {
2352
+ return 'Falha ao importar backup: $error';
2353
+ }
2354
+
2355
+ @override
2356
+ String get import_data_confirm =>
2357
+ 'Importar conversas e personas personalizadas deste backup? Os itens existentes com os mesmos IDs serão atualizados.';
2358
+
2359
+ @override
2360
+ String get import_settings_confirm =>
2361
+ 'Substituir as configurações atuais pelo backup importado?';
2362
+
2363
+ @override
2364
+ String get export_conversations => 'Exportar conversas';
2365
+
2366
+ @override
2367
+ String get import_conversations => 'Importar conversas';
2368
+
2369
+ @override
2370
+ String get export_personas => 'Exportar personas';
2371
+
2372
+ @override
2373
+ String get import_personas => 'Importar personas';
2374
+
2375
+ @override
2376
+ String get export_settings => 'Exportar configurações';
2377
+
2378
+ @override
2379
+ String get import_settings => 'Importar configurações';
2380
+
2381
+ @override
2382
+ String get export_all_zip => 'Exportar tudo (ZIP)';
2383
+
2384
+ @override
2385
+ String get import_all_zip => 'Importar tudo (ZIP)';
2386
+
2387
+ @override
2388
+ String get duplicate_chat => 'Bate-papo duplicado';
2389
+
2390
+ @override
2391
+ String get duplicate_chat_success => 'Bate-papo duplicado';
2392
+
2393
+ @override
2394
+ String get move_to_folder => 'Mover para pasta';
2395
+
2396
+ @override
2397
+ String get remove_from_folder => 'Remover da pasta';
2398
+
2399
+ @override
2400
+ String get create_folder => 'Criar pasta';
2401
+
2402
+ @override
2403
+ String get new_folder => 'Nova pasta';
2404
+
2405
+ @override
2406
+ String get folder_name_hint => 'Nome da pasta';
2407
+
2408
+ @override
2409
+ String get all_chats => 'Todos';
2410
+
2411
+ @override
2412
+ String get unfiled_chats => 'Não arquivado';
2413
+
2414
+ @override
2415
+ String get create => 'Criar';
2416
+
2417
+ @override
2418
+ String get server_path_prefix_label => 'Prefixo do caminho da API';
2419
+
2420
+ @override
2421
+ String get server_path_prefix_hint => '/seu-token secreto';
2422
+
2423
+ @override
2424
+ String get search_message_contents => 'Pesquisar conteúdo da mensagem';
2425
+
2426
+ @override
2427
+ String get message_search_results => 'Correspondências de mensagens';
2428
+
2429
+ @override
2430
+ String get saved_messages_title => 'Mensagens salvas';
2431
+
2432
+ @override
2433
+ String get nav_saved_messages => 'Mensagens salvas';
2434
+
2435
+ @override
2436
+ String get saved_messages_empty =>
2437
+ 'Nenhuma mensagem salva ainda. Marque uma mensagem no menu de opções.';
2438
+
2439
+ @override
2440
+ String get save_message => 'Salvar mensagem';
2441
+
2442
+ @override
2443
+ String get message_saved => 'Mensagem salva';
2444
+
2445
+ @override
2446
+ String token_count(int count) {
2447
+ return 'Tokens $count';
2448
+ }
2449
+
2450
+ @override
2451
+ String estimated_token_count(int count) {
2452
+ return '~Tokens $count (estimado)';
2453
+ }
2454
+
2455
+ @override
2456
+ String get test_tts_section_title => 'Teste de voz';
2457
+
2458
+ @override
2459
+ String get test_tts_hint =>
2460
+ 'Digite o texto para ouvir o mecanismo TTS atual…';
2461
+
2462
+ @override
2463
+ String get test_speak_button => 'Fale';
2464
+
2465
+ @override
2466
+ String get scroll_to_bottom => 'Role para baixo';
2467
+
2468
+ @override
2469
+ String get generate_ai_response => 'Gerar resposta de IA';
2470
+
2471
+ @override
2472
+ String get no_response => 'Sem resposta';
2473
+
2474
+ @override
2475
+ String get export => 'Exportar';
2476
+
2477
+ @override
2478
+ String get import => 'Importar';
2479
+
2480
+ @override
2481
+ String get conversations_label => 'Conversas';
2482
+
2483
+ @override
2484
+ String get personas_label => 'Personagens';
2485
+
2486
+ @override
2487
+ String get settings_label => 'Configurações';
2488
+
2489
+ @override
2490
+ String get export_conversation => 'Exportar conversa';
2491
+
2492
+ @override
2493
+ String get tts_process_markdown => 'Remarcação de processo para fala';
2494
+
2495
+ @override
2496
+ String get tts_process_markdown_desc =>
2497
+ 'Remova a formatação como **negrito** antes de ler em voz alta';
2498
+
2499
+ @override
2500
+ String get tts_skip_seconds => 'Pular intervalo';
2501
+
2502
+ @override
2503
+ String get tts_skip_seconds_desc =>
2504
+ 'Tamanho do salto para avançar e retroceder durante a reprodução';
2505
+
2506
+ @override
2507
+ String tts_skip_seconds_value(int seconds) {
2508
+ return '${seconds}s';
2509
+ }
2510
+
2511
+ @override
2512
+ String get preview_system_prompts => 'Visualizar prompts do sistema';
2513
+
2514
+ @override
2515
+ String get welcome_message_1 => 'Em que posso ajudá-lo hoje?';
2516
+
2517
+ @override
2518
+ String get welcome_message_2 =>
2519
+ 'Pergunte-me qualquer coisa - estarei pronto quando você estiver.';
2520
+
2521
+ @override
2522
+ String get welcome_message_3 =>
2523
+ 'Seus dados são processados localmente e nunca saem do seu dispositivo.';
2524
+
2525
+ @override
2526
+ String get welcome_message_4 =>
2527
+ 'Precisa de ideias? Experimente uma das instruções rápidas.';
2528
+
2529
+ @override
2530
+ String get temporary_chat => 'Bate-papo temporário';
2531
+
2532
+ @override
2533
+ String get temporary_chat_desc =>
2534
+ 'Os bate-papos não são salvos no histórico.';
2535
+
2536
+ @override
2537
+ String get temporary_chat_banner =>
2538
+ 'Bate-papo temporário – não salvo no histórico';
2539
+
2540
+ @override
2541
+ String get temporary_chat_save_warning_title =>
2542
+ 'Salvar mensagem no chat temporário?';
2543
+
2544
+ @override
2545
+ String get temporary_chat_save_warning_body =>
2546
+ 'Este chat é temporário e está oculto no histórico. A mensagem salva ainda aparecerá em Mensagens Salvas.';
2547
+
2548
+ @override
2549
+ String get save_to_history => 'Salvar no histórico';
2550
+
2551
+ @override
2552
+ String get share_conversation => 'Compartilhar conversa';
2553
+
2554
+ @override
2555
+ String get download_tts_audio => 'Baixar áudio';
2556
+
2557
+ @override
2558
+ String get tts_download_unavailable =>
2559
+ 'O download está disponível apenas para Piper e Kitten TTS';
2560
+
2561
+ @override
2562
+ String get tts_download_no_audio =>
2563
+ 'Ainda não há áudio disponível para download';
2564
+
2565
+ @override
2566
+ String get tts_download_success => 'Áudio salvo';
2567
+
2568
+ @override
2569
+ String get return_to_chat => 'Voltar ao bate-papo';
2570
+
2571
+ @override
2572
+ String get return_to_temp_chat => 'Retornar ao bate-papo temporário';
2573
+
2574
+ @override
2575
+ String get insert_saved_message => 'Inserir mensagem salva';
2576
+
2577
+ @override
2578
+ String get insert_saved_message_desc =>
2579
+ 'Escolha uma mensagem salva para adicionar à sua entrada';
2580
+
2581
+ @override
2582
+ String get model_info => 'Informações do modelo';
2583
+
2584
+ @override
2585
+ String get model_name => 'Nome do modelo';
2586
+
2587
+ @override
2588
+ String get model_identifier => 'Identificador';
2589
+
2590
+ @override
2591
+ String get model_capabilities => 'Capacidades';
2592
+
2593
+ @override
2594
+ String get model_api_pricing => 'Preços da API (por 1 milhão de tokens)';
2595
+
2596
+ @override
2597
+ String get not_available => 'Não disponível';
2598
+
2599
+ @override
2600
+ String get save_message_folders => 'Salvar mensagem';
2601
+
2602
+ @override
2603
+ String get remove_from_saved => 'Remover dos salvos';
2604
+
2605
+ @override
2606
+ String get message_already_saved => 'Salvo';
2607
+
2608
+ @override
2609
+ String get stream_ttft => 'Hora do primeiro token';
2610
+
2611
+ @override
2612
+ String get stream_tokens_per_sec => 'Tokens por segundo';
2613
+
2614
+ @override
2615
+ String get stream_stop_reason => 'Pare a razão';
2616
+
2617
+ @override
2618
+ String get stream_input_tokens => 'Tokens de entrada';
2619
+
2620
+ @override
2621
+ String get stream_output_tokens => 'Tokens de saída';
2622
+
2623
+ @override
2624
+ String get stream_generation_time => 'Tempo de geração';
2625
+
2626
+ @override
2627
+ String get attach_image => 'Fotos';
2628
+
2629
+ @override
2630
+ String get attach_text_document => 'Documentos';
2631
+
2632
+ @override
2633
+ String get attach_shortcut_images => 'Fotos';
2634
+
2635
+ @override
2636
+ String get attach_shortcut_documents => 'Arquivos';
2637
+
2638
+ @override
2639
+ String get attach_shortcut_saved => 'Salvo';
2640
+
2641
+ @override
2642
+ String get add_attachment => 'Adicionar anexo';
2643
+
2644
+ @override
2645
+ String get add_to_chat => 'Adicionar ao bate-papo';
2646
+
2647
+ @override
2648
+ String get choose_what_to_attach => 'O que você gostaria de adicionar?';
2649
+
2650
+ @override
2651
+ String get choose_attachment_subtitle =>
2652
+ 'Escolha uma fonte para anexar à sua mensagem';
2653
+
2654
+ @override
2655
+ String get photo_permission_denied =>
2656
+ 'O acesso à foto é necessário para anexar imagens';
2657
+
2658
+ @override
2659
+ String get select_model_prompt => 'Selecione o modelo';
2660
+
2661
+ @override
2662
+ String get characters_label => 'Personagens';
2663
+
2664
+ @override
2665
+ String get exit_temporary_chat_title => 'Sair do bate-papo temporário?';
2666
+
2667
+ @override
2668
+ String get exit_temporary_chat_body =>
2669
+ 'Isso descartará o chat temporário atual e retornará para um novo chat.';
2670
+
2671
+ @override
2672
+ String get saved_message_temp_snap_unavailable =>
2673
+ 'Esta mensagem foi salva de um bate-papo temporário e não pode ser aberta na conversa original.';
2674
+
2675
+ @override
2676
+ String get filter_title => 'Filtro';
2677
+
2678
+ @override
2679
+ String get filter_pinned => 'Fixado';
2680
+
2681
+ @override
2682
+ String get filter_archived => 'Arquivado';
2683
+
2684
+ @override
2685
+ String get filter_temp_chats => 'Bate-papos temporários';
2686
+
2687
+ @override
2688
+ String get filter_user_messages => 'Mensagens do usuário';
2689
+
2690
+ @override
2691
+ String get filter_assistant_messages => 'Mensagens do assistente';
2692
+
2693
+ @override
2694
+ String get archive_chat => 'Arquivo';
2695
+
2696
+ @override
2697
+ String get unarchive_chat => 'Desarquivar';
2698
+
2699
+ @override
2700
+ String conversation_message_count(int count) {
2701
+ String _temp0 = intl.Intl.pluralLogic(
2702
+ count,
2703
+ locale: localeName,
2704
+ other: '$count mensagens',
2705
+ one: '1 mensagem',
2706
+ );
2707
+ return '$_temp0';
2708
+ }
2709
+
2710
+ @override
2711
+ String conversation_character_count(int count) {
2712
+ return 'Caracteres $count';
2713
+ }
2714
+
2715
+ @override
2716
+ String get generate_title_with_ai => 'Gere com IA';
2717
+
2718
+ @override
2719
+ String get generating_title => 'Gerando...';
2720
+
2721
+ @override
2722
+ String get generate_title_failed => 'Não foi possível gerar um título';
2723
+
2724
+ @override
2725
+ String get lm_studio_model_browser_title => 'Procure modelos';
2726
+
2727
+ @override
2728
+ String get lm_studio_model_search_hint =>
2729
+ 'Pesquise modelos por nome ou autor…';
2730
+
2731
+ @override
2732
+ String get lm_studio_staff_picks => 'Escolhas da equipe';
2733
+
2734
+ @override
2735
+ String get lm_studio_community_models => 'Modelos comunitários';
2736
+
2737
+ @override
2738
+ String get lm_studio_no_models => 'Nenhum modelo encontrado';
2739
+
2740
+ @override
2741
+ String lm_studio_models_count(int count) {
2742
+ return 'Modelos $count';
2743
+ }
2744
+
2745
+ @override
2746
+ String get lm_studio_browse_models => 'Navegue e baixe';
2747
+
2748
+ @override
2749
+ String get lm_studio_model_search => 'Pesquisa de modelo LMS';
2750
+
2751
+ @override
2752
+ String get lm_studio_downloads_title => 'Transferências';
2753
+
2754
+ @override
2755
+ String get lm_studio_choose_quant => 'Escolha uma opção de download';
2756
+
2757
+ @override
2758
+ String get lm_studio_use_default_quant => 'Usar padrão';
2759
+
2760
+ @override
2761
+ String get lm_studio_recommended => 'Recomendado';
2762
+
2763
+ @override
2764
+ String get lm_studio_clear_downloads => 'Limpar concluído';
2765
+
2766
+ @override
2767
+ String get lm_studio_no_downloads => 'Ainda não há downloads';
2768
+
2769
+ @override
2770
+ String get lm_studio_downloads_disclaimer =>
2771
+ 'Os downloads são executados no host do LM Studio. Pausar, parar e excluir modelos devem ser feitos nesse computador – não neste aplicativo.';
2772
+
2773
+ @override
2774
+ String get lm_studio_staff_pick => 'Escolha da equipe';
2775
+
2776
+ @override
2777
+ String get lm_studio_params => 'PARÂMETROS';
2778
+
2779
+ @override
2780
+ String get lm_studio_arch => 'ARCO';
2781
+
2782
+ @override
2783
+ String get lm_studio_domain => 'DOMÍNIO';
2784
+
2785
+ @override
2786
+ String get lm_studio_format => 'FORMATO';
2787
+
2788
+ @override
2789
+ String get lm_studio_vision => 'Visão';
2790
+
2791
+ @override
2792
+ String get lm_studio_tool_use => 'Uso de ferramentas';
2793
+
2794
+ @override
2795
+ String get lm_studio_reasoning => 'Raciocínio';
2796
+
2797
+ @override
2798
+ String get openrouter_pricing_free => 'Grátis';
2799
+
2800
+ @override
2801
+ String openrouter_pricing_tooltip(String input, String output) {
2802
+ return 'Entrada $input / Saída $output por 1 milhão de tokens';
2803
+ }
2804
+
2805
+ @override
2806
+ String get lm_studio_download_options => 'Opções de download';
2807
+
2808
+ @override
2809
+ String get lm_studio_download => 'Baixar';
2810
+
2811
+ @override
2812
+ String lm_studio_download_size(String size) {
2813
+ return 'Baixar$size';
2814
+ }
2815
+
2816
+ @override
2817
+ String lm_studio_downloading_percent(int percent) {
2818
+ return 'Baixando $percent%';
2819
+ }
2820
+
2821
+ @override
2822
+ String get lm_studio_readme_unavailable =>
2823
+ 'README não disponível para este modelo.';
2824
+
2825
+ @override
2826
+ String get lm_studio_full_gpu_offload =>
2827
+ 'Possível descarregamento total da GPU';
2828
+
2829
+ @override
2830
+ String get lm_studio_partial_gpu_offload =>
2831
+ 'Possível descarregamento parcial da GPU';
2832
+
2833
+ @override
2834
+ String get lm_studio_likely_too_large => 'Provavelmente muito grande';
2835
+
2836
+ @override
2837
+ String get lm_studio_available_ram_gb => 'RAM disponível (GB, opcional)';
2838
+
2839
+ @override
2840
+ String get lm_studio_available_vram_gb => 'VRAM disponível (GB, opcional)';
2841
+
2842
+ @override
2843
+ String get lm_studio_memory_settings_title => 'Memória para recomendações';
2844
+
2845
+ @override
2846
+ String get lm_studio_memory_settings_desc =>
2847
+ 'Usado para estimar se os modelos cabem na sua máquina no navegador de modelos.';
2848
+
2849
+ @override
2850
+ String get think_button_label => 'Pense';
2851
+
2852
+ @override
2853
+ String get thinking_mode_title => 'Modo de pensamento';
2854
+
2855
+ @override
2856
+ String get reasoning_effort_low => 'Baixo';
2857
+
2858
+ @override
2859
+ String get reasoning_effort_medium => 'Médio';
2860
+
2861
+ @override
2862
+ String get reasoning_effort_high => 'Alto';
2863
+
2864
+ @override
2865
+ String get reasoning_effort_minimal => 'Mínimo';
2866
+
2867
+ @override
2868
+ String get reasoning_effort_xhigh => 'X-Alto';
2869
+
2870
+ @override
2871
+ String get reasoning_effort_max => 'Máx.';
2872
+
2873
+ @override
2874
+ String get reasoning_effort_off => 'Desligado';
2875
+
2876
+ @override
2877
+ String get could_not_read_file => 'Não foi possível ler o arquivo';
2878
+
2879
+ @override
2880
+ String get server_offline => 'Servidor off-line';
2881
+
2882
+ @override
2883
+ String get could_not_establish_connection =>
2884
+ 'Não foi possível estabelecer uma conexão com o servidor. Verifique se o seu servidor está funcionando e se as configurações de host/porta estão corretas.';
2885
+
2886
+ @override
2887
+ String get retry_connection => 'Tentar novamente a conexão';
2888
+
2889
+ @override
2890
+ String get tokens_label => 'Fichas';
2891
+
2892
+ @override
2893
+ String get enter_context_length => 'Insira o comprimento do contexto...';
2894
+
2895
+ @override
2896
+ String get openrouter_disclosure =>
2897
+ 'Ao conectar este provedor, suas mensagens e entradas de chat serão enviadas para seus servidores. LocalMind não rastreia nem armazena suas conversas.';
2898
+
2899
+ @override
2900
+ String get welcome_message_cloud =>
2901
+ 'Suas mensagens são enviadas para seu provedor conectado.';
2902
+
2903
+ @override
2904
+ String get privacy_policy => 'Política de Privacidade';
2905
+
2906
+ @override
2907
+ String get cloud_sync => 'Sincronização em nuvem S3';
2908
+
2909
+ @override
2910
+ String get cloud_sync_description =>
2911
+ 'Sincronização criptografada de ponta a ponta com seu próprio servidor compatível com S3';
2912
+
2913
+ @override
2914
+ String get cloud_sync_endpoint => 'URL do terminal';
2915
+
2916
+ @override
2917
+ String get cloud_sync_bucket => 'Balde';
2918
+
2919
+ @override
2920
+ String get cloud_sync_region => 'Região';
2921
+
2922
+ @override
2923
+ String get cloud_sync_prefix => 'Prefixo';
2924
+
2925
+ @override
2926
+ String get cloud_sync_access_key => 'ID da chave de acesso';
2927
+
2928
+ @override
2929
+ String get cloud_sync_secret_key => 'Chave de acesso secreta';
2930
+
2931
+ @override
2932
+ String get cloud_sync_session_token => 'Token de sessão (opcional)';
2933
+
2934
+ @override
2935
+ String get cloud_sync_passphrase => 'Senha de criptografia';
2936
+
2937
+ @override
2938
+ String get cloud_sync_confirm_passphrase => 'Confirmar senha';
2939
+
2940
+ @override
2941
+ String get cloud_sync_path_style => 'Use endereçamento estilo caminho';
2942
+
2943
+ @override
2944
+ String get cloud_sync_allow_http => 'Permitir HTTP inseguro';
2945
+
2946
+ @override
2947
+ String get cloud_sync_http_warning =>
2948
+ 'HTTP expõe metadados e credenciais de solicitação à rede. Use-o apenas para um servidor S3 local confiável.';
2949
+
2950
+ @override
2951
+ String get cloud_sync_test => 'Conexão de teste';
2952
+
2953
+ @override
2954
+ String get cloud_sync_enable => 'Ativar sincronização criptografada';
2955
+
2956
+ @override
2957
+ String get cloud_sync_now => 'Sincronize agora';
2958
+
2959
+ @override
2960
+ String get cloud_sync_disconnect => 'Desconecte este dispositivo';
2961
+
2962
+ @override
2963
+ String get cloud_sync_last_synced => 'Última sincronização';
2964
+
2965
+ @override
2966
+ String get cloud_sync_never => 'Nunca';
2967
+
2968
+ @override
2969
+ String get cloud_sync_conflicts => 'Conflitos preservados';
2970
+
2971
+ @override
2972
+ String get cloud_sync_passphrase_mismatch => 'As senhas não correspondem';
2973
+
2974
+ @override
2975
+ String get crash_report_title => 'Algo deu errado';
2976
+
2977
+ @override
2978
+ String get crash_report_stack_trace => 'Rastreamento de pilha';
2979
+
2980
+ @override
2981
+ String get crash_report_tap_to_expand => 'Toque para expandir';
2982
+
2983
+ @override
2984
+ String get crash_report_button => 'Denunciar esta falha';
2985
+
2986
+ @override
2987
+ String get crash_try_again => 'Tente novamente';
2988
+
2989
+ @override
2990
+ String get crash_report_empty_stack => '<vazio>';
2991
+
2992
+ @override
2993
+ String get crash_report_disclaimer =>
2994
+ 'Os relatórios abrem o GitHub com diagnósticos pré-preenchidos. Você permanece no controle — nada é enviado automaticamente. Revise e remova qualquer conteúdo sensível antes de enviar.';
2995
+
2996
+ @override
2997
+ String get crash_report_copied => 'Copiado para a área de transferência';
2998
+
2999
+ @override
3000
+ String get report_a_problem => 'Informar um problema';
3001
+
3002
+ @override
3003
+ String get rename_folder => 'Renomear pasta';
3004
+
3005
+ @override
3006
+ String get delete_folder => 'Excluir pasta';
3007
+
3008
+ @override
3009
+ String get delete_folder_title => 'Excluir pasta?';
3010
+
3011
+ @override
3012
+ String delete_folder_body(String name) {
3013
+ return 'Tem certeza de que deseja excluir \"$name\"? As conversas ou mensagens salvas serão movidas de volta para \"Não arquivadas\". Isto não pode ser desfeito.';
3014
+ }
3015
+
3016
+ @override
3017
+ String get folder_name_required => 'Por favor insira um nome de pasta';
3018
+
3019
+ @override
3020
+ String get model_required_toast =>
3021
+ 'Você precisa selecionar um modelo primeiro';
3022
+
3023
+ @override
3024
+ String get settings_concise_voice_responses =>
3025
+ 'Respostas concisas no modo de voz';
3026
+
3027
+ @override
3028
+ String get settings_concise_voice_responses_desc =>
3029
+ 'Mantenha as respostas do LLM breves (1 parágrafo curto) e faça perguntas de acompanhamento em modo de voz.';
3030
+
3031
+ @override
3032
+ String get s3_connection_succeeded => 'Conexão S3 bem-sucedida.';
3033
+
3034
+ @override
3035
+ String failed_to_open_url(String error) {
3036
+ return 'Falha ao abrir URL: $error';
3037
+ }
3038
+
3039
+ @override
3040
+ String failed_to_copy(String error) {
3041
+ return 'Falha ao copiar: $error';
3042
+ }
3043
+
3044
+ @override
3045
+ String get file_explorer_not_found =>
3046
+ 'Nenhum explorador de arquivos encontrado. Certifique-se de que um aplicativo gerenciador de arquivos esteja instalado e ativado em seu dispositivo.';
3047
+
3048
+ @override
3049
+ String export_data_failed(String error) {
3050
+ return 'Falha ao exportar backup: $error';
3051
+ }
3052
+
3053
+ @override
3054
+ String file_pick_failed(String error) {
3055
+ return 'Falha ao selecionar arquivo: $error';
3056
+ }
3057
+
3058
+ @override
3059
+ String image_pick_failed(String error) {
3060
+ return 'Falha ao selecionar imagem: $error';
3061
+ }
3062
+
3063
+ @override
3064
+ String get calendar_access => 'Acesso ao calendário';
3065
+
3066
+ @override
3067
+ String get calendar_access_desc =>
3068
+ 'Permitir que a IA leia e crie eventos de calendário';
3069
+
3070
+ @override
3071
+ String get calendar_permission_denied =>
3072
+ 'Permissão de calendário negada. Conceda acesso ao calendário nas configurações do seu dispositivo.';
3073
+
3074
+ @override
3075
+ String get location_access => 'Acesso à localização';
3076
+
3077
+ @override
3078
+ String get location_access_desc =>
3079
+ 'Permitir que a IA obtenha sua localização atual com o nome do lugar';
3080
+
3081
+ @override
3082
+ String get location_permission_denied =>
3083
+ 'Permissão de localização negada. Conceda acesso à localização nas configurações do seu dispositivo.';
3084
+
3085
+ @override
3086
+ String get builtin_ai_not_supported =>
3087
+ 'A IA integrada não é compatível com este dispositivo.';
3088
+
3089
+ @override
3090
+ String get builtin_ai_unsupported_desc =>
3091
+ 'O hardware ou sistema operacional do seu dispositivo não oferece suporte à IA do sistema no dispositivo (por exemplo, Gemini Nano/Apple Intelligence). Escolha um modelo para download.';
3092
+
3093
+ @override
3094
+ String get builtin_ai_unsupported_chip => 'Não compatível';
3095
+
3096
+ @override
3097
+ String get builtin_ai_enable => 'Habilitar';
3098
+}
lib/l10n/app_pt.arb
new
+933
@@ -0,0 +1,933 @@
1
+{
2
+ "@@locale": "pt",
3
+ "app_name": "LocalMind",
4
+ "app_tagline": "Sua IA. Seu dispositivo. Suas regras.",
5
+ "app_version": "1.0.0",
6
+ "cancel": "Cancelar",
7
+ "confirm": "Confirmar",
8
+ "delete": "Excluir",
9
+ "save": "Salvar",
10
+ "retry": "Tentar novamente",
11
+ "close": "Fechar",
12
+ "done": "Concluído",
13
+ "continue_action": "Continuar",
14
+ "skip": "Pular",
15
+ "install": "Instalar",
16
+ "download": "Baixar",
17
+ "resume": "Currículo",
18
+ "pause": "Pausa",
19
+ "stop": "Pare",
20
+ "edit": "Editar",
21
+ "preview": "Visualização",
22
+ "unload": "Descarregar",
23
+ "load": "Carregar",
24
+ "rename": "Renomear",
25
+ "pin": "Fixar",
26
+ "unpin": "Liberar",
27
+ "share": "Compartilhar",
28
+ "copy": "Copiar",
29
+ "copied": "Copiado!",
30
+ "copied_to_clipboard": "Copiado para a área de transferência",
31
+ "select": "Selecione",
32
+ "active": "Ativo",
33
+ "all": "Todos",
34
+ "none": "Nenhum",
35
+ "none_selected": "Nenhum selecionado",
36
+ "online": "On-line",
37
+ "connected": "Conectado",
38
+ "checking": "Verificando",
39
+ "offline": "Off-line",
40
+ "error": "Erro",
41
+ "unknown_error": "Erro desconhecido",
42
+ "not_now": "Agora não",
43
+ "enable": "Habilitar",
44
+ "proceed_anyway": "Prossiga de qualquer maneira",
45
+ "test_connection": "Conexão de teste",
46
+ "testing": "Testando...",
47
+ "connection_successful": "Conexão bem-sucedida!",
48
+ "connection_failed": "Falha na conexão. Verifique suas configurações.",
49
+ "save_continue": "Salvar e continuar",
50
+ "save_changes": "Salvar alterações",
51
+ "finish_setup": "Concluir configuração",
52
+ "start_new_chat": "Iniciar novo bate-papo",
53
+ "cannot_undo": "Esta ação não pode ser desfeita.",
54
+ "ram_warning": "Aviso de RAM",
55
+ "recommended": "RECOMENDADO",
56
+ "may_be_large": "Pode ser muito grande para este dispositivo",
57
+ "calculating": "Calculando...",
58
+ "download_failed": "Falha no download",
59
+ "downloaded": "Baixado",
60
+ "not_downloaded": "Não baixado",
61
+ "installed": "Instalado",
62
+ "not_installed": "Não instalado",
63
+ "loading": "Carregando...",
64
+ "thinking": "Pensando",
65
+ "processing": "Processando...",
66
+ "initializing": "Inicializando...",
67
+ "ready": "Pronto",
68
+ "preparing_app": "Preparando aplicativo...",
69
+ "initializing_services": "Inicializando serviços...",
70
+ "configuring_server": "Configurando servidor...",
71
+ "startup_failed": "Falha na inicialização",
72
+ "something_went_wrong": "Algo deu errado",
73
+ "delete_model_title": "Excluir modelo",
74
+ "delete_model_body": "Tem certeza de que deseja excluir o {name}?",
75
+ "delete_model_body_with_size": "Tem certeza de que deseja excluir o {name}? Isso liberará aproximadamente {size} de espaço.\n\nVocê pode baixar este modelo novamente mais tarde, se necessário.",
76
+ "delete_voice_title": "Excluir voz",
77
+ "delete_voice_body": "Tem certeza de que deseja excluir o {name}? Isso liberará aproximadamente {size} de espaço.\n\nVocê pode baixar esta voz novamente mais tarde, se necessário.",
78
+ "delete_server_title": "Excluir servidor",
79
+ "delete_server_body": "Tem certeza de que deseja excluir \"{name}\"? Isto não pode ser desfeito.",
80
+ "delete_conversation_title": "Excluir conversa?",
81
+ "delete_conversation_body": "Tem certeza de que deseja excluir \"{title}\"? Isto não pode ser desfeito.",
82
+ "delete_message_title": "Excluir mensagem?",
83
+ "delete_persona_title": "Excluir \"{name}\"?",
84
+ "delete_persona_body": "Isto não pode ser desfeito.",
85
+ "delete_builtin_persona_body": "Esta é uma persona embutida. Você pode restaurá-lo mais tarde em Configurações.",
86
+ "restore_builtin_personas": "Restaurar personas padrão",
87
+ "restore_builtin_personas_desc": "Adicione novamente quaisquer personas integradas que você excluiu",
88
+ "restore_builtin_personas_success": "Personas padrão restauradas",
89
+ "clear_personas": "Personalidades claras",
90
+ "enable_image_compression": "Compacte imagens antes de enviar",
91
+ "enable_image_compression_desc": "Redimensione e compacte imagens anexadas para que os uploads permaneçam dentro dos limites do servidor",
92
+ "image_compression_level": "Agressividade de compressão",
93
+ "image_compression_level_desc": "Maior agressividade produz uploads menores com qualidade inferior",
94
+ "image_compression_level_low": "Baixo",
95
+ "image_compression_level_medium": "Médio",
96
+ "image_compression_level_high": "Alto",
97
+ "sort_models_tooltip": "Classificar modelos",
98
+ "sort_by_favorites": "Favoritos primeiro",
99
+ "sort_by_name": "Nome (A-Z)",
100
+ "sort_by_size_smallest": "Tamanho (menor primeiro)",
101
+ "sort_by_size_largest": "Tamanho (maior primeiro)",
102
+ "sort_by_context_length": "Comprimento do contexto",
103
+ "bulk_ai_rename_progress": "Renomeando {done}/{total}...",
104
+ "selected_count": "{count} selecionado",
105
+ "ai_rename_tooltip": "Renomear selecionado com IA",
106
+ "new_chat_in_folder_tooltip": "Novo bate-papo nesta pasta",
107
+ "total_tokens_count": "Tokens {count}",
108
+ "smart_replies_use_persona": "Use persona em respostas inteligentes",
109
+ "smart_replies_use_persona_desc": "As respostas sugeridas correspondem ao tom da persona ativa, em vez de um assistente genérico",
110
+ "keep_persona_on_new_chat": "Mantenha a persona no novo chat",
111
+ "keep_persona_on_new_chat_desc": "Não limpe a(s) persona(s) selecionada(s) após iniciar um novo chat",
112
+ "role_swap_button_enabled": "Mostrar botão de troca de função",
113
+ "role_swap_button_enabled_desc": "Mostrar um botão na entrada do chat para enviar sua mensagem como assistente em vez de usuário, sem gerar resposta",
114
+ "send_as_user_tooltip": "Enviar como usuário",
115
+ "send_as_assistant_tooltip": "Enviar como assistente (sem resposta)",
116
+ "insert_without_generating_tooltip": "Inserir sem gerar",
117
+ "token_usage_title": "Uso de token",
118
+ "total_tokens_label": "Tokens usados",
119
+ "usage_percent_label": "Contexto usado",
120
+ "export_choice_title": "Exportar",
121
+ "export_choice_body": "Como você gostaria de exportar isso?",
122
+ "copy_to_clipboard": "Copiar para a área de transferência",
123
+ "bulk_export_conversations_success": "Conversas {count} exportadas",
124
+ "bulk_ai_rename_confirm_title": "Renomear com IA?",
125
+ "bulk_ai_rename_confirm_body": "Isso solicitará que a IA gere um novo título para cada uma das conversas selecionadas pelo {count}, substituindo os títulos atuais. Isso pode demorar um pouco e não pode ser desfeito.",
126
+ "sort_by_modified_date": "Última modificação",
127
+ "sort_by_created_date": "Data de criação",
128
+ "sort_title": "Classificar",
129
+ "clear_conversation_title": "Conversa clara?",
130
+ "clear_conversation_body": "Isso excluirá todas as mensagens desta conversa.",
131
+ "clear": "Limpar",
132
+ "label_completed": "{label} concluído",
133
+ "error_with_message": "Erro: {error}",
134
+ "preview_failed": "Falha na visualização: {error}",
135
+ "loading_model": "Carregando {modelId}...",
136
+ "model_loaded": "Modelo carregado: {modelId} ({backend})",
137
+ "no_model_loaded": "Nenhum modelo carregado. Toque em “Gerenciar modelos no dispositivo” para baixar e carregar um modelo.",
138
+ "loading_model_error": "Erro: {error}",
139
+ "delete_conversation": "Excluir conversa?",
140
+ "nav_history": "História",
141
+ "nav_servers": "Servidores",
142
+ "nav_local_models": "Modelos Locais",
143
+ "nav_tts": "Texto para fala",
144
+ "nav_personas": "Personagens",
145
+ "nav_settings": "Configurações",
146
+ "nav_new_chat": "Novo bate-papo",
147
+ "search_hint": "Pesquisar conversas...",
148
+ "no_server_selected": "Nenhum servidor selecionado",
149
+ "switch_server": "Trocar servidor",
150
+ "switch_server_subtitle": "Escolha um servidor para se conectar",
151
+ "manage_servers": "Gerenciar servidores",
152
+ "open_source": "Código aberto",
153
+ "open_source_desc": "LocalMind é de código aberto. Acompanhe nosso progresso ou contribua no GitHub.",
154
+ "star_on_github": "Estrela no GitHub",
155
+ "add_more": "Adicionar mais",
156
+ "on_github": "no GitHub",
157
+ "could_not_open_github": "Não foi possível abrir o GitHub.",
158
+ "settings_title": "Configurações",
159
+ "settings_appearance": "Aparência",
160
+ "settings_language": "Idioma",
161
+ "language_system_default": "Padrão do sistema",
162
+ "settings_tts": "Conversão de texto para fala",
163
+ "settings_android_assistant": "Assistente Android",
164
+ "assistant_default_title": "Use LocalMind como seu assistente",
165
+ "assistant_default_description": "Inicie o modo de voz com o gesto do assistente do Android ou o atalho do botão liga / desliga.",
166
+ "assistant_status_active": "Ativo",
167
+ "assistant_status_available": "Não ativo",
168
+ "assistant_status_manual": "Verifique as configurações",
169
+ "assistant_status_unsupported": "Indisponível",
170
+ "assistant_status_checking": "Verificando…",
171
+ "assistant_set_default": "Definir como assistente padrão",
172
+ "assistant_open_settings": "Abra as configurações do assistente Android",
173
+ "assistant_error": "Não foi possível abrir as configurações do assistente Android.",
174
+ "settings_behavior": "Comportamento",
175
+ "settings_on_device": "Inferência no dispositivo",
176
+ "settings_default_server": "Servidor padrão",
177
+ "settings_default_persona": "Personagem padrão",
178
+ "settings_default_model": "Modelo padrão",
179
+ "settings_default_model_desc": "Selecionado automaticamente quando você inicia um novo bate-papo.",
180
+ "settings_privacy": "Privacidade",
181
+ "settings_data_management": "Gerenciamento de dados",
182
+ "settings_about": "Sobre",
183
+ "theme": "Tema",
184
+ "theme_system": "Sistema",
185
+ "theme_light": "Luz",
186
+ "theme_dark": "Escuro",
187
+ "theme_claude": "Cláudio",
188
+ "font_size": "Tamanho da fonte",
189
+ "font_size_desc": "Ajuste o tamanho do texto no chat.",
190
+ "font_preview": "A rápida raposa marrom salta sobre o cachorro preguiçoso.",
191
+ "code_theme_dark": "Tema de código (escuro)",
192
+ "code_theme_light": "Tema de código (claro)",
193
+ "code_theme_desc": "Escolha o tema de destaque de sintaxe para blocos de código.",
194
+ "tts_engine": "Motor TTS",
195
+ "tts_engine_system": "Sistema TTS",
196
+ "tts_engine_kitten": "Gatinho TTS",
197
+ "voice": "Voz",
198
+ "voice_female": "Feminino",
199
+ "voice_male": "Masculino",
200
+ "voice_other": "Outro",
201
+ "tts_speed": "Velocidade TTS",
202
+ "tts_speed_desc": "Ajuste a taxa de reprodução.",
203
+ "manage_tts_models": "Gerenciar modelos TTS",
204
+ "manage_on_device_models": "Gerenciar modelos no dispositivo",
205
+ "enable_smart_reply": "Respostas inteligentes no dispositivo",
206
+ "ai_user_response_enabled": "Mensagem do usuário AI (manter envio)",
207
+ "ai_user_response_enabled_desc": "Segure o botão enviar por 3 segundos para que a IA escreva e envie sua próxima mensagem",
208
+ "ai_user_response_tooltip": "Gere mensagem do usuário com IA",
209
+ "streaming_responses": "Respostas de streaming",
210
+ "auto_generate_titles": "Gerar títulos automaticamente",
211
+ "send_on_enter": "Enviar ao entrar",
212
+ "show_system_messages": "Enviar prompt padrão do sistema",
213
+ "show_system_messages_desc": "Quando nenhuma persona for selecionada, envie um prompt padrão do sistema do assistente com cada solicitação",
214
+ "show_system_messages_in_chat": "Mostrar mensagens do sistema no bate-papo",
215
+ "show_system_messages_in_chat_desc": "Exibir mensagens do sistema (por exemplo, de um backup importado) como balões visíveis na conversa",
216
+ "auto_collapse_thinking": "Pensamento de colapso automático",
217
+ "auto_collapse_thinking_desc": "Recolher automaticamente o processo de raciocínio após a geração da resposta ser concluída quando uma resposta principal estiver presente",
218
+ "haptic_feedback": "Feedback tátil",
219
+ "enable_mcp": "Habilitar MCP",
220
+ "new_chat_mcp_default": "Novo padrão MCP de bate-papo",
221
+ "show_data_indicator": "Mostrar indicador de dados",
222
+ "privacy_info": "\"LocalMind nunca vê seus dados\"",
223
+ "delete_all_conversations": "Excluir todas as conversas",
224
+ "reset_settings_defaults": "Redefinir as configurações para os padrões",
225
+ "chat_title": "LocalMind",
226
+ "chat_parameters_tooltip": "Parâmetros de bate-papo",
227
+ "change_persona": "Mudar de personalidade",
228
+ "set_persona": "Definir personalidade",
229
+ "remove_persona": "Remover personalidade",
230
+ "clear_conversation": "Conversa clara",
231
+ "connection_error": "Erro de conexão. Verifique seu servidor.",
232
+ "disconnected": "Desconectado do servidor.",
233
+ "configure": "Configurar",
234
+ "select_model": "Selecione o modelo",
235
+ "select_persona": "Selecione a personalidade",
236
+ "manage_personas": "Gerenciar personas",
237
+ "personas_combine_hint": "Selecione várias personas no chat para empilhar as solicitações do sistema.",
238
+ "start_conversation": "Inicie uma conversa",
239
+ "recent_chats": "Bate-papos recentes",
240
+ "see_all": "Ver tudo",
241
+ "quick_write": "Ajude-me a escrever uma função",
242
+ "quick_explain": "Explique este código",
243
+ "quick_debug": "Depure isso para mim",
244
+ "quick_async": "Como faço para usar assíncrono/aguardar?",
245
+ "history_missing_title": "História ausente",
246
+ "history_missing_desc": "As mensagens neste bate-papo foram excluídas ou o registro do histórico está corrompido.",
247
+ "technical_details": "Detalhes técnicos",
248
+ "last_error": "Último erro:",
249
+ "copy_info": "Copiar informações",
250
+ "conversation_id": "ID da conversa",
251
+ "created_at": "Criado em",
252
+ "expected_messages": "Mensagens esperadas",
253
+ "debug_dialog_desc": "Informações de diagnóstico para ajudar a identificar problemas de sincronização.",
254
+ "chat_input_hint": "Pergunte qualquer coisa",
255
+ "send_message_tooltip": "Enviar mensagem",
256
+ "stop_generation_tooltip": "Parar geração",
257
+ "attach_images_tooltip": "Anexe imagens ou texto",
258
+ "start_listening_tooltip": "Comece a ouvir",
259
+ "stop_listening_tooltip": "Pare de ouvir",
260
+ "tool_label": "Ferramenta: {toolCallId}",
261
+ "tool_unknown": "Ferramenta: Desconhecida",
262
+ "message_options": "Opções de mensagem",
263
+ "copy_markdown": "Copiar como Markdown",
264
+ "copied_markdown": "Copiado como Markdown",
265
+ "read_aloud": "Leia em voz alta",
266
+ "stop_reading": "Pare de ler",
267
+ "more": "Mais",
268
+ "character_count": "Caracteres {length}",
269
+ "edit_message": "Editar mensagem",
270
+ "edit_message_desc": "Salvar removerá a resposta do assistente abaixo e a regenerará.",
271
+ "save_regenerate": "Salvar e regenerar",
272
+ "chat_settings_title": "Configurações de bate-papo",
273
+ "reset_defaults": "Redefinir padrões",
274
+ "parameters_tab": "Parâmetros",
275
+ "mcp_tab": "PCM",
276
+ "temperature": "Temperatura",
277
+ "temperature_desc": "Controla a aleatoriedade: Superior = Criativo, Inferior = Focado",
278
+ "top_p": "Parte superior P",
279
+ "top_p_desc": "Limite de amostragem de núcleo",
280
+ "max_tokens": "Máximo de tokens",
281
+ "max_tokens_desc": "Limite de resposta",
282
+ "context_length": "Comprimento do contexto",
283
+ "context_length_desc": "Janela de histórico",
284
+ "mcp_disabled_warning": "O MCP está desabilitado globalmente. Ative-o em Configurações para usar esses recursos.",
285
+ "mcp_enable_chat": "Habilite o MCP para este chat",
286
+ "auto_execute_tools": "Ferramentas de execução automática",
287
+ "beta_label": "Beta",
288
+ "experimental_label": "Experimental",
289
+ "add_ephemeral_mcp": "Adicionar servidor MCP efêmero",
290
+ "mcp_label_placeholder": "Etiqueta",
291
+ "mcp_url_placeholder": "URL (https://...)",
292
+ "active_integrations": "Integrações Ativas",
293
+ "import_mcp_json": "Importar JSON",
294
+ "import_mcp_json_dialog_title": "Importar JSON de configuração do MCP",
295
+ "import_mcp_json_instructions": "Copie seu JSON mcpServers diretamente do LM Studio (mcp.json) ou cole um array de plugins abaixo:",
296
+ "import_mcp_json_placeholder": "Cole mcpServers JSON ou lista de plugins aqui...",
297
+ "mcp_import_success": "Integrações {count} importadas com sucesso",
298
+ "mcp_import_failed": "Nenhuma integração MCP válida encontrada em JSON",
299
+ "enable_notifications": "Habilitar notificações",
300
+ "enable_notifications_desc": "Seja notificado quando o download dos modelos terminar.",
301
+ "chat_history_title": "Histórico de bate-papo",
302
+ "conversation_just_now": "Agora mesmo",
303
+ "conversation_minutes_ago": "{minutes}m atrás",
304
+ "conversation_hours_ago": "{hours}h atrás",
305
+ "conversation_yesterday": "Ontem",
306
+ "conversation_days_ago": "{days}d atrás",
307
+ "conversation_date": "{month}/{day}/{year}",
308
+ "options_tooltip": "Opções",
309
+ "no_results_found": "Nenhum resultado encontrado",
310
+ "no_conversations_yet": "Ainda não há conversas",
311
+ "try_different_search": "Experimente um termo de pesquisa diferente",
312
+ "start_new_conversation": "Inicie uma nova conversa",
313
+ "rename_conversation": "Renomear conversa",
314
+ "enter_new_title": "Insira o novo título",
315
+ "pinned_section": "FIXADO",
316
+ "today_section": "HOJE",
317
+ "yesterday_section": "ONTEM",
318
+ "previous_7_days": "7 DIAS ANTERIORES",
319
+ "previous_30_days": "30 DIAS ANTERIORES",
320
+ "older_section": "MAIS ANTIGO",
321
+ "onboarding_choose_language": "Escolha o idioma",
322
+ "onboarding_choose_language_desc": "Selecione seu idioma preferido. Você pode alterar isso a qualquer momento nas configurações.",
323
+ "onboarding_localmind": "MENTE LOCAL",
324
+ "onboarding_connect_server": "Conecte seu\nServidor",
325
+ "onboarding_connect_desc": "Conecte-se ao LM Studio, Ollama,\nOllama Cloud ou OpenRouter para\ncomece sua experiência privada de IA.",
326
+ "openai_compatible_api": "API compatível com OpenAI",
327
+ "https_requires_ssl": "HTTPS requer SSL",
328
+ "most_local_setups_use_http": "A maioria das configurações locais usa http://",
329
+ "onboarding_welcome": "Bem-vindo à LocalMind",
330
+ "server_type_on_device": "No dispositivo",
331
+ "server_type_lm_studio": "Estúdio LM",
332
+ "server_type_ollama": "Ollama",
333
+ "server_type_ollama_cloud": "Nuvem de Ollama",
334
+ "server_type_ollama_cloud_sub": "GERENCIADO NA NUVEM",
335
+ "server_type_ollama_cloud_display": "Nuvem de Ollama",
336
+ "server_address_ollama_cloud": "ollama. com",
337
+ "ollama_cloud_disclosure": "Ao conectar o Ollama Cloud, suas mensagens de bate-papo e entradas são enviadas aos servidores gerenciados do Ollama para inferência. LocalMind não rastreia nem armazena suas conversas. Você pode revogar essa chave a qualquer momento em ollama.com/settings/keys.",
338
+ "api_key_required_ollama_cloud": "Chave de API necessária para Ollama Cloud",
339
+ "api_key_hint_ollama_cloud": "Cole sua chave de API do Ollama Cloud",
340
+ "add_server_ollama_cloud_subtitle": "Conecte-se ao Ollama Cloud com uma chave de API em ollama.com/settings/keys para acessar modelos de nuvem gerenciados.",
341
+ "add_server_openrouter_subtitle": "Conecte-se através do OpenRouter com uma chave de API válida e mantenha este perfil pronto para roteamento de modelo.",
342
+ "add_server_endpoint_subtitle": "Configure um endpoint local ou auto-hospedado e verifique a conexão antes de salvar.",
343
+ "server_type_openrouter": "OpenRouter",
344
+ "server_type_openrouter_sub": "NUVEM UNIFICADA",
345
+ "ready_continue": "PRONTO PARA CONTINUAR",
346
+ "waiting_selection": "AGUARDANDO SELEÇÃO",
347
+ "setup_connection": "Configurar conexão",
348
+ "setup_connection_desc": "Configure seu servidor {server} para começar a conversar.",
349
+ "server_name": "Nome do servidor",
350
+ "name_required": "Nome obrigatório",
351
+ "name_max_50": "Máximo de 50 caracteres",
352
+ "host_label": "Host/Endereço IP",
353
+ "host_required": "Anfitrião necessário",
354
+ "port_label": "Porto",
355
+ "port_required": "Porta necessária",
356
+ "port_invalid": "Deve ser um número",
357
+ "port_range": "Insira uma porta válida (1-65535)",
358
+ "api_key_required": "Chave API *",
359
+ "api_key_optional": "Chave de API (opcional)",
360
+ "api_key_required_openrouter": "Chave de API necessária para OpenRouter",
361
+ "api_key_format": "As chaves da API OpenRouter começam com sk-",
362
+ "my_server_hint": "Meu servidor",
363
+ "name_length_validation": "O nome deve ter 50 caracteres ou menos",
364
+ "host_valid": "Insira um nome de host ou endereço IP válido",
365
+ "api_key_hint_openrouter": "sk-...",
366
+ "api_key_hint_generic": "Para servidores autenticados",
367
+ "update_server": "Servidor de atualização",
368
+ "save_server": "Salvar servidor",
369
+ "server_updated": "Servidor atualizado",
370
+ "server_added": "Servidor adicionado",
371
+ "download_model_title": "Baixe um modelo",
372
+ "download_model_desc": "Escolha um modelo para baixar.\nEle será executado localmente no seu dispositivo.",
373
+ "on_device_android_only": "Atualmente, a inferência no dispositivo está disponível apenas no Android.",
374
+ "total_ram": "RAM total",
375
+ "available": "Disponível",
376
+ "ram_min_required": "{fileSize} GB de RAM mínimo",
377
+ "download_progress": "{percent}% • {speed}",
378
+ "eta_label": "Hora prevista de chegada: {eta}",
379
+ "paused_progress": "Pausado - {percent}%",
380
+ "ram_warning_body_download": "Este modelo requer pelo menos {ram} GB de RAM, mas seu dispositivo possui {totalMemory}. Ele pode não funcionar corretamente ou causar falha no aplicativo.",
381
+ "ram_warning_body_load": "Seu dispositivo possui RAM disponível {availableRAM}, mas este modelo recomenda pelo menos {ram} GB. Carregá-lo pode falhar ou causar instabilidade.",
382
+ "choose_theme": "Escolha o tema",
383
+ "choose_theme_desc": "Personalize a aparência do aplicativo. Você sempre pode alterar isso mais tarde nas configurações.",
384
+ "theme_card_system": "Sistema",
385
+ "theme_card_system_sub": "Corresponde às configurações do seu dispositivo",
386
+ "theme_card_light": "Luz",
387
+ "theme_card_light_sub": "Limpo e brilhante",
388
+ "theme_card_dark": "Escuro",
389
+ "theme_card_dark_sub": "Fácil para os olhos",
390
+ "theme_card_claude": "Cláudio",
391
+ "theme_card_claude_sub": "Um tema quente com tons de pêssego",
392
+ "stay_updated": "Fique atualizado",
393
+ "stay_updated_desc": "Seja notificado quando o download dos seus modelos de IA terminar ou quando tarefas de longa execução forem concluídas.",
394
+ "notification_benefit_downloads": "Progresso do download do modelo",
395
+ "notification_benefit_completions": "Conclusões de geração",
396
+ "notification_benefit_background": "Status das tarefas em segundo plano",
397
+ "allow_notifications": "Permitir notificações",
398
+ "servers_title": "Servidores",
399
+ "no_servers_yet": "Ainda não há servidores",
400
+ "no_servers_desc": "Adicione seu primeiro servidor para começar a conversar com modelos de IA.",
401
+ "add_server": "Adicionar servidor",
402
+ "switched_to_server": "Mudou para {name}",
403
+ "edit_server": "Editar servidor",
404
+ "add_server_title": "Adicionar servidor",
405
+ "server_type_label": "Tipo de servidor",
406
+ "server_icon_label": "Ícone do servidor",
407
+ "default_icon": "Ícone padrão",
408
+ "server_type_lm_studio_display": "Estúdio LM",
409
+ "server_type_openai_display": "Compatível com OpenAI",
410
+ "server_type_ollama_display": "Ollama",
411
+ "server_type_openrouter_display": "OpenRouter",
412
+ "server_type_on_device_display": "No dispositivo",
413
+ "server_address_openrouter": "openrouter.ai",
414
+ "server_address_on_device": "Inferência local",
415
+ "server_address_format": "{host}:{port}",
416
+ "default_badge": "Padrão",
417
+ "set_as_default": "Definir como padrão",
418
+ "select_icon": "Selecione o ícone",
419
+ "select_icon_desc": "Escolha um ícone para o seu servidor",
420
+ "search_icons_hint": "Pesquisar ícones...",
421
+ "server_icon_stack": "Pilha de servidores",
422
+ "server_icon_stack2": "Pilha de servidores 02",
423
+ "server_icon_stack3": "Pilha de servidores 03",
424
+ "server_icon_cloud": "Nuvem",
425
+ "server_icon_cloud_server": "Servidor em nuvem",
426
+ "server_icon_mcp": "Servidor MCP",
427
+ "server_icon_database": "Banco de dados",
428
+ "server_icon_database1": "Banco de dados 01",
429
+ "server_icon_database2": "Banco de dados 02",
430
+ "server_icon_cpu": "CPU",
431
+ "server_icon_chip": "Chip",
432
+ "server_icon_chip2": "Ficha 02",
433
+ "server_icon_computer": "Computador",
434
+ "server_icon_laptop": "Portátil",
435
+ "server_icon_terminal": "Terminal de computador",
436
+ "server_icon_code": "Código",
437
+ "server_icon_ai_brain": "Cérebro de IA",
438
+ "server_icon_ai_brain2": "Cérebro IA 02",
439
+ "server_icon_ai_cloud": "Nuvem de IA",
440
+ "server_icon_ai_network": "Rede de IA",
441
+ "server_icon_ai_chat": "Bate-papo com IA",
442
+ "server_icon_cellular": "Rede Celular",
443
+ "server_icon_plug1": "Plugue 01",
444
+ "server_icon_plug2": "Plugue 02",
445
+ "server_icon_bot": "Robô",
446
+ "server_icon_bot2": "Robô 02",
447
+ "server_icon_robotic": "Robótico",
448
+ "server_icon_rocket": "Foguete",
449
+ "server_icon_star": "Estrela",
450
+ "server_icon_settings1": "Configurações 01",
451
+ "server_icon_settings2": "Configurações 02",
452
+ "server_icon_home1": "Casa 01",
453
+ "server_icon_home2": "Casa 02",
454
+ "server_icon_folder1": "Pasta 01",
455
+ "server_icon_folder2": "Pasta 02",
456
+ "server_icon_file1": "Arquivo 01",
457
+ "server_icon_lock": "Bloquear",
458
+ "server_icon_key": "Chave 01",
459
+ "server_icon_link": "Ligação 01",
460
+ "server_icon_globe": "Globo",
461
+ "server_icon_api": "API",
462
+ "server_icon_arrow_right": "Seta para a Direita 01",
463
+ "server_icon_check": "Verifique o círculo",
464
+ "server_icon_alert": "Círculo de Alerta",
465
+ "server_icon_info": "Círculo de Informações",
466
+ "server_icon_zap": "Zap",
467
+ "server_icon_cloud_upload": "Carregamento na nuvem",
468
+ "server_icon_cloud_download": "Download na nuvem",
469
+ "server_icon_refresh": "Atualizar",
470
+ "server_icon_hard_drive": "Disco rígido",
471
+ "server_icon_drive": "Dirigir",
472
+ "personas_title": "Personagens",
473
+ "persona_category_general": "Geral",
474
+ "persona_category_coding": "Codificação",
475
+ "persona_category_education": "Educação",
476
+ "persona_category_creative": "Criativo",
477
+ "persona_builtin_section": "INTEGRADO",
478
+ "persona_my_section": "MINHAS PESSOAS",
479
+ "clone_edit": "Clonar e editar",
480
+ "builtin_badge": "Integrado",
481
+ "no_personas_found": "Nenhuma persona encontrada",
482
+ "no_personas_desc": "Crie sua primeira persona para personalizar o comportamento da IA.",
483
+ "edit_persona": "Editar personalidade",
484
+ "create_persona": "Criar personalidade",
485
+ "create_persona_button": "Criar",
486
+ "emoji_label": "Emoji",
487
+ "name_label": "Nome",
488
+ "my_persona_hint": "Minha personalidade",
489
+ "category_label": "Categoria",
490
+ "description_optional": "Descrição (opcional)",
491
+ "description_hint": "O que essa pessoa faz...",
492
+ "system_prompt": "Alerta do sistema",
493
+ "character_count_max": "{currentLen}/4000",
494
+ "no_prompt_placeholder": "Nenhum aviso ainda...",
495
+ "prompt_hint": "Você é um assistente prestativo...",
496
+ "prompt_required": "O prompt do sistema é obrigatório",
497
+ "prompt_max_chars": "Máximo de 4.000 caracteres",
498
+ "advanced_settings": "Configurações avançadas",
499
+ "temperature_label": "Temperatura (0,0-2,0)",
500
+ "top_p_label": "P superior (0,0-1,0)",
501
+ "temp_hint": "0,7",
502
+ "top_p_hint": "0,9",
503
+ "range_0_2": "0,0-2,0",
504
+ "range_0_1": "0,0-1,0",
505
+ "persona_updated": "Personagem atualizada",
506
+ "persona_created": "Personagem criada",
507
+ "tts_models_title": "Modelos de texto para fala",
508
+ "always_available": "Sempre disponível",
509
+ "tts_system_desc": "Usa o mecanismo de conversão de texto em fala integrado do seu dispositivo.\nNão são necessários downloads. A seleção de voz usa as configurações do sistema do seu dispositivo.",
510
+ "downloading_status": "Baixando...",
511
+ "tts_kitten_desc": "TTS neural ultrarrápido com 8 vozes expressivas.\nRequer download do {size}.",
512
+ "tts_piper_desc": "Vozes offline rápidas do Piper com 2 vozes expressivas.\nRequer download de {size} por voz.",
513
+ "engine_spec": "{sizeMb} MB · {ramMb} MB RAM · Vozes {voiceCount}",
514
+ "on_device_models_title": "Modelos no dispositivo",
515
+ "settings_huggingface_token": "Abraçando o token de rosto (opcional)",
516
+ "settings_huggingface_token_desc": "Necessário apenas para modelos fechados (por exemplo, Gemma). Obtenha um token em huggingface.co/settings/tokens.",
517
+ "settings_huggingface_token_set": "Token salvo",
518
+ "settings_huggingface_token_cleared": "Token limpo",
519
+ "model_requires_huggingface_token": "Requer um token de Rosto Abraçado",
520
+ "model_missing_huggingface_token": "Este modelo está bloqueado no Hugging Face. Adicione um token em Configurações → Inferência no dispositivo para baixá-lo.",
521
+ "set_huggingface_token": "Definir token",
522
+ "clear_huggingface_token": "Limpar",
523
+ "edit_huggingface_token_dialog_title": "Abraçando o token de acesso facial",
524
+ "huggingface_token_dialog_hint": "ah_…",
525
+ "server_type_ollama_desc": "Mecanismo de IA local. Nenhuma chave de API é necessária.",
526
+ "server_type_on_device_desc": "Funciona no seu telefone. Alguns modelos precisam de um token Hugging Face.",
527
+ "server_type_lm_studio_desc": "Servidor API local. Nenhuma chave de API é necessária.",
528
+ "available_models": "Modelos Disponíveis",
529
+ "device_memory": "Memória do dispositivo",
530
+ "ram_usage": "Uso de RAM",
531
+ "memory_healthy": "Saudável",
532
+ "memory_critical": "Crítico",
533
+ "memory_low": "Baixo",
534
+ "ram_used": "{percent}% usado",
535
+ "available_ram": "RAM disponível",
536
+ "total_capacity": "Capacidade total",
537
+ "loaded_status": "Carregado",
538
+ "inference_backend": "Back-end de inferência",
539
+ "backend_ios_notice": "Apenas o back-end da CPU está disponível no iOS.",
540
+ "backend_cpu_desc": "Funciona em todos os dispositivos. Mais compatível.",
541
+ "backend_gpu_desc": "Aceleração OpenCL. Mais rápido em dispositivos suportados.",
542
+ "backend_npu_desc": "NPU do fornecedor (Qualcomm/MediaTek). Inferência mais rápida.",
543
+ "select_model_title": "Selecione o modelo",
544
+ "refresh_models": "Atualizar modelos",
545
+ "search_models_hint": "Pesquisar modelos...",
546
+ "no_server_connected": "Nenhum servidor conectado",
547
+ "add_server_first": "Adicione um servidor primeiro para ver os modelos disponíveis.",
548
+ "failed_load_models": "Falha ao carregar modelos",
549
+ "no_models_available": "Nenhum modelo disponível",
550
+ "no_models_match": "Nenhum modelo corresponde a \"{searchQuery}\"",
551
+ "model_load_failed": "Falha ao carregar modelo: {error}",
552
+ "model_unloaded_ollama": "Descarregamento solicitado para {name}. Se Ollama estiver acessível, o modelo será liberado imediatamente.",
553
+ "model_unloaded_success": "{name} descarregado com sucesso",
554
+ "model_unload_failed": "Falha ao descarregar modelo: {error}",
555
+ "unload_from_server": "Descarregar do servidor",
556
+ "context_chip": "{ctx} ctx",
557
+ "unload_all_models": "Descarregar tudo",
558
+ "loaded_models_count": "{count} carregado",
559
+ "all_models_unloaded": "Todos os modelos descarregados",
560
+ "branch_chat": "Bate-papo da filial",
561
+ "branch_chat_desc": "Iniciar uma nova conversa a partir desta mensagem",
562
+ "edit_assistant_message_desc": "Edite o texto da resposta do assistente.",
563
+ "switch_to_model": "Mudar para {modelName}",
564
+ "download_notification_title": "Baixando {modelName}...",
565
+ "download_complete_notification": "Download concluído!",
566
+ "download_complete_body": "{modelName} foi baixado com sucesso.",
567
+ "download_failed_notification": "Falha no download: {error}",
568
+ "download_failed_body": "Falha ao baixar {modelName}.",
569
+ "engine_name_system": "Sistema TTS",
570
+ "engine_tagline_system": "Mecanismo de dispositivo integrado",
571
+ "engine_name_kitten": "Gatinho TTS",
572
+ "engine_tagline_kitten": "TTS neural de alta velocidade",
573
+ "engine_name_sherpa": "Sherpa ONNX VITS",
574
+ "engine_tagline_sherpa": "Vozes off-line do Piper",
575
+ "voice_jasper": "Jaspe",
576
+ "voice_bella": "Bela",
577
+ "voice_bruno": "Bruno",
578
+ "voice_luna": "Lua",
579
+ "voice_hugo": "Hugo",
580
+ "voice_rosie": "Rosie",
581
+ "voice_leo": "Leão",
582
+ "voice_kiki": "Kiki",
583
+ "voice_lessac": "Lessac (EUA)",
584
+ "voice_ryan": "Ryan (EUA)",
585
+ "model_qwen_3": "Qwen3 0,6B",
586
+ "model_qwen_3_desc": "O menor modelo de chat de uso geral. Respostas rápidas, baixo uso de memória.",
587
+ "model_license_apache": "Apache-2.0",
588
+ "model_qwen_25": "Instrução Qwen 2.5 1.5B",
589
+ "model_qwen_25_desc": "Qualidade e tamanho equilibrados. Bom para conversas gerais.",
590
+ "model_deepseek": "DeepSeek R1 Destilar Qwen 1.5B",
591
+ "model_deepseek_desc": "Modelo de raciocínio e cadeia de pensamento. Melhor para tarefas lógicas.",
592
+ "model_license_mit": "MIT",
593
+ "model_gemma": "Instrução Gemma 4 E2B",
594
+ "model_gemma_desc": "Modelo carro-chefe do Google. A mais alta qualidade, requer mais RAM.",
595
+ "export_header": "*Exportado de LocalMind — {date}*",
596
+ "export_role_user": "## 👤 Usuário",
597
+ "export_role_assistant": "## 🤖 Assistente",
598
+ "export_role_system": "## ⚙️ Sistema",
599
+ "export_role_tool": "## 🔧 Ferramenta",
600
+ "export_text_user": "[USUÁRIO]",
601
+ "export_text_assistant": "[ASSISTENTE]",
602
+ "export_text_system": "[SISTEMA]",
603
+ "export_text_tool": "[FERRAMENTA]",
604
+ "export_label_user": "USUÁRIO",
605
+ "export_label_assistant": "ASSISTENTE",
606
+ "export_label_system": "SISTEMA",
607
+ "export_label_tool": "FERRAMENTA",
608
+ "select_model_hint": "Selecione um modelo para começar a conversar",
609
+ "test_notification_title": "Notificação de teste",
610
+ "test_notification_body": "Esta é uma notificação de teste para o progresso do download do modelo.",
611
+ "tts_supports_background": "Suporta reprodução em segundo plano como áudio nativo",
612
+ "tts_other_services_background_note": "Nota: Os outros serviços TTS suportam reprodução em segundo plano como áudio nativo.",
613
+ "gguf_imported_models_title": "Modelos GGUF importados",
614
+ "gguf_imported_models_empty_subtitle": "Importe um GGUF do seu dispositivo ou adicione um do Hugging Face. Os modelos importados são executados localmente com llama.cpp.",
615
+ "gguf_imported_models_ready": "modelos importados prontos para inferência local.",
616
+ "gguf_curated_models_subtitle": "Modelos selecionados no dispositivo que você pode baixar e gerenciar dentro do LocalMind.",
617
+ "gguf_only_supported": "Somente modelos GGUF são suportados para esta importação.",
618
+ "gguf_imported_from_local_file": "importado do arquivo local.",
619
+ "gguf_import_failed": "Falha ao importar o modelo GGUF",
620
+ "gguf_imported_from_huggingface": "importado de Hugging Face.",
621
+ "gguf_import_canceled": "Importação de GGUF cancelada.",
622
+ "gguf_enter_huggingface_url": "Insira um URL GGUF de rosto abraçado.",
623
+ "gguf_only_official_huggingface_urls": "Apenas URLs oficiais do Hugging Face GGUF são suportados.",
624
+ "gguf_use_https_url": "Use um URL HTTPS Hugging Face para importação de GGUF.",
625
+ "gguf_url_must_point_to_file": "O URL do Hugging Face deve apontar diretamente para um arquivo .gguf.",
626
+ "gguf_unable_to_detect_file_name": "Não foi possível determinar o nome do arquivo GGUF.",
627
+ "gguf_download_empty": "O arquivo GGUF baixado estava vazio ou ausente.",
628
+ "gguf_selected_file_missing": "O arquivo de modelo selecionado não existe.",
629
+ "gguf_import_action": "Importar GGUF",
630
+ "gguf_overview_title": "Traga seus próprios modelos GGUF",
631
+ "gguf_overview_subtitle": "Importe um .gguf do armazenamento local ou baixe um diretamente do Hugging Face. Os modelos importados permanecem neste dispositivo e carregam com llama.cpp.",
632
+ "gguf_imported_count_label": "importado",
633
+ "gguf_local_files_label": "arquivos locais",
634
+ "gguf_huggingface_label": "Abraçando o rosto",
635
+ "gguf_import_local_title": "Importar GGUF local",
636
+ "gguf_import_local_subtitle": "Copie um arquivo .gguf deste dispositivo",
637
+ "gguf_import_huggingface_title": "Importar do rosto que abraça",
638
+ "gguf_import_huggingface_subtitle": "Cole um URL GGUF ou caminho de repositório",
639
+ "gguf_no_imported_title": "Nenhum modelo GGUF importado ainda",
640
+ "gguf_no_imported_subtitle": "Você pode trazer seu próprio arquivo GGUF do armazenamento do dispositivo ou colar um URL do Hugging Face ou um caminho de repositório que aponte para um arquivo .gguf.",
641
+ "gguf_import_huggingface_dialog_title": "Importar GGUF do Hugging Face",
642
+ "gguf_import_huggingface_dialog_subtitle": "Cole um URL direto do GGUF ou um caminho de repositório Hugging Face como `owner/repo/blob/main/model.gguf`. Os links de blob são convertidos automaticamente.",
643
+ "gguf_url_or_repo_path": "URL GGUF ou caminho do repositório",
644
+ "paste": "Colar",
645
+ "gguf_browse": "Navegar pelos GGUFs",
646
+ "gguf_huggingface_token_ready": "Abraçando o token Face pronto",
647
+ "gguf_huggingface_token_optional": "Token opcional, mas recomendado",
648
+ "gguf_huggingface_token_ready_desc": "Seu token salvo será usado automaticamente para repositórios fechados ou privados.",
649
+ "gguf_huggingface_token_optional_desc": "Requer uma ficha de Abraço de Rosto. Adicione um em Configurações se este GGUF for fechado ou privado.",
650
+ "gguf_downloading": "Baixando GGUF",
651
+ "gguf_preparing": "Preparando",
652
+ "gguf_preparing_download": "Preparando download...",
653
+ "gguf_cancel_import": "Cancelar importação",
654
+ "clipboard_empty": "A área de transferência está vazia.",
655
+ "could_not_open_huggingface": "Não foi possível abrir o Hugging Face.",
656
+ "gguf_paste_url_error": "Cole um URL do Hugging Face GGUF ou um caminho de repositório.",
657
+ "gguf_blob_link": "Link do blob",
658
+ "gguf_repository_label": "Repositório",
659
+ "gguf_detected_path_label": "Caminho detectado",
660
+ "gguf_imported_section_label": "GGUF importado",
661
+ "gguf_already_available": "Já disponível neste dispositivo",
662
+ "gguf_curated_models_short": "Modelos selecionados no dispositivo",
663
+ "execute_tool_title": "Executar ferramenta",
664
+ "execute_tool_request_desc": "O modelo está solicitando a execução da seguinte ferramenta:",
665
+ "reject": "Rejeitar",
666
+ "approve": "Aprovar",
667
+ "server_type_help": "Escolha o provedor antes de preencher os detalhes da conexão.",
668
+ "server_identity_title": "Identidade",
669
+ "server_identity_desc": "Nomeie este servidor e escolha como ele aparece na lista.",
670
+ "server_connection_title": "Conexão",
671
+ "server_connection_desc": "Use o endereço e a porta expostos pelo seu servidor.",
672
+ "server_authentication_title": "Autenticação",
673
+ "server_authentication_required_desc": "OpenRouter requer uma chave API antes do teste.",
674
+ "server_authentication_optional_desc": "Deixe a chave de API vazia se este servidor não exigir uma.",
675
+ "mcp_tools_title": "Ferramentas MCP",
676
+ "available_tools": "Ferramentas disponíveis",
677
+ "unable_load_tools": "Não foi possível carregar ferramentas",
678
+ "no_tools_registered": "Nenhuma ferramenta cadastrada",
679
+ "no_tools_registered_desc": "Ative o servidor MCP de exemplo ou adicione integrações MCP nas configurações de chat.",
680
+ "example_mcp_server_title": "Exemplo de servidor MCP",
681
+ "example_mcp_server_desc": "Registra example.echo e example.word_count por meio do mesmo provedor de ferramentas MCP usado por servidores externos.",
682
+ "disable_example_server": "Desativar servidor de exemplo",
683
+ "enable_example_server": "Habilitar servidor de exemplo",
684
+ "built_in_label": "Integrado",
685
+ "highlights_label": "Destaques",
686
+ "built_with_label": "Construído com",
687
+ "local_label": "Locais",
688
+ "gguf_format_label": "GGUF",
689
+ "tool_status_requested": "Solicitado",
690
+ "tool_status_approved": "Aprovado",
691
+ "tool_status_rejected": "Rejeitado",
692
+ "tool_status_running": "Correndo",
693
+ "tool_status_done": "Concluído",
694
+ "tool_status_failed": "Falha",
695
+ "model_favorite_toggle": "Alternar favorito",
696
+ "model_set_default": "Definir como modelo padrão",
697
+ "model_clear_default": "Remover como modelo padrão",
698
+ "model_default_badge": "Padrão",
699
+ "model_note_label": "Nota",
700
+ "model_note_hint": "Adicione uma observação sobre este modelo…",
701
+ "unload_models_before_load": "Descarregue todos os modelos antes de carregar um novo",
702
+ "temp_chat_keyboard_incognito": "Teclado anônimo em bate-papo temporário",
703
+ "temp_chat_keyboard_incognito_desc": "Desativa o aprendizado do teclado e sugestões em bate-papos temporários (por exemplo, SwiftKey incógnito).",
704
+ "resume_last_chat": "Retomar o último bate-papo no lançamento",
705
+ "resume_last_chat_desc": "Restaure sua última conversa aberta ao reabrir o aplicativo.",
706
+ "export_all_data": "Exportar todos os dados",
707
+ "import_all_data": "Importe todos os dados",
708
+ "export_data_success": "Backup exportado com sucesso",
709
+ "import_data_success": "Backup importado com sucesso",
710
+ "import_data_failed": "Falha ao importar backup: {error}",
711
+ "import_data_confirm": "Importar conversas e personas personalizadas deste backup? Os itens existentes com os mesmos IDs serão atualizados.",
712
+ "import_settings_confirm": "Substituir as configurações atuais pelo backup importado?",
713
+ "export_conversations": "Exportar conversas",
714
+ "import_conversations": "Importar conversas",
715
+ "export_personas": "Exportar personas",
716
+ "import_personas": "Importar personas",
717
+ "export_settings": "Exportar configurações",
718
+ "import_settings": "Importar configurações",
719
+ "export_all_zip": "Exportar tudo (ZIP)",
720
+ "import_all_zip": "Importar tudo (ZIP)",
721
+ "duplicate_chat": "Bate-papo duplicado",
722
+ "duplicate_chat_success": "Bate-papo duplicado",
723
+ "move_to_folder": "Mover para pasta",
724
+ "remove_from_folder": "Remover da pasta",
725
+ "create_folder": "Criar pasta",
726
+ "new_folder": "Nova pasta",
727
+ "folder_name_hint": "Nome da pasta",
728
+ "all_chats": "Todos",
729
+ "unfiled_chats": "Não arquivado",
730
+ "create": "Criar",
731
+ "server_path_prefix_label": "Prefixo do caminho da API",
732
+ "server_path_prefix_hint": "/seu-token secreto",
733
+ "search_message_contents": "Pesquisar conteúdo da mensagem",
734
+ "message_search_results": "Correspondências de mensagens",
735
+ "saved_messages_title": "Mensagens salvas",
736
+ "nav_saved_messages": "Mensagens salvas",
737
+ "saved_messages_empty": "Nenhuma mensagem salva ainda. Marque uma mensagem no menu de opções.",
738
+ "save_message": "Salvar mensagem",
739
+ "message_saved": "Mensagem salva",
740
+ "token_count": "Tokens {count}",
741
+ "estimated_token_count": "~Tokens {count} (estimado)",
742
+ "test_tts_section_title": "Teste de voz",
743
+ "test_tts_hint": "Digite o texto para ouvir o mecanismo TTS atual…",
744
+ "test_speak_button": "Fale",
745
+ "scroll_to_bottom": "Role para baixo",
746
+ "generate_ai_response": "Gerar resposta de IA",
747
+ "no_response": "Sem resposta",
748
+ "export": "Exportar",
749
+ "import": "Importar",
750
+ "conversations_label": "Conversas",
751
+ "personas_label": "Personagens",
752
+ "settings_label": "Configurações",
753
+ "export_conversation": "Exportar conversa",
754
+ "tts_process_markdown": "Remarcação de processo para fala",
755
+ "tts_process_markdown_desc": "Remova a formatação como **negrito** antes de ler em voz alta",
756
+ "tts_skip_seconds": "Pular intervalo",
757
+ "tts_skip_seconds_desc": "Tamanho do salto para avançar e retroceder durante a reprodução",
758
+ "tts_skip_seconds_value": "{seconds}s",
759
+ "preview_system_prompts": "Visualizar prompts do sistema",
760
+ "welcome_message_1": "Em que posso ajudá-lo hoje?",
761
+ "welcome_message_2": "Pergunte-me qualquer coisa - estarei pronto quando você estiver.",
762
+ "welcome_message_3": "Seus dados são processados localmente e nunca saem do seu dispositivo.",
763
+ "welcome_message_4": "Precisa de ideias? Experimente uma das instruções rápidas.",
764
+ "temporary_chat": "Bate-papo temporário",
765
+ "temporary_chat_desc": "Os bate-papos não são salvos no histórico.",
766
+ "temporary_chat_banner": "Bate-papo temporário – não salvo no histórico",
767
+ "temporary_chat_save_warning_title": "Salvar mensagem no chat temporário?",
768
+ "temporary_chat_save_warning_body": "Este chat é temporário e está oculto no histórico. A mensagem salva ainda aparecerá em Mensagens Salvas.",
769
+ "save_to_history": "Salvar no histórico",
770
+ "share_conversation": "Compartilhar conversa",
771
+ "download_tts_audio": "Baixar áudio",
772
+ "tts_download_unavailable": "O download está disponível apenas para Piper e Kitten TTS",
773
+ "tts_download_no_audio": "Ainda não há áudio disponível para download",
774
+ "tts_download_success": "Áudio salvo",
775
+ "return_to_chat": "Voltar ao bate-papo",
776
+ "return_to_temp_chat": "Retornar ao bate-papo temporário",
777
+ "insert_saved_message": "Inserir mensagem salva",
778
+ "insert_saved_message_desc": "Escolha uma mensagem salva para adicionar à sua entrada",
779
+ "model_info": "Informações do modelo",
780
+ "model_name": "Nome do modelo",
781
+ "model_identifier": "Identificador",
782
+ "model_capabilities": "Capacidades",
783
+ "model_api_pricing": "Preços da API (por 1 milhão de tokens)",
784
+ "not_available": "Não disponível",
785
+ "save_message_folders": "Salvar mensagem",
786
+ "remove_from_saved": "Remover dos salvos",
787
+ "message_already_saved": "Salvo",
788
+ "stream_ttft": "Hora do primeiro token",
789
+ "stream_tokens_per_sec": "Tokens por segundo",
790
+ "stream_stop_reason": "Pare a razão",
791
+ "stream_input_tokens": "Tokens de entrada",
792
+ "stream_output_tokens": "Tokens de saída",
793
+ "stream_generation_time": "Tempo de geração",
794
+ "attach_image": "Fotos",
795
+ "attach_text_document": "Documentos",
796
+ "attach_shortcut_images": "Fotos",
797
+ "attach_shortcut_documents": "Arquivos",
798
+ "attach_shortcut_saved": "Salvo",
799
+ "add_attachment": "Adicionar anexo",
800
+ "add_to_chat": "Adicionar ao bate-papo",
801
+ "choose_what_to_attach": "O que você gostaria de adicionar?",
802
+ "choose_attachment_subtitle": "Escolha uma fonte para anexar à sua mensagem",
803
+ "photo_permission_denied": "O acesso à foto é necessário para anexar imagens",
804
+ "select_model_prompt": "Selecione o modelo",
805
+ "characters_label": "Personagens",
806
+ "exit_temporary_chat_title": "Sair do bate-papo temporário?",
807
+ "exit_temporary_chat_body": "Isso descartará o chat temporário atual e retornará para um novo chat.",
808
+ "saved_message_temp_snap_unavailable": "Esta mensagem foi salva de um bate-papo temporário e não pode ser aberta na conversa original.",
809
+ "filter_title": "Filtro",
810
+ "filter_pinned": "Fixado",
811
+ "filter_archived": "Arquivado",
812
+ "filter_temp_chats": "Bate-papos temporários",
813
+ "filter_user_messages": "Mensagens do usuário",
814
+ "filter_assistant_messages": "Mensagens do assistente",
815
+ "archive_chat": "Arquivo",
816
+ "unarchive_chat": "Desarquivar",
817
+ "conversation_message_count": "{count, plural, one{1 mensagem} other{{count} mensagens}}",
818
+ "conversation_character_count": "Caracteres {count}",
819
+ "generate_title_with_ai": "Gere com IA",
820
+ "generating_title": "Gerando...",
821
+ "generate_title_failed": "Não foi possível gerar um título",
822
+ "lm_studio_model_browser_title": "Procure modelos",
823
+ "lm_studio_model_search_hint": "Pesquise modelos por nome ou autor…",
824
+ "lm_studio_staff_picks": "Escolhas da equipe",
825
+ "lm_studio_community_models": "Modelos comunitários",
826
+ "lm_studio_no_models": "Nenhum modelo encontrado",
827
+ "lm_studio_models_count": "Modelos {count}",
828
+ "lm_studio_browse_models": "Navegue e baixe",
829
+ "lm_studio_model_search": "Pesquisa de modelo LMS",
830
+ "lm_studio_downloads_title": "Transferências",
831
+ "lm_studio_choose_quant": "Escolha uma opção de download",
832
+ "lm_studio_use_default_quant": "Usar padrão",
833
+ "lm_studio_recommended": "Recomendado",
834
+ "lm_studio_clear_downloads": "Limpar concluído",
835
+ "lm_studio_no_downloads": "Ainda não há downloads",
836
+ "lm_studio_downloads_disclaimer": "Os downloads são executados no host do LM Studio. Pausar, parar e excluir modelos devem ser feitos nesse computador – não neste aplicativo.",
837
+ "lm_studio_staff_pick": "Escolha da equipe",
838
+ "lm_studio_params": "PARÂMETROS",
839
+ "lm_studio_arch": "ARCO",
840
+ "lm_studio_domain": "DOMÍNIO",
841
+ "lm_studio_format": "FORMATO",
842
+ "lm_studio_vision": "Visão",
843
+ "lm_studio_tool_use": "Uso de ferramentas",
844
+ "lm_studio_reasoning": "Raciocínio",
845
+ "openrouter_pricing_free": "Grátis",
846
+ "openrouter_pricing_tooltip": "Entrada {input} / Saída {output} por 1 milhão de tokens",
847
+ "lm_studio_download_options": "Opções de download",
848
+ "lm_studio_download": "Baixar",
849
+ "lm_studio_download_size": "Baixar{size}",
850
+ "lm_studio_downloading_percent": "Baixando {percent}%",
851
+ "lm_studio_readme_unavailable": "README não disponível para este modelo.",
852
+ "lm_studio_full_gpu_offload": "Possível descarregamento total da GPU",
853
+ "lm_studio_partial_gpu_offload": "Possível descarregamento parcial da GPU",
854
+ "lm_studio_likely_too_large": "Provavelmente muito grande",
855
+ "lm_studio_available_ram_gb": "RAM disponível (GB, opcional)",
856
+ "lm_studio_available_vram_gb": "VRAM disponível (GB, opcional)",
857
+ "lm_studio_memory_settings_title": "Memória para recomendações",
858
+ "lm_studio_memory_settings_desc": "Usado para estimar se os modelos cabem na sua máquina no navegador de modelos.",
859
+ "think_button_label": "Pense",
860
+ "thinking_mode_title": "Modo de pensamento",
861
+ "reasoning_effort_low": "Baixo",
862
+ "reasoning_effort_medium": "Médio",
863
+ "reasoning_effort_high": "Alto",
864
+ "reasoning_effort_minimal": "Mínimo",
865
+ "reasoning_effort_xhigh": "X-Alto",
866
+ "reasoning_effort_max": "Máx.",
867
+ "reasoning_effort_off": "Desligado",
868
+ "could_not_read_file": "Não foi possível ler o arquivo",
869
+ "server_offline": "Servidor off-line",
870
+ "could_not_establish_connection": "Não foi possível estabelecer uma conexão com o servidor. Verifique se o seu servidor está funcionando e se as configurações de host/porta estão corretas.",
871
+ "retry_connection": "Tentar novamente a conexão",
872
+ "tokens_label": "Fichas",
873
+ "enter_context_length": "Insira o comprimento do contexto...",
874
+ "openrouter_disclosure": "Ao conectar este provedor, suas mensagens e entradas de chat serão enviadas para seus servidores. LocalMind não rastreia nem armazena suas conversas.",
875
+ "welcome_message_cloud": "Suas mensagens são enviadas para seu provedor conectado.",
876
+ "privacy_policy": "Política de Privacidade",
877
+ "cloud_sync": "Sincronização em nuvem S3",
878
+ "cloud_sync_description": "Sincronização criptografada de ponta a ponta com seu próprio servidor compatível com S3",
879
+ "cloud_sync_endpoint": "URL do terminal",
880
+ "cloud_sync_bucket": "Balde",
881
+ "cloud_sync_region": "Região",
882
+ "cloud_sync_prefix": "Prefixo",
883
+ "cloud_sync_access_key": "ID da chave de acesso",
884
+ "cloud_sync_secret_key": "Chave de acesso secreta",
885
+ "cloud_sync_session_token": "Token de sessão (opcional)",
886
+ "cloud_sync_passphrase": "Senha de criptografia",
887
+ "cloud_sync_confirm_passphrase": "Confirmar senha",
888
+ "cloud_sync_path_style": "Use endereçamento estilo caminho",
889
+ "cloud_sync_allow_http": "Permitir HTTP inseguro",
890
+ "cloud_sync_http_warning": "HTTP expõe metadados e credenciais de solicitação à rede. Use-o apenas para um servidor S3 local confiável.",
891
+ "cloud_sync_test": "Conexão de teste",
892
+ "cloud_sync_enable": "Ativar sincronização criptografada",
893
+ "cloud_sync_now": "Sincronize agora",
894
+ "cloud_sync_disconnect": "Desconecte este dispositivo",
895
+ "cloud_sync_last_synced": "Última sincronização",
896
+ "cloud_sync_never": "Nunca",
897
+ "cloud_sync_conflicts": "Conflitos preservados",
898
+ "cloud_sync_passphrase_mismatch": "As senhas não correspondem",
899
+ "crash_report_title": "Algo deu errado",
900
+ "crash_report_stack_trace": "Rastreamento de pilha",
901
+ "crash_report_tap_to_expand": "Toque para expandir",
902
+ "crash_report_button": "Denunciar esta falha",
903
+ "crash_try_again": "Tente novamente",
904
+ "crash_report_empty_stack": "<vazio>",
905
+ "crash_report_disclaimer": "Os relatórios abrem o GitHub com diagnósticos pré-preenchidos. Você permanece no controle — nada é enviado automaticamente. Revise e remova qualquer conteúdo sensível antes de enviar.",
906
+ "crash_report_copied": "Copiado para a área de transferência",
907
+ "report_a_problem": "Informar um problema",
908
+ "rename_folder": "Renomear pasta",
909
+ "delete_folder": "Excluir pasta",
910
+ "delete_folder_title": "Excluir pasta?",
911
+ "delete_folder_body": "Tem certeza de que deseja excluir \"{name}\"? As conversas ou mensagens salvas serão movidas de volta para \"Não arquivadas\". Isto não pode ser desfeito.",
912
+ "folder_name_required": "Por favor insira um nome de pasta",
913
+ "model_required_toast": "Você precisa selecionar um modelo primeiro",
914
+ "settings_concise_voice_responses": "Respostas concisas no modo de voz",
915
+ "settings_concise_voice_responses_desc": "Mantenha as respostas do LLM breves (1 parágrafo curto) e faça perguntas de acompanhamento em modo de voz.",
916
+ "s3_connection_succeeded": "Conexão S3 bem-sucedida.",
917
+ "failed_to_open_url": "Falha ao abrir URL: {error}",
918
+ "failed_to_copy": "Falha ao copiar: {error}",
919
+ "file_explorer_not_found": "Nenhum explorador de arquivos encontrado. Certifique-se de que um aplicativo gerenciador de arquivos esteja instalado e ativado em seu dispositivo.",
920
+ "export_data_failed": "Falha ao exportar backup: {error}",
921
+ "file_pick_failed": "Falha ao selecionar arquivo: {error}",
922
+ "image_pick_failed": "Falha ao selecionar imagem: {error}",
923
+ "calendar_access": "Acesso ao calendário",
924
+ "calendar_access_desc": "Permitir que a IA leia e crie eventos de calendário",
925
+ "calendar_permission_denied": "Permissão de calendário negada. Conceda acesso ao calendário nas configurações do seu dispositivo.",
926
+ "location_access": "Acesso à localização",
927
+ "location_access_desc": "Permitir que a IA obtenha sua localização atual com o nome do lugar",
928
+ "location_permission_denied": "Permissão de localização negada. Conceda acesso à localização nas configurações do seu dispositivo.",
929
+ "builtin_ai_not_supported": "A IA integrada não é compatível com este dispositivo.",
930
+ "builtin_ai_unsupported_desc": "O hardware ou sistema operacional do seu dispositivo não oferece suporte à IA do sistema no dispositivo (por exemplo, Gemini Nano/Apple Intelligence). Escolha um modelo para download.",
931
+ "builtin_ai_unsupported_chip": "Não compatível",
932
+ "builtin_ai_enable": "Habilitar"
933
+}
\ No newline at end of file
pubspec.yaml
+1
-1
@@ -16,7 +16,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
16
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
17
# In Windows, build-name is used as the major, minor, and patch parts
18
# of the product and file versions while build-number is used as the build suffix.
19
-version: 1.7.8+83
19
+version: 1.7.9+84
20
21
environment:
22
sdk: ">=3.12.0 <4.0.0"