@brftech/filex-core 0.39.1 → 0.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/README.md +32 -25
  2. package/dist/ArchiveViewer-BNqukFg8.js +124 -0
  3. package/dist/ArchiveViewer-BNqukFg8.js.map +1 -0
  4. package/dist/CsvViewer-ii_-MgmG.js +141 -0
  5. package/dist/CsvViewer-ii_-MgmG.js.map +1 -0
  6. package/dist/{DrawioViewer-BNALOB04.js → DrawioViewer-B2tuu4rX.js} +48 -42
  7. package/dist/DrawioViewer-B2tuu4rX.js.map +1 -0
  8. package/dist/EpubViewer-p4B8iiWb.js +163 -0
  9. package/dist/EpubViewer-p4B8iiWb.js.map +1 -0
  10. package/dist/IpynbViewer-D_qYRJhu.js +184 -0
  11. package/dist/IpynbViewer-D_qYRJhu.js.map +1 -0
  12. package/dist/MermaidViewer-3ZkfNM8v.js +137 -0
  13. package/dist/MermaidViewer-3ZkfNM8v.js.map +1 -0
  14. package/dist/PsdViewer-CuV-OPSd.js +122 -0
  15. package/dist/PsdViewer-CuV-OPSd.js.map +1 -0
  16. package/dist/TiffViewer-BLeoF4Be.js +142 -0
  17. package/dist/TiffViewer-BLeoF4Be.js.map +1 -0
  18. package/dist/Viewer3D-DHhhU76E.js +75 -0
  19. package/dist/Viewer3D-DHhhU76E.js.map +1 -0
  20. package/dist/filex-core.js +217 -20077
  21. package/dist/filex-core.js.map +1 -1
  22. package/dist/filex-core.umd.cjs +61 -62
  23. package/dist/filex-core.umd.cjs.map +1 -1
  24. package/dist/index-BraG7Cz4.js +26664 -0
  25. package/dist/index-BraG7Cz4.js.map +1 -0
  26. package/dist/index.d.ts +4276 -851
  27. package/dist/style.css +1 -1
  28. package/package.json +1 -1
  29. package/src/FileExplorer.vue +2170 -492
  30. package/src/components/AdvancedSearch.vue +870 -0
  31. package/src/components/Breadcrumb.vue +191 -19
  32. package/src/components/CommandPalette.vue +66 -22
  33. package/src/components/ConnectionsPanel.vue +6 -2
  34. package/src/components/ContextMenu.vue +57 -2
  35. package/src/components/EncryptedFolderModal.vue +31 -25
  36. package/src/components/FilePane.vue +939 -0
  37. package/src/components/FilterBar.vue +568 -72
  38. package/src/components/GalleryView.vue +162 -30
  39. package/src/components/GridView.vue +322 -58
  40. package/src/components/HomeView.vue +331 -0
  41. package/src/components/InspectorPanel.vue +296 -53
  42. package/src/components/ListView.vue +1158 -167
  43. package/src/components/NFSExportsPanel.vue +7 -4
  44. package/src/components/OnboardingTour.vue +156 -33
  45. package/src/components/QuickLook.vue +34 -5
  46. package/src/components/RecentlyOpened.vue +17 -2
  47. package/src/components/S3KeysPanel.vue +7 -4
  48. package/src/components/SSHKeysPanel.vue +7 -4
  49. package/src/components/ShortcutSettings.vue +43 -2
  50. package/src/components/ShortcutsHelp.vue +4 -1
  51. package/src/components/SideNav.vue +206 -140
  52. package/src/components/StorageFields.vue +19 -1
  53. package/src/components/TabBar.vue +87 -1
  54. package/src/components/TagPicker.vue +77 -6
  55. package/src/components/ThemeGallery.vue +13 -198
  56. package/src/components/ThemePalette.vue +244 -0
  57. package/src/components/TimeZoneDialog.vue +127 -0
  58. package/src/components/TimeZonePicker.vue +696 -0
  59. package/src/components/TokensPanel.vue +16 -4
  60. package/src/components/Toolbar.vue +965 -469
  61. package/src/components/ViewSwitcher.vue +9 -4
  62. package/src/composables/useConnections.ts +35 -4
  63. package/src/composables/useExplorerTimeZone.ts +85 -0
  64. package/src/composables/useFileApi.ts +53 -4
  65. package/src/composables/useKeyboardShortcuts.ts +122 -0
  66. package/src/composables/useLocale.ts +365 -25
  67. package/src/index.ts +182 -3
  68. package/src/lib/actionIcons.ts +330 -0
  69. package/src/lib/advSearch.ts +162 -0
  70. package/src/lib/dateGroups.ts +197 -0
  71. package/src/lib/destinationTree.ts +235 -0
  72. package/src/lib/downloadSelection.ts +154 -0
  73. package/src/lib/fileFilters.ts +319 -12
  74. package/src/lib/fileIcons.ts +299 -5
  75. package/src/lib/filePreview.ts +605 -0
  76. package/src/lib/listing.ts +72 -0
  77. package/src/lib/shareTtl.ts +11 -1
  78. package/src/lib/sortOrder.ts +459 -0
  79. package/src/lib/themes.ts +152 -23
  80. package/src/lib/timezone.ts +456 -0
  81. package/src/lib/uiProfile.ts +82 -0
  82. package/src/lib/viewPrefs.ts +1036 -0
  83. package/src/locales/en.ts +432 -25
  84. package/src/locales/tr.ts +425 -25
  85. package/src/modals/ConvertModal.vue +23 -3
  86. package/src/modals/DestinationPickerModal.vue +341 -0
  87. package/src/modals/Modal.vue +18 -4
  88. package/src/modals/NewDocumentModal.vue +525 -0
  89. package/src/modals/NewFolderModal.vue +15 -9
  90. package/src/modals/PermissionsModal.vue +543 -473
  91. package/src/modals/PreviewModal.vue +516 -156
  92. package/src/styles/base.css +5435 -8
  93. package/src/styles/variables.css +140 -60
  94. package/src/types/Connections.ts +9 -0
  95. package/src/types/ExplorerConfig.ts +144 -39
  96. package/src/types/FileNode.ts +28 -0
  97. package/src/viewers/ArchiveViewer.vue +46 -8
  98. package/src/viewers/CsvViewer.vue +19 -2
  99. package/src/viewers/DrawioViewer.vue +12 -1
  100. package/src/viewers/EpubViewer.vue +50 -6
  101. package/src/viewers/IpynbViewer.vue +19 -2
  102. package/src/viewers/MermaidViewer.vue +20 -3
  103. package/src/viewers/PdfViewer.vue +24 -4
  104. package/src/viewers/PsdViewer.vue +28 -4
  105. package/src/viewers/TiffViewer.vue +19 -2
  106. package/src/viewers/Viewer3D.vue +36 -2
  107. package/dist/ArchiveViewer-Cdfv9LFC.js +0 -99
  108. package/dist/ArchiveViewer-Cdfv9LFC.js.map +0 -1
  109. package/dist/CsvViewer-CqWeV8VO.js +0 -131
  110. package/dist/CsvViewer-CqWeV8VO.js.map +0 -1
  111. package/dist/DrawioViewer-BNALOB04.js.map +0 -1
  112. package/dist/EpubViewer-BPmlImG7.js +0 -145
  113. package/dist/EpubViewer-BPmlImG7.js.map +0 -1
  114. package/dist/IpynbViewer-CDlQmuCV.js +0 -175
  115. package/dist/IpynbViewer-CDlQmuCV.js.map +0 -1
  116. package/dist/MermaidViewer-sfZWdR-d.js +0 -127
  117. package/dist/MermaidViewer-sfZWdR-d.js.map +0 -1
  118. package/dist/PsdViewer-DwuySZsb.js +0 -112
  119. package/dist/PsdViewer-DwuySZsb.js.map +0 -1
  120. package/dist/TiffViewer-BDQ3d3CQ.js +0 -132
  121. package/dist/TiffViewer-BDQ3d3CQ.js.map +0 -1
  122. package/dist/Viewer3D-CJJJgkuv.js +0 -60
  123. package/dist/Viewer3D-CJJJgkuv.js.map +0 -1
  124. package/src/components/SecondaryPane.vue +0 -447
  125. package/src/modals/ShareModal.vue +0 -139
package/src/locales/tr.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /** Turkish UI strings. */
2
2
  export const tr: Record<string, string> = {
3
- 'toolbar.new_folder': 'Yeni Klasör',
3
+ 'toolbar.new_folder': 'Yeni klasör',
4
4
  'toolbar.upload': 'Yükle',
5
5
  'toolbar.search': 'Ara',
6
6
  'toolbar.search.placeholder': 'Ada ya da tag: ile ara…',
@@ -13,7 +13,7 @@ export const tr: Record<string, string> = {
13
13
  'ctx.preview': 'Önizle',
14
14
  'ctx.download': 'İndir',
15
15
  'ctx.convert': 'Dönüştür',
16
- 'ctx.rename': 'Yeniden Adlandır',
16
+ 'ctx.rename': 'Yeniden adlandır',
17
17
  'ctx.delete': 'Sil',
18
18
  'ctx.delete_perm': 'Kalıcı Olarak Sil',
19
19
  'ctx.restore': 'Geri Getir',
@@ -39,18 +39,19 @@ export const tr: Record<string, string> = {
39
39
  'ctx.paste': 'Yapıştır',
40
40
  'ctx.info': 'Bilgi',
41
41
  'ctx.duplicate': 'Kopyasını Oluştur',
42
- 'ctx.new_file': 'Yeni Dosya',
42
+ 'ctx.new_file': 'Yeni dosya',
43
43
 
44
44
  'modal.delete.title': 'Silinsin mi?',
45
45
  'modal.delete.message': '{count} öğe çöpe atılacak.',
46
+ 'modal.delete.message_one': '{count} öğe çöpe atılacak.',
46
47
  'modal.delete.confirm': 'Çöpe At',
47
48
  'modal.delete.cancel': 'Vazgeç',
48
49
 
49
- 'modal.rename.title': 'Yeniden Adlandır',
50
+ 'modal.rename.title': 'Yeniden adlandır',
50
51
  'modal.rename.save': 'Kaydet',
51
52
  'modal.rename.cancel': 'Vazgeç',
52
53
 
53
- 'modal.newfolder.title': 'Yeni Klasör',
54
+ 'modal.newfolder.title': 'Yeni klasör',
54
55
  'modal.newfolder.placeholder': 'Klasör adı',
55
56
  'modal.newfolder.create': 'Oluştur',
56
57
  'modal.newfolder.cancel': 'Vazgeç',
@@ -96,10 +97,11 @@ export const tr: Record<string, string> = {
96
97
  'unit.mb': 'MB',
97
98
  'unit.gb': 'GB',
98
99
  'unit.tb': 'TB',
100
+ 'unit.pb': 'PB',
99
101
 
100
102
  'breadcrumb.root': 'Kök',
101
- 'breadcrumb.copy_path': 'Yolu Kopyala',
102
- 'breadcrumb.go_to_path': 'Yola Git',
103
+ 'breadcrumb.copy_path': 'Yolu kopyala',
104
+ 'breadcrumb.go_to_path': 'Yola git',
103
105
  'breadcrumb.path_placeholder': 'fileman/foo/bar',
104
106
 
105
107
  'ops.copy': 'Kopyalanıyor',
@@ -110,9 +112,10 @@ export const tr: Record<string, string> = {
110
112
  'ops.error': 'hata',
111
113
 
112
114
  'node.trash': 'Çöp Kutusu',
115
+ 'node.folder': 'Klasör',
113
116
 
114
117
  // ——— Zengin önizleyici chrome ———
115
- 'viewer.open_in_new_tab': 'Yeni Sekmede ',
118
+ 'viewer.open_in_new_tab': 'Yeni sekmede ',
116
119
  'viewer.loading': 'Yükleniyor…',
117
120
  'viewer.failed_to_load': 'Dosya yüklenemedi',
118
121
  'viewer.peer_not_installed': 'Bu dosya tipi için opsiyonel kütüphane kurulu değil. Peer dependency yükle veya İndir düğmesini kullan.',
@@ -150,6 +153,7 @@ export const tr: Record<string, string> = {
150
153
  'viewer.epub_next': 'Sonraki',
151
154
  'viewer.drawio.disabled': 'diagrams.net editörü bu filex kurulumunda yapılandırılmamış — yönetici FILEX_DRAWIO_URL\'yi ayarlamalı.',
152
155
  'viewer.archive.entries': '{n} dosya',
156
+ 'viewer.archive.entries_one': '{n} dosya',
153
157
  'viewer.archive.empty': 'Arşiv boş.',
154
158
  'viewer.archive.error': 'Arşiv okunamadı.',
155
159
  'viewer.name': 'Ad',
@@ -218,6 +222,9 @@ export const tr: Record<string, string> = {
218
222
  'toast.copy_ready': 'Kopyala → Yapıştır hazır',
219
223
  'toast.same_folder_cut': 'Aynı klasöre kesilemez',
220
224
  'toast.restored': '{n} öğe geri getirildi',
225
+ 'toast.restored_one': '{n} öğe geri getirildi',
226
+ 'toast.restore_taken': '{n} öğe geri getirilmedi: aynı adla bir şey zaten var. Oradakinin adını değiştirip yeniden deneyin.',
227
+ 'toast.restore_taken_one': '“{name}” geri getirilmedi: aynı adla bir şey zaten var. Oradakinin adını değiştirip yeniden deneyin.',
221
228
  'toast.delete_queued': 'Silme kuyruğa alındı',
222
229
  'toast.trash_retention': 'Çöpteki öğeler saklama süresi sonunda otomatik silinir. Kalıcı silme yönetici panelinden yapılır.',
223
230
  'dropzone.hint': 'Dosyaları buraya bırak',
@@ -226,7 +233,9 @@ export const tr: Record<string, string> = {
226
233
  'viewer.pdf_inline_failed': 'Tarayıcı PDF\'i inline açamadı.',
227
234
  'viewer.too_large': 'Dosya çok büyük (>1 MB).',
228
235
  'viewer.csv_rows': '{n} satır',
236
+ 'viewer.csv_rows_one': '{n} satır',
229
237
  'presence.others': '{n} kişi',
238
+ 'presence.others_one': '{n} kişi',
230
239
  'conn.offline': 'Canlı bağlantı yok — değişiklikler gecikebilir',
231
240
  'conn.tooltip': 'Sunucuyla canlı bağlantı kurulamadı; liste belirli aralıklarla otomatik yenilenir. Bağlantı geri gelince bu uyarı kaybolur.',
232
241
 
@@ -253,8 +262,25 @@ export const tr: Record<string, string> = {
253
262
  'star.failed': 'Yıldız değiştirilemedi',
254
263
  'shortcuts.inspector': 'Ayrıntılar panelini aç/kapat',
255
264
  'inspector.title': 'Ayrıntılar',
265
+ 'inspector.copy_name': 'Adı kopyala',
266
+ 'inspector.items': '{n} öğe',
267
+ 'inspector.items_one': '{n} öğe',
268
+ 'inspector.type': 'Tür',
269
+ 'inspector.select_hint': 'Ayrıntılarını görmek için bir öğe seçin.',
270
+ /* pane:p1 — panel SON seçilen şeyi tutar (Burak'ın kararı, 2026-09-13);
271
+ dolayısıyla bölünmüş pencerenin bakılmayan yarısındaki bir öğeyi
272
+ anlatıyor olabilir. Bu satır hangisi olduğunu ve nerede durduğunu söyler. */
273
+ 'inspector.held': 'Son seçilen — {where} içinde',
256
274
  'inspector.close': 'Kapat',
257
275
  'inspector.section.general': 'Genel',
276
+ 'inspector.section.tags': 'Etiketler',
277
+ /* etiket:t1 — TagPicker'ın kendi çerçevesi. 2026-09-13'e kadar bu üçü
278
+ katalogdan bağımsız olarak İngilizce basılıyordu; `tags.open` ise çipin
279
+ yeni "bu etiketi taşıyan her şeyi göster" kapısı. */
280
+ 'tags.open': 'Etiketi aç: {tag}',
281
+ 'tags.add': '+ Etiket ekle',
282
+ 'tags.name': 'Etiket adı',
283
+ 'tags.remove': 'Etiketi kaldır',
258
284
  'inspector.section.versions': 'Sürümler',
259
285
  'inspector.section.permissions': 'İzinler',
260
286
  'inspector.section.shares': 'Paylaşımlar',
@@ -263,11 +289,14 @@ export const tr: Record<string, string> = {
263
289
  'inspector.modified': 'Değiştirilme',
264
290
  'inspector.mime': 'MIME türü',
265
291
  'inspector.etag': 'ETag',
292
+ 'inspector.nodeId': 'Düğüm kimliği',
266
293
  'inspector.copy': 'Kopyala',
267
294
  'inspector.copied': 'Kopyalandı',
268
295
  'inspector.error': 'Yüklenemedi',
269
296
  'inspector.items_summary': '{n} öğe, toplam {size}',
297
+ 'inspector.items_summary_one': '{n} öğe, toplam {size}',
270
298
  'inspector.folder_items': '{n} öğe',
299
+ 'inspector.folder_items_one': '{n} öğe',
271
300
  'inspector.versions.empty': 'Sürüm geçmişi yok',
272
301
  'inspector.versions.v': 'Sürüm {n}',
273
302
  'inspector.versions.restore': 'Geri yükle',
@@ -306,6 +335,18 @@ export const tr: Record<string, string> = {
306
335
  'theme.name.contrast': 'Yüksek Kontrast',
307
336
  'theme.name.gray': 'Yumuşak Gri',
308
337
  'theme.name.terminal': 'Terminal Yeşili',
338
+ /* === zaman:z3 — saat dilimi seçici (gömme penceresi + web ayarları) === */
339
+ 'tz.menu': 'Saat dilimi',
340
+ 'tz.title': 'Saat dilimi',
341
+ 'tz.label': 'Tarihleri şu saatle göster',
342
+ 'tz.search': 'Şehir, ülke ya da saat farkı arayın — “İstanbul” veya “GMT+3” deneyin',
343
+ 'tz.default.device': 'Bu cihazın saat dilimini kullan ({zone})',
344
+ 'tz.default.account': 'Hesabın saat dilimini kullan ({zone})',
345
+ 'tz.default.host': 'Bu sitenin varsayılanını kullan ({zone})',
346
+ 'tz.no_match': '“{query}” ile eşleşen saat dilimi yok. Bir şehir, bir ülke ya da GMT+3 gibi bir fark deneyin.',
347
+ 'tz.more': '{n} kayıt daha var — listeyi daraltmak için yazmayı sürdürün.',
348
+ 'tz.hint': 'Yalnızca bu tarayıcıda saklanır. Her tarih tek bir an olarak saklanır ve burada seçtiğiniz saatle gösterilir.',
349
+ 'tz.now': '{zone} bölgesinde şu an: {time}',
309
350
  /* === wiring:c2 — özelleştirilebilir kısayollar + hızlı bakış === */
310
351
  'shortcuts.quicklook': 'Hızlı bakış',
311
352
  'shortcuts.customize': 'Özelleştir',
@@ -330,6 +371,7 @@ export const tr: Record<string, string> = {
330
371
  /* === wiring:c3 — işlem merkezi === */
331
372
  'opc.title': 'İşlemler',
332
373
  'opc.aria_badge': '{n} işlem — işlem merkezini aç/kapat',
374
+ 'opc.aria_badge_one': '{n} işlem — işlem merkezini aç/kapat',
333
375
  'opc.close': 'Kapat',
334
376
  'opc.active': 'Sürüyor',
335
377
  'opc.history': 'Geçmiş',
@@ -358,24 +400,34 @@ export const tr: Record<string, string> = {
358
400
  'tour.next': 'İleri',
359
401
  'tour.done': 'Bitti',
360
402
  'tour.progress': '{n} / {m}',
361
- 'tour.step.nav.title': 'Depo ve klasörler',
403
+ 'tour.step.nav.title': 'Depolar ve görünümler',
362
404
  'tour.step.nav.desc':
363
- 'Bulunduğun konum burada görünür. Kırıntı çubuğundaki adımlara tıklayarak üst klasörlere ve depo köküne dönebilirsin.',
364
- 'tour.step.upload.title': 'Dosya yükle',
365
- 'tour.step.upload.desc':
366
- 'Bu düğmeyle dosya seçebilirsin; dosyaları doğrudan pencereye sürükleyip bırakmak da çalışır.',
405
+ 'Ana sayfa, Benimle paylaşılanlar, Son kullanılanlar, Yıldızlılar ve Çöp Kutusu hep bu panelde durur; altında da depoların ve bağlantıların. Sol üst köşedeki düğme paneli ince bir şeride indirir ve geri açar.',
406
+ 'tour.step.nav.desc_closed':
407
+ 'Bu düğme gezinti panelini açar: Ana sayfa, Benimle paylaşılanlar, Son kullanılanlar, Yıldızlılar ve Çöp Kutusu; altında da depoların ve bağlantıların.',
408
+ 'tour.step.new.title': 'Yeni bir şey ekle',
409
+ 'tour.step.new.desc':
410
+ 'Yeni olan her şey buradan başlar: bu cihazdan dosya yükleyebilir, klasör oluşturabilir ya da birinden dosya isteyebilirsin. Dosyaları pencereye sürükleyip bırakmak da yükler.',
411
+ 'tour.step.new.desc_fab':
412
+ 'Bu düğme bu cihazdan dosya yükler. Dosyaları pencereye sürükleyip bırakmak da çalışır.',
367
413
  'tour.step.search.title': 'Arama',
368
414
  'tour.step.search.desc':
369
- 'Bu kutu deponun tamamında ada göre arar; ayraçları ve bir harflik yazım hatasını affeder, yani "fatura 2026" yazdığında fatura_2026.pdf gelir. tag:fatura yazarak etikete göre süzebilirsin. {palette} komut paleti ayrıca komut da çalıştırır.',
415
+ 'Bu alan deponun tamamında ada göre arar; ayraçları ve bir harflik yazım hatasını affeder, yani "fatura 2026" yazdığında fatura_2026.pdf gelir. tag:fatura yazarak etikete göre süzebilirsin. Yanındaki sürgü düğmesi gelişmiş aramayı, {palette} ise komut paletini açar; palet komut da çalıştırır.',
416
+ 'tour.step.crumb.title': 'Bulunduğun yer',
417
+ 'tour.step.crumb.desc':
418
+ 'Bu iz, ekrandaki klasörün adresidir. Adımlardan birine tıklayarak üste çıkabilir, sonuncusunun yanındaki oktan içindeki klasörleri görebilirsin.',
419
+ 'tour.step.filters.title': 'Listeyi daralt',
420
+ 'tour.step.filters.desc':
421
+ 'Tür, Kişiler, Değiştirilme ve Boyut bulunduğun klasörü süzer; yanındaki kutu yazdıkça adlara göre eşleşir, satırın sonundaki denetim ise sıralar.',
370
422
  'tour.step.view.title': 'Görünümü değiştir',
371
423
  'tour.step.view.desc':
372
- 'Liste ve ızgara görünümü arasında geçiş yapabilirsin; seçimin hatırlanır.',
373
- 'tour.step.share.title': 'Paylaşım',
374
- 'tour.step.share.desc':
375
- 'Bir dosyaya sağ tıklayıp "Paylaş / İzinler" ile bağlantı oluşturabilir, PIN ve son kullanma süresi ekleyebilirsin.',
424
+ 'Bu klasörün nasıl çizildiğini değiştirir; seçimin hatırlanır.',
425
+ 'tour.step.details.title': 'Ayrıntılar ve paylaşım',
426
+ 'tour.step.details.desc':
427
+ 'Bir dosyayı seçip bu paneli açtığında ayrıntılarını, hareketlerini ve paylaşım bağlantılarını görürsün. Tam menü için dosyaya sağ tıkla ya da satırının sonundaki düğmeyi kullan: oradaki "Paylaş / İzinler" ile PIN ve son kullanma süresi verilebilen bir bağlantı oluşturulur.',
376
428
  'tour.step.help.title': 'Kısayollar',
377
429
  'tour.step.help.desc':
378
- '{help} tuşu kısayol kartını, {palette} komut paletini açar. Bu turu menüdeki "Turu tekrar başlat" ile dilediğinde yeniden izleyebilirsin.',
430
+ '{help} tuşu kısayol kartını, {palette} komut paletini açar. Tema ve "Turu tekrar başlat" sağ üstteki "Diğer işlemler" menüsünde; hesabın ve çıkış ise yanındaki avatarın arkasında.',
379
431
  'error.hint': 'Bağlantı ya da sunucu kaynaklı geçici bir sorun olabilir. Yeniden deneyin.',
380
432
  'error.details': 'Teknik ayrıntılar',
381
433
  'col.star': 'Yıldız',
@@ -395,6 +447,24 @@ export const tr: Record<string, string> = {
395
447
  'shortcuts.tab_close': 'Sekmeyi kapat',
396
448
  'shortcuts.tab_next': 'Sonraki sekme',
397
449
  'shortcuts.tab_prev': 'Önceki sekme',
450
+ /* tus:t1 — menü fiilleri */
451
+ 'shortcuts.new_folder': 'Yeni klasör',
452
+ 'shortcuts.upload': 'Dosya yükle',
453
+ 'shortcuts.refresh': 'Listeyi yenile',
454
+ 'shortcuts.download': 'İndir',
455
+ 'shortcuts.preview': 'Önizle',
456
+ 'shortcuts.share': 'Paylaş / izinler',
457
+ 'shortcuts.tags': 'Etiketler',
458
+ 'shortcuts.convert': 'Dönüştür',
459
+ 'shortcuts.open_tab': 'Yeni sekmede aç',
460
+ 'shortcuts.copy_path': 'Yolu kopyala',
461
+ 'shortcuts.copy_id': 'Kimliği kopyala',
462
+ 'shortcuts.restore': 'Çöp kutusundan geri al',
463
+ 'shortcuts.settings.reserved':
464
+ 'tarayıcı tarafından sayfaya ulaşmadan yakalanıyor, burada hiçbir şey yapmaz. Başka bir tuş seçin.',
465
+ 'shortcuts.settings.reserved_badge': 'Yalnız masaüstü uygulamasında',
466
+ 'shortcuts.settings.reserved_title':
467
+ 'Bu kombinasyonu tarayıcının kendisi işliyor. Masaüstü uygulamasında ve kurulu PWA’da çalışır, tarayıcı sekmesinde çalışmaz.',
398
468
  'cmd.tab_new': 'Yeni sekme aç',
399
469
  'cmd.split_toggle': 'Görünümü böl / birleştir',
400
470
  'split.pane': 'İkincil panel',
@@ -403,6 +473,7 @@ export const tr: Record<string, string> = {
403
473
  'split.retry': 'Yeniden dene',
404
474
  'split.copy_queued': 'Kopyalama kuyruğa alındı',
405
475
  'split.move_queued': 'Taşıma kuyruğa alındı',
476
+ 'toast.move_kept_both': 'Taşıma kuyruğa alındı. Hedefte aynı adla bir öğe vardı, taşınan öğe onun yanına “-copy” ekiyle konacak. Bu taşıma geri alınamaz.',
406
477
  'split.cross_copy': 'Depolar farklı — kopyalama kuyruğa alındı',
407
478
  'dragout.downloading': 'Bırakılan klasöre indiriliyor…',
408
479
  'dragout.not_found': 'Bırakılan yer bulunamadı — dosya bir klasöre değil bir uygulamaya bırakıldıysa indirme yapılamaz',
@@ -424,8 +495,9 @@ export const tr: Record<string, string> = {
424
495
  /* wiring:e2 — uçtan uca şifreli klasörler */
425
496
  'e2e.create.title': 'Şifreli klasör oluştur',
426
497
  'e2e.create.option': 'Şifreli klasör oluştur…',
427
- 'e2e.create.pw_placeholder': 'Klasör parolası (en az 8 karakter)',
428
- 'e2e.create.pw2_placeholder': 'Parolayı tekrar girin',
498
+ 'e2e.create.pw_label': 'Klasör parolası',
499
+ 'e2e.create.pw_placeholder': 'En az 8 karakter',
500
+ 'e2e.create.pw2_label': 'Parolayı tekrar girin',
429
501
  'e2e.create.warn_title': 'GERİ DÖNÜŞÜ YOK',
430
502
  'e2e.create.warn_body':
431
503
  'Bu klasördeki dosyalar yalnız bu parolayla ya da klasör oluşturulurken bir kez gösterilen kurtarma anahtarıyla açılır. Parola sunucuda TUTULMAZ; kurtarma anahtarının da filex\'te kopyası kalmaz. İkisini de kaybederseniz içerik sonsuza dek gider.',
@@ -446,6 +518,10 @@ export const tr: Record<string, string> = {
446
518
  'e2e.locked.busy': 'Doğrulanıyor…',
447
519
  'e2e.unlock.wrong': 'Parola yanlış.',
448
520
  'e2e.unlock.marker_missing': 'Şifre dosyası (.filex-e2e.json) okunamadı.',
521
+ /* ikon:emoji — listedeki işaretin erişilebilir adı. Satır eskiden yalnız
522
+ bir 🔒 basıyordu; onun yerini alan asma kilit kutunun içinde
523
+ aria-hidden, dolayısıyla adı taşıyan yer bu. */
524
+ 'e2e.badge': 'Şifreli klasör',
449
525
  'e2e.strip.label': 'Şifreli klasör — kilit açık',
450
526
  'e2e.strip.lock': 'Kilitle',
451
527
  'e2e.locked_toast': 'Klasör kilitlendi',
@@ -557,6 +633,7 @@ export const tr: Record<string, string> = {
557
633
  'conn.denied.guideHint': 'Zaten görebildiğiniz depolara kendi bilgisayarınızdan bağlanmak için yönetici yetkisi gerekmez.',
558
634
  'conn.denied.guideCta': 'Nasıl bağlanacağımı göster',
559
635
  'conn.list.count': '{n} depo',
636
+ 'conn.list.count_one': '{n} depo',
560
637
  'conn.list.add': 'Depo ekle',
561
638
  'conn.list.empty': 'Henüz yapılandırılmış depo yok. Bir tane ekleyin, dosyalar dosya yöneticisinde görünsün.',
562
639
  'conn.list.edit': 'Düzenle',
@@ -576,6 +653,7 @@ export const tr: Record<string, string> = {
576
653
  'conn.form.test': 'Bağlantıyı sına',
577
654
  'conn.form.testing': 'Sınanıyor…',
578
655
  'conn.form.testOk': 'Bağlandı. Kökte {count} öğe var.',
656
+ 'conn.form.testOk_one': 'Bağlandı. Kökte {count} öğe var.',
579
657
  'conn.form.testFail': 'Bağlanılamadı: {error}',
580
658
  'conn.form.save': 'Kaydet',
581
659
  'conn.form.saving': 'Kaydediliyor…',
@@ -953,6 +1031,8 @@ export const tr: Record<string, string> = {
953
1031
  'sidenav.title': 'Gezinti',
954
1032
  'sidenav.views': 'Görünümler',
955
1033
  'sidenav.storages': 'Depolar',
1034
+ 'sidenav.home': 'Ana sayfa',
1035
+ 'sidenav.myfiles': 'Dosyalarım',
956
1036
  'sidenav.recent': 'Son kullanılanlar',
957
1037
  'sidenav.starred': 'Yıldızlılar',
958
1038
  'sidenav.shared': 'Benimle paylaşılanlar',
@@ -960,8 +1040,20 @@ export const tr: Record<string, string> = {
960
1040
  'sidenav.collapse': 'Gezintiyi daralt',
961
1041
  'sidenav.expand': 'Gezintiyi genişlet',
962
1042
  'sidenav.close': 'Gezintiyi kapat',
1043
+ // ⚠ aç/kapat çifti ÇEKMECENİN, daralt/genişlet çifti yerleşik PANELİN —
1044
+ // ikisi birbirinin yerine kullanılamaz; bkz. en.ts'teki not ve Toolbar.vue
1045
+ // içindeki `navToggleLabel`. 560px altında panel listenin üzerine gelen bir
1046
+ // çekmecedir: raya inmez, hiç ekranda değildir; "genişlet" olmayan bir
1047
+ // genişliği büyütmeyi vaat ederdi.
1048
+ 'sidenav.open': 'Gezintiyi aç',
963
1049
  'sidenav.storage.shared': 'Paylaşılan',
964
- 'toolbar.nav': 'Gezinti',
1050
+ // ⚠ `toolbar.nav` KALDIRILDI, yerine bir şey konmadı — bkz. en.ts'teki not.
1051
+ // Paneli daraltan tek denetimin etiketiydi; önce "Gezinti" (panelin adı,
1052
+ // düğmenin ne yaptığını söylemiyor), sonra "Gezintiyi göster/gizle" (sabit
1053
+ // geçici çözüm). Gerçek düzeltme yukarıdaki dört `sidenav.*` fiili:
1054
+ // etiket `navOpen`'a bağlı, daraltacaksa "daralt", genişletecekse
1055
+ // "genişlet" yazıyor.
1056
+ 'node.home': 'Ana sayfa',
965
1057
  'node.recent': 'Son kullanılanlar',
966
1058
  'node.starred': 'Yıldızlılar',
967
1059
  'node.shared': 'Benimle paylaşılanlar',
@@ -990,17 +1082,56 @@ export const tr: Record<string, string> = {
990
1082
  'conn.tokens.capNote': 'Tavan hesabın ve yetkilerin — sahip olduğundan fazlasını istemek reddedilir, verilmez.',
991
1083
  /* === /gezinti:g1 === */
992
1084
 
993
- /* === surucu:d1 — Sürücü kabuğu (uiProfile: 'drive', GitHub #14) ======== */
1085
+ /* === surucu:d1 — kabuk (GitHub #14); artık `uiProfile: 'drive'` ile
1086
+ gelen bir seçenek değil, her profilde çizilir === */
994
1087
  'drive.new': 'Yeni',
995
1088
  'drive.new.upload': 'Dosya yükle',
996
1089
  'drive.new.folder': 'Yeni klasör',
997
1090
  'drive.new.request': 'Dosya iste',
1091
+ 'drive.new.document': 'Yeni belge',
1092
+
1093
+ /* === belge:n1 — "Yeni belge": + Yeni altındaki seçici ==================
1094
+ Tür adları BURADA durmuyor. Her kutucuk sözcüklerini lib/fileIcons
1095
+ `typeLabelFor`den okur — listedeki Tür sütununun okuduğu tablonun
1096
+ aynısı — böylece ".docx" iki yerde de aynı adla anılır ve yeni bir tür
1097
+ için hiç dizge gerekmez. Aşağıda yalnız bu pencerenin kendi metni var. */
1098
+ 'newdoc.title': 'Yeni belge',
1099
+ 'newdoc.type.label': 'Belge türü',
1100
+ 'newdoc.group.document': 'Belgeler',
1101
+ 'newdoc.group.text': 'Metin ve kod',
1102
+ 'newdoc.group.diagram': 'Çizimler',
1103
+ 'newdoc.withheld.onlyoffice': 'Ofis belgeleri için bir belge sunucusu (OnlyOffice) gerekir; burada tanımlı değil.',
1104
+ 'newdoc.withheld.drawio': 'Çizimler için drawio servisi gerekir; burada tanımlı değil.',
1105
+ 'newdoc.empty.title': 'Kullanılabilir belge türü yok',
1106
+ 'newdoc.empty.body': 'Bu sunucu, bu uygulamanın oluşturabileceği bir tür sunmadı.',
1107
+ 'newdoc.empty.blocked': 'Bu sunucunun oluşturabildiği her tür, burada tanımlı olmayan bir düzenleyici servisine bağlı.',
1108
+ 'newdoc.name': 'Ad',
1109
+ 'newdoc.name.placeholder': 'Belge adı',
1110
+ 'newdoc.untitled': 'Adsız',
1111
+ 'newdoc.err.slash': 'Ad eğik çizgi içeremez.',
1112
+ 'newdoc.err.exists': '{name} burada zaten var. Başka bir ad seçin.',
1113
+ 'newdoc.location': 'Konum',
1114
+ 'newdoc.location.none': 'Bir klasör seçin',
1115
+ 'newdoc.location.change': 'Değiştir',
1116
+ 'newdoc.location.noaccess': 'Bu klasöre kaydedemezsiniz.',
1117
+ 'newdoc.create': 'Oluştur',
1118
+ 'newdoc.creating': 'Oluşturuluyor…',
1119
+ 'newdoc.cancel': 'Vazgeç',
998
1120
  'drive.search.placeholder': '{scope} içinde ara',
999
1121
  'drive.search.placeholder_all': 'Dosyalarında ara',
1000
1122
  'drive.search.hint_title': 'Her yerde ara ve komut çalıştır ({combo})',
1001
1123
  'drive.storage.used': '{total} alanın {used} kadarı dolu',
1002
1124
  'drive.storage.used_unlimited': '{used} kullanılıyor',
1003
1125
  'drive.storage.label': 'Depolama',
1126
+ /* === gorunum:v3-shell — Ana sayfa görünümü (kabuğun içindeki genel bakış)
1127
+ * Bölüm başlıkları `sidenav.storages` / `sidenav.recent` / `sidenav.starred`,
1128
+ * boş durumlar da `empty.recent.*` / `empty.starred.*` — bilerek: Ana
1129
+ * sayfadaki "Son kullanılanlar" başlığı ile yanındaki panel satırı aynı
1130
+ * şeydir, ikisine ayrı metin yazmak onları çeviri çeviri birbirinden
1131
+ * ayırmanın yoludur. Aşağıda yalnızca başka hiçbir yerde olmayanlar var. */
1132
+ 'home.title': 'Ana sayfa',
1133
+ 'home.storages.empty': 'Henüz depo yok',
1134
+ 'home.storages.hint': 'Depo, filex’in okuyup yazdığı sürücüdür — depoları yönetici ekler.',
1004
1135
  'drive.section.folders': 'Klasörler',
1005
1136
  'drive.section.files': 'Dosyalar',
1006
1137
  'filter.aria': 'Süzgeçler',
@@ -1028,10 +1159,16 @@ export const tr: Record<string, string> = {
1028
1159
  'filter.size.1to10': '1 - 10 MB',
1029
1160
  'filter.size.10to100': '10 - 100 MB',
1030
1161
  'filter.size.gt100': '100 MB üstü',
1162
+ /* surucu:d1-actions — filtre satırının sonundaki ⋮ menüsü. Yalnızca menünün
1163
+ KENDİ adı yeni: içindeki her satır o eylemin zaten sahip olduğu metni
1164
+ kullanır (`toolbar.new_folder`, `toolbar.upload`, `ctx.paste`,
1165
+ `shortcuts.select_all`, `selection.clear`) — bir komutu yeniden adlandıran
1166
+ menü, okuyucuya aynı şeyi iki kez öğretir. */
1167
+ 'filter.actions': 'Liste işlemleri',
1031
1168
  'filter.clear': 'Süzgeçleri temizle',
1032
1169
  'filter.empty.title': 'Bu süzgeçlere uyan bir şey yok',
1033
1170
  'filter.empty.hint': 'Bir süzgeci kaldır ya da yukarıdaki alandan her yerde ara.',
1034
- 'filter.count': '{total} ögeden {shown} tanesi',
1171
+ 'filter.count': '{total} öğeden {shown} tanesi',
1035
1172
  'inspector.tab.details': 'Ayrıntılar',
1036
1173
  'inspector.tab.activity': 'Etkinlik',
1037
1174
  'inspector.people': 'Erişimi olan kişiler',
@@ -1043,7 +1180,7 @@ export const tr: Record<string, string> = {
1043
1180
  'inspector.link.none': 'Paylaşılmadı',
1044
1181
  'inspector.link.create': 'Bağlantı oluştur',
1045
1182
  'inspector.link.copy': 'Bağlantıyı kopyala',
1046
- 'inspector.activity.empty': 'Bu öge için henüz etkinlik kaydı yok.',
1183
+ 'inspector.activity.empty': 'Bu öğe için henüz etkinlik kaydı yok.',
1047
1184
  'inspector.activity.hint': 'Sürümler dosya değiştikçe, yorumlar ise insanlar yazdıkça birikir.',
1048
1185
  'inspector.activity.version': '{n}. sürüm kaydedildi',
1049
1186
  'inspector.activity.comment': '{who} yorum yaptı',
@@ -1062,4 +1199,267 @@ export const tr: Record<string, string> = {
1062
1199
  'convert.unsupported_input': 'Bu dosya tipi için kaynak format bulunamadı.',
1063
1200
  'convert.converting': 'Dönüştürülüyor…',
1064
1201
  'convert.convert': 'Dönüştür',
1202
+ /* === gorunum:v1-chrome — filtre satırındaki ad kutusu === */
1203
+ 'filter.find': 'Bu klasörde filtrele…',
1204
+ /* surucu:d1-scope — satırların bir klasörün içeriği olmadığı yerlerde aynı
1205
+ kutu. Neyi daralttığını söylemek zorunda: depo listesinde "bu klasör" hiçbir
1206
+ şeyi adlandırmaz, Ana sayfada ise üç bloğu birden adlandırırdı. */
1207
+ 'filter.find.storages': 'Depolarda filtrele…',
1208
+ 'filter.find.home': 'Ana sayfada filtrele…',
1209
+ /* === gorunum:v1-viewer — tam ekran görüntüleyicinin kendi çerçevesi === */
1210
+ 'viewer.share': 'Paylaş',
1211
+ 'viewer.nav_prev': 'Önceki dosya',
1212
+ 'viewer.nav_next': 'Sonraki dosya',
1213
+ /* Üst çubuğun künye satırındaki sayaç: "246,3 KB • 9 Eyl 2026 • 1 / 9". */
1214
+ 'viewer.counter': '{i} / {n}',
1215
+ 'viewer.zoom_reset': 'Yakınlaştırmayı sıfırla',
1216
+ 'viewer.fullscreen': 'Tam ekran',
1217
+ 'viewer.exit_fullscreen': 'Tam ekrandan çık',
1218
+ 'viewer.md_placeholder': '# Markdown buraya…',
1219
+ /* === gorunum:v1-selbar — filtre satırının yerini alan seçim çubuğu === */
1220
+ 'selection.count': '{n} seçildi',
1221
+ 'selection.clear': 'Seçimi temizle',
1222
+ /* === gorunum:v1-preview — türün adı, kelimeyle =======================
1223
+ Tür sütunu eskiden uzantıyı büyük harfle yazıyordu; artık bunları
1224
+ yazıyor. Hangisinin seçileceğine `lib/fileIcons.ts` karar verir
1225
+ (`typeLabelKey`) — bir türü adlandıran yalnız iki yer var: o tablo ve bu
1226
+ liste. Eşleşmeyen her şey yine büyük harfli uzantıya düşer. `Klasör`
1227
+ burada DEĞİL: o `node.folder`, grid kartının alt yazısı zaten onu basar. */
1228
+ 'ftype.typescript': 'TypeScript',
1229
+ 'ftype.javascript': 'JavaScript',
1230
+ 'ftype.vue': 'Vue bileşeni',
1231
+ 'ftype.python': 'Python',
1232
+ 'ftype.go': 'Go',
1233
+ 'ftype.rust': 'Rust',
1234
+ 'ftype.php': 'PHP',
1235
+ 'ftype.ruby': 'Ruby',
1236
+ 'ftype.java': 'Java',
1237
+ 'ftype.kotlin': 'Kotlin',
1238
+ 'ftype.swift': 'Swift',
1239
+ 'ftype.c': 'C kaynağı',
1240
+ 'ftype.cpp': 'C++ kaynağı',
1241
+ 'ftype.csharp': 'C# kaynağı',
1242
+ 'ftype.stylesheet': 'Stil dosyası',
1243
+ 'ftype.html': 'HTML belgesi',
1244
+ 'ftype.json': 'JSON verisi',
1245
+ 'ftype.yaml': 'YAML',
1246
+ 'ftype.xml': 'XML',
1247
+ 'ftype.toml': 'TOML',
1248
+ 'ftype.sql': 'SQL',
1249
+ 'ftype.shell': 'Kabuk betiği',
1250
+ 'ftype.powershell': 'PowerShell betiği',
1251
+ 'ftype.markdown': 'Markdown',
1252
+ 'ftype.plaintext': 'Düz metin',
1253
+ 'ftype.log': 'Günlük dosyası',
1254
+ 'ftype.config': 'Ayar dosyası',
1255
+ 'ftype.sheet': 'Hesap tablosu',
1256
+ 'ftype.figma': 'Figma tasarımı',
1257
+ 'ftype.design': 'Tasarım dosyası',
1258
+ 'ftype.image': 'Görsel',
1259
+ 'ftype.video': 'Video',
1260
+ 'ftype.audio': 'Ses',
1261
+ 'ftype.pdf': 'PDF belgesi',
1262
+ 'ftype.document': 'Belge',
1263
+ 'ftype.slides': 'Sunum',
1264
+ 'ftype.archive': 'Arşiv',
1265
+ 'ftype.code': 'Kod',
1266
+ /* === gorunum:v1-advsearch — Gelişmiş arama penceresi ===================
1267
+ * İki `filter.*` anahtarı kardeşlerinin yanında değil burada: paylaşılan
1268
+ * birleşimlere pencerenin eklediği yeni üyeler (`modified: 'around'`,
1269
+ * `size: 'range'`). Filtre satırı bunları hiç seçmez ama biri oraya
1270
+ * ulaşırsa `chipLabel` ham anahtarı yazardı. */
1271
+ 'filter.modified.around': 'Bir tarihin çevresinde',
1272
+ 'filter.size.range': 'Özel aralık',
1273
+
1274
+ 'advsearch.open': 'Gelişmiş arama',
1275
+ 'advsearch.title': 'Gelişmiş arama',
1276
+ 'advsearch.subtitle': 'Dosyaları ada, içeriğe, yola ya da etikete göre bulun.',
1277
+ 'advsearch.close': 'Kapat',
1278
+ 'advsearch.content.heading': 'İçerik araması',
1279
+ 'advsearch.viewall': 'Tüm sonuçları gör',
1280
+ 'advsearch.where.any_short': 'Her yerde',
1281
+ 'advsearch.where.here_short': 'Yalnız burada',
1282
+ 'advsearch.where.skip_short': 'Burayı atla',
1283
+ 'advsearch.server.legend': 'Sunucunun aradığı',
1284
+ 'advsearch.client.legend': 'Gelen sonuçları daralt',
1285
+ 'advsearch.query.label': 'Kelimeler',
1286
+ 'advsearch.query.placeholder': 'Adın bir parçası ya da dosyanın içindeki kelimeler',
1287
+ 'advsearch.scope.label': 'Nerede arasın',
1288
+ 'advsearch.scope.name': 'Ad ve yol',
1289
+ 'advsearch.scope.content': 'Dosya içeriği',
1290
+ 'advsearch.scope.all': 'İkisi de',
1291
+ 'advsearch.scope.hint':
1292
+ 'İçerik, dizinden aranır; dizin metin türü dosyaların ilk 200 KB’ını kapsar.',
1293
+ 'advsearch.people.name_only':
1294
+ 'Sahip, gelen satırlardan okunur; sahip bilgisi taşıyan satırları da yalnız ad araması döndürür.',
1295
+ 'advsearch.scope.name_only':
1296
+ 'Burada yalnız ad ve yol: içerik sonucu gezgine hangi depodan geldiği bilgisi olmadan ulaşır, bu yüzden içerik araması yalnız tek depolu kurulumlarda sunulur.',
1297
+ 'advsearch.tags.label': 'Etiketler',
1298
+ 'advsearch.tags.placeholder': 'fatura, üç aylık rapor',
1299
+ 'advsearch.tags.exclude': 'Şu etiketler hariç',
1300
+ 'advsearch.tags.exclude_placeholder': 'arşiv',
1301
+ 'advsearch.tags.hint':
1302
+ 'Virgülle ayırın. Etiket daraltır: birden çok etiket hepsini birden taşıyan dosyalar demektir, hiç kullanılmamış bir etiket ise hiçbir şey döndürmez.',
1303
+ 'advsearch.where.label': 'Klasör',
1304
+ 'advsearch.where.any': 'Bu deponun her yerinde',
1305
+ 'advsearch.where.here': 'Yalnız {folder} içinde',
1306
+ 'advsearch.where.skip': '{folder} dışındaki her yerde',
1307
+ 'advsearch.around.label': 'Şu kadar içinde',
1308
+ 'advsearch.around.date': 'Tarih ve saat',
1309
+ 'advsearch.around.h1': '1 saat',
1310
+ 'advsearch.around.d1': '1 gün',
1311
+ 'advsearch.around.w1': '1 hafta',
1312
+ 'advsearch.size.range_label': 'Şunun arasında',
1313
+ 'advsearch.size.from': 'En az',
1314
+ 'advsearch.size.to': 'En çok',
1315
+ 'advsearch.count.idle': 'Bir şeyler yazın ya da etiket seçin.',
1316
+ 'advsearch.count.counting': 'Sayılıyor…',
1317
+ 'advsearch.count.result': '{n} eşleşen öğe',
1318
+ 'advsearch.count.capped': 'Sonuçların ilk sayfasında {n} eşleşen öğe',
1319
+ 'advsearch.count.result_one': '1 eşleşen öğe',
1320
+ 'advsearch.count.capped_one': 'Sonuçların ilk sayfasında 1 eşleşen öğe',
1321
+ 'advsearch.count.error': 'Sayım çalıştırılamadı.',
1322
+ 'advsearch.count.cost':
1323
+ 'Sayım bu aramayı çalıştırır. Tür, sahip, tarih, boyut ve klasör sunucuda değil, gelen satırlar üzerinde uygulanır.',
1324
+ 'advsearch.wire': 'Gönderilen',
1325
+ 'advsearch.reset': 'Sıfırla',
1326
+ 'advsearch.cancel': 'Vazgeç',
1327
+ 'advsearch.submit': 'Ara',
1328
+
1329
+ /* === gorunum:v2-topbar — sayfanın üst barı kalktı; onun taşıdıklarını
1330
+ artık gezginin kendi başlığı ve kırıntı satırı taşıyor. === */
1331
+ 'breadcrumb.subfolders': 'Alt klasörler',
1332
+ 'breadcrumb.subfolders.empty': 'Burada alt klasör yok',
1333
+ 'header.admin': 'Yönetim paneli',
1334
+ 'header.settings': 'Ayarlar',
1335
+ 'header.signout': 'Çıkış yap',
1336
+ 'ai.assistant': 'AI asistanı',
1337
+ 'ai.soon': 'Yakında',
1338
+ 'ai.assistant.soon': 'AI asistanı — yakında',
1339
+
1340
+ /* gorunum:v2-share — Paylaş / İzinler penceresinin kendi çerçevesi. İçindeki
1341
+ denetimler eski metinlerini koruyor; buradakiler yeni kabuk: başlık, tek
1342
+ anahtar, "şu anda kim açabilir" cümlesi ve her şeyin katlandığı üç adlı
1343
+ bölüm. */
1344
+ 'access.title': '"{name}" paylaşımı',
1345
+ 'access.close': 'Kapat',
1346
+ 'access.done': 'Bitti',
1347
+ 'access.copy': 'Kopyala',
1348
+ 'access.copied': 'Kopyalandı',
1349
+ 'access.link.switch': 'Bağlantı paylaşımı',
1350
+ 'access.who.private': 'Yalnızca erişimi olan kişiler açabilir.',
1351
+ 'access.who.link': 'Bağlantıyı bilen herkes açabilir.',
1352
+ 'access.who.pin': "Bağlantıyı ve PIN'i bilen herkes açabilir.",
1353
+ 'access.who.existing': 'Bağlantı paylaşımı açık — {n} bağlantı var.',
1354
+ 'access.who.existing_one': 'Bağlantı paylaşımı açık — {n} bağlantı var.',
1355
+ 'access.section.link': 'Bağlantı seçenekleri',
1356
+ 'access.section.people': 'Erişimi olanlar',
1357
+ 'access.section.drop': 'Dosya iste',
1358
+ 'access.sum.pin_on': 'PIN var',
1359
+ 'access.sum.pin_off': 'PIN yok',
1360
+ 'access.sum.people': '{n} kişi',
1361
+ 'access.sum.people_one': '{n} kişi',
1362
+ 'access.sum.people_none': 'Henüz kimse yok',
1363
+ 'access.sum.drop': '{n} yükleme bağlantısı',
1364
+ 'access.sum.drop_one': '{n} yükleme bağlantısı',
1365
+ 'access.sum.drop_none': 'Yükleme bağlantısı yok',
1366
+ /* Sahiplik — Sahibi sütunu ve Kişiler çipi. "Sistem", filex üzerinden kimsenin
1367
+ koymadığı satırın dürüst karşılığıdır (tarayıcı buldu ya da doğrudan kovaya
1368
+ yazıldı); boşluk değil, gerçek bir cevaptır. */
1369
+ 'col.owner': 'Sahibi',
1370
+ 'owner.you': 'Siz',
1371
+ 'owner.system': 'Sistem',
1372
+ 'owner.unknown': 'Bilinmiyor',
1373
+ 'owner.external': 'Yükleme bağlantısıyla geldi',
1374
+ 'owner.last_actor': 'Son değiştiren: {who}',
1375
+ 'filter.people': 'Kişiler',
1376
+ 'filter.people.any': 'Herkes',
1377
+ 'filter.people.me': 'Siz',
1378
+ 'filter.people.system': 'Sistem',
1379
+ 'filter.people.someone': 'Başka biri',
1380
+ /* surucu:d1-sort — filtre satırının sağ ucundaki sıralama denetimi. Dört
1381
+ ölçütün adı `col.*`: menü, liste görünümünün sütun başlıklarındaki
1382
+ sözcüklerin aynısını sunar — tek bir sıralamayı süren iki denetim onu
1383
+ farklı adlarla anamaz. */
1384
+ 'sort.by': 'Sıralama ölçütü',
1385
+ 'sort.asc': 'Artan',
1386
+ 'sort.desc': 'Azalan',
1387
+ /* Bir ARAMA SONUCUNUN sırası. Beşinci bir sıralama ölçütü değildir —
1388
+ ekrandaki satırları sunucu sıraladığında denetim, ölçüt adı yerine bunu
1389
+ yazar; böylece yapmadığı bir sıralamayı üstlenmez. `_why` denetimin neden
1390
+ kapalı olduğudur: Burak, denetimin sessizce işlevsizleşmesini değil
1391
+ nedeninin yazılmasını istedi. */
1392
+ 'sort.relevance': 'Alaka',
1393
+ 'sort.relevance_why':
1394
+ 'Arama sonuçları eşleşme yakınlığına göre listelenir. Seçtiğiniz sıralama, aramadan çıkınca geri gelir.',
1395
+ /* === tablo:t1 — tablonun kendi yapılandırması ==========================
1396
+ Sütun genişlikleri ve görünürlüğü EKRANINIZA dair bir tercihtir; bir
1397
+ klasörün hangi görünümle açılacağı ise KLASÖRE dair bir olgudur. İkisi de
1398
+ buradan ayarlanır; `folder_hint` kuralı tek cümlede, tam da ona şaşıracak
1399
+ kişinin okuyabileceği yerde söyler. */
1400
+ 'col.location': 'Konum',
1401
+ 'cols.menu': 'Sütun seçenekleri',
1402
+ 'cols.title': 'Sütunlar',
1403
+ 'cols.resize': '{col} sütununu yeniden boyutlandır',
1404
+ 'cols.move_left': '{col} sütununu sola taşı',
1405
+ 'cols.move_right': '{col} sütununu sağa taşı',
1406
+ 'cols.reset': 'Sütunları sıfırla',
1407
+ 'cols.folder_title': 'Klasör görünümü',
1408
+ 'cols.folder_hint':
1409
+ 'Ayarladığınız klasörler kendi görünümünü korur. Son seçiminiz diğer her yerde varsayılan olur.',
1410
+ 'cols.forget_folder': 'Bu klasörün görünümünü unut',
1411
+ 'cols.apply_all': 'Tüm klasörlere uygula ({count} klasör hatırlanıyor)',
1412
+ /* === tablo:t1 — çöp kutusu bilgi şeridi ================================
1413
+ ⚠ `retention` yalnızca kurulum bize sayıyı SÖYLEDİĞİNDE kullanılır
1414
+ (GET /api/admin/protection). Diğer her durumda `retention_unknown` aynı
1415
+ şeyi, doğrulayamadığımız bir süreyi taahhüt etmeden söyler: yanlış saklama
1416
+ süresi yazan bir şerit, hiç şerit olmamasından kötüdür — insanlar ona
1417
+ bakıp karar verir. */
1418
+ 'trash.retention': 'Çöp kutusundaki öğeler {days} gün sonra kalıcı olarak silinir.',
1419
+ 'trash.retention_one': 'Çöp kutusundaki öğeler {days} gün sonra kalıcı olarak silinir.',
1420
+ 'trash.retention_unknown':
1421
+ 'Çöp kutusundaki öğeler, yöneticinizin belirlediği saklama süresi dolunca kalıcı olarak silinir.',
1422
+ 'trash.empty_action': 'Çöp kutusunu boşalt',
1423
+ 'trash.empty_confirm_title': 'Çöp kutusu boşaltılsın mı?',
1424
+ 'trash.empty_confirm_body_one': 'Bu işlem 1 öğeyi ({size}) kalıcı olarak siler. Geri alınamaz.',
1425
+ 'trash.empty_confirm_body':
1426
+ 'Bu işlem {count} öğeyi ({size}) kalıcı olarak siler. Geri alınamaz.',
1427
+ 'trash.empty_confirm_body_nosize_one': 'Bu işlem 1 öğeyi kalıcı olarak siler. Geri alınamaz.',
1428
+ 'trash.empty_confirm_body_nosize': 'Bu işlem {count} öğeyi kalıcı olarak siler. Geri alınamaz.',
1429
+ 'trash.emptied': 'Çöp kutusu boşaltıldı',
1430
+ 'empty.trash.hint': 'Sildiğiniz dosyalar önce buraya düşer, böylece geri alabilirsiniz.',
1431
+
1432
+ /* tasi:m1 — hedef klasör seçici (modals/DestinationPickerModal.vue) ve
1433
+ üzerine kurulan iki seçim eylemi. */
1434
+ 'destpicker.title.move': 'Şuraya taşı',
1435
+ 'destpicker.title.copy': 'Şuraya kopyala',
1436
+ 'destpicker.title.choose': 'Klasör seç',
1437
+ 'destpicker.confirm.move': 'Buraya taşı',
1438
+ 'destpicker.confirm.copy': 'Buraya kopyala',
1439
+ 'destpicker.confirm.choose': 'Bu klasörü seç',
1440
+ 'destpicker.cancel': 'Vazgeç',
1441
+ 'destpicker.up': 'Bir üst klasör',
1442
+ 'destpicker.crumbs': 'Konum',
1443
+ 'destpicker.drives': 'Sürücüler',
1444
+ 'destpicker.loading': 'Yükleniyor…',
1445
+ 'destpicker.empty': 'Burada alt klasör yok',
1446
+ 'destpicker.unreadable': 'Bu klasör açılamıyor.',
1447
+ 'destpicker.readonly': 'Salt okunur',
1448
+ 'destpicker.readonly_here': 'Bu klasöre yazamazsınız.',
1449
+ 'destpicker.pick_a_drive': 'Bir klasör seçmek için önce bir depo açın.',
1450
+ 'destpicker.target': 'Hedef: {name}',
1451
+ 'destpicker.tag.blocked': 'Uygun değil',
1452
+ 'destpicker.blocked.self': 'Bir klasör kendi içine taşınamaz.',
1453
+ 'destpicker.blocked.descendant': 'Bir klasör kendi alt klasörlerinden birine taşınamaz.',
1454
+
1455
+ 'ctx.move_to': 'Şuraya taşı…',
1456
+ 'ctx.copy_to': 'Şuraya kopyala…',
1457
+ 'ctx.access.one_only': 'Paylaşım aynı anda tek öğe için çalışır.',
1458
+
1459
+ 'toast.archive.preparing': 'Arşiv hazırlanıyor…',
1460
+ 'toast.archive.started': '{name} indiriliyor ({count} dosya)',
1461
+ 'toast.archive.started_one': '{name} indiriliyor ({count} dosya)',
1462
+ 'toast.archive.empty': 'İndirilecek bir şey yok — seçimde okunabilir dosya bulunmuyor.',
1463
+ 'toast.moved_to': '{name} klasörüne taşındı',
1464
+ 'toast.copied_to': '{name} klasörüne kopyalama kuyruğa alındı',
1065
1465
  };