@tduncan / Cortana / commits / 08b465b

feat: add Portuguese and Korean language support and refactor language selection UI; fix potential async build context leaks in data backup.

abdulmominsakib committed Sep 8, 2026 at 12:50 UTC 08b465b7470e36710296764867bc09c8511fdbd4
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"