@tduncan / Cortana / commits / 65be7fe

feat: add Turkish language support including localization, assets, and UI updates

abdulmominsakib committed Aug 1, 2026 at 11:53 UTC 65be7fec9fb8480160fbb1dc8dd45c42861e7fa3
8 files changed +4016 -180
assets/images/flag_tr.png
Binary files /dev/null and b/assets/images/flag_tr.png differ
lib/features/onboarding/screens/onboarding_language_screen.dart
+198 -180
@@ -132,6 +132,16 @@ const _languages = [
132 shortText: 'Ru',
133 gradient: [Color(0xFF3B82F6), Color(0xFF1D4ED8)],
134 ),
135 + _LanguageOption(
136 + code: 'tr',
137 + nativeName: 'Türkçe',
138 + englishName: 'Turkish',
139 + flag: '🇹🇷',
140 + flagAsset: 'assets/images/flag_tr.png',
141 + countryCode: 'TR',
142 + shortText: 'Tr',
143 + gradient: [Color(0xFFE11D48), Color(0xFFBE123C)],
144 + ),
145 ];
146
147 class OnboardingLanguageScreen extends ConsumerStatefulWidget {
@@ -200,209 +210,217 @@ class _OnboardingLanguageScreenState
210 crossAxisAlignment: CrossAxisAlignment.stretch,
211 children: [
212 Expanded(
203 - child: SingleChildScrollView(
204 - padding: const EdgeInsets.symmetric(horizontal: 24.0),
205 - child: Column(
206 - crossAxisAlignment: CrossAxisAlignment.stretch,
207 - children: [
208 - const SizedBox(height: 24),
209 - Actor(
210 - acts: [.fadeIn(), .slideY(from: 0.08)],
211 - child: Column(
212 - crossAxisAlignment: CrossAxisAlignment.stretch,
213 - children: [
214 - Text(
215 - l10n.onboarding_welcome,
216 - textAlign: TextAlign.center,
217 - style: theme.textTheme.headlineLarge?.copyWith(
218 - fontWeight: FontWeight.w800,
219 - height: 1.1,
213 + child: Scrollbar(
214 + thickness: 2,
215 + radius: const Radius.circular(4),
216 + child: SingleChildScrollView(
217 + padding: const EdgeInsets.symmetric(horizontal: 24.0),
218 + child: Column(
219 + crossAxisAlignment: CrossAxisAlignment.stretch,
220 + children: [
221 + const SizedBox(height: 24),
222 + Actor(
223 + acts: [.fadeIn(), .slideY(from: 0.08)],
224 + child: Column(
225 + crossAxisAlignment: CrossAxisAlignment.stretch,
226 + children: [
227 + Text(
228 + l10n.onboarding_welcome,
229 + textAlign: TextAlign.center,
230 + style: theme.textTheme.headlineLarge?.copyWith(
231 + fontWeight: FontWeight.w800,
232 + height: 1.1,
233 + ),
234 ),
221 - ),
222 - const SizedBox(height: 12),
223 - Text(
224 - l10n.onboarding_choose_language,
225 - textAlign: TextAlign.center,
226 - style: theme.textTheme.titleMedium?.copyWith(
227 - fontWeight: FontWeight.w600,
228 - color: theme.colorScheme.primary,
235 + const SizedBox(height: 12),
236 + Text(
237 + l10n.onboarding_choose_language,
238 + textAlign: TextAlign.center,
239 + style: theme.textTheme.titleMedium?.copyWith(
240 + fontWeight: FontWeight.w600,
241 + color: theme.colorScheme.primary,
242 + ),
243 ),
230 - ),
231 - const SizedBox(height: 8),
232 - Text(
233 - l10n.onboarding_choose_language_desc,
234 - textAlign: TextAlign.center,
235 - style: theme.textTheme.bodySmall?.copyWith(
236 - color: theme.colorScheme.onSurface.withValues(
237 - alpha: 0.7,
244 + const SizedBox(height: 8),
245 + Text(
246 + l10n.onboarding_choose_language_desc,
247 + textAlign: TextAlign.center,
248 + style: theme.textTheme.bodySmall?.copyWith(
249 + color: theme.colorScheme.onSurface.withValues(
250 + alpha: 0.7,
251 + ),
252 + height: 1.5,
253 ),
239 - height: 1.5,
254 ),
241 - ),
242 - ],
255 + ],
256 + ),
257 ),
244 - ),
245 - const SizedBox(height: 32),
246 - Actor(
247 - delay: 60.ms,
248 - acts: [.fadeIn(), .slideY(from: 0.08)],
249 - child: ListView.separated(
250 - shrinkWrap: true,
251 - physics: const NeverScrollableScrollPhysics(),
252 - itemCount: _languages.length,
253 - separatorBuilder: (context, index) =>
254 - const SizedBox(height: 12),
255 - itemBuilder: (context, index) {
256 - final lang = _languages[index];
257 - final isSelected = _selectedCode == lang.code;
258 + const SizedBox(height: 32),
259 + Actor(
260 + delay: 60.ms,
261 + acts: [.fadeIn(), .slideY(from: 0.08)],
262 + child: ListView.separated(
263 + shrinkWrap: true,
264 + physics: const NeverScrollableScrollPhysics(),
265 + itemCount: _languages.length,
266 + separatorBuilder: (context, index) =>
267 + const SizedBox(height: 12),
268 + itemBuilder: (context, index) {
269 + final lang = _languages[index];
270 + final isSelected = _selectedCode == lang.code;
271
259 - return GestureDetector(
260 - onTap: () {
261 - setState(() {
262 - _selectedCode = lang.code;
263 - });
264 - // Dynamically apply settings localization update
265 - ref
266 - .read(settingsProvider.notifier)
267 - .setLocaleCode(lang.code);
268 - },
269 - child: AnimatedContainer(
270 - duration: const Duration(milliseconds: 200),
271 - padding: const EdgeInsets.symmetric(
272 - horizontal: 16,
273 - vertical: 12,
274 - ),
275 - decoration: BoxDecoration(
276 - color: theme.colorScheme.surface,
277 - borderRadius: BorderRadius.circular(16),
278 - border: Border.all(
279 - color: isSelected
280 - ? theme.colorScheme.primary
281 - : theme.colorScheme.outline.withValues(
282 - alpha: 0.15,
283 - ),
284 - width: isSelected ? 2 : 1,
272 + return GestureDetector(
273 + onTap: () {
274 + setState(() {
275 + _selectedCode = lang.code;
276 + });
277 + // Dynamically apply settings localization update
278 + ref
279 + .read(settingsProvider.notifier)
280 + .setLocaleCode(lang.code);
281 + },
282 + child: AnimatedContainer(
283 + duration: const Duration(milliseconds: 200),
284 + padding: const EdgeInsets.symmetric(
285 + horizontal: 16,
286 + vertical: 12,
287 + ),
288 + decoration: BoxDecoration(
289 + color: theme.colorScheme.surface,
290 + borderRadius: BorderRadius.circular(16),
291 + border: Border.all(
292 + color: isSelected
293 + ? theme.colorScheme.primary
294 + : theme.colorScheme.outline.withValues(
295 + alpha: 0.15,
296 + ),
297 + width: isSelected ? 2 : 1,
298 + ),
299 + boxShadow: isSelected
300 + ? [
301 + BoxShadow(
302 + color: theme.colorScheme.primary
303 + .withValues(alpha: 0.1),
304 + blurRadius: 8,
305 + offset: const Offset(0, 2),
306 + ),
307 + ]
308 + : null,
309 ),
286 - boxShadow: isSelected
287 - ? [
288 - BoxShadow(
289 - color: theme.colorScheme.primary
290 - .withValues(alpha: 0.1),
291 - blurRadius: 8,
292 - offset: const Offset(0, 2),
310 + child: Row(
311 + children: [
312 + Container(
313 + width: 48,
314 + height: 32,
315 + decoration: BoxDecoration(
316 + color: Colors.white,
317 + borderRadius: BorderRadius.circular(6),
318 + border: Border.all(
319 + color: theme.colorScheme.outline
320 + .withValues(alpha: 0.15),
321 + width: 1,
322 ),
294 - ]
295 - : null,
296 - ),
297 - child: Row(
298 - children: [
299 - Container(
300 - width: 48,
301 - height: 32,
302 - decoration: BoxDecoration(
303 - color: Colors.white,
304 - borderRadius: BorderRadius.circular(6),
305 - border: Border.all(
306 - color: theme.colorScheme.outline
307 - .withValues(alpha: 0.15),
308 - width: 1,
309 - ),
310 - boxShadow: [
311 - BoxShadow(
312 - color: Colors.black.withValues(
313 - alpha: 0.05,
323 + boxShadow: [
324 + BoxShadow(
325 + color: Colors.black.withValues(
326 + alpha: 0.05,
327 + ),
328 + blurRadius: 4,
329 + offset: const Offset(0, 2),
330 ),
315 - blurRadius: 4,
316 - offset: const Offset(0, 2),
331 + ],
332 + ),
333 + alignment: Alignment.center,
334 + child: ClipRRect(
335 + borderRadius: BorderRadius.circular(5),
336 + child: Image.asset(
337 + lang.flagAsset,
338 + width: 48,
339 + height: 32,
340 + fit: BoxFit.cover,
341 + errorBuilder:
342 + (context, error, stackTrace) {
343 + return Text(
344 + lang.flag,
345 + style: const TextStyle(
346 + fontSize: 18,
347 + ),
348 + );
349 + },
350 ),
318 - ],
351 + ),
352 ),
320 - alignment: Alignment.center,
321 - child: ClipRRect(
322 - borderRadius: BorderRadius.circular(5),
323 - child: Image.asset(
324 - lang.flagAsset,
325 - width: 48,
326 - height: 32,
327 - fit: BoxFit.cover,
328 - errorBuilder:
329 - (context, error, stackTrace) {
330 - return Text(
331 - lang.flag,
332 - style: const TextStyle(
333 - fontSize: 18,
353 + const SizedBox(width: 16),
354 + Expanded(
355 + child: Column(
356 + crossAxisAlignment:
357 + CrossAxisAlignment.start,
358 + mainAxisSize: MainAxisSize.min,
359 + children: [
360 + Text(
361 + lang.nativeName,
362 + style: theme.textTheme.titleMedium
363 + ?.copyWith(
364 + fontWeight: FontWeight.bold,
365 + ),
366 + ),
367 + const SizedBox(height: 2),
368 + Text(
369 + '${lang.englishName} • ${lang.shortText.toUpperCase()}',
370 + style: theme.textTheme.labelSmall
371 + ?.copyWith(
372 + color: theme
373 + .colorScheme
374 + .onSurface
375 + .withValues(alpha: 0.5),
376 ),
335 - );
336 - },
377 + ),
378 + ],
379 ),
380 ),
339 - ),
340 - const SizedBox(width: 16),
341 - Expanded(
342 - child: Column(
343 - crossAxisAlignment:
344 - CrossAxisAlignment.start,
345 - mainAxisSize: MainAxisSize.min,
346 - children: [
347 - Text(
348 - lang.nativeName,
349 - style: theme.textTheme.titleMedium
350 - ?.copyWith(
351 - fontWeight: FontWeight.bold,
352 - ),
353 - ),
354 - const SizedBox(height: 2),
355 - Text(
356 - '${lang.englishName} • ${lang.shortText.toUpperCase()}',
357 - style: theme.textTheme.labelSmall
358 - ?.copyWith(
359 - color: theme
360 - .colorScheme
361 - .onSurface
362 - .withValues(alpha: 0.5),
363 - ),
364 - ),
365 - ],
366 - ),
367 - ),
368 - const SizedBox(width: 8),
369 - AnimatedContainer(
370 - duration: const Duration(milliseconds: 200),
371 - width: 22,
372 - height: 22,
373 - decoration: BoxDecoration(
374 - shape: BoxShape.circle,
375 - color: isSelected
376 - ? theme.colorScheme.primary
377 - : Colors.transparent,
378 - border: Border.all(
381 + const SizedBox(width: 8),
382 + AnimatedContainer(
383 + duration: const Duration(
384 + milliseconds: 200,
385 + ),
386 + width: 22,
387 + height: 22,
388 + decoration: BoxDecoration(
389 + shape: BoxShape.circle,
390 color: isSelected
391 ? theme.colorScheme.primary
381 - : theme.colorScheme.outline
382 - .withValues(alpha: 0.3),
383 - width: 2,
392 + : Colors.transparent,
393 + border: Border.all(
394 + color: isSelected
395 + ? theme.colorScheme.primary
396 + : theme.colorScheme.outline
397 + .withValues(alpha: 0.3),
398 + width: 2,
399 + ),
400 ),
401 + child: isSelected
402 + ? const HugeIcon(
403 + icon:
404 + HugeIcons.strokeRoundedTick01,
405 + color: Colors.white,
406 + size: 14,
407 + )
408 + : null,
409 ),
386 - child: isSelected
387 - ? const HugeIcon(
388 - icon: HugeIcons.strokeRoundedTick01,
389 - color: Colors.white,
390 - size: 14,
391 - )
392 - : null,
393 - ),
394 - ],
410 + ],
411 + ),
412 ),
396 - ),
397 - );
398 - },
413 + );
414 + },
415 + ),
416 ),
400 - ),
401 - const SizedBox(height: 32),
402 - ],
417 + const SizedBox(height: 32),
418 + ],
419 + ),
420 ),
421 ),
422 ),
423 + SizedBox(height: 8),
424 Actor(
425 delay: 120.ms,
426 acts: [.fadeIn(), .slideY(from: 0.08)],
lib/features/settings/views/settings_screen.dart
+1
@@ -1038,6 +1038,7 @@ class _LanguageSetting extends StatelessWidget {
1038 ('bn', 'বাংলা', 'assets/images/flag_bd.png', '🇧🇩'),
1039 ('hi', 'हिन्दी', 'assets/images/flag_in.png', '🇮🇳'),
1040 ('ru', 'Русский', 'assets/images/flag_ru.png', '🇷🇺'),
1041 + ('tr', 'Türkçe', 'assets/images/flag_tr.png', '🇹🇷'),
1042 ];
1043
1044 final String? current;
lib/l10n/app_localizations.dart
+5
@@ -13,6 +13,7 @@ import 'app_localizations_hi.dart';
13 import 'app_localizations_it.dart';
14 import 'app_localizations_ja.dart';
15 import 'app_localizations_ru.dart';
16 +import 'app_localizations_tr.dart';
17 import 'app_localizations_zh.dart';
18
19 // ignore_for_file: type=lint
@@ -109,6 +110,7 @@ abstract class AppLocalizations {
110 Locale('it'),
111 Locale('ja'),
112 Locale('ru'),
113 + Locale('tr'),
114 Locale('zh'),
115 Locale('zh', 'TW'),
116 ];
@@ -5407,6 +5409,7 @@ class _AppLocalizationsDelegate
5409 'it',
5410 'ja',
5411 'ru',
5412 + 'tr',
5413 'zh',
5414 ].contains(locale.languageCode);
5415
@@ -5445,6 +5448,8 @@ AppLocalizations lookupAppLocalizations(Locale locale) {
5448 return AppLocalizationsJa();
5449 case 'ru':
5450 return AppLocalizationsRu();
5451 + case 'tr':
5452 + return AppLocalizationsTr();
5453 case 'zh':
5454 return AppLocalizationsZh();
5455 }
lib/l10n/app_localizations_tr.dart new
+2900
@@ -0,0 +1,2900 @@
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 Turkish (`tr`).
8 +class AppLocalizationsTr extends AppLocalizations {
9 + AppLocalizationsTr([String locale = 'tr']) : super(locale);
10 +
11 + @override
12 + String get app_name => 'LocalMind';
13 +
14 + @override
15 + String get app_tagline =>
16 + 'Sizin Yapay Zekanız. Sizin Cihazınız. Sizin Kurallarınız.';
17 +
18 + @override
19 + String get app_version => '1.0.0';
20 +
21 + @override
22 + String get cancel => 'İptal';
23 +
24 + @override
25 + String get confirm => 'Onayla';
26 +
27 + @override
28 + String get delete => 'Sil';
29 +
30 + @override
31 + String get save => 'Kaydet';
32 +
33 + @override
34 + String get retry => 'Yeniden Dene';
35 +
36 + @override
37 + String get close => 'Kapat';
38 +
39 + @override
40 + String get done => 'Bitti';
41 +
42 + @override
43 + String get continue_action => 'Devam Et';
44 +
45 + @override
46 + String get skip => 'Atla';
47 +
48 + @override
49 + String get install => 'Yükle';
50 +
51 + @override
52 + String get download => 'İndir';
53 +
54 + @override
55 + String get resume => 'Devam Ettir';
56 +
57 + @override
58 + String get pause => 'Duraklat';
59 +
60 + @override
61 + String get stop => 'Durdur';
62 +
63 + @override
64 + String get edit => 'Düzenle';
65 +
66 + @override
67 + String get preview => 'Önizleme';
68 +
69 + @override
70 + String get unload => 'Bellekten Çıkar';
71 +
72 + @override
73 + String get load => 'Yükle';
74 +
75 + @override
76 + String get rename => 'Yeniden Adlandır';
77 +
78 + @override
79 + String get pin => 'Sabitle';
80 +
81 + @override
82 + String get unpin => 'Sabitlemeyi Kaldır';
83 +
84 + @override
85 + String get share => 'Paylaş';
86 +
87 + @override
88 + String get copy => 'Kopyala';
89 +
90 + @override
91 + String get copied => 'Kopyalandı!';
92 +
93 + @override
94 + String get copied_to_clipboard => 'Panoya kopyalandı';
95 +
96 + @override
97 + String get select => 'Seç';
98 +
99 + @override
100 + String get active => 'Aktif';
101 +
102 + @override
103 + String get all => 'Tümü';
104 +
105 + @override
106 + String get none => 'Hiçbiri';
107 +
108 + @override
109 + String get none_selected => 'Hiçbiri seçilmedi';
110 +
111 + @override
112 + String get online => 'Çevrimiçi';
113 +
114 + @override
115 + String get connected => 'Bağlandı';
116 +
117 + @override
118 + String get checking => 'Kontrol ediliyor';
119 +
120 + @override
121 + String get offline => 'Çevrimdışı';
122 +
123 + @override
124 + String get error => 'Hata';
125 +
126 + @override
127 + String get unknown_error => 'Bilinmeyen hata';
128 +
129 + @override
130 + String get not_now => 'Şimdi Değil';
131 +
132 + @override
133 + String get enable => 'Etkinleştir';
134 +
135 + @override
136 + String get proceed_anyway => 'Yine de Devam Et';
137 +
138 + @override
139 + String get test_connection => 'Bağlantıyı Test Et';
140 +
141 + @override
142 + String get testing => 'Test ediliyor...';
143 +
144 + @override
145 + String get connection_successful => 'Bağlantı başarılı!';
146 +
147 + @override
148 + String get connection_failed =>
149 + 'Bağlantı başarısız. Ayarlarınızı kontrol edin.';
150 +
151 + @override
152 + String get save_continue => 'Kaydet ve Devam Et';
153 +
154 + @override
155 + String get save_changes => 'Değişiklikleri Kaydet';
156 +
157 + @override
158 + String get finish_setup => 'Kurulumu Tamamla';
159 +
160 + @override
161 + String get start_new_chat => 'Yeni Sohbet Başlat';
162 +
163 + @override
164 + String get cannot_undo => 'Bu işlem geri alınamaz.';
165 +
166 + @override
167 + String get ram_warning => 'RAM Uyarısı';
168 +
169 + @override
170 + String get recommended => 'ÖNERİLEN';
171 +
172 + @override
173 + String get may_be_large => 'Bu cihaz için çok büyük olabilir';
174 +
175 + @override
176 + String get calculating => 'Hesaplanıyor...';
177 +
178 + @override
179 + String get download_failed => 'İndirme Başarısız';
180 +
181 + @override
182 + String get downloaded => 'İndirildi';
183 +
184 + @override
185 + String get not_downloaded => 'İndirilmedi';
186 +
187 + @override
188 + String get installed => 'Yüklendi';
189 +
190 + @override
191 + String get not_installed => 'Yüklenmedi';
192 +
193 + @override
194 + String get loading => 'Yükleniyor...';
195 +
196 + @override
197 + String get thinking => 'Düşünüyor...';
198 +
199 + @override
200 + String get processing => 'İşleniyor...';
201 +
202 + @override
203 + String get initializing => 'Başlatılıyor...';
204 +
205 + @override
206 + String get ready => 'Hazır';
207 +
208 + @override
209 + String get preparing_app => 'Uygulama hazırlanıyor...';
210 +
211 + @override
212 + String get initializing_services => 'Servisler başlatılıyor...';
213 +
214 + @override
215 + String get configuring_server => 'Sunucu yapılandırılıyor...';
216 +
217 + @override
218 + String get startup_failed => 'Başlatma başarısız oldu';
219 +
220 + @override
221 + String get something_went_wrong => 'Bir şeyler yanlış gitti';
222 +
223 + @override
224 + String get delete_model_title => 'Modeli Sil';
225 +
226 + @override
227 + String delete_model_body(String name) {
228 + return '$name modelini silmek istediğinizden emin misiniz?';
229 + }
230 +
231 + @override
232 + String delete_model_body_with_size(String name, String size) {
233 + return '$name modelini silmek istediğinizden emin misiniz? Bu yaklaşık $size alan boşaltacaktır.\n\nGerekirse bu modeli daha sonra tekrar indirebilirsiniz.';
234 + }
235 +
236 + @override
237 + String get delete_voice_title => 'Sesi Sil';
238 +
239 + @override
240 + String delete_voice_body(String name, String size) {
241 + return '$name sesini silmek istediğinizden emin misiniz? Bu yaklaşık $size alan boşaltacaktır.\n\nGerekirse bu sesi daha sonra tekrar indirebilirsiniz.';
242 + }
243 +
244 + @override
245 + String get delete_server_title => 'Sunucuyu Sil';
246 +
247 + @override
248 + String delete_server_body(String name) {
249 + return '\"$name\" sunucusunu silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.';
250 + }
251 +
252 + @override
253 + String get delete_conversation_title => 'Sohbet silinsin mi?';
254 +
255 + @override
256 + String delete_conversation_body(String title) {
257 + return '\"$title\" sohbetini silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.';
258 + }
259 +
260 + @override
261 + String get delete_message_title => 'Mesaj silinsin mi?';
262 +
263 + @override
264 + String delete_persona_title(String name) {
265 + return '\"$name\" silinsin mi?';
266 + }
267 +
268 + @override
269 + String get delete_persona_body => 'Bu işlem geri alınamaz.';
270 +
271 + @override
272 + String get delete_builtin_persona_body =>
273 + 'Bu yerleşik bir personalardır. Daha sonra Ayarlar\'dan geri yükleyebilirsiniz.';
274 +
275 + @override
276 + String get restore_builtin_personas => 'Varsayılan personaları geri yükle';
277 +
278 + @override
279 + String get restore_builtin_personas_desc =>
280 + 'Sildiğiniz yerleşik personaları tekrar ekleyin';
281 +
282 + @override
283 + String get restore_builtin_personas_success =>
284 + 'Varsayılan personalar geri yüklendi';
285 +
286 + @override
287 + String get clear_personas => 'Personaları temizle';
288 +
289 + @override
290 + String get enable_image_compression => 'Göndermeden önce görselleri sıkıştır';
291 +
292 + @override
293 + String get enable_image_compression_desc =>
294 + 'Eklenen görsellerin boyutunu değiştirip sıkıştırarak sunucu sınırları içinde kalın';
295 +
296 + @override
297 + String get image_compression_level => 'Sıkıştırma seviyesi';
298 +
299 + @override
300 + String get image_compression_level_desc =>
301 + 'Yüksek seviye, daha düşük kalitede daha küçük boyutlu yüklemeler sağlar';
302 +
303 + @override
304 + String get image_compression_level_low => 'Düşük';
305 +
306 + @override
307 + String get image_compression_level_medium => 'Orta';
308 +
309 + @override
310 + String get image_compression_level_high => 'Yüksek';
311 +
312 + @override
313 + String get sort_models_tooltip => 'Modelleri sırala';
314 +
315 + @override
316 + String get sort_by_favorites => 'Önce favoriler';
317 +
318 + @override
319 + String get sort_by_name => 'İsim (A-Z)';
320 +
321 + @override
322 + String get sort_by_size_smallest => 'Boyut (önce en küçük)';
323 +
324 + @override
325 + String get sort_by_size_largest => 'Boyut (önce en büyük)';
326 +
327 + @override
328 + String get sort_by_context_length => 'Bağlam uzunluğu';
329 +
330 + @override
331 + String bulk_ai_rename_progress(int done, int total) {
332 + return '$done/$total yeniden adlandırılıyor...';
333 + }
334 +
335 + @override
336 + String selected_count(int count) {
337 + return '$count seçildi';
338 + }
339 +
340 + @override
341 + String get ai_rename_tooltip => 'Seçilenleri Yapay Zeka ile yeniden adlandır';
342 +
343 + @override
344 + String get new_chat_in_folder_tooltip => 'Bu klasörde yeni sohbet';
345 +
346 + @override
347 + String total_tokens_count(int count) {
348 + return '$count token';
349 + }
350 +
351 + @override
352 + String get smart_replies_use_persona => 'Akıllı yanıtlarda personayı kullan';
353 +
354 + @override
355 + String get smart_replies_use_persona_desc =>
356 + 'Önerilen yanıtlar genel asistan yerine aktif personanın tonuna uyar';
357 +
358 + @override
359 + String get keep_persona_on_new_chat => 'Yeni sohbette personayı koru';
360 +
361 + @override
362 + String get keep_persona_on_new_chat_desc =>
363 + 'Yeni sohbet başlatıldıktan sonra seçilen persona(lar)ı temizleme';
364 +
365 + @override
366 + String get role_swap_button_enabled => 'Rol değiştirme düğmesini göster';
367 +
368 + @override
369 + String get role_swap_button_enabled_desc =>
370 + 'Yanıt üretmeden mesajınızı kullanıcı yerine asistan olarak göndermek için sohbet girişinde bir düğme gösterin';
371 +
372 + @override
373 + String get send_as_user_tooltip => 'Kullanıcı olarak gönder';
374 +
375 + @override
376 + String get send_as_assistant_tooltip => 'Asistan olarak gönder (yanıt yok)';
377 +
378 + @override
379 + String get insert_without_generating_tooltip => 'Üretmeden ekle';
380 +
381 + @override
382 + String get token_usage_title => 'Token Kullanımı';
383 +
384 + @override
385 + String get total_tokens_label => 'Kullanılan token\'lar';
386 +
387 + @override
388 + String get usage_percent_label => 'Kullanılan bağlam';
389 +
390 + @override
391 + String get export_choice_title => 'Dışa Aktar';
392 +
393 + @override
394 + String get export_choice_body => 'Bunu nasıl dışa aktarmak istersiniz?';
395 +
396 + @override
397 + String get copy_to_clipboard => 'Panoya Kopyala';
398 +
399 + @override
400 + String bulk_export_conversations_success(int count) {
401 + return '$count sohbet dışa aktarıldı';
402 + }
403 +
404 + @override
405 + String get bulk_ai_rename_confirm_title =>
406 + 'Yapay Zeka ile Yeniden Adlandırılsın mı?';
407 +
408 + @override
409 + String bulk_ai_rename_confirm_body(int count) {
410 + return 'Bu işlem Yapay Zekadan seçilen $count sohbetin her biri için yeni bir başlık oluşturmasını ve mevcut başlıkların yerini almasını isteyecektir. Bu biraz zaman alabilir ve geri alınamaz.';
411 + }
412 +
413 + @override
414 + String get sort_by_modified_date => 'Son değiştirilme';
415 +
416 + @override
417 + String get sort_by_created_date => 'Oluşturulma tarihi';
418 +
419 + @override
420 + String get sort_title => 'Sırala';
421 +
422 + @override
423 + String get clear_conversation_title => 'Sohbet temizlensin mi?';
424 +
425 + @override
426 + String get clear_conversation_body =>
427 + 'Bu işlem sohbet içindeki tüm mesajları silecektir.';
428 +
429 + @override
430 + String get clear => 'Temizle';
431 +
432 + @override
433 + String label_completed(String label) {
434 + return '$label tamamlandı';
435 + }
436 +
437 + @override
438 + String error_with_message(String error) {
439 + return 'Hata: $error';
440 + }
441 +
442 + @override
443 + String preview_failed(String error) {
444 + return 'Önizleme başarısız: $error';
445 + }
446 +
447 + @override
448 + String loading_model(String modelId) {
449 + return '$modelId yükleniyor...';
450 + }
451 +
452 + @override
453 + String model_loaded(String modelId, String backend) {
454 + return 'Model başarıyla yüklendi';
455 + }
456 +
457 + @override
458 + String get no_model_loaded =>
459 + 'No model loaded. Tap \"Manage On-Device Modeller\" to download and load a model.';
460 +
461 + @override
462 + String loading_model_error(String error) {
463 + return 'Hata: $error';
464 + }
465 +
466 + @override
467 + String get delete_conversation => 'Sohbeti Sil';
468 +
469 + @override
470 + String get nav_history => 'Geçmiş';
471 +
472 + @override
473 + String get nav_servers => 'Sunucular';
474 +
475 + @override
476 + String get nav_local_models => 'Local Modeller';
477 +
478 + @override
479 + String get nav_tts => 'Metin Okuma';
480 +
481 + @override
482 + String get nav_personas => 'Personalar';
483 +
484 + @override
485 + String get nav_settings => 'Ayarlar';
486 +
487 + @override
488 + String get nav_new_chat => 'Yeni Sohbet';
489 +
490 + @override
491 + String get search_hint => 'Sohbetleri ara...';
492 +
493 + @override
494 + String get no_server_selected => 'Sunucu seçilmedi';
495 +
496 + @override
497 + String get switch_server => 'Sunucu Değiştir';
498 +
499 + @override
500 + String get switch_server_subtitle => 'Bağlanmak için bir sunucu seçin';
501 +
502 + @override
503 + String get manage_servers => 'Manage Sunucular';
504 +
505 + @override
506 + String get open_source => 'Açık Kaynak';
507 +
508 + @override
509 + String get open_source_desc =>
510 + 'LocalMind açık kaynaklıdır. İlerlememizi takip edin veya GitHub\'da katkıda bulunun.';
511 +
512 + @override
513 + String get star_on_github => 'GitHub\'da Yıldızla';
514 +
515 + @override
516 + String get add_more => 'Daha fazla ekle';
517 +
518 + @override
519 + String get on_github => 'GitHub üzerinde';
520 +
521 + @override
522 + String get could_not_open_github => 'GitHub açılamadı.';
523 +
524 + @override
525 + String get settings_title => 'Ayarlar';
526 +
527 + @override
528 + String get settings_appearance => 'Görünüm';
529 +
530 + @override
531 + String get settings_language => 'Dil';
532 +
533 + @override
534 + String get language_system_default => 'Sistem Varsayılanı';
535 +
536 + @override
537 + String get settings_tts => 'Metin Okuma';
538 +
539 + @override
540 + String get settings_behavior => 'Davranış';
541 +
542 + @override
543 + String get settings_on_device => 'Cihaz Üstü Çıkarım';
544 +
545 + @override
546 + String get settings_default_server => 'Varsayılan Sunucu';
547 +
548 + @override
549 + String get settings_default_persona => 'Varsayılan Persona';
550 +
551 + @override
552 + String get settings_privacy => 'Gizlilik';
553 +
554 + @override
555 + String get settings_data_management => 'Veri Yönetimi';
556 +
557 + @override
558 + String get settings_about => 'Hakkında';
559 +
560 + @override
561 + String get theme => 'Tema';
562 +
563 + @override
564 + String get theme_system => 'Sistem';
565 +
566 + @override
567 + String get theme_light => 'Açık';
568 +
569 + @override
570 + String get theme_dark => 'Koyu';
571 +
572 + @override
573 + String get theme_claude => 'Claude';
574 +
575 + @override
576 + String get font_size => 'Yazı Tipi Boyutu';
577 +
578 + @override
579 + String get font_size_desc => 'Sohbet içindeki metin boyutunu ayarlayın.';
580 +
581 + @override
582 + String get font_preview =>
583 + 'Hızlı kahverengi tilki tembel köpeğin üzerinden atlar.';
584 +
585 + @override
586 + String get code_theme_dark => 'Kod Teması (Koyu)';
587 +
588 + @override
589 + String get code_theme_light => 'Kod Teması (Açık)';
590 +
591 + @override
592 + String get code_theme_desc =>
593 + 'Kod blokları için sözdizimi vurgulama temasını seçin.';
594 +
595 + @override
596 + String get tts_engine => 'TTS Motoru';
597 +
598 + @override
599 + String get tts_engine_system => 'Sistem TTS';
600 +
601 + @override
602 + String get tts_engine_kitten => 'Kitten TTS';
603 +
604 + @override
605 + String get voice => 'Ses';
606 +
607 + @override
608 + String get voice_female => 'Kadın';
609 +
610 + @override
611 + String get voice_male => 'Erkek';
612 +
613 + @override
614 + String get voice_other => 'Diğer';
615 +
616 + @override
617 + String get tts_speed => 'Konuşma Hızı';
618 +
619 + @override
620 + String get tts_speed_desc => 'Oynatma hızını ayarlayın.';
621 +
622 + @override
623 + String get manage_tts_models => 'Manage TTS Modeller';
624 +
625 + @override
626 + String get manage_on_device_models => 'Manage On-Device Modeller';
627 +
628 + @override
629 + String get enable_smart_reply => 'Cihaz Üstü Akıllı Yanıtlar';
630 +
631 + @override
632 + String get ai_user_response_enabled =>
633 + 'Yapay zeka kullanıcı mesajı (göndere basılı tutun)';
634 +
635 + @override
636 + String get ai_user_response_enabled_desc =>
637 + 'Yapay zekanın sonraki mesajınızı yazıp göndermesini sağlamak için gönder düğmesini 3 saniye basılı tutun';
638 +
639 + @override
640 + String get ai_user_response_tooltip =>
641 + 'Yapay zeka ile kullanıcı mesajı oluştur';
642 +
643 + @override
644 + String get streaming_responses => 'Akan Yanıtlar (Streaming)';
645 +
646 + @override
647 + String get auto_generate_titles => 'Başlıkları Otomatik Oluştur';
648 +
649 + @override
650 + String get send_on_enter => 'Enter ile Gönder';
651 +
652 + @override
653 + String get show_system_messages => 'Varsayılan Sistem Yönergesini Gönder';
654 +
655 + @override
656 + String get show_system_messages_desc =>
657 + 'Persona seçilmediğinde, her istekle birlikte varsayılan asistan sistem yönergesini gönder';
658 +
659 + @override
660 + String get show_system_messages_in_chat =>
661 + 'Sohbette Sistem Mesajlarını Göster';
662 +
663 + @override
664 + String get show_system_messages_in_chat_desc =>
665 + 'Sistem mesajlarını (örn. içe aktarılan yedekten) konuşmada görünür baloncuklar olarak göster';
666 +
667 + @override
668 + String get haptic_feedback => 'Dokunsal Geri Bildirim';
669 +
670 + @override
671 + String get enable_mcp => 'MCP\'yi Etkinleştir';
672 +
673 + @override
674 + String get new_chat_mcp_default => 'Yeni Sohbet MCP Varsayılanı';
675 +
676 + @override
677 + String get show_data_indicator => 'Veri Göstergesini Göster';
678 +
679 + @override
680 + String get privacy_info => '\"LocalMind verilerinizi asla görmez\"';
681 +
682 + @override
683 + String get delete_all_conversations => 'Sil All Sohbetler';
684 +
685 + @override
686 + String get reset_settings_defaults => 'Reset Ayarlar to Defaults';
687 +
688 + @override
689 + String get chat_title => 'LocalMind';
690 +
691 + @override
692 + String get chat_parameters_tooltip => 'Sohbet Parametreleri';
693 +
694 + @override
695 + String get change_persona => 'Personayı Değiştir';
696 +
697 + @override
698 + String get set_persona => 'Personayı Ayarla';
699 +
700 + @override
701 + String get remove_persona => 'Kaldır Persona';
702 +
703 + @override
704 + String get clear_conversation => 'Sohbeti Temizle';
705 +
706 + @override
707 + String get connection_error => 'Bağlantı hatası. Sunucunuzu kontrol edin.';
708 +
709 + @override
710 + String get disconnected => 'Bağlantı Kesildi from server.';
711 +
712 + @override
713 + String get configure => 'Yapılandır';
714 +
715 + @override
716 + String get select_model => 'Model Seçin';
717 +
718 + @override
719 + String get select_persona => 'Persona Seç';
720 +
721 + @override
722 + String get manage_personas => 'Personaları yönet';
723 +
724 + @override
725 + String get personas_combine_hint =>
726 + 'Sistem yönergelerini birleştirmek için sohbette birden fazla persona seçin.';
727 +
728 + @override
729 + String get start_conversation => 'Bir sohbet başlatın';
730 +
731 + @override
732 + String get recent_chats => 'Son sohbetler';
733 +
734 + @override
735 + String get see_all => 'Tümünü gör';
736 +
737 + @override
738 + String get quick_write => 'Bir fonksiyon yazmama yardım et';
739 +
740 + @override
741 + String get quick_explain => 'Bu kodu açıkla';
742 +
743 + @override
744 + String get quick_debug => 'Bunu benim için ayıkla (debug)';
745 +
746 + @override
747 + String get quick_async => 'async/await nasıl kullanılır?';
748 +
749 + @override
750 + String get history_missing_title => 'Geçmiş Eksik';
751 +
752 + @override
753 + String get history_missing_desc =>
754 + 'Bu sohbetteki mesajlar silinmiş veya geçmiş kaydı bozulmuş.';
755 +
756 + @override
757 + String get technical_details => 'Teknik Detaylar';
758 +
759 + @override
760 + String get last_error => 'Last Hata:';
761 +
762 + @override
763 + String get copy_info => 'Copy Bilgi';
764 +
765 + @override
766 + String get conversation_id => 'Sohbet Kimliği (ID)';
767 +
768 + @override
769 + String get created_at => 'Oluşturulma Tarihi';
770 +
771 + @override
772 + String get expected_messages => 'Beklenen Mesajlar';
773 +
774 + @override
775 + String get debug_dialog_desc =>
776 + 'Eşitleme sorunlarını belirlemeye yardımcı olacak teşhis bilgileri.';
777 +
778 + @override
779 + String get chat_input_hint => 'İstediğinizi sorun';
780 +
781 + @override
782 + String get send_message_tooltip => 'Mesaj gönder';
783 +
784 + @override
785 + String get stop_generation_tooltip => 'Üretimi durdur';
786 +
787 + @override
788 + String get attach_images_tooltip => 'Görsel veya metin ekle';
789 +
790 + @override
791 + String get start_listening_tooltip => 'Dinlemeyi başlat';
792 +
793 + @override
794 + String get stop_listening_tooltip => 'Dinlemeyi durdur';
795 +
796 + @override
797 + String tool_label(String toolCallId) {
798 + return 'Araç: $toolCallId';
799 + }
800 +
801 + @override
802 + String get tool_unknown => 'Araç: Bilinmeyen';
803 +
804 + @override
805 + String get message_options => 'Mesaj seçenekleri';
806 +
807 + @override
808 + String get copy_markdown => 'Markdown olarak Kopyala';
809 +
810 + @override
811 + String get copied_markdown => 'Markdown olarak kopyalandı';
812 +
813 + @override
814 + String get read_aloud => 'Sesli Oku';
815 +
816 + @override
817 + String get stop_reading => 'Okumayı Durdur';
818 +
819 + @override
820 + String get more => 'Daha fazla';
821 +
822 + @override
823 + String character_count(int length) {
824 + return '$length karakter';
825 + }
826 +
827 + @override
828 + String get edit_message => 'Mesajı Düzenle';
829 +
830 + @override
831 + String get edit_message_desc =>
832 + 'Kaydetmek, alttaki asistan yanıtını kaldıracak ve yeniden üretecektir.';
833 +
834 + @override
835 + String get save_regenerate => 'Kaydet ve yeniden üret';
836 +
837 + @override
838 + String get chat_settings_title => 'Chat Ayarlar';
839 +
840 + @override
841 + String get reset_defaults => 'Varsayılanlara Sıfırla';
842 +
843 + @override
844 + String get parameters_tab => 'Parametreler';
845 +
846 + @override
847 + String get mcp_tab => 'MCP';
848 +
849 + @override
850 + String get temperature => 'Sıcaklık (Temperature)';
851 +
852 + @override
853 + String get temperature_desc =>
854 + 'Rastgeleliği kontrol eder: Yüksek = Yaratıcı, Düşük = Odaklanmış';
855 +
856 + @override
857 + String get top_p => 'Top P';
858 +
859 + @override
860 + String get top_p_desc => 'Çekirdek örnekleme eşiği';
861 +
862 + @override
863 + String get max_tokens => 'Maksimum Token';
864 +
865 + @override
866 + String get max_tokens_desc => 'Yanıt sınırı';
867 +
868 + @override
869 + String get context_length => 'Bağlam Uzunluğu';
870 +
871 + @override
872 + String get context_length_desc => 'Geçmiş penceresi';
873 +
874 + @override
875 + String get mcp_disabled_warning =>
876 + 'MCP is disabled globally. Enable it in Ayarlar to use these features.';
877 +
878 + @override
879 + String get mcp_enable_chat => 'Bu sohbet için MCP\'yi etkinleştir';
880 +
881 + @override
882 + String get auto_execute_tools => 'Araçları otomatik çalıştır';
883 +
884 + @override
885 + String get beta_label => 'Beta';
886 +
887 + @override
888 + String get experimental_label => 'Deneysel';
889 +
890 + @override
891 + String get add_ephemeral_mcp => 'Geçici MCP Sunucusu Ekle';
892 +
893 + @override
894 + String get mcp_label_placeholder => 'Etiket';
895 +
896 + @override
897 + String get mcp_url_placeholder => 'URL (https://...)';
898 +
899 + @override
900 + String get active_integrations => 'Aktif Entegrasyonlar';
901 +
902 + @override
903 + String get enable_notifications => 'Bildirimleri Etkinleştir';
904 +
905 + @override
906 + String get enable_notifications_desc =>
907 + 'Modellerin indirilmesi tamamlandığında bildirim alın.';
908 +
909 + @override
910 + String get chat_history_title => 'Sohbet Geçmişi';
911 +
912 + @override
913 + String get conversation_just_now => 'Az önce';
914 +
915 + @override
916 + String conversation_minutes_ago(int minutes) {
917 + return '${minutes}d önce';
918 + }
919 +
920 + @override
921 + String conversation_hours_ago(int hours) {
922 + return '${hours}s önce';
923 + }
924 +
925 + @override
926 + String get conversation_yesterday => 'Dün';
927 +
928 + @override
929 + String conversation_days_ago(int days) {
930 + return '${days}g önce';
931 + }
932 +
933 + @override
934 + String conversation_date(int month, int day, int year) {
935 + return '$day/$month/$year';
936 + }
937 +
938 + @override
939 + String get options_tooltip => 'Seçenekler';
940 +
941 + @override
942 + String get no_results_found => 'Sonuç bulunamadı';
943 +
944 + @override
945 + String get no_conversations_yet => 'Henüz sohbet yok';
946 +
947 + @override
948 + String get try_different_search => 'Farklı bir arama terimi deneyin';
949 +
950 + @override
951 + String get start_new_conversation => 'Yeni bir sohbet başlatın';
952 +
953 + @override
954 + String get rename_conversation => 'Sohbeti Yeniden Adlandır';
955 +
956 + @override
957 + String get enter_new_title => 'Yeni başlık girin';
958 +
959 + @override
960 + String get pinned_section => 'SABİTLENENLER';
961 +
962 + @override
963 + String get today_section => 'BUGÜN';
964 +
965 + @override
966 + String get yesterday_section => 'DÜN';
967 +
968 + @override
969 + String get previous_7_days => 'Son 7 Gün';
970 +
971 + @override
972 + String get previous_30_days => 'Son 30 Gün';
973 +
974 + @override
975 + String get older_section => 'DAHA ESKİ';
976 +
977 + @override
978 + String get onboarding_choose_language => 'LocalMind dillerini keşfedin';
979 +
980 + @override
981 + String get onboarding_choose_language_desc =>
982 + 'Uygulama arayüzünüz için tercih ettiğiniz dili seçin.';
983 +
984 + @override
985 + String get onboarding_localmind => 'LOCALMIND';
986 +
987 + @override
988 + String get onboarding_connect_server => 'Sunucunuzu\nBağlayın';
989 +
990 + @override
991 + String get onboarding_connect_desc =>
992 + 'Özel yapay zeka deneyiminize başlamak için LM Studio, Ollama,\nOllama Cloud veya OpenRouter\'a bağlanın.';
993 +
994 + @override
995 + String get openai_compatible_api => 'OpenAI uyumlu API';
996 +
997 + @override
998 + String get https_requires_ssl => 'HTTPS, SSL gerektirir';
999 +
1000 + @override
1001 + String get most_local_setups_use_http =>
1002 + 'Çoğu yerel kurulum http:// kullanır';
1003 +
1004 + @override
1005 + String get onboarding_welcome => 'LocalMind\'a Hoş Geldiniz';
1006 +
1007 + @override
1008 + String get server_type_on_device => 'Cihaz Üstü';
1009 +
1010 + @override
1011 + String get server_type_lm_studio => 'LM Studio';
1012 +
1013 + @override
1014 + String get server_type_ollama => 'Ollama';
1015 +
1016 + @override
1017 + String get server_type_ollama_cloud => 'Ollama Cloud';
1018 +
1019 + @override
1020 + String get server_type_ollama_cloud_sub => 'BULUT YÖNETİMLİ';
1021 +
1022 + @override
1023 + String get server_type_ollama_cloud_display => 'Ollama Cloud';
1024 +
1025 + @override
1026 + String get server_address_ollama_cloud => 'ollama.com';
1027 +
1028 + @override
1029 + String get ollama_cloud_disclosure =>
1030 + 'Ollama Cloud\'a bağlanarak sohbet mesajlarınız ve girdileriniz çıkarım için Ollama\'nın yönetilen sunucularına gönderilir. LocalMind sohbetlerinizi izlemez veya saklamaz. Bu anahtarı ollama.com/settings/keys adresinden istediğiniz zaman iptal edebilirsiniz.';
1031 +
1032 + @override
1033 + String get api_key_required_ollama_cloud =>
1034 + 'Ollama Cloud için API Anahtarı gereklidir';
1035 +
1036 + @override
1037 + String get api_key_hint_ollama_cloud =>
1038 + 'Ollama Cloud API anahtarınızı yapıştırın';
1039 +
1040 + @override
1041 + String get add_server_ollama_cloud_subtitle =>
1042 + 'Yönetilen bulut modellerine erişmek için ollama.com/settings/keys adresinden alacağınız API anahtarıyla Ollama Cloud\'a bağlanın.';
1043 +
1044 + @override
1045 + String get add_server_openrouter_subtitle =>
1046 + 'Geçerli bir API anahtarıyla OpenRouter üzerinden bağlanın ve model yönlendirmesi için bu profili hazır tutun.';
1047 +
1048 + @override
1049 + String get add_server_endpoint_subtitle =>
1050 + 'Yerel veya kendi barındırdığınız bir uç noktayı yapılandırın ve kaydetmeden önce bağlantıyı doğrulayın.';
1051 +
1052 + @override
1053 + String get server_type_openrouter => 'OpenRouter';
1054 +
1055 + @override
1056 + String get server_type_openrouter_sub => 'BİRLEŞİK BULUT';
1057 +
1058 + @override
1059 + String get ready_continue => 'DEVAM ETMEYE HAZIR';
1060 +
1061 + @override
1062 + String get waiting_selection => 'SEÇİM BEKLENİYOR';
1063 +
1064 + @override
1065 + String get setup_connection => 'Bağlantıyı Kur';
1066 +
1067 + @override
1068 + String setup_connection_desc(String server) {
1069 + return 'Sohbet etmeye başlamak için $server sunucunuzu yapılandırın.';
1070 + }
1071 +
1072 + @override
1073 + String get server_name => 'Sunucu Adı';
1074 +
1075 + @override
1076 + String get name_required => 'İsim gereklidir';
1077 +
1078 + @override
1079 + String get name_max_50 => 'En fazla 50 karakter';
1080 +
1081 + @override
1082 + String get host_label => 'Ana Bilgisayar / IP Adresi';
1083 +
1084 + @override
1085 + String get host_required => 'Ana bilgisayar gereklidir';
1086 +
1087 + @override
1088 + String get port_label => 'Port';
1089 +
1090 + @override
1091 + String get port_required => 'Port gereklidir';
1092 +
1093 + @override
1094 + String get port_invalid => 'Bir sayı olmalıdır';
1095 +
1096 + @override
1097 + String get port_range => 'Geçerli bir port girin (1-65535)';
1098 +
1099 + @override
1100 + String get api_key_required => 'API Anahtarı *';
1101 +
1102 + @override
1103 + String get api_key_optional => 'API Anahtarı (İsteğe Bağlı)';
1104 +
1105 + @override
1106 + String get api_key_required_openrouter =>
1107 + 'OpenRouter için API Anahtarı gereklidir';
1108 +
1109 + @override
1110 + String get api_key_format => 'OpenRouter API anahtarları sk- ile başlar';
1111 +
1112 + @override
1113 + String get my_server_hint => 'Sunucum';
1114 +
1115 + @override
1116 + String get name_length_validation =>
1117 + 'İsim 50 karakter veya daha az olmalıdır';
1118 +
1119 + @override
1120 + String get host_valid =>
1121 + 'Geçerli bir ana bilgisayar adı veya IP adresi girin';
1122 +
1123 + @override
1124 + String get api_key_hint_openrouter => 'sk-...';
1125 +
1126 + @override
1127 + String get api_key_hint_generic => 'Kimlik doğrulamalı sunucular için';
1128 +
1129 + @override
1130 + String get update_server => 'Sunucuyu Güncelle';
1131 +
1132 + @override
1133 + String get save_server => 'Sunucuyu Kaydet';
1134 +
1135 + @override
1136 + String get server_updated => 'Sunucu güncellendi';
1137 +
1138 + @override
1139 + String get server_added => 'Sunucu eklendi';
1140 +
1141 + @override
1142 + String get download_model_title => 'Bir Model İndirin';
1143 +
1144 + @override
1145 + String get download_model_desc =>
1146 + 'İndirmek için bir model seçin.\nCihazınızda yerel olarak çalışacaktır.';
1147 +
1148 + @override
1149 + String get on_device_android_only =>
1150 + 'Cihaz üstü çıkarım şu anda yalnızca Android\'de kullanılabilir.';
1151 +
1152 + @override
1153 + String get total_ram => 'Toplam RAM';
1154 +
1155 + @override
1156 + String get available => 'Kullanılabilir';
1157 +
1158 + @override
1159 + String ram_min_required(String fileSize) {
1160 + return 'En az $fileSize GB RAM';
1161 + }
1162 +
1163 + @override
1164 + String download_progress(String percent, String speed) {
1165 + return '%$percent • $speed';
1166 + }
1167 +
1168 + @override
1169 + String eta_label(String eta) {
1170 + return 'Kalan Süre: $eta';
1171 + }
1172 +
1173 + @override
1174 + String paused_progress(String percent) {
1175 + return 'Duraklatıldı - %$percent';
1176 + }
1177 +
1178 + @override
1179 + String ram_warning_body_download(String ram, String totalMemory) {
1180 + return 'Bu model en az $ram GB RAM gerektirir, ancak cihazınızda $totalMemory var. Düzgün çalışmayabilir veya uygulamanın çökmesine neden olabilir.';
1181 + }
1182 +
1183 + @override
1184 + String ram_warning_body_load(String availableRAM, String ram) {
1185 + return 'Cihazınızda $availableRAM kullanılabilir RAM var, ancak bu model en az $ram GB önerir. Yükleme başarısız olabilir veya kararsızlığa yol açabilir.';
1186 + }
1187 +
1188 + @override
1189 + String get choose_theme => 'Tema Seçin';
1190 +
1191 + @override
1192 + String get choose_theme_desc =>
1193 + 'Uygulama görünümünü kişiselleştirin. Bunu daha sonra ayarlar içinden değiştirebilirsiniz.';
1194 +
1195 + @override
1196 + String get theme_card_system => 'Sistem';
1197 +
1198 + @override
1199 + String get theme_card_system_sub => 'Cihaz ayarlarınızla eşleşir';
1200 +
1201 + @override
1202 + String get theme_card_light => 'Açık';
1203 +
1204 + @override
1205 + String get theme_card_light_sub => 'Temiz ve parlak';
1206 +
1207 + @override
1208 + String get theme_card_dark => 'Koyu';
1209 +
1210 + @override
1211 + String get theme_card_dark_sub => 'Gözleri yormaz';
1212 +
1213 + @override
1214 + String get theme_card_claude => 'Claude';
1215 +
1216 + @override
1217 + String get theme_card_claude_sub => 'Sıcak, şeftali tonlu bir tema';
1218 +
1219 + @override
1220 + String get stay_updated => 'Güncel Kalın';
1221 +
1222 + @override
1223 + String get stay_updated_desc =>
1224 + 'Yapay zeka modellerinizin indirilmesi tamamlandığında veya uzun süren görevler bittiğinde bildirim alın.';
1225 +
1226 + @override
1227 + String get notification_benefit_downloads => 'Model indirme ilerlemesi';
1228 +
1229 + @override
1230 + String get notification_benefit_completions => 'Üretim tamamlamaları';
1231 +
1232 + @override
1233 + String get notification_benefit_background => 'Geriground tasks status';
1234 +
1235 + @override
1236 + String get allow_notifications => 'Bildirimlere İzin Ver';
1237 +
1238 + @override
1239 + String get servers_title => 'Sunucular';
1240 +
1241 + @override
1242 + String get no_servers_yet => 'No Sunucular Yet';
1243 +
1244 + @override
1245 + String get no_servers_desc =>
1246 + 'Yapay zeka modelleriyle sohbet etmeye başlamak için ilk sunucunuzu ekleyin.';
1247 +
1248 + @override
1249 + String get add_server => 'Sunucu Ekle';
1250 +
1251 + @override
1252 + String switched_to_server(String name) {
1253 + return '$name sunucusuna geçildi';
1254 + }
1255 +
1256 + @override
1257 + String get edit_server => 'Sunucuyu Düzenle';
1258 +
1259 + @override
1260 + String get add_server_title => 'Sunucu Ekle';
1261 +
1262 + @override
1263 + String get server_type_label => 'Sunucu Türü';
1264 +
1265 + @override
1266 + String get server_icon_label => 'Sunucu Simgesi';
1267 +
1268 + @override
1269 + String get default_icon => 'Varsayılan simge';
1270 +
1271 + @override
1272 + String get server_type_lm_studio_display => 'LM Studio';
1273 +
1274 + @override
1275 + String get server_type_openai_display => 'OpenAI Uyumlu';
1276 +
1277 + @override
1278 + String get server_type_ollama_display => 'Ollama';
1279 +
1280 + @override
1281 + String get server_type_openrouter_display => 'OpenRouter';
1282 +
1283 + @override
1284 + String get server_type_on_device_display => 'Cihaz Üstü';
1285 +
1286 + @override
1287 + String get server_address_openrouter => 'openrouter.ai';
1288 +
1289 + @override
1290 + String get server_address_on_device => 'Yerel çıkarım';
1291 +
1292 + @override
1293 + String server_address_format(String host, String port) {
1294 + return '$host:$port';
1295 + }
1296 +
1297 + @override
1298 + String get default_badge => 'Varsayılan';
1299 +
1300 + @override
1301 + String get set_as_default => 'Varsayılan Olarak Ayarla';
1302 +
1303 + @override
1304 + String get select_icon => 'Simge Seç';
1305 +
1306 + @override
1307 + String get select_icon_desc => 'Sunucunuz için bir simge seçin';
1308 +
1309 + @override
1310 + String get search_icons_hint => 'Simgeleri ara...';
1311 +
1312 + @override
1313 + String get server_icon_stack => 'Sunucu Yığını';
1314 +
1315 + @override
1316 + String get server_icon_stack2 => 'Sunucu Yığını 02';
1317 +
1318 + @override
1319 + String get server_icon_stack3 => 'Sunucu Yığını 03';
1320 +
1321 + @override
1322 + String get server_icon_cloud => 'Bulut';
1323 +
1324 + @override
1325 + String get server_icon_cloud_server => 'Bulut Sunucu';
1326 +
1327 + @override
1328 + String get server_icon_mcp => 'MCP Sunucusu';
1329 +
1330 + @override
1331 + String get server_icon_database => 'Veritabanı';
1332 +
1333 + @override
1334 + String get server_icon_database1 => 'Veritabanı 01';
1335 +
1336 + @override
1337 + String get server_icon_database2 => 'Veritabanı 02';
1338 +
1339 + @override
1340 + String get server_icon_cpu => 'İşlemci (CPU)';
1341 +
1342 + @override
1343 + String get server_icon_chip => 'Yonga (Chip)';
1344 +
1345 + @override
1346 + String get server_icon_chip2 => 'Yonga 02';
1347 +
1348 + @override
1349 + String get server_icon_computer => 'Bilgisayar';
1350 +
1351 + @override
1352 + String get server_icon_laptop => 'Dizüstü Bilgisayar';
1353 +
1354 + @override
1355 + String get server_icon_terminal => 'Bilgisayar Terminali';
1356 +
1357 + @override
1358 + String get server_icon_code => 'Kod';
1359 +
1360 + @override
1361 + String get server_icon_ai_brain => 'Yapay Zeka Beyin';
1362 +
1363 + @override
1364 + String get server_icon_ai_brain2 => 'Yapay Zeka Beyin 02';
1365 +
1366 + @override
1367 + String get server_icon_ai_cloud => 'Yapay Zeka Bulut';
1368 +
1369 + @override
1370 + String get server_icon_ai_network => 'Yapay Zeka Ağı';
1371 +
1372 + @override
1373 + String get server_icon_ai_chat => 'Yapay Zeka Sohbet';
1374 +
1375 + @override
1376 + String get server_icon_cellular => 'Hücresel Ağ';
1377 +
1378 + @override
1379 + String get server_icon_plug1 => 'Fiş 01';
1380 +
1381 + @override
1382 + String get server_icon_plug2 => 'Fiş 02';
1383 +
1384 + @override
1385 + String get server_icon_bot => 'Bot';
1386 +
1387 + @override
1388 + String get server_icon_bot2 => 'Bot 02';
1389 +
1390 + @override
1391 + String get server_icon_robotic => 'Robotik';
1392 +
1393 + @override
1394 + String get server_icon_rocket => 'Roket';
1395 +
1396 + @override
1397 + String get server_icon_star => 'Yıldız';
1398 +
1399 + @override
1400 + String get server_icon_settings1 => 'Ayarlar 01';
1401 +
1402 + @override
1403 + String get server_icon_settings2 => 'Ayarlar 02';
1404 +
1405 + @override
1406 + String get server_icon_home1 => 'Ev 01';
1407 +
1408 + @override
1409 + String get server_icon_home2 => 'Ev 02';
1410 +
1411 + @override
1412 + String get server_icon_folder1 => 'Klasör 01';
1413 +
1414 + @override
1415 + String get server_icon_folder2 => 'Klasör 02';
1416 +
1417 + @override
1418 + String get server_icon_file1 => 'Dosya 01';
1419 +
1420 + @override
1421 + String get server_icon_lock => 'Kilit';
1422 +
1423 + @override
1424 + String get server_icon_key => 'Anahtar 01';
1425 +
1426 + @override
1427 + String get server_icon_link => 'Bağlantı 01';
1428 +
1429 + @override
1430 + String get server_icon_globe => 'Dünya';
1431 +
1432 + @override
1433 + String get server_icon_api => 'API';
1434 +
1435 + @override
1436 + String get server_icon_arrow_right => 'Sağ Ok 01';
1437 +
1438 + @override
1439 + String get server_icon_check => 'Onay Dairesi';
1440 +
1441 + @override
1442 + String get server_icon_alert => 'Uyarı Dairesi';
1443 +
1444 + @override
1445 + String get server_icon_info => 'Bilgi Circle';
1446 +
1447 + @override
1448 + String get server_icon_zap => 'Hızlı Yıldırım';
1449 +
1450 + @override
1451 + String get server_icon_cloud_upload => 'Buluta Yükle';
1452 +
1453 + @override
1454 + String get server_icon_cloud_download => 'Buluttan İndir';
1455 +
1456 + @override
1457 + String get server_icon_refresh => 'Yenile';
1458 +
1459 + @override
1460 + String get server_icon_hard_drive => 'Sabit Sürücü';
1461 +
1462 + @override
1463 + String get server_icon_drive => 'Sürücü';
1464 +
1465 + @override
1466 + String get personas_title => 'Personalar';
1467 +
1468 + @override
1469 + String get persona_category_general => 'Genel';
1470 +
1471 + @override
1472 + String get persona_category_coding => 'Kodlama';
1473 +
1474 + @override
1475 + String get persona_category_education => 'Eğitim';
1476 +
1477 + @override
1478 + String get persona_category_creative => 'Yaratıcı';
1479 +
1480 + @override
1481 + String get persona_builtin_section => 'YERLEŞİK';
1482 +
1483 + @override
1484 + String get persona_my_section => 'PERSONALARIM';
1485 +
1486 + @override
1487 + String get clone_edit => 'Clone & Düzenle';
1488 +
1489 + @override
1490 + String get builtin_badge => 'Yerleşik';
1491 +
1492 + @override
1493 + String get no_personas_found => 'Persona bulunamadı';
1494 +
1495 + @override
1496 + String get no_personas_desc =>
1497 + 'Yapay zeka davranışını özelleştirmek için ilk personanızı oluşturun.';
1498 +
1499 + @override
1500 + String get edit_persona => 'Personayı Düzenle';
1501 +
1502 + @override
1503 + String get create_persona => 'Persona Oluştur';
1504 +
1505 + @override
1506 + String get create_persona_button => 'Oluştur';
1507 +
1508 + @override
1509 + String get emoji_label => 'Emoji';
1510 +
1511 + @override
1512 + String get name_label => 'İsim';
1513 +
1514 + @override
1515 + String get my_persona_hint => 'Personam';
1516 +
1517 + @override
1518 + String get category_label => 'Kategori';
1519 +
1520 + @override
1521 + String get description_optional => 'Açıklama (isteğe bağlı)';
1522 +
1523 + @override
1524 + String get description_hint => 'Bu persona ne yapar...';
1525 +
1526 + @override
1527 + String get system_prompt => 'Sistem Yönergesi';
1528 +
1529 + @override
1530 + String character_count_max(int currentLen) {
1531 + return '$currentLen/4000';
1532 + }
1533 +
1534 + @override
1535 + String get no_prompt_placeholder => 'Henüz yönerge yok...';
1536 +
1537 + @override
1538 + String get prompt_hint => 'Sen yardımcı bir asistansın...';
1539 +
1540 + @override
1541 + String get prompt_required => 'Sistem yönergesi gereklidir';
1542 +
1543 + @override
1544 + String get prompt_max_chars => 'En fazla 4000 karakter';
1545 +
1546 + @override
1547 + String get advanced_settings => 'Advanced Ayarlar';
1548 +
1549 + @override
1550 + String get temperature_label => 'Sıcaklık (0.0-2.0)';
1551 +
1552 + @override
1553 + String get top_p_label => 'Top P (0.0-1.0)';
1554 +
1555 + @override
1556 + String get temp_hint => '0.7';
1557 +
1558 + @override
1559 + String get top_p_hint => '0.9';
1560 +
1561 + @override
1562 + String get range_0_2 => '0.0-2.0';
1563 +
1564 + @override
1565 + String get range_0_1 => '0.0-1.0';
1566 +
1567 + @override
1568 + String get persona_updated => 'Persona güncellendi';
1569 +
1570 + @override
1571 + String get persona_created => 'Persona oluşturuldu';
1572 +
1573 + @override
1574 + String get tts_models_title => 'Text To Speech Modeller';
1575 +
1576 + @override
1577 + String get always_available => 'Her zaman kullanılabilir';
1578 +
1579 + @override
1580 + String get tts_system_desc =>
1581 + 'Cihazınızın yerleşik metin okuma motorunu kullanır.\nİndirme gerekmez. Ses seçimi cihazınızın sistem ayarlarını kullanır.';
1582 +
1583 + @override
1584 + String get downloading_status => 'İndiriliyor...';
1585 +
1586 + @override
1587 + String tts_kitten_desc(String size) {
1588 + return '8 ifade dolu ses içeren şimşek hızında nöral TTS.\n$size indirme gerektirir.';
1589 + }
1590 +
1591 + @override
1592 + String tts_piper_desc(String size) {
1593 + return '2 ifade dolu ses içeren hızlı çevrimdışı Piper sesleri.\nSes başına $size indirme gerektirir.';
1594 + }
1595 +
1596 + @override
1597 + String engine_spec(String sizeMb, String ramMb, int voiceCount) {
1598 + return '$sizeMb MB · $ramMb MB RAM · $voiceCount ses';
1599 + }
1600 +
1601 + @override
1602 + String get on_device_models_title => 'On-Device Modeller';
1603 +
1604 + @override
1605 + String get settings_huggingface_token => 'Hugging Face Jetonu (İsteğe Bağlı)';
1606 +
1607 + @override
1608 + String get settings_huggingface_token_desc =>
1609 + 'Yalnızca kapalı modeller (örn. Gemma) için gereklidir. huggingface.co/settings/tokens adresinden edinin.';
1610 +
1611 + @override
1612 + String get settings_huggingface_token_set => 'Jeton kaydedildi';
1613 +
1614 + @override
1615 + String get settings_huggingface_token_cleared => 'Jeton temizlendi';
1616 +
1617 + @override
1618 + String get model_requires_huggingface_token =>
1619 + 'Hugging Face jetonu gerektirir';
1620 +
1621 + @override
1622 + String get model_missing_huggingface_token =>
1623 + 'This model is gated on Hugging Face. Add a token in Ayarlar → On-Device Inference to download it.';
1624 +
1625 + @override
1626 + String get set_huggingface_token => 'Jetonu ayarla';
1627 +
1628 + @override
1629 + String get clear_huggingface_token => 'Temizle';
1630 +
1631 + @override
1632 + String get edit_huggingface_token_dialog_title =>
1633 + 'Hugging Face Erişim Jetonu';
1634 +
1635 + @override
1636 + String get huggingface_token_dialog_hint => 'hf_…';
1637 +
1638 + @override
1639 + String get server_type_ollama_desc =>
1640 + 'Yerel yapay zeka motoru. API anahtarı gerekmez.';
1641 +
1642 + @override
1643 + String get server_type_on_device_desc =>
1644 + 'Telefonunuzda çalışır. Bazı modeller Hugging Face jetonu gerektirir.';
1645 +
1646 + @override
1647 + String get server_type_lm_studio_desc =>
1648 + 'Yerel API sunucusu. API anahtarı gerekmez.';
1649 +
1650 + @override
1651 + String get available_models => 'Available Modeller';
1652 +
1653 + @override
1654 + String get device_memory => 'Cihaz Belleği';
1655 +
1656 + @override
1657 + String get ram_usage => 'RAM Kullanımı';
1658 +
1659 + @override
1660 + String get memory_healthy => 'Sağlıklı';
1661 +
1662 + @override
1663 + String get memory_critical => 'Kritik';
1664 +
1665 + @override
1666 + String get memory_low => 'Düşük';
1667 +
1668 + @override
1669 + String ram_used(String percent) {
1670 + return '%$percent kullanılıyor';
1671 + }
1672 +
1673 + @override
1674 + String get available_ram => 'Kullanılabilir RAM';
1675 +
1676 + @override
1677 + String get total_capacity => 'Toplam Kapasite';
1678 +
1679 + @override
1680 + String get loaded_status => 'Yüklendi';
1681 +
1682 + @override
1683 + String get inference_backend => 'Inference Geriend';
1684 +
1685 + @override
1686 + String get backend_ios_notice =>
1687 + 'iOS\'ta yalnızca CPU arka ucu kullanılabilir.';
1688 +
1689 + @override
1690 + String get backend_cpu_desc => 'Tüm cihazlarda çalışır. En uyumlusu.';
1691 +
1692 + @override
1693 + String get backend_gpu_desc =>
1694 + 'OpenCL hızlandırma. Desteklenen cihazlarda daha hızlı.';
1695 +
1696 + @override
1697 + String get backend_npu_desc =>
1698 + 'Üretici NPU\'su (Qualcomm/MediaTek). En hızlı çıkarım.';
1699 +
1700 + @override
1701 + String get select_model_title => 'Model Seç';
1702 +
1703 + @override
1704 + String get refresh_models => 'Modelleri yenile';
1705 +
1706 + @override
1707 + String get search_models_hint => 'Modelleri ara...';
1708 +
1709 + @override
1710 + String get no_server_connected => 'Bağlı sunucu yok';
1711 +
1712 + @override
1713 + String get add_server_first =>
1714 + 'Mevcut modelleri görmek için önce bir sunucu ekleyin.';
1715 +
1716 + @override
1717 + String get failed_load_models => 'Başarısız to load models';
1718 +
1719 + @override
1720 + String get no_models_available => 'Mevcut model yok';
1721 +
1722 + @override
1723 + String no_models_match(String searchQuery) {
1724 + return '\"$searchQuery\" ile eşleşen model yok';
1725 + }
1726 +
1727 + @override
1728 + String model_load_failed(String error) {
1729 + return 'Başarısız to load model: $error';
1730 + }
1731 +
1732 + @override
1733 + String model_unloaded_ollama(String name) {
1734 + return '$name için bellekten çıkarma istendi. Ollama ulaşılabilirse model hemen serbest bırakılır.';
1735 + }
1736 +
1737 + @override
1738 + String model_unloaded_success(String name) {
1739 + return '$name başarıyla bellekten çıkarıldı';
1740 + }
1741 +
1742 + @override
1743 + String model_unload_failed(String error) {
1744 + return 'Başarısız to unload model: $error';
1745 + }
1746 +
1747 + @override
1748 + String get unload_from_server => 'Sunucudan bellekten çıkar';
1749 +
1750 + @override
1751 + String context_chip(String ctx) {
1752 + return '$ctx bağlam';
1753 + }
1754 +
1755 + @override
1756 + String get unload_all_models => 'Tümünü bellekten çıkar';
1757 +
1758 + @override
1759 + String loaded_models_count(int count) {
1760 + return '$count yüklendi';
1761 + }
1762 +
1763 + @override
1764 + String get all_models_unloaded => 'Tüm modeller bellekten çıkarıldı';
1765 +
1766 + @override
1767 + String get branch_chat => 'Sohbeti Dallandır';
1768 +
1769 + @override
1770 + String get branch_chat_desc => 'Bu mesajdan yeni bir sohbet dalı oluşturun';
1771 +
1772 + @override
1773 + String get edit_assistant_message_desc =>
1774 + 'Düzenle the assistant response text.';
1775 +
1776 + @override
1777 + String switch_to_model(String modelName, Object model) {
1778 + return '$modelName modeline geç';
1779 + }
1780 +
1781 + @override
1782 + String download_notification_title(String modelName) {
1783 + return '$modelName indiriliyor...';
1784 + }
1785 +
1786 + @override
1787 + String get download_complete_notification => 'İndirme tamamlandı!';
1788 +
1789 + @override
1790 + String download_complete_body(String modelName) {
1791 + return '$modelName başarıyla indirildi.';
1792 + }
1793 +
1794 + @override
1795 + String download_failed_notification(String error) {
1796 + return 'İndirme başarısız: $error';
1797 + }
1798 +
1799 + @override
1800 + String download_failed_body(String modelName) {
1801 + return 'Başarısız to download $modelName.';
1802 + }
1803 +
1804 + @override
1805 + String get engine_name_system => 'Sistem TTS';
1806 +
1807 + @override
1808 + String get engine_tagline_system => 'Cihazın yerleşik motoru';
1809 +
1810 + @override
1811 + String get engine_name_kitten => 'Kitten TTS';
1812 +
1813 + @override
1814 + String get engine_tagline_kitten => 'Yüksek hızlı nöral TTS';
1815 +
1816 + @override
1817 + String get engine_name_sherpa => 'Sherpa ONNX VITS';
1818 +
1819 + @override
1820 + String get engine_tagline_sherpa => 'Çevrimdışı Piper sesleri';
1821 +
1822 + @override
1823 + String get voice_jasper => 'Jasper';
1824 +
1825 + @override
1826 + String get voice_bella => 'Bella';
1827 +
1828 + @override
1829 + String get voice_bruno => 'Bruno';
1830 +
1831 + @override
1832 + String get voice_luna => 'Luna';
1833 +
1834 + @override
1835 + String get voice_hugo => 'Hugo';
1836 +
1837 + @override
1838 + String get voice_rosie => 'Rosie';
1839 +
1840 + @override
1841 + String get voice_leo => 'Leo';
1842 +
1843 + @override
1844 + String get voice_kiki => 'Kiki';
1845 +
1846 + @override
1847 + String get voice_lessac => 'Lessac (ABD)';
1848 +
1849 + @override
1850 + String get voice_ryan => 'Ryan (ABD)';
1851 +
1852 + @override
1853 + String get model_qwen_3 => 'Qwen 3 0.6B';
1854 +
1855 + @override
1856 + String get model_qwen_3_desc =>
1857 + 'En küçük genel amaçlı sohbet modeli. Hızlı yanıtlar, düşük bellek kullanımı.';
1858 +
1859 + @override
1860 + String get model_license_apache => 'Apache-2.0';
1861 +
1862 + @override
1863 + String get model_qwen_25 => 'Qwen 2.5 1.5B Instruct';
1864 +
1865 + @override
1866 + String get model_qwen_25_desc =>
1867 + 'Dengeli kalite ve boyut. Genel konuşmalar için iyidir.';
1868 +
1869 + @override
1870 + String get model_deepseek => 'DeepSeek R1 Distill Qwen 1.5B';
1871 +
1872 + @override
1873 + String get model_deepseek_desc =>
1874 + 'Mantık yürütme ve düşünce zinciri modeli. Mantıksal görevler için en iyisidir.';
1875 +
1876 + @override
1877 + String get model_license_mit => 'MIT';
1878 +
1879 + @override
1880 + String get model_gemma => 'Gemma 4 E2B Instruct';
1881 +
1882 + @override
1883 + String get model_gemma_desc =>
1884 + 'Google amiral gemisi modeli. En yüksek kalite, daha fazla RAM gerektirir.';
1885 +
1886 + @override
1887 + String export_header(String date) {
1888 + return '*LocalMind üzerinden dışa aktarıldı — $date*';
1889 + }
1890 +
1891 + @override
1892 + String get export_role_user => '## 👤 Kullanıcı';
1893 +
1894 + @override
1895 + String get export_role_assistant => '## 🤖 Asistan';
1896 +
1897 + @override
1898 + String get export_role_system => '## ⚙️ Sistem';
1899 +
1900 + @override
1901 + String get export_role_tool => '## 🔧 Araç';
1902 +
1903 + @override
1904 + String get export_text_user => '[KULLANICI]';
1905 +
1906 + @override
1907 + String get export_text_assistant => '[ASİSTAN]';
1908 +
1909 + @override
1910 + String get export_text_system => '[SİSTEM]';
1911 +
1912 + @override
1913 + String get export_text_tool => '[ARAÇ]';
1914 +
1915 + @override
1916 + String get export_label_user => 'KULLANICI';
1917 +
1918 + @override
1919 + String get export_label_assistant => 'ASİSTAN';
1920 +
1921 + @override
1922 + String get export_label_system => 'SİSTEM';
1923 +
1924 + @override
1925 + String get export_label_tool => 'ARAÇ';
1926 +
1927 + @override
1928 + String get select_model_hint => 'Sohbete başlamak için bir model seçin';
1929 +
1930 + @override
1931 + String get test_notification_title => 'Test bildirimi';
1932 +
1933 + @override
1934 + String get test_notification_body =>
1935 + 'Bu, model indirme ilerlemesi için bir test bildirimidir.';
1936 +
1937 + @override
1938 + String get tts_supports_background =>
1939 + 'Yerel ses olarak arka planda oynatmayı destekler';
1940 +
1941 + @override
1942 + String get tts_other_services_background_note =>
1943 + 'Not: Diğer TTS servisleri yerel ses olarak arka planda oynatmayı destekler.';
1944 +
1945 + @override
1946 + String get gguf_imported_models_title => 'İçe aktarılan GGUF modelleri';
1947 +
1948 + @override
1949 + String get gguf_imported_models_empty_subtitle =>
1950 + 'Cihazınızdan bir GGUF aktarın veya Hugging Face\'ten ekleyin. İçe aktarılan modeller llama.cpp ile yerel çalışır.';
1951 +
1952 + @override
1953 + String get gguf_imported_models_ready =>
1954 + 'yerel çıkarım için hazır içe aktarılan modeller.';
1955 +
1956 + @override
1957 + String get gguf_curated_models_subtitle =>
1958 + 'LocalMind içinde indirebileceğiniz ve yönetebileceğiniz özel cihaz üstü modeller.';
1959 +
1960 + @override
1961 + String get gguf_only_supported =>
1962 + 'Bu içe aktarma için yalnızca GGUF modelleri desteklenir.';
1963 +
1964 + @override
1965 + String get gguf_imported_from_local_file => 'yerel dosyadan içe aktarıldı.';
1966 +
1967 + @override
1968 + String get gguf_import_failed => 'Başarısız to import GGUF model';
1969 +
1970 + @override
1971 + String get gguf_imported_from_huggingface =>
1972 + 'Hugging Face\'ten içe aktarıldı.';
1973 +
1974 + @override
1975 + String get gguf_import_canceled => 'GGUF içe aktarma iptal edildi.';
1976 +
1977 + @override
1978 + String get gguf_enter_huggingface_url =>
1979 + 'Bir Hugging Face GGUF URL\'si girin.';
1980 +
1981 + @override
1982 + String get gguf_only_official_huggingface_urls =>
1983 + 'Yalnızca resmi Hugging Face GGUF URL\'leri desteklenir.';
1984 +
1985 + @override
1986 + String get gguf_use_https_url =>
1987 + 'GGUF içe aktarımı için HTTPS Hugging Face URL\'si kullanın.';
1988 +
1989 + @override
1990 + String get gguf_url_must_point_to_file =>
1991 + 'Hugging Face URL\'si doğrudan bir .gguf dosyasına işaret etmelidir.';
1992 +
1993 + @override
1994 + String get gguf_unable_to_detect_file_name => 'GGUF dosya adı belirlenemedi.';
1995 +
1996 + @override
1997 + String get gguf_download_empty => 'İndirilen GGUF dosyası boş veya eksik.';
1998 +
1999 + @override
2000 + String get gguf_selected_file_missing =>
2001 + 'Seçilen model dosyası mevcut değil.';
2002 +
2003 + @override
2004 + String get gguf_import_action => 'GGUF İçe Aktar';
2005 +
2006 + @override
2007 + String get gguf_overview_title => 'Kendi GGUF modellerinizi getirin';
2008 +
2009 + @override
2010 + String get gguf_overview_subtitle =>
2011 + 'Yerel depolamadan bir .gguf dosyası aktarın veya doğrudan Hugging Face\'ten indirin. İçe aktarılan modeller bu cihazda kalır ve llama.cpp ile yüklenir.';
2012 +
2013 + @override
2014 + String get gguf_imported_count_label => 'içe aktarıldı';
2015 +
2016 + @override
2017 + String get gguf_local_files_label => 'yerel dosyalar';
2018 +
2019 + @override
2020 + String get gguf_huggingface_label => 'Hugging Face';
2021 +
2022 + @override
2023 + String get gguf_import_local_title => 'Yerel GGUF İçe Aktar';
2024 +
2025 + @override
2026 + String get gguf_import_local_subtitle =>
2027 + 'Bu cihazdan bir .gguf dosyası kopyalayın';
2028 +
2029 + @override
2030 + String get gguf_import_huggingface_title => 'Hugging Face\'ten İçe Aktar';
2031 +
2032 + @override
2033 + String get gguf_import_huggingface_subtitle =>
2034 + 'Bir GGUF URL\'si veya depo yolu yapıştırın';
2035 +
2036 + @override
2037 + String get gguf_no_imported_title => 'Henüz içe aktarılan GGUF modeli yok';
2038 +
2039 + @override
2040 + String get gguf_no_imported_subtitle =>
2041 + 'Cihaz depolamanızdan kendi GGUF dosyanızı getirebilir veya bir .gguf dosyasına işaret eden bir Hugging Face URL\'si veya depo yolu yapıştırabilirsiniz.';
2042 +
2043 + @override
2044 + String get gguf_import_huggingface_dialog_title =>
2045 + 'Import GGUF from Hugging Face';
2046 +
2047 + @override
2048 + String get gguf_import_huggingface_dialog_subtitle =>
2049 + 'Paste a direct GGUF URL or a Hugging Face repo path like `owner/repo/blob/main/model.gguf`. Blob links are converted automatically.';
2050 +
2051 + @override
2052 + String get gguf_url_or_repo_path => 'GGUF URL or repo path';
2053 +
2054 + @override
2055 + String get paste => 'Paste';
2056 +
2057 + @override
2058 + String get gguf_browse => 'Browse GGUFs';
2059 +
2060 + @override
2061 + String get gguf_huggingface_token_ready => 'Hugging Face token ready';
2062 +
2063 + @override
2064 + String get gguf_huggingface_token_optional =>
2065 + 'Token optional but recommended';
2066 +
2067 + @override
2068 + String get gguf_huggingface_token_ready_desc =>
2069 + 'Your saved token will be used automatically for gated or private repositories.';
2070 +
2071 + @override
2072 + String get gguf_huggingface_token_optional_desc =>
2073 + 'Requires a Hugging Face token. Add one in Ayarlar if this GGUF is gated or private.';
2074 +
2075 + @override
2076 + String get gguf_downloading => 'Downloading GGUF';
2077 +
2078 + @override
2079 + String get gguf_preparing => 'Preparing';
2080 +
2081 + @override
2082 + String get gguf_preparing_download => 'Preparing download...';
2083 +
2084 + @override
2085 + String get gguf_cancel_import => 'İptal import';
2086 +
2087 + @override
2088 + String get clipboard_empty => 'Clipboard is empty.';
2089 +
2090 + @override
2091 + String get could_not_open_huggingface => 'Could not open Hugging Face.';
2092 +
2093 + @override
2094 + String get gguf_paste_url_error =>
2095 + 'Paste a Hugging Face GGUF URL or repo path.';
2096 +
2097 + @override
2098 + String get gguf_blob_link => 'Blob link';
2099 +
2100 + @override
2101 + String get gguf_repository_label => 'Repository';
2102 +
2103 + @override
2104 + String get gguf_detected_path_label => 'Detected path';
2105 +
2106 + @override
2107 + String get gguf_imported_section_label => 'Imported GGUF';
2108 +
2109 + @override
2110 + String get gguf_already_available => 'Already available on this device';
2111 +
2112 + @override
2113 + String get gguf_curated_models_short => 'Curated on-device models';
2114 +
2115 + @override
2116 + String get execute_tool_title => 'Execute Tool';
2117 +
2118 + @override
2119 + String get execute_tool_request_desc =>
2120 + 'The model is requesting to execute the following tool:';
2121 +
2122 + @override
2123 + String get reject => 'Reject';
2124 +
2125 + @override
2126 + String get approve => 'Approve';
2127 +
2128 + @override
2129 + String get server_type_help =>
2130 + 'Pick the provider before filling connection details.';
2131 +
2132 + @override
2133 + String get server_identity_title => 'Identity';
2134 +
2135 + @override
2136 + String get server_identity_desc =>
2137 + 'Name this server and choose how it appears in the list.';
2138 +
2139 + @override
2140 + String get server_connection_title => 'Connection';
2141 +
2142 + @override
2143 + String get server_connection_desc =>
2144 + 'Use the address and port exposed by your server.';
2145 +
2146 + @override
2147 + String get server_authentication_title => 'Authentication';
2148 +
2149 + @override
2150 + String get server_authentication_required_desc =>
2151 + 'OpenRouter requires an API key before testing.';
2152 +
2153 + @override
2154 + String get server_authentication_optional_desc =>
2155 + 'Leave the API key empty if this server does not require one.';
2156 +
2157 + @override
2158 + String get mcp_tools_title => 'MCP Araçları';
2159 +
2160 + @override
2161 + String get available_tools => 'Available tools';
2162 +
2163 + @override
2164 + String get unable_load_tools => 'Unable to load tools';
2165 +
2166 + @override
2167 + String get no_tools_registered => 'No tools registered';
2168 +
2169 + @override
2170 + String get no_tools_registered_desc =>
2171 + 'Enable the example MCP server or add MCP integrations from chat settings.';
2172 +
2173 + @override
2174 + String get example_mcp_server_title => 'Example MCP server';
2175 +
2176 + @override
2177 + String get example_mcp_server_desc =>
2178 + 'Registers example.echo and example.word_count through the same MCP tool provider used by external servers.';
2179 +
2180 + @override
2181 + String get disable_example_server => 'Disable example server';
2182 +
2183 + @override
2184 + String get enable_example_server => 'Enable example server';
2185 +
2186 + @override
2187 + String get built_in_label => 'Built-in';
2188 +
2189 + @override
2190 + String get highlights_label => 'Highlights';
2191 +
2192 + @override
2193 + String get built_with_label => 'Built with';
2194 +
2195 + @override
2196 + String get local_label => 'Local';
2197 +
2198 + @override
2199 + String get gguf_format_label => 'GGUF';
2200 +
2201 + @override
2202 + String get tool_status_requested => 'Requested';
2203 +
2204 + @override
2205 + String get tool_status_approved => 'Approved';
2206 +
2207 + @override
2208 + String get tool_status_rejected => 'Rejected';
2209 +
2210 + @override
2211 + String get tool_status_running => 'Running';
2212 +
2213 + @override
2214 + String get tool_status_done => 'Done';
2215 +
2216 + @override
2217 + String get tool_status_failed => 'Başarısız';
2218 +
2219 + @override
2220 + String get model_favorite_toggle => 'Toggle favorite';
2221 +
2222 + @override
2223 + String get model_note_label => 'Note';
2224 +
2225 + @override
2226 + String get model_note_hint => 'Add a note about this model…';
2227 +
2228 + @override
2229 + String get unload_models_before_load =>
2230 + 'Unload all models before loading a new one';
2231 +
2232 + @override
2233 + String get temp_chat_keyboard_incognito =>
2234 + 'Incognito keyboard in temporary chat';
2235 +
2236 + @override
2237 + String get temp_chat_keyboard_incognito_desc =>
2238 + 'Disables keyboard learning and suggestions in temporary chats (e.g. SwiftKey incognito).';
2239 +
2240 + @override
2241 + String get resume_last_chat => 'Resume last chat on launch';
2242 +
2243 + @override
2244 + String get resume_last_chat_desc =>
2245 + 'Restore your last open conversation when reopening the app.';
2246 +
2247 + @override
2248 + String get export_all_data => 'Export all data';
2249 +
2250 + @override
2251 + String get import_all_data => 'Import all data';
2252 +
2253 + @override
2254 + String get export_data_success => 'Geriup exported successfully';
2255 +
2256 + @override
2257 + String get import_data_success => 'Geriup imported successfully';
2258 +
2259 + @override
2260 + String import_data_failed(String error) {
2261 + return 'Başarısız to import backup: $error';
2262 + }
2263 +
2264 + @override
2265 + String get import_data_confirm =>
2266 + 'Import conversations and custom personas from this backup? Existing items with the same IDs will be updated.';
2267 +
2268 + @override
2269 + String get import_settings_confirm =>
2270 + 'Replace current settings with the imported backup?';
2271 +
2272 + @override
2273 + String get export_conversations => 'Export conversations';
2274 +
2275 + @override
2276 + String get import_conversations => 'Import conversations';
2277 +
2278 + @override
2279 + String get export_personas => 'Export personas';
2280 +
2281 + @override
2282 + String get import_personas => 'Import personas';
2283 +
2284 + @override
2285 + String get export_settings => 'Ayarları dışa aktar';
2286 +
2287 + @override
2288 + String get import_settings => 'Ayarları içe aktar';
2289 +
2290 + @override
2291 + String get export_all_zip => 'Tümünü dışa aktar (ZIP)';
2292 +
2293 + @override
2294 + String get import_all_zip => 'Tümünü içe aktar (ZIP)';
2295 +
2296 + @override
2297 + String get duplicate_chat => 'Sohbeti çoğalt';
2298 +
2299 + @override
2300 + String get duplicate_chat_success => 'Sohbet çoğaltıldı';
2301 +
2302 + @override
2303 + String get move_to_folder => 'Klasöre taşı';
2304 +
2305 + @override
2306 + String get remove_from_folder => 'Kaldır from folder';
2307 +
2308 + @override
2309 + String get create_folder => 'Klasör oluştur';
2310 +
2311 + @override
2312 + String get new_folder => 'Yeni klasör';
2313 +
2314 + @override
2315 + String get folder_name_hint => 'Örn. İş, Kişisel, Araştırma';
2316 +
2317 + @override
2318 + String get all_chats => 'Tümü';
2319 +
2320 + @override
2321 + String get unfiled_chats => 'Kategorisiz';
2322 +
2323 + @override
2324 + String get create => 'Oluştur';
2325 +
2326 + @override
2327 + String get server_path_prefix_label => 'API yol öneki';
2328 +
2329 + @override
2330 + String get server_path_prefix_hint => '/gizli-jetonunuz';
2331 +
2332 + @override
2333 + String get search_message_contents => 'Mesaj içeriklerini ara';
2334 +
2335 + @override
2336 + String get message_search_results => 'Mesaj eşleşmeleri';
2337 +
2338 + @override
2339 + String get saved_messages_title => 'Kaydedilen Mesajlar';
2340 +
2341 + @override
2342 + String get nav_saved_messages => 'Kaydedilenler';
2343 +
2344 + @override
2345 + String get saved_messages_empty =>
2346 + 'Henüz kaydedilen mesaj yok. Seçenekler menüsünden bir mesajı yer imlerine ekleyin.';
2347 +
2348 + @override
2349 + String get save_message => 'Mesajı kaydet';
2350 +
2351 + @override
2352 + String get message_saved => 'Mesaj kaydedildi';
2353 +
2354 + @override
2355 + String token_count(int count) {
2356 + return '$count token';
2357 + }
2358 +
2359 + @override
2360 + String estimated_token_count(int count) {
2361 + return '~$count token (tahmini)';
2362 + }
2363 +
2364 + @override
2365 + String get test_tts_section_title => 'Sesi test et';
2366 +
2367 + @override
2368 + String get test_tts_hint => 'Mevcut TTS motorunu duymak için metin girin…';
2369 +
2370 + @override
2371 + String get test_speak_button => 'Konuş';
2372 +
2373 + @override
2374 + String get scroll_to_bottom => 'En aşağı kaydır';
2375 +
2376 + @override
2377 + String get generate_ai_response => 'Yapay zeka yanıtı üret';
2378 +
2379 + @override
2380 + String get no_response => 'Yanıt yok';
2381 +
2382 + @override
2383 + String get export => 'Dışa Aktar';
2384 +
2385 + @override
2386 + String get import => 'İçe Aktar';
2387 +
2388 + @override
2389 + String get conversations_label => 'Sohbetler';
2390 +
2391 + @override
2392 + String get personas_label => 'Personalar';
2393 +
2394 + @override
2395 + String get settings_label => 'Ayarlar';
2396 +
2397 + @override
2398 + String get export_conversation => 'Sohbeti Dışa Aktar';
2399 +
2400 + @override
2401 + String get tts_process_markdown => 'Konuşma için markdown\'ı işle';
2402 +
2403 + @override
2404 + String get tts_process_markdown_desc =>
2405 + 'Sesli okunmadan önce **koyu** gibi biçimlendirmeleri temizle';
2406 +
2407 + @override
2408 + String get tts_skip_seconds => 'Atlama aralığı';
2409 +
2410 + @override
2411 + String get tts_skip_seconds_desc =>
2412 + 'Oynatma sırasında ileri ve geri sarma adımı boyutu';
2413 +
2414 + @override
2415 + String tts_skip_seconds_value(int seconds) {
2416 + return '${seconds}sn';
2417 + }
2418 +
2419 + @override
2420 + String get preview_system_prompts => 'Sistem yönergelerini önizle';
2421 +
2422 + @override
2423 + String get welcome_message_1 => 'Bugün size nasıl yardımcı olabilirim?';
2424 +
2425 + @override
2426 + String get welcome_message_2 =>
2427 + 'İstediğinizi sorun — hazır olduğunuzda buradayım.';
2428 +
2429 + @override
2430 + String get welcome_message_3 =>
2431 + 'Verileriniz yerel olarak işlenir ve cihazınızdan asla ayrılmaz.';
2432 +
2433 + @override
2434 + String get welcome_message_4 =>
2435 + 'Fikre mi ihtiyacınız var? Hızlı yönergelerden birini deneyin.';
2436 +
2437 + @override
2438 + String get temporary_chat => 'Geçici sohbet';
2439 +
2440 + @override
2441 + String get temporary_chat_desc => 'Sohbetler geçmişe kaydedilmez.';
2442 +
2443 + @override
2444 + String get temporary_chat_banner => 'Geçici sohbet — geçmişe kaydedilmez';
2445 +
2446 + @override
2447 + String get temporary_chat_save_warning_title =>
2448 + 'Mesaj geçici sohbete kaydedilsin mi?';
2449 +
2450 + @override
2451 + String get temporary_chat_save_warning_body =>
2452 + 'Bu sohbet geçicidir ve geçmişten gizlenir. Kaydedilen mesaj yine de Kaydedilen Mesajlar bölümünde görünecektir.';
2453 +
2454 + @override
2455 + String get save_to_history => 'Geçmişe kaydet';
2456 +
2457 + @override
2458 + String get share_conversation => 'Sohbeti paylaş';
2459 +
2460 + @override
2461 + String get download_tts_audio => 'Sesi indir';
2462 +
2463 + @override
2464 + String get tts_download_unavailable =>
2465 + 'İndirme yalnızca Piper ve Kitten TTS için mevcuttur';
2466 +
2467 + @override
2468 + String get tts_download_no_audio => 'Henüz indirilecek ses yok';
2469 +
2470 + @override
2471 + String get tts_download_success => 'Ses kaydedildi';
2472 +
2473 + @override
2474 + String get return_to_chat => 'Sohbete dön';
2475 +
2476 + @override
2477 + String get return_to_temp_chat => 'Geçici sohbete dön';
2478 +
2479 + @override
2480 + String get insert_saved_message => 'Kaydedilen mesajı ekle';
2481 +
2482 + @override
2483 + String get insert_saved_message_desc =>
2484 + 'Girdinize eklemek için kaydedilmiş bir mesaj seçin';
2485 +
2486 + @override
2487 + String get model_info => 'Model bilgisi';
2488 +
2489 + @override
2490 + String get model_name => 'Model adı';
2491 +
2492 + @override
2493 + String get model_identifier => 'Kimlik (Identifier)';
2494 +
2495 + @override
2496 + String get not_available => 'Mevcut değil';
2497 +
2498 + @override
2499 + String get save_message_folders => 'Mesajı kaydet';
2500 +
2501 + @override
2502 + String get remove_from_saved => 'Kaldır from saved';
2503 +
2504 + @override
2505 + String get message_already_saved => 'Kaydedildi';
2506 +
2507 + @override
2508 + String get stream_ttft => 'İlk tokene kadar geçen süre (TTFT)';
2509 +
2510 + @override
2511 + String get stream_tokens_per_sec => 'Saniyedeki token';
2512 +
2513 + @override
2514 + String get stream_stop_reason => 'Durdurma nedeni';
2515 +
2516 + @override
2517 + String get stream_input_tokens => 'Girdi token\'ları';
2518 +
2519 + @override
2520 + String get stream_output_tokens => 'Çıktı token\'ları';
2521 +
2522 + @override
2523 + String get stream_generation_time => 'Üretim süresi';
2524 +
2525 + @override
2526 + String get attach_image => 'Fotoğraflar';
2527 +
2528 + @override
2529 + String get attach_text_document => 'Belgeler';
2530 +
2531 + @override
2532 + String get attach_shortcut_images => 'Fotoğraflar';
2533 +
2534 + @override
2535 + String get attach_shortcut_documents => 'Dosyalar';
2536 +
2537 + @override
2538 + String get attach_shortcut_saved => 'Kaydedilenler';
2539 +
2540 + @override
2541 + String get add_attachment => 'Ek ekle';
2542 +
2543 + @override
2544 + String get add_to_chat => 'Sohbete ekle';
2545 +
2546 + @override
2547 + String get choose_what_to_attach => 'Ne eklemek istersiniz?';
2548 +
2549 + @override
2550 + String get choose_attachment_subtitle =>
2551 + 'Mesajınıza eklemek için bir kaynak seçin';
2552 +
2553 + @override
2554 + String get photo_permission_denied =>
2555 + 'Görsel eklemek için fotoğraf erişim izni gereklidir';
2556 +
2557 + @override
2558 + String get select_model_prompt => 'Model seçin';
2559 +
2560 + @override
2561 + String get characters_label => 'Karakter';
2562 +
2563 + @override
2564 + String get exit_temporary_chat_title => 'Geçici sohbetten çıkılsın mı?';
2565 +
2566 + @override
2567 + String get exit_temporary_chat_body =>
2568 + 'Bu işlem mevcut geçici sohbeti atacak ve yeni sohbet ekranına dönecektir.';
2569 +
2570 + @override
2571 + String get saved_message_temp_snap_unavailable =>
2572 + 'Bu mesaj geçici bir sohbetten kaydedildi ve orijinal konuşmasında açılamaz.';
2573 +
2574 + @override
2575 + String get filter_title => 'Filtrele';
2576 +
2577 + @override
2578 + String get filter_pinned => 'Sabitlenenler';
2579 +
2580 + @override
2581 + String get filter_archived => 'Arşivlenenler';
2582 +
2583 + @override
2584 + String get filter_temp_chats => 'Geçici sohbetler';
2585 +
2586 + @override
2587 + String get filter_user_messages => 'Kullanıcı mesajları';
2588 +
2589 + @override
2590 + String get filter_assistant_messages => 'Asistan mesajları';
2591 +
2592 + @override
2593 + String get archive_chat => 'Arşivle';
2594 +
2595 + @override
2596 + String get unarchive_chat => 'Arşivden Çıkar';
2597 +
2598 + @override
2599 + String conversation_message_count(int count) {
2600 + String _temp0 = intl.Intl.pluralLogic(
2601 + count,
2602 + locale: localeName,
2603 + other: '$count mesaj',
2604 + one: '1 mesaj',
2605 + );
2606 + return '$_temp0';
2607 + }
2608 +
2609 + @override
2610 + String conversation_character_count(int count) {
2611 + return '$count krk';
2612 + }
2613 +
2614 + @override
2615 + String get generate_title_with_ai => 'Yapay Zeka ile oluştur';
2616 +
2617 + @override
2618 + String get generating_title => 'Oluşturuluyor...';
2619 +
2620 + @override
2621 + String get generate_title_failed => 'Başlık oluşturulamadı';
2622 +
2623 + @override
2624 + String get lm_studio_model_browser_title => 'Modelleri gözden geçir';
2625 +
2626 + @override
2627 + String get lm_studio_model_search_hint =>
2628 + 'Modelleri ad veya yazara göre ara…';
2629 +
2630 + @override
2631 + String get lm_studio_staff_picks => 'Öne çıkanlar';
2632 +
2633 + @override
2634 + String get lm_studio_community_models => 'Topluluk modelleri';
2635 +
2636 + @override
2637 + String get lm_studio_no_models => 'Model bulunamadı';
2638 +
2639 + @override
2640 + String lm_studio_models_count(int count) {
2641 + return '$count model';
2642 + }
2643 +
2644 + @override
2645 + String get lm_studio_browse_models => 'Gözden geçir ve indir';
2646 +
2647 + @override
2648 + String get lm_studio_model_search => 'LMS Model Arama';
2649 +
2650 + @override
2651 + String get lm_studio_downloads_title => 'İndirmeler';
2652 +
2653 + @override
2654 + String get lm_studio_choose_quant => 'Bir indirme seçeneği belirleyin';
2655 +
2656 + @override
2657 + String get lm_studio_use_default_quant => 'Varsayılanı kullan';
2658 +
2659 + @override
2660 + String get lm_studio_recommended => 'Önerilen';
2661 +
2662 + @override
2663 + String get lm_studio_clear_downloads => 'Tamamlananları temizle';
2664 +
2665 + @override
2666 + String get lm_studio_no_downloads => 'Henüz indirme yok';
2667 +
2668 + @override
2669 + String get lm_studio_downloads_disclaimer =>
2670 + 'İndirmeler LM Studio ana bilgisayarında çalışır. Duraklatma, durdurma ve model silme işlemleri bu uygulama üzerinden değil, o bilgisayarda yapılmalıdır.';
2671 +
2672 + @override
2673 + String get lm_studio_staff_pick => 'Öne çıkan';
2674 +
2675 + @override
2676 + String get lm_studio_params => 'PARAMETRE';
2677 +
2678 + @override
2679 + String get lm_studio_arch => 'MİMARİ';
2680 +
2681 + @override
2682 + String get lm_studio_domain => 'ALAN';
2683 +
2684 + @override
2685 + String get lm_studio_format => 'FORMAT';
2686 +
2687 + @override
2688 + String get lm_studio_vision => 'Görüş';
2689 +
2690 + @override
2691 + String get lm_studio_tool_use => 'Araç kullanımı';
2692 +
2693 + @override
2694 + String get lm_studio_reasoning => 'Mantık yürütme';
2695 +
2696 + @override
2697 + String get lm_studio_download_options => 'İndirme seçenekleri';
2698 +
2699 + @override
2700 + String get lm_studio_download => 'İndir';
2701 +
2702 + @override
2703 + String lm_studio_download_size(String size) {
2704 + return '$size İndir';
2705 + }
2706 +
2707 + @override
2708 + String lm_studio_downloading_percent(int percent) {
2709 + return 'İndiriliyor %$percent';
2710 + }
2711 +
2712 + @override
2713 + String get lm_studio_readme_unavailable =>
2714 + 'Bu model için README mevcut değil.';
2715 +
2716 + @override
2717 + String get lm_studio_full_gpu_offload => 'Tam GPU yük devretmesi mümkün';
2718 +
2719 + @override
2720 + String get lm_studio_partial_gpu_offload => 'Kısmi GPU yük devretmesi mümkün';
2721 +
2722 + @override
2723 + String get lm_studio_likely_too_large => 'Muhtemelen çok büyük';
2724 +
2725 + @override
2726 + String get lm_studio_available_ram_gb =>
2727 + 'Kullanılabilir RAM (GB, isteğe bağlı)';
2728 +
2729 + @override
2730 + String get lm_studio_available_vram_gb =>
2731 + 'Kullanılabilir VRAM (GB, isteğe bağlı)';
2732 +
2733 + @override
2734 + String get lm_studio_memory_settings_title => 'Öneriler için bellek';
2735 +
2736 + @override
2737 + String get lm_studio_memory_settings_desc =>
2738 + 'Model tarayıcısında modellerin makinenize sığıp sığmadığını tahmin etmek için kullanılır.';
2739 +
2740 + @override
2741 + String get think_button_label => 'Düşün';
2742 +
2743 + @override
2744 + String get thinking_mode_title => 'Düşünme modu';
2745 +
2746 + @override
2747 + String get reasoning_effort_low => 'Düşük';
2748 +
2749 + @override
2750 + String get reasoning_effort_medium => 'Orta';
2751 +
2752 + @override
2753 + String get reasoning_effort_high => 'Yüksek';
2754 +
2755 + @override
2756 + String get could_not_read_file => 'Dosya okunamadı';
2757 +
2758 + @override
2759 + String get server_offline => 'Sunucu Çevrimdışı';
2760 +
2761 + @override
2762 + String get could_not_establish_connection =>
2763 + 'Sunucuya bağlantı kurulamadı. Lütfen sunucunuzun çalışıp çalışmadığını ve ana bilgisayar/port ayarlarının doğru olup olmadığını kontrol edin.';
2764 +
2765 + @override
2766 + String get retry_connection => 'Bağlantıyı Yeniden Dene';
2767 +
2768 + @override
2769 + String get tokens_label => 'Token\'lar';
2770 +
2771 + @override
2772 + String get enter_context_length => 'Bağlam uzunluğunu girin...';
2773 +
2774 + @override
2775 + String get openrouter_disclosure =>
2776 + 'Bu sağlayıcıya bağlanarak sohbet mesajlarınız ve girdileriniz onların sunucularına gönderilir. LocalMind sohbetlerinizi izlemez veya saklamaz.';
2777 +
2778 + @override
2779 + String get welcome_message_cloud =>
2780 + 'Mesajlarınız bağlı olan sağlayıcınıza gönderilir.';
2781 +
2782 + @override
2783 + String get privacy_policy => 'Gizlilik Politikası';
2784 +
2785 + @override
2786 + String get cloud_sync => 'S3 Bulut Eşitleme';
2787 +
2788 + @override
2789 + String get cloud_sync_description =>
2790 + 'Kendi S3 uyumlu sunucunuza uçtan uca şifreli eşitleme';
2791 +
2792 + @override
2793 + String get cloud_sync_endpoint => 'Uç Nokta URL\'si (Endpoint)';
2794 +
2795 + @override
2796 + String get cloud_sync_bucket => 'Kova (Bucket)';
2797 +
2798 + @override
2799 + String get cloud_sync_region => 'Bölge (Region)';
2800 +
2801 + @override
2802 + String get cloud_sync_prefix => 'Önek (Prefix)';
2803 +
2804 + @override
2805 + String get cloud_sync_access_key => 'Erişim Anahtarı Kimliği';
2806 +
2807 + @override
2808 + String get cloud_sync_secret_key => 'Gizli Erişim Anahtarı';
2809 +
2810 + @override
2811 + String get cloud_sync_session_token => 'Oturum Jetonu (İsteğe Bağlı)';
2812 +
2813 + @override
2814 + String get cloud_sync_passphrase => 'Şifreleme Parolası';
2815 +
2816 + @override
2817 + String get cloud_sync_confirm_passphrase => 'Parolayı Onayla';
2818 +
2819 + @override
2820 + String get cloud_sync_path_style => 'Yol stili adresleme kullan';
2821 +
2822 + @override
2823 + String get cloud_sync_allow_http => 'Güvensiz HTTP\'ye izin ver';
2824 +
2825 + @override
2826 + String get cloud_sync_http_warning =>
2827 + 'HTTP istek meta verilerini ve kimlik bilgilerini ağa açık hale getirir. Yalnızca güvenilir bir yerel S3 sunucusu için kullanın.';
2828 +
2829 + @override
2830 + String get cloud_sync_test => 'Bağlantıyı test et';
2831 +
2832 + @override
2833 + String get cloud_sync_enable => 'Şifreli eşitlemeyi etkinleştir';
2834 +
2835 + @override
2836 + String get cloud_sync_now => 'Şimdi eşitle';
2837 +
2838 + @override
2839 + String get cloud_sync_disconnect => 'Bu cihazın bağlantısını kes';
2840 +
2841 + @override
2842 + String get cloud_sync_last_synced => 'Son eşitleme';
2843 +
2844 + @override
2845 + String get cloud_sync_never => 'Hiçbir zaman';
2846 +
2847 + @override
2848 + String get cloud_sync_conflicts => 'Çakışmalar korundu';
2849 +
2850 + @override
2851 + String get cloud_sync_passphrase_mismatch => 'Parolalar eşleşmiyor';
2852 +
2853 + @override
2854 + String get crash_report_title => 'Bir şeyler yanlış gitti';
2855 +
2856 + @override
2857 + String get crash_report_stack_trace => 'Yığın izleme (Stack trace)';
2858 +
2859 + @override
2860 + String get crash_report_tap_to_expand => 'Genişletmek için dokunun';
2861 +
2862 + @override
2863 + String get crash_report_button => 'Bu çökmeyi bildir';
2864 +
2865 + @override
2866 + String get crash_try_again => 'Tekrar dene';
2867 +
2868 + @override
2869 + String get crash_report_empty_stack => '<boş>';
2870 +
2871 + @override
2872 + String get crash_report_disclaimer =>
2873 + 'Bildirme işlemi, teşhis bilgileri önceden doldurulmuş olarak GitHub\'ı açar. Kontrol sizdedir — hiçbir şey otomatik olarak gönderilmez. Lütfen göndermeden önce hassas içerikleri gözden geçirin ve kaldırın.';
2874 +
2875 + @override
2876 + String get crash_report_copied => 'Panoya kopyalandı';
2877 +
2878 + @override
2879 + String get report_a_problem => 'Sorun bildir';
2880 +
2881 + @override
2882 + String get rename_folder => 'Klasörü yeniden adlandır';
2883 +
2884 + @override
2885 + String get delete_folder => 'Sil folder';
2886 +
2887 + @override
2888 + String get delete_folder_title => 'Sil folder?';
2889 +
2890 + @override
2891 + String delete_folder_body(String name) {
2892 + return 'Silmek istediğinizden emin misiniz \"$name\"? Sohbetler or saved messages inside will be moved back to \"Unfiled\". Bu işlem geri alınamaz.';
2893 + }
2894 +
2895 + @override
2896 + String get folder_name_required => 'Lütfen bir klasör adı girin';
2897 +
2898 + @override
2899 + String get model_required_toast => 'Önce bir model seçmeniz gerekiyor';
2900 +}
lib/l10n/app_tr.arb new
+882
@@ -0,0 +1,882 @@
1 +{
2 + "@@locale": "tr",
3 + "app_name": "LocalMind",
4 + "app_tagline": "Sizin Yapay Zekanız. Sizin Cihazınız. Sizin Kurallarınız.",
5 + "app_version": "1.0.0",
6 + "cancel": "İptal",
7 + "confirm": "Onayla",
8 + "delete": "Sil",
9 + "save": "Kaydet",
10 + "retry": "Yeniden Dene",
11 + "close": "Kapat",
12 + "done": "Bitti",
13 + "continue_action": "Devam Et",
14 + "skip": "Atla",
15 + "install": "Yükle",
16 + "download": "İndir",
17 + "resume": "Devam Ettir",
18 + "pause": "Duraklat",
19 + "stop": "Durdur",
20 + "edit": "Düzenle",
21 + "preview": "Önizleme",
22 + "unload": "Bellekten Çıkar",
23 + "load": "Yükle",
24 + "rename": "Yeniden Adlandır",
25 + "pin": "Sabitle",
26 + "unpin": "Sabitlemeyi Kaldır",
27 + "share": "Paylaş",
28 + "copy": "Kopyala",
29 + "copied": "Kopyalandı!",
30 + "copied_to_clipboard": "Panoya kopyalandı",
31 + "select": "Seç",
32 + "active": "Aktif",
33 + "all": "Tümü",
34 + "none": "Hiçbiri",
35 + "none_selected": "Hiçbiri seçilmedi",
36 + "online": "Çevrimiçi",
37 + "connected": "Bağlandı",
38 + "checking": "Kontrol ediliyor",
39 + "offline": "Çevrimdışı",
40 + "error": "Hata",
41 + "unknown_error": "Bilinmeyen hata",
42 + "not_now": "Şimdi Değil",
43 + "enable": "Etkinleştir",
44 + "proceed_anyway": "Yine de Devam Et",
45 + "test_connection": "Bağlantıyı Test Et",
46 + "testing": "Test ediliyor...",
47 + "connection_successful": "Bağlantı başarılı!",
48 + "connection_failed": "Bağlantı başarısız. Ayarlarınızı kontrol edin.",
49 + "save_continue": "Kaydet ve Devam Et",
50 + "save_changes": "Değişiklikleri Kaydet",
51 + "finish_setup": "Kurulumu Tamamla",
52 + "start_new_chat": "Yeni Sohbet Başlat",
53 + "cannot_undo": "Bu işlem geri alınamaz.",
54 + "ram_warning": "RAM Uyarısı",
55 + "recommended": "ÖNERİLEN",
56 + "may_be_large": "Bu cihaz için çok büyük olabilir",
57 + "calculating": "Hesaplanıyor...",
58 + "download_failed": "İndirme Başarısız",
59 + "downloaded": "İndirildi",
60 + "not_downloaded": "İndirilmedi",
61 + "installed": "Yüklendi",
62 + "not_installed": "Yüklenmedi",
63 + "loading": "Yükleniyor...",
64 + "thinking": "Düşünüyor...",
65 + "processing": "İşleniyor...",
66 + "initializing": "Başlatılıyor...",
67 + "ready": "Hazır",
68 + "preparing_app": "Uygulama hazırlanıyor...",
69 + "initializing_services": "Servisler başlatılıyor...",
70 + "configuring_server": "Sunucu yapılandırılıyor...",
71 + "startup_failed": "Başlatma başarısız oldu",
72 + "something_went_wrong": "Bir şeyler yanlış gitti",
73 + "delete_model_title": "Modeli Sil",
74 + "delete_model_body": "{name} modelini silmek istediğinizden emin misiniz?",
75 + "delete_model_body_with_size": "{name} modelini silmek istediğinizden emin misiniz? Bu yaklaşık {size} alan boşaltacaktır.\n\nGerekirse bu modeli daha sonra tekrar indirebilirsiniz.",
76 + "delete_voice_title": "Sesi Sil",
77 + "delete_voice_body": "{name} sesini silmek istediğinizden emin misiniz? Bu yaklaşık {size} alan boşaltacaktır.\n\nGerekirse bu sesi daha sonra tekrar indirebilirsiniz.",
78 + "delete_server_title": "Sunucuyu Sil",
79 + "delete_server_body": "\"{name}\" sunucusunu silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.",
80 + "delete_conversation_title": "Sohbet silinsin mi?",
81 + "delete_conversation_body": "\"{title}\" sohbetini silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.",
82 + "delete_message_title": "Mesaj silinsin mi?",
83 + "delete_persona_title": "\"{name}\" silinsin mi?",
84 + "delete_persona_body": "Bu işlem geri alınamaz.",
85 + "delete_builtin_persona_body": "Bu yerleşik bir personalardır. Daha sonra Ayarlar'dan geri yükleyebilirsiniz.",
86 + "restore_builtin_personas": "Varsayılan personaları geri yükle",
87 + "restore_builtin_personas_desc": "Sildiğiniz yerleşik personaları tekrar ekleyin",
88 + "restore_builtin_personas_success": "Varsayılan personalar geri yüklendi",
89 + "clear_personas": "Personaları temizle",
90 + "enable_image_compression": "Göndermeden önce görselleri sıkıştır",
91 + "enable_image_compression_desc": "Eklenen görsellerin boyutunu değiştirip sıkıştırarak sunucu sınırları içinde kalın",
92 + "image_compression_level": "Sıkıştırma seviyesi",
93 + "image_compression_level_desc": "Yüksek seviye, daha düşük kalitede daha küçük boyutlu yüklemeler sağlar",
94 + "image_compression_level_low": "Düşük",
95 + "image_compression_level_medium": "Orta",
96 + "image_compression_level_high": "Yüksek",
97 + "sort_models_tooltip": "Modelleri sırala",
98 + "sort_by_favorites": "Önce favoriler",
99 + "sort_by_name": "İsim (A-Z)",
100 + "sort_by_size_smallest": "Boyut (önce en küçük)",
101 + "sort_by_size_largest": "Boyut (önce en büyük)",
102 + "sort_by_context_length": "Bağlam uzunluğu",
103 + "bulk_ai_rename_progress": "{done}/{total} yeniden adlandırılıyor...",
104 + "selected_count": "{count} seçildi",
105 + "ai_rename_tooltip": "Seçilenleri Yapay Zeka ile yeniden adlandır",
106 + "new_chat_in_folder_tooltip": "Bu klasörde yeni sohbet",
107 + "total_tokens_count": "{count} token",
108 + "smart_replies_use_persona": "Akıllı yanıtlarda personayı kullan",
109 + "smart_replies_use_persona_desc": "Önerilen yanıtlar genel asistan yerine aktif personanın tonuna uyar",
110 + "keep_persona_on_new_chat": "Yeni sohbette personayı koru",
111 + "keep_persona_on_new_chat_desc": "Yeni sohbet başlatıldıktan sonra seçilen persona(lar)ı temizleme",
112 + "role_swap_button_enabled": "Rol değiştirme düğmesini göster",
113 + "role_swap_button_enabled_desc": "Yanıt üretmeden mesajınızı kullanıcı yerine asistan olarak göndermek için sohbet girişinde bir düğme gösterin",
114 + "send_as_user_tooltip": "Kullanıcı olarak gönder",
115 + "send_as_assistant_tooltip": "Asistan olarak gönder (yanıt yok)",
116 + "insert_without_generating_tooltip": "Üretmeden ekle",
117 + "token_usage_title": "Token Kullanımı",
118 + "total_tokens_label": "Kullanılan token'lar",
119 + "usage_percent_label": "Kullanılan bağlam",
120 + "export_choice_title": "Dışa Aktar",
121 + "export_choice_body": "Bunu nasıl dışa aktarmak istersiniz?",
122 + "copy_to_clipboard": "Panoya Kopyala",
123 + "bulk_export_conversations_success": "{count} sohbet dışa aktarıldı",
124 + "bulk_ai_rename_confirm_title": "Yapay Zeka ile Yeniden Adlandırılsın mı?",
125 + "bulk_ai_rename_confirm_body": "Bu işlem Yapay Zekadan seçilen {count} sohbetin her biri için yeni bir başlık oluşturmasını ve mevcut başlıkların yerini almasını isteyecektir. Bu biraz zaman alabilir ve geri alınamaz.",
126 + "sort_by_modified_date": "Son değiştirilme",
127 + "sort_by_created_date": "Oluşturulma tarihi",
128 + "sort_title": "Sırala",
129 + "clear_conversation_title": "Sohbet temizlensin mi?",
130 + "clear_conversation_body": "Bu işlem sohbet içindeki tüm mesajları silecektir.",
131 + "clear": "Temizle",
132 + "label_completed": "{label} tamamlandı",
133 + "error_with_message": "Hata: {error}",
134 + "preview_failed": "Önizleme başarısız: {error}",
135 + "loading_model": "{modelId} yükleniyor...",
136 + "model_loaded": "Model başarıyla yüklendi",
137 + "no_model_loaded": "No model loaded. Tap \"Manage On-Device Modeller\" to download and load a model.",
138 + "loading_model_error": "Hata: {error}",
139 + "delete_conversation": "Sohbeti Sil",
140 + "nav_history": "Geçmiş",
141 + "nav_servers": "Sunucular",
142 + "nav_local_models": "Local Modeller",
143 + "nav_tts": "Metin Okuma",
144 + "nav_personas": "Personalar",
145 + "nav_settings": "Ayarlar",
146 + "nav_new_chat": "Yeni Sohbet",
147 + "search_hint": "Sohbetleri ara...",
148 + "no_server_selected": "Sunucu seçilmedi",
149 + "switch_server": "Sunucu Değiştir",
150 + "switch_server_subtitle": "Bağlanmak için bir sunucu seçin",
151 + "manage_servers": "Manage Sunucular",
152 + "open_source": "Açık Kaynak",
153 + "open_source_desc": "LocalMind açık kaynaklıdır. İlerlememizi takip edin veya GitHub'da katkıda bulunun.",
154 + "star_on_github": "GitHub'da Yıldızla",
155 + "add_more": "Daha fazla ekle",
156 + "on_github": "GitHub üzerinde",
157 + "could_not_open_github": "GitHub açılamadı.",
158 + "settings_title": "Ayarlar",
159 + "settings_appearance": "Görünüm",
160 + "settings_language": "Dil",
161 + "language_system_default": "Sistem Varsayılanı",
162 + "settings_tts": "Metin Okuma",
163 + "settings_behavior": "Davranış",
164 + "settings_on_device": "Cihaz Üstü Çıkarım",
165 + "settings_default_server": "Varsayılan Sunucu",
166 + "settings_default_persona": "Varsayılan Persona",
167 + "settings_privacy": "Gizlilik",
168 + "settings_data_management": "Veri Yönetimi",
169 + "settings_about": "Hakkında",
170 + "theme": "Tema",
171 + "theme_system": "Sistem",
172 + "theme_light": "Açık",
173 + "theme_dark": "Koyu",
174 + "theme_claude": "Claude",
175 + "font_size": "Yazı Tipi Boyutu",
176 + "font_size_desc": "Sohbet içindeki metin boyutunu ayarlayın.",
177 + "font_preview": "Hızlı kahverengi tilki tembel köpeğin üzerinden atlar.",
178 + "code_theme_dark": "Kod Teması (Koyu)",
179 + "code_theme_light": "Kod Teması (Açık)",
180 + "code_theme_desc": "Kod blokları için sözdizimi vurgulama temasını seçin.",
181 + "tts_engine": "TTS Motoru",
182 + "tts_engine_system": "Sistem TTS",
183 + "tts_engine_kitten": "Kitten TTS",
184 + "voice": "Ses",
185 + "voice_female": "Kadın",
186 + "voice_male": "Erkek",
187 + "voice_other": "Diğer",
188 + "tts_speed": "Konuşma Hızı",
189 + "tts_speed_desc": "Oynatma hızını ayarlayın.",
190 + "manage_tts_models": "Manage TTS Modeller",
191 + "manage_on_device_models": "Manage On-Device Modeller",
192 + "enable_smart_reply": "Cihaz Üstü Akıllı Yanıtlar",
193 + "ai_user_response_enabled": "Yapay zeka kullanıcı mesajı (göndere basılı tutun)",
194 + "ai_user_response_enabled_desc": "Yapay zekanın sonraki mesajınızı yazıp göndermesini sağlamak için gönder düğmesini 3 saniye basılı tutun",
195 + "ai_user_response_tooltip": "Yapay zeka ile kullanıcı mesajı oluştur",
196 + "streaming_responses": "Akan Yanıtlar (Streaming)",
197 + "auto_generate_titles": "Başlıkları Otomatik Oluştur",
198 + "send_on_enter": "Enter ile Gönder",
199 + "show_system_messages": "Varsayılan Sistem Yönergesini Gönder",
200 + "show_system_messages_desc": "Persona seçilmediğinde, her istekle birlikte varsayılan asistan sistem yönergesini gönder",
201 + "show_system_messages_in_chat": "Sohbette Sistem Mesajlarını Göster",
202 + "show_system_messages_in_chat_desc": "Sistem mesajlarını (örn. içe aktarılan yedekten) konuşmada görünür baloncuklar olarak göster",
203 + "haptic_feedback": "Dokunsal Geri Bildirim",
204 + "enable_mcp": "MCP'yi Etkinleştir",
205 + "new_chat_mcp_default": "Yeni Sohbet MCP Varsayılanı",
206 + "show_data_indicator": "Veri Göstergesini Göster",
207 + "privacy_info": "\"LocalMind verilerinizi asla görmez\"",
208 + "delete_all_conversations": "Sil All Sohbetler",
209 + "reset_settings_defaults": "Reset Ayarlar to Defaults",
210 + "chat_title": "LocalMind",
211 + "chat_parameters_tooltip": "Sohbet Parametreleri",
212 + "change_persona": "Personayı Değiştir",
213 + "set_persona": "Personayı Ayarla",
214 + "remove_persona": "Kaldır Persona",
215 + "clear_conversation": "Sohbeti Temizle",
216 + "connection_error": "Bağlantı hatası. Sunucunuzu kontrol edin.",
217 + "disconnected": "Bağlantı Kesildi from server.",
218 + "configure": "Yapılandır",
219 + "select_model": "Model Seçin",
220 + "select_persona": "Persona Seç",
221 + "manage_personas": "Personaları yönet",
222 + "personas_combine_hint": "Sistem yönergelerini birleştirmek için sohbette birden fazla persona seçin.",
223 + "start_conversation": "Bir sohbet başlatın",
224 + "recent_chats": "Son sohbetler",
225 + "see_all": "Tümünü gör",
226 + "quick_write": "Bir fonksiyon yazmama yardım et",
227 + "quick_explain": "Bu kodu açıkla",
228 + "quick_debug": "Bunu benim için ayıkla (debug)",
229 + "quick_async": "async/await nasıl kullanılır?",
230 + "history_missing_title": "Geçmiş Eksik",
231 + "history_missing_desc": "Bu sohbetteki mesajlar silinmiş veya geçmiş kaydı bozulmuş.",
232 + "technical_details": "Teknik Detaylar",
233 + "last_error": "Last Hata:",
234 + "copy_info": "Copy Bilgi",
235 + "conversation_id": "Sohbet Kimliği (ID)",
236 + "created_at": "Oluşturulma Tarihi",
237 + "expected_messages": "Beklenen Mesajlar",
238 + "debug_dialog_desc": "Eşitleme sorunlarını belirlemeye yardımcı olacak teşhis bilgileri.",
239 + "chat_input_hint": "İstediğinizi sorun",
240 + "send_message_tooltip": "Mesaj gönder",
241 + "stop_generation_tooltip": "Üretimi durdur",
242 + "attach_images_tooltip": "Görsel veya metin ekle",
243 + "start_listening_tooltip": "Dinlemeyi başlat",
244 + "stop_listening_tooltip": "Dinlemeyi durdur",
245 + "tool_label": "Araç: {toolCallId}",
246 + "tool_unknown": "Araç: Bilinmeyen",
247 + "message_options": "Mesaj seçenekleri",
248 + "copy_markdown": "Markdown olarak Kopyala",
249 + "copied_markdown": "Markdown olarak kopyalandı",
250 + "read_aloud": "Sesli Oku",
251 + "stop_reading": "Okumayı Durdur",
252 + "more": "Daha fazla",
253 + "character_count": "{length} karakter",
254 + "edit_message": "Mesajı Düzenle",
255 + "edit_message_desc": "Kaydetmek, alttaki asistan yanıtını kaldıracak ve yeniden üretecektir.",
256 + "save_regenerate": "Kaydet ve yeniden üret",
257 + "chat_settings_title": "Chat Ayarlar",
258 + "reset_defaults": "Varsayılanlara Sıfırla",
259 + "parameters_tab": "Parametreler",
260 + "mcp_tab": "MCP",
261 + "temperature": "Sıcaklık (Temperature)",
262 + "temperature_desc": "Rastgeleliği kontrol eder: Yüksek = Yaratıcı, Düşük = Odaklanmış",
263 + "top_p": "Top P",
264 + "top_p_desc": "Çekirdek örnekleme eşiği",
265 + "max_tokens": "Maksimum Token",
266 + "max_tokens_desc": "Yanıt sınırı",
267 + "context_length": "Bağlam Uzunluğu",
268 + "context_length_desc": "Geçmiş penceresi",
269 + "mcp_disabled_warning": "MCP is disabled globally. Enable it in Ayarlar to use these features.",
270 + "mcp_enable_chat": "Bu sohbet için MCP'yi etkinleştir",
271 + "auto_execute_tools": "Araçları otomatik çalıştır",
272 + "beta_label": "Beta",
273 + "experimental_label": "Deneysel",
274 + "add_ephemeral_mcp": "Geçici MCP Sunucusu Ekle",
275 + "mcp_label_placeholder": "Etiket",
276 + "mcp_url_placeholder": "URL (https://...)",
277 + "active_integrations": "Aktif Entegrasyonlar",
278 + "enable_notifications": "Bildirimleri Etkinleştir",
279 + "enable_notifications_desc": "Modellerin indirilmesi tamamlandığında bildirim alın.",
280 + "chat_history_title": "Sohbet Geçmişi",
281 + "conversation_just_now": "Az önce",
282 + "conversation_minutes_ago": "{minutes}d önce",
283 + "conversation_hours_ago": "{hours}s önce",
284 + "conversation_yesterday": "Dün",
285 + "conversation_days_ago": "{days}g önce",
286 + "conversation_date": "{day}/{month}/{year}",
287 + "options_tooltip": "Seçenekler",
288 + "no_results_found": "Sonuç bulunamadı",
289 + "no_conversations_yet": "Henüz sohbet yok",
290 + "try_different_search": "Farklı bir arama terimi deneyin",
291 + "start_new_conversation": "Yeni bir sohbet başlatın",
292 + "rename_conversation": "Sohbeti Yeniden Adlandır",
293 + "enter_new_title": "Yeni başlık girin",
294 + "pinned_section": "SABİTLENENLER",
295 + "today_section": "BUGÜN",
296 + "yesterday_section": "DÜN",
297 + "previous_7_days": "Son 7 Gün",
298 + "previous_30_days": "Son 30 Gün",
299 + "older_section": "DAHA ESKİ",
300 + "onboarding_choose_language": "LocalMind dillerini keşfedin",
301 + "onboarding_choose_language_desc": "Uygulama arayüzünüz için tercih ettiğiniz dili seçin.",
302 + "onboarding_localmind": "LOCALMIND",
303 + "onboarding_connect_server": "Sunucunuzu\nBağlayın",
304 + "onboarding_connect_desc": "Özel yapay zeka deneyiminize başlamak için LM Studio, Ollama,\nOllama Cloud veya OpenRouter'a bağlanın.",
305 + "openai_compatible_api": "OpenAI uyumlu API",
306 + "https_requires_ssl": "HTTPS, SSL gerektirir",
307 + "most_local_setups_use_http": "Çoğu yerel kurulum http:// kullanır",
308 + "onboarding_welcome": "LocalMind'a Hoş Geldiniz",
309 + "server_type_on_device": "Cihaz Üstü",
310 + "server_type_lm_studio": "LM Studio",
311 + "server_type_ollama": "Ollama",
312 + "server_type_ollama_cloud": "Ollama Cloud",
313 + "server_type_ollama_cloud_sub": "BULUT YÖNETİMLİ",
314 + "server_type_ollama_cloud_display": "Ollama Cloud",
315 + "server_address_ollama_cloud": "ollama.com",
316 + "ollama_cloud_disclosure": "Ollama Cloud'a bağlanarak sohbet mesajlarınız ve girdileriniz çıkarım için Ollama'nın yönetilen sunucularına gönderilir. LocalMind sohbetlerinizi izlemez veya saklamaz. Bu anahtarı ollama.com/settings/keys adresinden istediğiniz zaman iptal edebilirsiniz.",
317 + "api_key_required_ollama_cloud": "Ollama Cloud için API Anahtarı gereklidir",
318 + "api_key_hint_ollama_cloud": "Ollama Cloud API anahtarınızı yapıştırın",
319 + "add_server_ollama_cloud_subtitle": "Yönetilen bulut modellerine erişmek için ollama.com/settings/keys adresinden alacağınız API anahtarıyla Ollama Cloud'a bağlanın.",
320 + "add_server_openrouter_subtitle": "Geçerli bir API anahtarıyla OpenRouter üzerinden bağlanın ve model yönlendirmesi için bu profili hazır tutun.",
321 + "add_server_endpoint_subtitle": "Yerel veya kendi barındırdığınız bir uç noktayı yapılandırın ve kaydetmeden önce bağlantıyı doğrulayın.",
322 + "server_type_openrouter": "OpenRouter",
323 + "server_type_openrouter_sub": "BİRLEŞİK BULUT",
324 + "ready_continue": "DEVAM ETMEYE HAZIR",
325 + "waiting_selection": "SEÇİM BEKLENİYOR",
326 + "setup_connection": "Bağlantıyı Kur",
327 + "setup_connection_desc": "Sohbet etmeye başlamak için {server} sunucunuzu yapılandırın.",
328 + "server_name": "Sunucu Adı",
329 + "name_required": "İsim gereklidir",
330 + "name_max_50": "En fazla 50 karakter",
331 + "host_label": "Ana Bilgisayar / IP Adresi",
332 + "host_required": "Ana bilgisayar gereklidir",
333 + "port_label": "Port",
334 + "port_required": "Port gereklidir",
335 + "port_invalid": "Bir sayı olmalıdır",
336 + "port_range": "Geçerli bir port girin (1-65535)",
337 + "api_key_required": "API Anahtarı *",
338 + "api_key_optional": "API Anahtarı (İsteğe Bağlı)",
339 + "api_key_required_openrouter": "OpenRouter için API Anahtarı gereklidir",
340 + "api_key_format": "OpenRouter API anahtarları sk- ile başlar",
341 + "my_server_hint": "Sunucum",
342 + "name_length_validation": "İsim 50 karakter veya daha az olmalıdır",
343 + "host_valid": "Geçerli bir ana bilgisayar adı veya IP adresi girin",
344 + "api_key_hint_openrouter": "sk-...",
345 + "api_key_hint_generic": "Kimlik doğrulamalı sunucular için",
346 + "update_server": "Sunucuyu Güncelle",
347 + "save_server": "Sunucuyu Kaydet",
348 + "server_updated": "Sunucu güncellendi",
349 + "server_added": "Sunucu eklendi",
350 + "download_model_title": "Bir Model İndirin",
351 + "download_model_desc": "İndirmek için bir model seçin.\nCihazınızda yerel olarak çalışacaktır.",
352 + "on_device_android_only": "Cihaz üstü çıkarım şu anda yalnızca Android'de kullanılabilir.",
353 + "total_ram": "Toplam RAM",
354 + "available": "Kullanılabilir",
355 + "ram_min_required": "En az {fileSize} GB RAM",
356 + "download_progress": "%{percent} • {speed}",
357 + "eta_label": "Kalan Süre: {eta}",
358 + "paused_progress": "Duraklatıldı - %{percent}",
359 + "ram_warning_body_download": "Bu model en az {ram} GB RAM gerektirir, ancak cihazınızda {totalMemory} var. Düzgün çalışmayabilir veya uygulamanın çökmesine neden olabilir.",
360 + "ram_warning_body_load": "Cihazınızda {availableRAM} kullanılabilir RAM var, ancak bu model en az {ram} GB önerir. Yükleme başarısız olabilir veya kararsızlığa yol açabilir.",
361 + "choose_theme": "Tema Seçin",
362 + "choose_theme_desc": "Uygulama görünümünü kişiselleştirin. Bunu daha sonra ayarlar içinden değiştirebilirsiniz.",
363 + "theme_card_system": "Sistem",
364 + "theme_card_system_sub": "Cihaz ayarlarınızla eşleşir",
365 + "theme_card_light": "Açık",
366 + "theme_card_light_sub": "Temiz ve parlak",
367 + "theme_card_dark": "Koyu",
368 + "theme_card_dark_sub": "Gözleri yormaz",
369 + "theme_card_claude": "Claude",
370 + "theme_card_claude_sub": "Sıcak, şeftali tonlu bir tema",
371 + "stay_updated": "Güncel Kalın",
372 + "stay_updated_desc": "Yapay zeka modellerinizin indirilmesi tamamlandığında veya uzun süren görevler bittiğinde bildirim alın.",
373 + "notification_benefit_downloads": "Model indirme ilerlemesi",
374 + "notification_benefit_completions": "Üretim tamamlamaları",
375 + "notification_benefit_background": "Geriground tasks status",
376 + "allow_notifications": "Bildirimlere İzin Ver",
377 + "servers_title": "Sunucular",
378 + "no_servers_yet": "No Sunucular Yet",
379 + "no_servers_desc": "Yapay zeka modelleriyle sohbet etmeye başlamak için ilk sunucunuzu ekleyin.",
380 + "add_server": "Sunucu Ekle",
381 + "switched_to_server": "{name} sunucusuna geçildi",
382 + "edit_server": "Sunucuyu Düzenle",
383 + "add_server_title": "Sunucu Ekle",
384 + "server_type_label": "Sunucu Türü",
385 + "server_icon_label": "Sunucu Simgesi",
386 + "default_icon": "Varsayılan simge",
387 + "server_type_lm_studio_display": "LM Studio",
388 + "server_type_openai_display": "OpenAI Uyumlu",
389 + "server_type_ollama_display": "Ollama",
390 + "server_type_openrouter_display": "OpenRouter",
391 + "server_type_on_device_display": "Cihaz Üstü",
392 + "server_address_openrouter": "openrouter.ai",
393 + "server_address_on_device": "Yerel çıkarım",
394 + "server_address_format": "{host}:{port}",
395 + "default_badge": "Varsayılan",
396 + "set_as_default": "Varsayılan Olarak Ayarla",
397 + "select_icon": "Simge Seç",
398 + "select_icon_desc": "Sunucunuz için bir simge seçin",
399 + "search_icons_hint": "Simgeleri ara...",
400 + "server_icon_stack": "Sunucu Yığını",
401 + "server_icon_stack2": "Sunucu Yığını 02",
402 + "server_icon_stack3": "Sunucu Yığını 03",
403 + "server_icon_cloud": "Bulut",
404 + "server_icon_cloud_server": "Bulut Sunucu",
405 + "server_icon_mcp": "MCP Sunucusu",
406 + "server_icon_database": "Veritabanı",
407 + "server_icon_database1": "Veritabanı 01",
408 + "server_icon_database2": "Veritabanı 02",
409 + "server_icon_cpu": "İşlemci (CPU)",
410 + "server_icon_chip": "Yonga (Chip)",
411 + "server_icon_chip2": "Yonga 02",
412 + "server_icon_computer": "Bilgisayar",
413 + "server_icon_laptop": "Dizüstü Bilgisayar",
414 + "server_icon_terminal": "Bilgisayar Terminali",
415 + "server_icon_code": "Kod",
416 + "server_icon_ai_brain": "Yapay Zeka Beyin",
417 + "server_icon_ai_brain2": "Yapay Zeka Beyin 02",
418 + "server_icon_ai_cloud": "Yapay Zeka Bulut",
419 + "server_icon_ai_network": "Yapay Zeka Ağı",
420 + "server_icon_ai_chat": "Yapay Zeka Sohbet",
421 + "server_icon_cellular": "Hücresel Ağ",
422 + "server_icon_plug1": "Fiş 01",
423 + "server_icon_plug2": "Fiş 02",
424 + "server_icon_bot": "Bot",
425 + "server_icon_bot2": "Bot 02",
426 + "server_icon_robotic": "Robotik",
427 + "server_icon_rocket": "Roket",
428 + "server_icon_star": "Yıldız",
429 + "server_icon_settings1": "Ayarlar 01",
430 + "server_icon_settings2": "Ayarlar 02",
431 + "server_icon_home1": "Ev 01",
432 + "server_icon_home2": "Ev 02",
433 + "server_icon_folder1": "Klasör 01",
434 + "server_icon_folder2": "Klasör 02",
435 + "server_icon_file1": "Dosya 01",
436 + "server_icon_lock": "Kilit",
437 + "server_icon_key": "Anahtar 01",
438 + "server_icon_link": "Bağlantı 01",
439 + "server_icon_globe": "Dünya",
440 + "server_icon_api": "API",
441 + "server_icon_arrow_right": "Sağ Ok 01",
442 + "server_icon_check": "Onay Dairesi",
443 + "server_icon_alert": "Uyarı Dairesi",
444 + "server_icon_info": "Bilgi Circle",
445 + "server_icon_zap": "Hızlı Yıldırım",
446 + "server_icon_cloud_upload": "Buluta Yükle",
447 + "server_icon_cloud_download": "Buluttan İndir",
448 + "server_icon_refresh": "Yenile",
449 + "server_icon_hard_drive": "Sabit Sürücü",
450 + "server_icon_drive": "Sürücü",
451 + "personas_title": "Personalar",
452 + "persona_category_general": "Genel",
453 + "persona_category_coding": "Kodlama",
454 + "persona_category_education": "Eğitim",
455 + "persona_category_creative": "Yaratıcı",
456 + "persona_builtin_section": "YERLEŞİK",
457 + "persona_my_section": "PERSONALARIM",
458 + "clone_edit": "Clone & Düzenle",
459 + "builtin_badge": "Yerleşik",
460 + "no_personas_found": "Persona bulunamadı",
461 + "no_personas_desc": "Yapay zeka davranışını özelleştirmek için ilk personanızı oluşturun.",
462 + "edit_persona": "Personayı Düzenle",
463 + "create_persona": "Persona Oluştur",
464 + "create_persona_button": "Oluştur",
465 + "emoji_label": "Emoji",
466 + "name_label": "İsim",
467 + "my_persona_hint": "Personam",
468 + "category_label": "Kategori",
469 + "description_optional": "Açıklama (isteğe bağlı)",
470 + "description_hint": "Bu persona ne yapar...",
471 + "system_prompt": "Sistem Yönergesi",
472 + "character_count_max": "{currentLen}/4000",
473 + "no_prompt_placeholder": "Henüz yönerge yok...",
474 + "prompt_hint": "Sen yardımcı bir asistansın...",
475 + "prompt_required": "Sistem yönergesi gereklidir",
476 + "prompt_max_chars": "En fazla 4000 karakter",
477 + "advanced_settings": "Advanced Ayarlar",
478 + "temperature_label": "Sıcaklık (0.0-2.0)",
479 + "top_p_label": "Top P (0.0-1.0)",
480 + "temp_hint": "0.7",
481 + "top_p_hint": "0.9",
482 + "range_0_2": "0.0-2.0",
483 + "range_0_1": "0.0-1.0",
484 + "persona_updated": "Persona güncellendi",
485 + "persona_created": "Persona oluşturuldu",
486 + "tts_models_title": "Text To Speech Modeller",
487 + "always_available": "Her zaman kullanılabilir",
488 + "tts_system_desc": "Cihazınızın yerleşik metin okuma motorunu kullanır.\nİndirme gerekmez. Ses seçimi cihazınızın sistem ayarlarını kullanır.",
489 + "downloading_status": "İndiriliyor...",
490 + "tts_kitten_desc": "8 ifade dolu ses içeren şimşek hızında nöral TTS.\n{size} indirme gerektirir.",
491 + "tts_piper_desc": "2 ifade dolu ses içeren hızlı çevrimdışı Piper sesleri.\nSes başına {size} indirme gerektirir.",
492 + "engine_spec": "{sizeMb} MB · {ramMb} MB RAM · {voiceCount} ses",
493 + "on_device_models_title": "On-Device Modeller",
494 + "settings_huggingface_token": "Hugging Face Jetonu (İsteğe Bağlı)",
495 + "settings_huggingface_token_desc": "Yalnızca kapalı modeller (örn. Gemma) için gereklidir. huggingface.co/settings/tokens adresinden edinin.",
496 + "settings_huggingface_token_set": "Jeton kaydedildi",
497 + "settings_huggingface_token_cleared": "Jeton temizlendi",
498 + "model_requires_huggingface_token": "Hugging Face jetonu gerektirir",
499 + "model_missing_huggingface_token": "This model is gated on Hugging Face. Add a token in Ayarlar → On-Device Inference to download it.",
500 + "set_huggingface_token": "Jetonu ayarla",
501 + "clear_huggingface_token": "Temizle",
502 + "edit_huggingface_token_dialog_title": "Hugging Face Erişim Jetonu",
503 + "huggingface_token_dialog_hint": "hf_…",
504 + "server_type_ollama_desc": "Yerel yapay zeka motoru. API anahtarı gerekmez.",
505 + "server_type_on_device_desc": "Telefonunuzda çalışır. Bazı modeller Hugging Face jetonu gerektirir.",
506 + "server_type_lm_studio_desc": "Yerel API sunucusu. API anahtarı gerekmez.",
507 + "available_models": "Available Modeller",
508 + "device_memory": "Cihaz Belleği",
509 + "ram_usage": "RAM Kullanımı",
510 + "memory_healthy": "Sağlıklı",
511 + "memory_critical": "Kritik",
512 + "memory_low": "Düşük",
513 + "ram_used": "%{percent} kullanılıyor",
514 + "available_ram": "Kullanılabilir RAM",
515 + "total_capacity": "Toplam Kapasite",
516 + "loaded_status": "Yüklendi",
517 + "inference_backend": "Inference Geriend",
518 + "backend_ios_notice": "iOS'ta yalnızca CPU arka ucu kullanılabilir.",
519 + "backend_cpu_desc": "Tüm cihazlarda çalışır. En uyumlusu.",
520 + "backend_gpu_desc": "OpenCL hızlandırma. Desteklenen cihazlarda daha hızlı.",
521 + "backend_npu_desc": "Üretici NPU'su (Qualcomm/MediaTek). En hızlı çıkarım.",
522 + "select_model_title": "Model Seç",
523 + "refresh_models": "Modelleri yenile",
524 + "search_models_hint": "Modelleri ara...",
525 + "no_server_connected": "Bağlı sunucu yok",
526 + "add_server_first": "Mevcut modelleri görmek için önce bir sunucu ekleyin.",
527 + "failed_load_models": "Başarısız to load models",
528 + "no_models_available": "Mevcut model yok",
529 + "no_models_match": "\"{searchQuery}\" ile eşleşen model yok",
530 + "model_load_failed": "Başarısız to load model: {error}",
531 + "model_unloaded_ollama": "{name} için bellekten çıkarma istendi. Ollama ulaşılabilirse model hemen serbest bırakılır.",
532 + "model_unloaded_success": "{name} başarıyla bellekten çıkarıldı",
533 + "model_unload_failed": "Başarısız to unload model: {error}",
534 + "unload_from_server": "Sunucudan bellekten çıkar",
535 + "context_chip": "{ctx} bağlam",
536 + "unload_all_models": "Tümünü bellekten çıkar",
537 + "loaded_models_count": "{count} yüklendi",
538 + "all_models_unloaded": "Tüm modeller bellekten çıkarıldı",
539 + "branch_chat": "Sohbeti Dallandır",
540 + "branch_chat_desc": "Bu mesajdan yeni bir sohbet dalı oluşturun",
541 + "edit_assistant_message_desc": "Düzenle the assistant response text.",
542 + "switch_to_model": "{modelName} modeline geç",
543 + "download_notification_title": "{modelName} indiriliyor...",
544 + "download_complete_notification": "İndirme tamamlandı!",
545 + "download_complete_body": "{modelName} başarıyla indirildi.",
546 + "download_failed_notification": "İndirme başarısız: {error}",
547 + "download_failed_body": "Başarısız to download {modelName}.",
548 + "engine_name_system": "Sistem TTS",
549 + "engine_tagline_system": "Cihazın yerleşik motoru",
550 + "engine_name_kitten": "Kitten TTS",
551 + "engine_tagline_kitten": "Yüksek hızlı nöral TTS",
552 + "engine_name_sherpa": "Sherpa ONNX VITS",
553 + "engine_tagline_sherpa": "Çevrimdışı Piper sesleri",
554 + "voice_jasper": "Jasper",
555 + "voice_bella": "Bella",
556 + "voice_bruno": "Bruno",
557 + "voice_luna": "Luna",
558 + "voice_hugo": "Hugo",
559 + "voice_rosie": "Rosie",
560 + "voice_leo": "Leo",
561 + "voice_kiki": "Kiki",
562 + "voice_lessac": "Lessac (ABD)",
563 + "voice_ryan": "Ryan (ABD)",
564 + "model_qwen_3": "Qwen 3 0.6B",
565 + "model_qwen_3_desc": "En küçük genel amaçlı sohbet modeli. Hızlı yanıtlar, düşük bellek kullanımı.",
566 + "model_license_apache": "Apache-2.0",
567 + "model_qwen_25": "Qwen 2.5 1.5B Instruct",
568 + "model_qwen_25_desc": "Dengeli kalite ve boyut. Genel konuşmalar için iyidir.",
569 + "model_deepseek": "DeepSeek R1 Distill Qwen 1.5B",
570 + "model_deepseek_desc": "Mantık yürütme ve düşünce zinciri modeli. Mantıksal görevler için en iyisidir.",
571 + "model_license_mit": "MIT",
572 + "model_gemma": "Gemma 4 E2B Instruct",
573 + "model_gemma_desc": "Google amiral gemisi modeli. En yüksek kalite, daha fazla RAM gerektirir.",
574 + "export_header": "*LocalMind üzerinden dışa aktarıldı — {date}*",
575 + "export_role_user": "## 👤 Kullanıcı",
576 + "export_role_assistant": "## 🤖 Asistan",
577 + "export_role_system": "## ⚙️ Sistem",
578 + "export_role_tool": "## 🔧 Araç",
579 + "export_text_user": "[KULLANICI]",
580 + "export_text_assistant": "[ASİSTAN]",
581 + "export_text_system": "[SİSTEM]",
582 + "export_text_tool": "[ARAÇ]",
583 + "export_label_user": "KULLANICI",
584 + "export_label_assistant": "ASİSTAN",
585 + "export_label_system": "SİSTEM",
586 + "export_label_tool": "ARAÇ",
587 + "select_model_hint": "Sohbete başlamak için bir model seçin",
588 + "test_notification_title": "Test bildirimi",
589 + "test_notification_body": "Bu, model indirme ilerlemesi için bir test bildirimidir.",
590 + "tts_supports_background": "Yerel ses olarak arka planda oynatmayı destekler",
591 + "tts_other_services_background_note": "Not: Diğer TTS servisleri yerel ses olarak arka planda oynatmayı destekler.",
592 + "gguf_imported_models_title": "İçe aktarılan GGUF modelleri",
593 + "gguf_imported_models_empty_subtitle": "Cihazınızdan bir GGUF aktarın veya Hugging Face'ten ekleyin. İçe aktarılan modeller llama.cpp ile yerel çalışır.",
594 + "gguf_imported_models_ready": "yerel çıkarım için hazır içe aktarılan modeller.",
595 + "gguf_curated_models_subtitle": "LocalMind içinde indirebileceğiniz ve yönetebileceğiniz özel cihaz üstü modeller.",
596 + "gguf_only_supported": "Bu içe aktarma için yalnızca GGUF modelleri desteklenir.",
597 + "gguf_imported_from_local_file": "yerel dosyadan içe aktarıldı.",
598 + "gguf_import_failed": "Başarısız to import GGUF model",
599 + "gguf_imported_from_huggingface": "Hugging Face'ten içe aktarıldı.",
600 + "gguf_import_canceled": "GGUF içe aktarma iptal edildi.",
601 + "gguf_enter_huggingface_url": "Bir Hugging Face GGUF URL'si girin.",
602 + "gguf_only_official_huggingface_urls": "Yalnızca resmi Hugging Face GGUF URL'leri desteklenir.",
603 + "gguf_use_https_url": "GGUF içe aktarımı için HTTPS Hugging Face URL'si kullanın.",
604 + "gguf_url_must_point_to_file": "Hugging Face URL'si doğrudan bir .gguf dosyasına işaret etmelidir.",
605 + "gguf_unable_to_detect_file_name": "GGUF dosya adı belirlenemedi.",
606 + "gguf_download_empty": "İndirilen GGUF dosyası boş veya eksik.",
607 + "gguf_selected_file_missing": "Seçilen model dosyası mevcut değil.",
608 + "gguf_import_action": "GGUF İçe Aktar",
609 + "gguf_overview_title": "Kendi GGUF modellerinizi getirin",
610 + "gguf_overview_subtitle": "Yerel depolamadan bir .gguf dosyası aktarın veya doğrudan Hugging Face'ten indirin. İçe aktarılan modeller bu cihazda kalır ve llama.cpp ile yüklenir.",
611 + "gguf_imported_count_label": "içe aktarıldı",
612 + "gguf_local_files_label": "yerel dosyalar",
613 + "gguf_huggingface_label": "Hugging Face",
614 + "gguf_import_local_title": "Yerel GGUF İçe Aktar",
615 + "gguf_import_local_subtitle": "Bu cihazdan bir .gguf dosyası kopyalayın",
616 + "gguf_import_huggingface_title": "Hugging Face'ten İçe Aktar",
617 + "gguf_import_huggingface_subtitle": "Bir GGUF URL'si veya depo yolu yapıştırın",
618 + "gguf_no_imported_title": "Henüz içe aktarılan GGUF modeli yok",
619 + "gguf_no_imported_subtitle": "Cihaz depolamanızdan kendi GGUF dosyanızı getirebilir veya bir .gguf dosyasına işaret eden bir Hugging Face URL'si veya depo yolu yapıştırabilirsiniz.",
620 + "gguf_import_huggingface_dialog_title": "Import GGUF from Hugging Face",
621 + "gguf_import_huggingface_dialog_subtitle": "Paste a direct GGUF URL or a Hugging Face repo path like `owner/repo/blob/main/model.gguf`. Blob links are converted automatically.",
622 + "gguf_url_or_repo_path": "GGUF URL or repo path",
623 + "paste": "Paste",
624 + "gguf_browse": "Browse GGUFs",
625 + "gguf_huggingface_token_ready": "Hugging Face token ready",
626 + "gguf_huggingface_token_optional": "Token optional but recommended",
627 + "gguf_huggingface_token_ready_desc": "Your saved token will be used automatically for gated or private repositories.",
628 + "gguf_huggingface_token_optional_desc": "Requires a Hugging Face token. Add one in Ayarlar if this GGUF is gated or private.",
629 + "gguf_downloading": "Downloading GGUF",
630 + "gguf_preparing": "Preparing",
631 + "gguf_preparing_download": "Preparing download...",
632 + "gguf_cancel_import": "İptal import",
633 + "clipboard_empty": "Clipboard is empty.",
634 + "could_not_open_huggingface": "Could not open Hugging Face.",
635 + "gguf_paste_url_error": "Paste a Hugging Face GGUF URL or repo path.",
636 + "gguf_blob_link": "Blob link",
637 + "gguf_repository_label": "Repository",
638 + "gguf_detected_path_label": "Detected path",
639 + "gguf_imported_section_label": "Imported GGUF",
640 + "gguf_already_available": "Already available on this device",
641 + "gguf_curated_models_short": "Curated on-device models",
642 + "execute_tool_title": "Execute Tool",
643 + "execute_tool_request_desc": "The model is requesting to execute the following tool:",
644 + "reject": "Reject",
645 + "approve": "Approve",
646 + "server_type_help": "Pick the provider before filling connection details.",
647 + "server_identity_title": "Identity",
648 + "server_identity_desc": "Name this server and choose how it appears in the list.",
649 + "server_connection_title": "Connection",
650 + "server_connection_desc": "Use the address and port exposed by your server.",
651 + "server_authentication_title": "Authentication",
652 + "server_authentication_required_desc": "OpenRouter requires an API key before testing.",
653 + "server_authentication_optional_desc": "Leave the API key empty if this server does not require one.",
654 + "mcp_tools_title": "MCP Araçları",
655 + "available_tools": "Available tools",
656 + "unable_load_tools": "Unable to load tools",
657 + "no_tools_registered": "No tools registered",
658 + "no_tools_registered_desc": "Enable the example MCP server or add MCP integrations from chat settings.",
659 + "example_mcp_server_title": "Example MCP server",
660 + "example_mcp_server_desc": "Registers example.echo and example.word_count through the same MCP tool provider used by external servers.",
661 + "disable_example_server": "Disable example server",
662 + "enable_example_server": "Enable example server",
663 + "built_in_label": "Built-in",
664 + "highlights_label": "Highlights",
665 + "built_with_label": "Built with",
666 + "local_label": "Local",
667 + "gguf_format_label": "GGUF",
668 + "tool_status_requested": "Requested",
669 + "tool_status_approved": "Approved",
670 + "tool_status_rejected": "Rejected",
671 + "tool_status_running": "Running",
672 + "tool_status_done": "Done",
673 + "tool_status_failed": "Başarısız",
674 + "model_favorite_toggle": "Toggle favorite",
675 + "model_note_label": "Note",
676 + "model_note_hint": "Add a note about this model…",
677 + "unload_models_before_load": "Unload all models before loading a new one",
678 + "temp_chat_keyboard_incognito": "Incognito keyboard in temporary chat",
679 + "temp_chat_keyboard_incognito_desc": "Disables keyboard learning and suggestions in temporary chats (e.g. SwiftKey incognito).",
680 + "resume_last_chat": "Resume last chat on launch",
681 + "resume_last_chat_desc": "Restore your last open conversation when reopening the app.",
682 + "export_all_data": "Export all data",
683 + "import_all_data": "Import all data",
684 + "export_data_success": "Geriup exported successfully",
685 + "import_data_success": "Geriup imported successfully",
686 + "import_data_failed": "Başarısız to import backup: {error}",
687 + "import_data_confirm": "Import conversations and custom personas from this backup? Existing items with the same IDs will be updated.",
688 + "import_settings_confirm": "Replace current settings with the imported backup?",
689 + "export_conversations": "Export conversations",
690 + "import_conversations": "Import conversations",
691 + "export_personas": "Export personas",
692 + "import_personas": "Import personas",
693 + "export_settings": "Ayarları dışa aktar",
694 + "import_settings": "Ayarları içe aktar",
695 + "export_all_zip": "Tümünü dışa aktar (ZIP)",
696 + "import_all_zip": "Tümünü içe aktar (ZIP)",
697 + "duplicate_chat": "Sohbeti çoğalt",
698 + "duplicate_chat_success": "Sohbet çoğaltıldı",
699 + "move_to_folder": "Klasöre taşı",
700 + "remove_from_folder": "Kaldır from folder",
701 + "create_folder": "Klasör oluştur",
702 + "new_folder": "Yeni klasör",
703 + "folder_name_hint": "Örn. İş, Kişisel, Araştırma",
704 + "all_chats": "Tümü",
705 + "unfiled_chats": "Kategorisiz",
706 + "create": "Oluştur",
707 + "server_path_prefix_label": "API yol öneki",
708 + "server_path_prefix_hint": "/gizli-jetonunuz",
709 + "search_message_contents": "Mesaj içeriklerini ara",
710 + "message_search_results": "Mesaj eşleşmeleri",
711 + "saved_messages_title": "Kaydedilen Mesajlar",
712 + "nav_saved_messages": "Kaydedilenler",
713 + "saved_messages_empty": "Henüz kaydedilen mesaj yok. Seçenekler menüsünden bir mesajı yer imlerine ekleyin.",
714 + "save_message": "Mesajı kaydet",
715 + "message_saved": "Mesaj kaydedildi",
716 + "token_count": "{count} token",
717 + "estimated_token_count": "~{count} token (tahmini)",
718 + "test_tts_section_title": "Sesi test et",
719 + "test_tts_hint": "Mevcut TTS motorunu duymak için metin girin…",
720 + "test_speak_button": "Konuş",
721 + "scroll_to_bottom": "En aşağı kaydır",
722 + "generate_ai_response": "Yapay zeka yanıtı üret",
723 + "no_response": "Yanıt yok",
724 + "export": "Dışa Aktar",
725 + "import": "İçe Aktar",
726 + "conversations_label": "Sohbetler",
727 + "personas_label": "Personalar",
728 + "settings_label": "Ayarlar",
729 + "export_conversation": "Sohbeti Dışa Aktar",
730 + "tts_process_markdown": "Konuşma için markdown'ı işle",
731 + "tts_process_markdown_desc": "Sesli okunmadan önce **koyu** gibi biçimlendirmeleri temizle",
732 + "tts_skip_seconds": "Atlama aralığı",
733 + "tts_skip_seconds_desc": "Oynatma sırasında ileri ve geri sarma adımı boyutu",
734 + "tts_skip_seconds_value": "{seconds}sn",
735 + "preview_system_prompts": "Sistem yönergelerini önizle",
736 + "welcome_message_1": "Bugün size nasıl yardımcı olabilirim?",
737 + "welcome_message_2": "İstediğinizi sorun — hazır olduğunuzda buradayım.",
738 + "welcome_message_3": "Verileriniz yerel olarak işlenir ve cihazınızdan asla ayrılmaz.",
739 + "welcome_message_4": "Fikre mi ihtiyacınız var? Hızlı yönergelerden birini deneyin.",
740 + "temporary_chat": "Geçici sohbet",
741 + "temporary_chat_desc": "Sohbetler geçmişe kaydedilmez.",
742 + "temporary_chat_banner": "Geçici sohbet — geçmişe kaydedilmez",
743 + "temporary_chat_save_warning_title": "Mesaj geçici sohbete kaydedilsin mi?",
744 + "temporary_chat_save_warning_body": "Bu sohbet geçicidir ve geçmişten gizlenir. Kaydedilen mesaj yine de Kaydedilen Mesajlar bölümünde görünecektir.",
745 + "save_to_history": "Geçmişe kaydet",
746 + "share_conversation": "Sohbeti paylaş",
747 + "download_tts_audio": "Sesi indir",
748 + "tts_download_unavailable": "İndirme yalnızca Piper ve Kitten TTS için mevcuttur",
749 + "tts_download_no_audio": "Henüz indirilecek ses yok",
750 + "tts_download_success": "Ses kaydedildi",
751 + "return_to_chat": "Sohbete dön",
752 + "return_to_temp_chat": "Geçici sohbete dön",
753 + "insert_saved_message": "Kaydedilen mesajı ekle",
754 + "insert_saved_message_desc": "Girdinize eklemek için kaydedilmiş bir mesaj seçin",
755 + "model_info": "Model bilgisi",
756 + "model_name": "Model adı",
757 + "model_identifier": "Kimlik (Identifier)",
758 + "not_available": "Mevcut değil",
759 + "save_message_folders": "Mesajı kaydet",
760 + "remove_from_saved": "Kaldır from saved",
761 + "message_already_saved": "Kaydedildi",
762 + "stream_ttft": "İlk tokene kadar geçen süre (TTFT)",
763 + "stream_tokens_per_sec": "Saniyedeki token",
764 + "stream_stop_reason": "Durdurma nedeni",
765 + "stream_input_tokens": "Girdi token'ları",
766 + "stream_output_tokens": "Çıktı token'ları",
767 + "stream_generation_time": "Üretim süresi",
768 + "attach_image": "Fotoğraflar",
769 + "attach_text_document": "Belgeler",
770 + "attach_shortcut_images": "Fotoğraflar",
771 + "attach_shortcut_documents": "Dosyalar",
772 + "attach_shortcut_saved": "Kaydedilenler",
773 + "add_attachment": "Ek ekle",
774 + "add_to_chat": "Sohbete ekle",
775 + "choose_what_to_attach": "Ne eklemek istersiniz?",
776 + "choose_attachment_subtitle": "Mesajınıza eklemek için bir kaynak seçin",
777 + "photo_permission_denied": "Görsel eklemek için fotoğraf erişim izni gereklidir",
778 + "select_model_prompt": "Model seçin",
779 + "characters_label": "Karakter",
780 + "exit_temporary_chat_title": "Geçici sohbetten çıkılsın mı?",
781 + "exit_temporary_chat_body": "Bu işlem mevcut geçici sohbeti atacak ve yeni sohbet ekranına dönecektir.",
782 + "saved_message_temp_snap_unavailable": "Bu mesaj geçici bir sohbetten kaydedildi ve orijinal konuşmasında açılamaz.",
783 + "filter_title": "Filtrele",
784 + "filter_pinned": "Sabitlenenler",
785 + "filter_archived": "Arşivlenenler",
786 + "filter_temp_chats": "Geçici sohbetler",
787 + "filter_user_messages": "Kullanıcı mesajları",
788 + "filter_assistant_messages": "Asistan mesajları",
789 + "archive_chat": "Arşivle",
790 + "unarchive_chat": "Arşivden Çıkar",
791 + "conversation_message_count": "{count, plural, one{1 mesaj} other{{count} mesaj}}",
792 + "conversation_character_count": "{count} krk",
793 + "generate_title_with_ai": "Yapay Zeka ile oluştur",
794 + "generating_title": "Oluşturuluyor...",
795 + "generate_title_failed": "Başlık oluşturulamadı",
796 + "lm_studio_model_browser_title": "Modelleri gözden geçir",
797 + "lm_studio_model_search_hint": "Modelleri ad veya yazara göre ara…",
798 + "lm_studio_staff_picks": "Öne çıkanlar",
799 + "lm_studio_community_models": "Topluluk modelleri",
800 + "lm_studio_no_models": "Model bulunamadı",
801 + "lm_studio_models_count": "{count} model",
802 + "lm_studio_browse_models": "Gözden geçir ve indir",
803 + "lm_studio_model_search": "LMS Model Arama",
804 + "lm_studio_downloads_title": "İndirmeler",
805 + "lm_studio_choose_quant": "Bir indirme seçeneği belirleyin",
806 + "lm_studio_use_default_quant": "Varsayılanı kullan",
807 + "lm_studio_recommended": "Önerilen",
808 + "lm_studio_clear_downloads": "Tamamlananları temizle",
809 + "lm_studio_no_downloads": "Henüz indirme yok",
810 + "lm_studio_downloads_disclaimer": "İndirmeler LM Studio ana bilgisayarında çalışır. Duraklatma, durdurma ve model silme işlemleri bu uygulama üzerinden değil, o bilgisayarda yapılmalıdır.",
811 + "lm_studio_staff_pick": "Öne çıkan",
812 + "lm_studio_params": "PARAMETRE",
813 + "lm_studio_arch": "MİMARİ",
814 + "lm_studio_domain": "ALAN",
815 + "lm_studio_format": "FORMAT",
816 + "lm_studio_vision": "Görüş",
817 + "lm_studio_tool_use": "Araç kullanımı",
818 + "lm_studio_reasoning": "Mantık yürütme",
819 + "lm_studio_download_options": "İndirme seçenekleri",
820 + "lm_studio_download": "İndir",
821 + "lm_studio_download_size": "{size} İndir",
822 + "lm_studio_downloading_percent": "İndiriliyor %{percent}",
823 + "lm_studio_readme_unavailable": "Bu model için README mevcut değil.",
824 + "lm_studio_full_gpu_offload": "Tam GPU yük devretmesi mümkün",
825 + "lm_studio_partial_gpu_offload": "Kısmi GPU yük devretmesi mümkün",
826 + "lm_studio_likely_too_large": "Muhtemelen çok büyük",
827 + "lm_studio_available_ram_gb": "Kullanılabilir RAM (GB, isteğe bağlı)",
828 + "lm_studio_available_vram_gb": "Kullanılabilir VRAM (GB, isteğe bağlı)",
829 + "lm_studio_memory_settings_title": "Öneriler için bellek",
830 + "lm_studio_memory_settings_desc": "Model tarayıcısında modellerin makinenize sığıp sığmadığını tahmin etmek için kullanılır.",
831 + "think_button_label": "Düşün",
832 + "thinking_mode_title": "Düşünme modu",
833 + "reasoning_effort_low": "Düşük",
834 + "reasoning_effort_medium": "Orta",
835 + "reasoning_effort_high": "Yüksek",
836 + "could_not_read_file": "Dosya okunamadı",
837 + "server_offline": "Sunucu Çevrimdışı",
838 + "could_not_establish_connection": "Sunucuya bağlantı kurulamadı. Lütfen sunucunuzun çalışıp çalışmadığını ve ana bilgisayar/port ayarlarının doğru olup olmadığını kontrol edin.",
839 + "retry_connection": "Bağlantıyı Yeniden Dene",
840 + "tokens_label": "Token'lar",
841 + "enter_context_length": "Bağlam uzunluğunu girin...",
842 + "openrouter_disclosure": "Bu sağlayıcıya bağlanarak sohbet mesajlarınız ve girdileriniz onların sunucularına gönderilir. LocalMind sohbetlerinizi izlemez veya saklamaz.",
843 + "welcome_message_cloud": "Mesajlarınız bağlı olan sağlayıcınıza gönderilir.",
844 + "privacy_policy": "Gizlilik Politikası",
845 + "cloud_sync": "S3 Bulut Eşitleme",
846 + "cloud_sync_description": "Kendi S3 uyumlu sunucunuza uçtan uca şifreli eşitleme",
847 + "cloud_sync_endpoint": "Uç Nokta URL'si (Endpoint)",
848 + "cloud_sync_bucket": "Kova (Bucket)",
849 + "cloud_sync_region": "Bölge (Region)",
850 + "cloud_sync_prefix": "Önek (Prefix)",
851 + "cloud_sync_access_key": "Erişim Anahtarı Kimliği",
852 + "cloud_sync_secret_key": "Gizli Erişim Anahtarı",
853 + "cloud_sync_session_token": "Oturum Jetonu (İsteğe Bağlı)",
854 + "cloud_sync_passphrase": "Şifreleme Parolası",
855 + "cloud_sync_confirm_passphrase": "Parolayı Onayla",
856 + "cloud_sync_path_style": "Yol stili adresleme kullan",
857 + "cloud_sync_allow_http": "Güvensiz HTTP'ye izin ver",
858 + "cloud_sync_http_warning": "HTTP istek meta verilerini ve kimlik bilgilerini ağa açık hale getirir. Yalnızca güvenilir bir yerel S3 sunucusu için kullanın.",
859 + "cloud_sync_test": "Bağlantıyı test et",
860 + "cloud_sync_enable": "Şifreli eşitlemeyi etkinleştir",
861 + "cloud_sync_now": "Şimdi eşitle",
862 + "cloud_sync_disconnect": "Bu cihazın bağlantısını kes",
863 + "cloud_sync_last_synced": "Son eşitleme",
864 + "cloud_sync_never": "Hiçbir zaman",
865 + "cloud_sync_conflicts": "Çakışmalar korundu",
866 + "cloud_sync_passphrase_mismatch": "Parolalar eşleşmiyor",
867 + "crash_report_title": "Bir şeyler yanlış gitti",
868 + "crash_report_stack_trace": "Yığın izleme (Stack trace)",
869 + "crash_report_tap_to_expand": "Genişletmek için dokunun",
870 + "crash_report_button": "Bu çökmeyi bildir",
871 + "crash_try_again": "Tekrar dene",
872 + "crash_report_empty_stack": "<boş>",
873 + "crash_report_disclaimer": "Bildirme işlemi, teşhis bilgileri önceden doldurulmuş olarak GitHub'ı açar. Kontrol sizdedir — hiçbir şey otomatik olarak gönderilmez. Lütfen göndermeden önce hassas içerikleri gözden geçirin ve kaldırın.",
874 + "crash_report_copied": "Panoya kopyalandı",
875 + "report_a_problem": "Sorun bildir",
876 + "rename_folder": "Klasörü yeniden adlandır",
877 + "delete_folder": "Sil folder",
878 + "delete_folder_title": "Sil folder?",
879 + "delete_folder_body": "Silmek istediğinizden emin misiniz \"{name}\"? Sohbetler or saved messages inside will be moved back to \"Unfiled\". Bu işlem geri alınamaz.",
880 + "folder_name_required": "Lütfen bir klasör adı girin",
881 + "model_required_toast": "Önce bir model seçmeniz gerekiyor"
882 +}
\ No newline at end of file
test/core/utils/locale_utils_test.dart
+12
@@ -12,10 +12,22 @@ void main() {
12 test('parses locales with country codes', () {
13 expect(parseLocaleCode('zh_TW'), const Locale('zh', 'TW'));
14 expect(parseLocaleCode('zh-TW'), const Locale('zh', 'TW'));
15 + expect(parseLocaleCode('tr_TR'), const Locale('tr', 'TR'));
16 });
17 });
18
19 group('findSupportedLocale', () {
20 + test('matches Turkish locale exactly', () {
21 + expect(
22 + findSupportedLocale('tr', AppLocalizations.supportedLocales),
23 + const Locale('tr'),
24 + );
25 + expect(
26 + findSupportedLocale('tr_TR', AppLocalizations.supportedLocales),
27 + const Locale('tr'),
28 + );
29 + });
30 +
31 test('matches Traditional Chinese exactly', () {
32 expect(
33 findSupportedLocale('zh_TW', AppLocalizations.supportedLocales),
test/features/onboarding/onboarding_language_screen_test.dart new
+18
@@ -0,0 +1,18 @@
1 +import 'package:flutter/material.dart';
2 +import 'package:flutter_test/flutter_test.dart';
3 +import 'package:localmind/l10n/app_localizations.dart';
4 +
5 +void main() {
6 + test('Turkish locale is supported and loads translations', () {
7 + expect(
8 + AppLocalizations.supportedLocales.contains(const Locale('tr')),
9 + isTrue,
10 + );
11 +
12 + final l10n = lookupAppLocalizations(const Locale('tr'));
13 + expect(l10n.app_name, 'LocalMind');
14 + expect(l10n.cancel, 'İptal');
15 + expect(l10n.settings_language, 'Dil');
16 + expect(l10n.onboarding_choose_language, 'LocalMind dillerini keşfedin');
17 + });
18 +}