@brftech/filex-core 0.40.0 → 0.41.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/README.md +32 -25
  2. package/dist/ArchiveViewer-DxxjhYZD.js +124 -0
  3. package/dist/ArchiveViewer-DxxjhYZD.js.map +1 -0
  4. package/dist/CsvViewer-CyuwENI_.js +141 -0
  5. package/dist/CsvViewer-CyuwENI_.js.map +1 -0
  6. package/dist/{DrawioViewer-BNALOB04.js → DrawioViewer-BIYsTX97.js} +48 -42
  7. package/dist/DrawioViewer-BIYsTX97.js.map +1 -0
  8. package/dist/EpubViewer-K9PjCMmS.js +163 -0
  9. package/dist/EpubViewer-K9PjCMmS.js.map +1 -0
  10. package/dist/IpynbViewer-DYU6Zgz2.js +184 -0
  11. package/dist/IpynbViewer-DYU6Zgz2.js.map +1 -0
  12. package/dist/MermaidViewer-Bp73aId8.js +137 -0
  13. package/dist/MermaidViewer-Bp73aId8.js.map +1 -0
  14. package/dist/PsdViewer-C2eLivw1.js +122 -0
  15. package/dist/PsdViewer-C2eLivw1.js.map +1 -0
  16. package/dist/TiffViewer-DsHg5gcz.js +142 -0
  17. package/dist/TiffViewer-DsHg5gcz.js.map +1 -0
  18. package/dist/Viewer3D-C_dc2HN9.js +75 -0
  19. package/dist/Viewer3D-C_dc2HN9.js.map +1 -0
  20. package/dist/filex-core.js +218 -20361
  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-vxMZpYb-.js +26700 -0
  25. package/dist/index-vxMZpYb-.js.map +1 -0
  26. package/dist/index.d.ts +4212 -862
  27. package/dist/style.css +1 -1
  28. package/package.json +1 -1
  29. package/src/FileExplorer.vue +2154 -506
  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 +39 -2
  35. package/src/components/EncryptedFolderModal.vue +31 -25
  36. package/src/components/FilePane.vue +951 -0
  37. package/src/components/FilterBar.vue +568 -72
  38. package/src/components/GalleryView.vue +172 -56
  39. package/src/components/GridView.vue +331 -82
  40. package/src/components/HomeView.vue +331 -0
  41. package/src/components/InspectorPanel.vue +296 -53
  42. package/src/components/ListView.vue +1173 -194
  43. package/src/components/NFSExportsPanel.vue +7 -4
  44. package/src/components/OnboardingTour.vue +156 -33
  45. package/src/components/QuickLook.vue +26 -1
  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 +6 -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 +135 -0
  58. package/src/components/TimeZonePicker.vue +696 -0
  59. package/src/components/TokensPanel.vue +35 -14
  60. package/src/components/Toolbar.vue +953 -465
  61. package/src/components/ViewSwitcher.vue +9 -4
  62. package/src/composables/useConnections.ts +35 -4
  63. package/src/composables/useExplorerTimeZone.ts +89 -0
  64. package/src/composables/useFileApi.ts +53 -4
  65. package/src/composables/useLocale.ts +382 -26
  66. package/src/composables/useRowTouch.ts +95 -0
  67. package/src/index.ts +177 -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 +31 -2
  78. package/src/lib/sortOrder.ts +459 -0
  79. package/src/lib/themes.ts +151 -116
  80. package/src/lib/timezone.ts +501 -0
  81. package/src/lib/uiProfile.ts +82 -0
  82. package/src/lib/viewPrefs.ts +1036 -0
  83. package/src/locales/en.ts +416 -26
  84. package/src/locales/tr.ts +409 -26
  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 +557 -476
  91. package/src/modals/PreviewModal.vue +516 -156
  92. package/src/styles/base.css +5409 -8
  93. package/src/styles/variables.css +139 -65
  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,7 +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',
309
- 'theme.name.drive': 'Drive',
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}',
310
350
  /* === wiring:c2 — özelleştirilebilir kısayollar + hızlı bakış === */
311
351
  'shortcuts.quicklook': 'Hızlı bakış',
312
352
  'shortcuts.customize': 'Özelleştir',
@@ -331,6 +371,7 @@ export const tr: Record<string, string> = {
331
371
  /* === wiring:c3 — işlem merkezi === */
332
372
  'opc.title': 'İşlemler',
333
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',
334
375
  'opc.close': 'Kapat',
335
376
  'opc.active': 'Sürüyor',
336
377
  'opc.history': 'Geçmiş',
@@ -359,24 +400,34 @@ export const tr: Record<string, string> = {
359
400
  'tour.next': 'İleri',
360
401
  'tour.done': 'Bitti',
361
402
  'tour.progress': '{n} / {m}',
362
- 'tour.step.nav.title': 'Depo ve klasörler',
403
+ 'tour.step.nav.title': 'Depolar ve görünümler',
363
404
  'tour.step.nav.desc':
364
- '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.',
365
- 'tour.step.upload.title': 'Dosya yükle',
366
- 'tour.step.upload.desc':
367
- '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.',
368
413
  'tour.step.search.title': 'Arama',
369
414
  'tour.step.search.desc':
370
- '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.',
371
422
  'tour.step.view.title': 'Görünümü değiştir',
372
423
  'tour.step.view.desc':
373
- 'Liste ve ızgara görünümü arasında geçiş yapabilirsin; seçimin hatırlanır.',
374
- 'tour.step.share.title': 'Paylaşım',
375
- 'tour.step.share.desc':
376
- '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.',
377
428
  'tour.step.help.title': 'Kısayollar',
378
429
  'tour.step.help.desc':
379
- '{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.',
380
431
  'error.hint': 'Bağlantı ya da sunucu kaynaklı geçici bir sorun olabilir. Yeniden deneyin.',
381
432
  'error.details': 'Teknik ayrıntılar',
382
433
  'col.star': 'Yıldız',
@@ -422,6 +473,7 @@ export const tr: Record<string, string> = {
422
473
  'split.retry': 'Yeniden dene',
423
474
  'split.copy_queued': 'Kopyalama kuyruğa alındı',
424
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.',
425
477
  'split.cross_copy': 'Depolar farklı — kopyalama kuyruğa alındı',
426
478
  'dragout.downloading': 'Bırakılan klasöre indiriliyor…',
427
479
  'dragout.not_found': 'Bırakılan yer bulunamadı — dosya bir klasöre değil bir uygulamaya bırakıldıysa indirme yapılamaz',
@@ -443,8 +495,9 @@ export const tr: Record<string, string> = {
443
495
  /* wiring:e2 — uçtan uca şifreli klasörler */
444
496
  'e2e.create.title': 'Şifreli klasör oluştur',
445
497
  'e2e.create.option': 'Şifreli klasör oluştur…',
446
- 'e2e.create.pw_placeholder': 'Klasör parolası (en az 8 karakter)',
447
- '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',
448
501
  'e2e.create.warn_title': 'GERİ DÖNÜŞÜ YOK',
449
502
  'e2e.create.warn_body':
450
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.',
@@ -465,6 +518,10 @@ export const tr: Record<string, string> = {
465
518
  'e2e.locked.busy': 'Doğrulanıyor…',
466
519
  'e2e.unlock.wrong': 'Parola yanlış.',
467
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',
468
525
  'e2e.strip.label': 'Şifreli klasör — kilit açık',
469
526
  'e2e.strip.lock': 'Kilitle',
470
527
  'e2e.locked_toast': 'Klasör kilitlendi',
@@ -576,6 +633,7 @@ export const tr: Record<string, string> = {
576
633
  'conn.denied.guideHint': 'Zaten görebildiğiniz depolara kendi bilgisayarınızdan bağlanmak için yönetici yetkisi gerekmez.',
577
634
  'conn.denied.guideCta': 'Nasıl bağlanacağımı göster',
578
635
  'conn.list.count': '{n} depo',
636
+ 'conn.list.count_one': '{n} depo',
579
637
  'conn.list.add': 'Depo ekle',
580
638
  'conn.list.empty': 'Henüz yapılandırılmış depo yok. Bir tane ekleyin, dosyalar dosya yöneticisinde görünsün.',
581
639
  'conn.list.edit': 'Düzenle',
@@ -595,6 +653,7 @@ export const tr: Record<string, string> = {
595
653
  'conn.form.test': 'Bağlantıyı sına',
596
654
  'conn.form.testing': 'Sınanıyor…',
597
655
  'conn.form.testOk': 'Bağlandı. Kökte {count} öğe var.',
656
+ 'conn.form.testOk_one': 'Bağlandı. Kökte {count} öğe var.',
598
657
  'conn.form.testFail': 'Bağlanılamadı: {error}',
599
658
  'conn.form.save': 'Kaydet',
600
659
  'conn.form.saving': 'Kaydediliyor…',
@@ -972,6 +1031,8 @@ export const tr: Record<string, string> = {
972
1031
  'sidenav.title': 'Gezinti',
973
1032
  'sidenav.views': 'Görünümler',
974
1033
  'sidenav.storages': 'Depolar',
1034
+ 'sidenav.home': 'Ana sayfa',
1035
+ 'sidenav.myfiles': 'Dosyalarım',
975
1036
  'sidenav.recent': 'Son kullanılanlar',
976
1037
  'sidenav.starred': 'Yıldızlılar',
977
1038
  'sidenav.shared': 'Benimle paylaşılanlar',
@@ -979,8 +1040,20 @@ export const tr: Record<string, string> = {
979
1040
  'sidenav.collapse': 'Gezintiyi daralt',
980
1041
  'sidenav.expand': 'Gezintiyi genişlet',
981
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ç',
982
1049
  'sidenav.storage.shared': 'Paylaşılan',
983
- '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',
984
1057
  'node.recent': 'Son kullanılanlar',
985
1058
  'node.starred': 'Yıldızlılar',
986
1059
  'node.shared': 'Benimle paylaşılanlar',
@@ -1006,20 +1079,61 @@ export const tr: Record<string, string> = {
1006
1079
  'conn.tokens.rootPlaceholder': 'depo://klasör',
1007
1080
  'conn.tokens.expiry': 'Geçerlilik (gün)',
1008
1081
  'conn.tokens.expiryNever': 'süresiz',
1082
+ 'conn.tokens.defaultName': 'API anahtarı {date}',
1083
+ 'conn.tokens.namePlaceholder': 'Ad — ör. yedekleme betiği',
1009
1084
  'conn.tokens.capNote': 'Tavan hesabın ve yetkilerin — sahip olduğundan fazlasını istemek reddedilir, verilmez.',
1010
1085
  /* === /gezinti:g1 === */
1011
1086
 
1012
- /* === surucu:d1 — Sürücü kabuğu (uiProfile: 'drive', GitHub #14) ======== */
1087
+ /* === surucu:d1 — kabuk (GitHub #14); artık `uiProfile: 'drive'` ile
1088
+ gelen bir seçenek değil, her profilde çizilir === */
1013
1089
  'drive.new': 'Yeni',
1014
1090
  'drive.new.upload': 'Dosya yükle',
1015
1091
  'drive.new.folder': 'Yeni klasör',
1016
1092
  'drive.new.request': 'Dosya iste',
1093
+ 'drive.new.document': 'Yeni belge',
1094
+
1095
+ /* === belge:n1 — "Yeni belge": + Yeni altındaki seçici ==================
1096
+ Tür adları BURADA durmuyor. Her kutucuk sözcüklerini lib/fileIcons
1097
+ `typeLabelFor`den okur — listedeki Tür sütununun okuduğu tablonun
1098
+ aynısı — böylece ".docx" iki yerde de aynı adla anılır ve yeni bir tür
1099
+ için hiç dizge gerekmez. Aşağıda yalnız bu pencerenin kendi metni var. */
1100
+ 'newdoc.title': 'Yeni belge',
1101
+ 'newdoc.type.label': 'Belge türü',
1102
+ 'newdoc.group.document': 'Belgeler',
1103
+ 'newdoc.group.text': 'Metin ve kod',
1104
+ 'newdoc.group.diagram': 'Çizimler',
1105
+ 'newdoc.withheld.onlyoffice': 'Ofis belgeleri için bir belge sunucusu (OnlyOffice) gerekir; burada tanımlı değil.',
1106
+ 'newdoc.withheld.drawio': 'Çizimler için drawio servisi gerekir; burada tanımlı değil.',
1107
+ 'newdoc.empty.title': 'Kullanılabilir belge türü yok',
1108
+ 'newdoc.empty.body': 'Bu sunucu, bu uygulamanın oluşturabileceği bir tür sunmadı.',
1109
+ 'newdoc.empty.blocked': 'Bu sunucunun oluşturabildiği her tür, burada tanımlı olmayan bir düzenleyici servisine bağlı.',
1110
+ 'newdoc.name': 'Ad',
1111
+ 'newdoc.name.placeholder': 'Belge adı',
1112
+ 'newdoc.untitled': 'Adsız',
1113
+ 'newdoc.err.slash': 'Ad eğik çizgi içeremez.',
1114
+ 'newdoc.err.exists': '{name} burada zaten var. Başka bir ad seçin.',
1115
+ 'newdoc.location': 'Konum',
1116
+ 'newdoc.location.none': 'Bir klasör seçin',
1117
+ 'newdoc.location.change': 'Değiştir',
1118
+ 'newdoc.location.noaccess': 'Bu klasöre kaydedemezsiniz.',
1119
+ 'newdoc.create': 'Oluştur',
1120
+ 'newdoc.creating': 'Oluşturuluyor…',
1121
+ 'newdoc.cancel': 'Vazgeç',
1017
1122
  'drive.search.placeholder': '{scope} içinde ara',
1018
1123
  'drive.search.placeholder_all': 'Dosyalarında ara',
1019
1124
  'drive.search.hint_title': 'Her yerde ara ve komut çalıştır ({combo})',
1020
1125
  'drive.storage.used': '{total} alanın {used} kadarı dolu',
1021
1126
  'drive.storage.used_unlimited': '{used} kullanılıyor',
1022
1127
  'drive.storage.label': 'Depolama',
1128
+ /* === gorunum:v3-shell — Ana sayfa görünümü (kabuğun içindeki genel bakış)
1129
+ * Bölüm başlıkları `sidenav.storages` / `sidenav.recent` / `sidenav.starred`,
1130
+ * boş durumlar da `empty.recent.*` / `empty.starred.*` — bilerek: Ana
1131
+ * sayfadaki "Son kullanılanlar" başlığı ile yanındaki panel satırı aynı
1132
+ * şeydir, ikisine ayrı metin yazmak onları çeviri çeviri birbirinden
1133
+ * ayırmanın yoludur. Aşağıda yalnızca başka hiçbir yerde olmayanlar var. */
1134
+ 'home.title': 'Ana sayfa',
1135
+ 'home.storages.empty': 'Henüz depo yok',
1136
+ 'home.storages.hint': 'Depo, filex’in okuyup yazdığı sürücüdür — depoları yönetici ekler.',
1023
1137
  'drive.section.folders': 'Klasörler',
1024
1138
  'drive.section.files': 'Dosyalar',
1025
1139
  'filter.aria': 'Süzgeçler',
@@ -1047,10 +1161,16 @@ export const tr: Record<string, string> = {
1047
1161
  'filter.size.1to10': '1 - 10 MB',
1048
1162
  'filter.size.10to100': '10 - 100 MB',
1049
1163
  'filter.size.gt100': '100 MB üstü',
1164
+ /* surucu:d1-actions — filtre satırının sonundaki ⋮ menüsü. Yalnızca menünün
1165
+ KENDİ adı yeni: içindeki her satır o eylemin zaten sahip olduğu metni
1166
+ kullanır (`toolbar.new_folder`, `toolbar.upload`, `ctx.paste`,
1167
+ `shortcuts.select_all`, `selection.clear`) — bir komutu yeniden adlandıran
1168
+ menü, okuyucuya aynı şeyi iki kez öğretir. */
1169
+ 'filter.actions': 'Liste işlemleri',
1050
1170
  'filter.clear': 'Süzgeçleri temizle',
1051
1171
  'filter.empty.title': 'Bu süzgeçlere uyan bir şey yok',
1052
1172
  'filter.empty.hint': 'Bir süzgeci kaldır ya da yukarıdaki alandan her yerde ara.',
1053
- 'filter.count': '{total} ögeden {shown} tanesi',
1173
+ 'filter.count': '{total} öğeden {shown} tanesi',
1054
1174
  'inspector.tab.details': 'Ayrıntılar',
1055
1175
  'inspector.tab.activity': 'Etkinlik',
1056
1176
  'inspector.people': 'Erişimi olan kişiler',
@@ -1062,7 +1182,7 @@ export const tr: Record<string, string> = {
1062
1182
  'inspector.link.none': 'Paylaşılmadı',
1063
1183
  'inspector.link.create': 'Bağlantı oluştur',
1064
1184
  'inspector.link.copy': 'Bağlantıyı kopyala',
1065
- 'inspector.activity.empty': 'Bu öge için henüz etkinlik kaydı yok.',
1185
+ 'inspector.activity.empty': 'Bu öğe için henüz etkinlik kaydı yok.',
1066
1186
  'inspector.activity.hint': 'Sürümler dosya değiştikçe, yorumlar ise insanlar yazdıkça birikir.',
1067
1187
  'inspector.activity.version': '{n}. sürüm kaydedildi',
1068
1188
  'inspector.activity.comment': '{who} yorum yaptı',
@@ -1081,4 +1201,267 @@ export const tr: Record<string, string> = {
1081
1201
  'convert.unsupported_input': 'Bu dosya tipi için kaynak format bulunamadı.',
1082
1202
  'convert.converting': 'Dönüştürülüyor…',
1083
1203
  'convert.convert': 'Dönüştür',
1204
+ /* === gorunum:v1-chrome — filtre satırındaki ad kutusu === */
1205
+ 'filter.find': 'Bu klasörde filtrele…',
1206
+ /* surucu:d1-scope — satırların bir klasörün içeriği olmadığı yerlerde aynı
1207
+ kutu. Neyi daralttığını söylemek zorunda: depo listesinde "bu klasör" hiçbir
1208
+ şeyi adlandırmaz, Ana sayfada ise üç bloğu birden adlandırırdı. */
1209
+ 'filter.find.storages': 'Depolarda filtrele…',
1210
+ 'filter.find.home': 'Ana sayfada filtrele…',
1211
+ /* === gorunum:v1-viewer — tam ekran görüntüleyicinin kendi çerçevesi === */
1212
+ 'viewer.share': 'Paylaş',
1213
+ 'viewer.nav_prev': 'Önceki dosya',
1214
+ 'viewer.nav_next': 'Sonraki dosya',
1215
+ /* Üst çubuğun künye satırındaki sayaç: "246,3 KB • 9 Eyl 2026 • 1 / 9". */
1216
+ 'viewer.counter': '{i} / {n}',
1217
+ 'viewer.zoom_reset': 'Yakınlaştırmayı sıfırla',
1218
+ 'viewer.fullscreen': 'Tam ekran',
1219
+ 'viewer.exit_fullscreen': 'Tam ekrandan çık',
1220
+ 'viewer.md_placeholder': '# Markdown buraya…',
1221
+ /* === gorunum:v1-selbar — filtre satırının yerini alan seçim çubuğu === */
1222
+ 'selection.count': '{n} seçildi',
1223
+ 'selection.clear': 'Seçimi temizle',
1224
+ /* === gorunum:v1-preview — türün adı, kelimeyle =======================
1225
+ Tür sütunu eskiden uzantıyı büyük harfle yazıyordu; artık bunları
1226
+ yazıyor. Hangisinin seçileceğine `lib/fileIcons.ts` karar verir
1227
+ (`typeLabelKey`) — bir türü adlandıran yalnız iki yer var: o tablo ve bu
1228
+ liste. Eşleşmeyen her şey yine büyük harfli uzantıya düşer. `Klasör`
1229
+ burada DEĞİL: o `node.folder`, grid kartının alt yazısı zaten onu basar. */
1230
+ 'ftype.typescript': 'TypeScript',
1231
+ 'ftype.javascript': 'JavaScript',
1232
+ 'ftype.vue': 'Vue bileşeni',
1233
+ 'ftype.python': 'Python',
1234
+ 'ftype.go': 'Go',
1235
+ 'ftype.rust': 'Rust',
1236
+ 'ftype.php': 'PHP',
1237
+ 'ftype.ruby': 'Ruby',
1238
+ 'ftype.java': 'Java',
1239
+ 'ftype.kotlin': 'Kotlin',
1240
+ 'ftype.swift': 'Swift',
1241
+ 'ftype.c': 'C kaynağı',
1242
+ 'ftype.cpp': 'C++ kaynağı',
1243
+ 'ftype.csharp': 'C# kaynağı',
1244
+ 'ftype.stylesheet': 'Stil dosyası',
1245
+ 'ftype.html': 'HTML belgesi',
1246
+ 'ftype.json': 'JSON verisi',
1247
+ 'ftype.yaml': 'YAML',
1248
+ 'ftype.xml': 'XML',
1249
+ 'ftype.toml': 'TOML',
1250
+ 'ftype.sql': 'SQL',
1251
+ 'ftype.shell': 'Kabuk betiği',
1252
+ 'ftype.powershell': 'PowerShell betiği',
1253
+ 'ftype.markdown': 'Markdown',
1254
+ 'ftype.plaintext': 'Düz metin',
1255
+ 'ftype.log': 'Günlük dosyası',
1256
+ 'ftype.config': 'Ayar dosyası',
1257
+ 'ftype.sheet': 'Hesap tablosu',
1258
+ 'ftype.figma': 'Figma tasarımı',
1259
+ 'ftype.design': 'Tasarım dosyası',
1260
+ 'ftype.image': 'Görsel',
1261
+ 'ftype.video': 'Video',
1262
+ 'ftype.audio': 'Ses',
1263
+ 'ftype.pdf': 'PDF belgesi',
1264
+ 'ftype.document': 'Belge',
1265
+ 'ftype.slides': 'Sunum',
1266
+ 'ftype.archive': 'Arşiv',
1267
+ 'ftype.code': 'Kod',
1268
+ /* === gorunum:v1-advsearch — Gelişmiş arama penceresi ===================
1269
+ * İki `filter.*` anahtarı kardeşlerinin yanında değil burada: paylaşılan
1270
+ * birleşimlere pencerenin eklediği yeni üyeler (`modified: 'around'`,
1271
+ * `size: 'range'`). Filtre satırı bunları hiç seçmez ama biri oraya
1272
+ * ulaşırsa `chipLabel` ham anahtarı yazardı. */
1273
+ 'filter.modified.around': 'Bir tarihin çevresinde',
1274
+ 'filter.size.range': 'Özel aralık',
1275
+
1276
+ 'advsearch.open': 'Gelişmiş arama',
1277
+ 'advsearch.title': 'Gelişmiş arama',
1278
+ 'advsearch.subtitle': 'Dosyaları ada, içeriğe, yola ya da etikete göre bulun.',
1279
+ 'advsearch.close': 'Kapat',
1280
+ 'advsearch.content.heading': 'İçerik araması',
1281
+ 'advsearch.viewall': 'Tüm sonuçları gör',
1282
+ 'advsearch.where.any_short': 'Her yerde',
1283
+ 'advsearch.where.here_short': 'Yalnız burada',
1284
+ 'advsearch.where.skip_short': 'Burayı atla',
1285
+ 'advsearch.server.legend': 'Sunucunun aradığı',
1286
+ 'advsearch.client.legend': 'Gelen sonuçları daralt',
1287
+ 'advsearch.query.label': 'Kelimeler',
1288
+ 'advsearch.query.placeholder': 'Adın bir parçası ya da dosyanın içindeki kelimeler',
1289
+ 'advsearch.scope.label': 'Nerede arasın',
1290
+ 'advsearch.scope.name': 'Ad ve yol',
1291
+ 'advsearch.scope.content': 'Dosya içeriği',
1292
+ 'advsearch.scope.all': 'İkisi de',
1293
+ 'advsearch.scope.hint':
1294
+ 'İçerik, dizinden aranır; dizin metin türü dosyaların ilk 200 KB’ını kapsar.',
1295
+ 'advsearch.people.name_only':
1296
+ 'Sahip, gelen satırlardan okunur; sahip bilgisi taşıyan satırları da yalnız ad araması döndürür.',
1297
+ 'advsearch.scope.name_only':
1298
+ '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.',
1299
+ 'advsearch.tags.label': 'Etiketler',
1300
+ 'advsearch.tags.placeholder': 'fatura, üç aylık rapor',
1301
+ 'advsearch.tags.exclude': 'Şu etiketler hariç',
1302
+ 'advsearch.tags.exclude_placeholder': 'arşiv',
1303
+ 'advsearch.tags.hint':
1304
+ '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.',
1305
+ 'advsearch.where.label': 'Klasör',
1306
+ 'advsearch.where.any': 'Bu deponun her yerinde',
1307
+ 'advsearch.where.here': 'Yalnız {folder} içinde',
1308
+ 'advsearch.where.skip': '{folder} dışındaki her yerde',
1309
+ 'advsearch.around.label': 'Şu kadar içinde',
1310
+ 'advsearch.around.date': 'Tarih ve saat',
1311
+ 'advsearch.around.h1': '1 saat',
1312
+ 'advsearch.around.d1': '1 gün',
1313
+ 'advsearch.around.w1': '1 hafta',
1314
+ 'advsearch.size.range_label': 'Şunun arasında',
1315
+ 'advsearch.size.from': 'En az',
1316
+ 'advsearch.size.to': 'En çok',
1317
+ 'advsearch.count.idle': 'Bir şeyler yazın ya da etiket seçin.',
1318
+ 'advsearch.count.counting': 'Sayılıyor…',
1319
+ 'advsearch.count.result': '{n} eşleşen öğe',
1320
+ 'advsearch.count.capped': 'Sonuçların ilk sayfasında {n} eşleşen öğe',
1321
+ 'advsearch.count.result_one': '1 eşleşen öğe',
1322
+ 'advsearch.count.capped_one': 'Sonuçların ilk sayfasında 1 eşleşen öğe',
1323
+ 'advsearch.count.error': 'Sayım çalıştırılamadı.',
1324
+ 'advsearch.count.cost':
1325
+ '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.',
1326
+ 'advsearch.wire': 'Gönderilen',
1327
+ 'advsearch.reset': 'Sıfırla',
1328
+ 'advsearch.cancel': 'Vazgeç',
1329
+ 'advsearch.submit': 'Ara',
1330
+
1331
+ /* === gorunum:v2-topbar — sayfanın üst barı kalktı; onun taşıdıklarını
1332
+ artık gezginin kendi başlığı ve kırıntı satırı taşıyor. === */
1333
+ 'breadcrumb.subfolders': 'Alt klasörler',
1334
+ 'breadcrumb.subfolders.empty': 'Burada alt klasör yok',
1335
+ 'header.admin': 'Yönetim paneli',
1336
+ 'header.settings': 'Ayarlar',
1337
+ 'header.signout': 'Çıkış yap',
1338
+ 'ai.assistant': 'AI asistanı',
1339
+ 'ai.soon': 'Yakında',
1340
+ 'ai.assistant.soon': 'AI asistanı — yakında',
1341
+
1342
+ /* gorunum:v2-share — Paylaş / İzinler penceresinin kendi çerçevesi. İçindeki
1343
+ denetimler eski metinlerini koruyor; buradakiler yeni kabuk: başlık, tek
1344
+ anahtar, "şu anda kim açabilir" cümlesi ve her şeyin katlandığı üç adlı
1345
+ bölüm. */
1346
+ 'access.title': '"{name}" paylaşımı',
1347
+ 'access.close': 'Kapat',
1348
+ 'access.done': 'Bitti',
1349
+ 'access.copy': 'Kopyala',
1350
+ 'access.copied': 'Kopyalandı',
1351
+ 'access.link.switch': 'Bağlantı paylaşımı',
1352
+ 'access.who.private': 'Yalnızca erişimi olan kişiler açabilir.',
1353
+ 'access.who.link': 'Bağlantıyı bilen herkes açabilir.',
1354
+ 'access.who.pin': "Bağlantıyı ve PIN'i bilen herkes açabilir.",
1355
+ 'access.who.existing': 'Bağlantı paylaşımı açık — {n} bağlantı var.',
1356
+ 'access.who.existing_one': 'Bağlantı paylaşımı açık — {n} bağlantı var.',
1357
+ 'access.section.link': 'Bağlantı seçenekleri',
1358
+ 'access.section.people': 'Erişimi olanlar',
1359
+ 'access.section.drop': 'Dosya iste',
1360
+ 'access.sum.pin_on': 'PIN var',
1361
+ 'access.sum.pin_off': 'PIN yok',
1362
+ 'access.sum.people': '{n} kişi',
1363
+ 'access.sum.people_one': '{n} kişi',
1364
+ 'access.sum.people_none': 'Henüz kimse yok',
1365
+ 'access.sum.drop': '{n} yükleme bağlantısı',
1366
+ 'access.sum.drop_one': '{n} yükleme bağlantısı',
1367
+ 'access.sum.drop_none': 'Yükleme bağlantısı yok',
1368
+ /* Sahiplik — Sahibi sütunu ve Kişiler çipi. "Sistem", filex üzerinden kimsenin
1369
+ koymadığı satırın dürüst karşılığıdır (tarayıcı buldu ya da doğrudan kovaya
1370
+ yazıldı); boşluk değil, gerçek bir cevaptır. */
1371
+ 'col.owner': 'Sahibi',
1372
+ 'owner.you': 'Siz',
1373
+ 'owner.system': 'Sistem',
1374
+ 'owner.unknown': 'Bilinmiyor',
1375
+ 'owner.external': 'Yükleme bağlantısıyla geldi',
1376
+ 'owner.last_actor': 'Son değiştiren: {who}',
1377
+ 'filter.people': 'Kişiler',
1378
+ 'filter.people.any': 'Herkes',
1379
+ 'filter.people.me': 'Siz',
1380
+ 'filter.people.system': 'Sistem',
1381
+ 'filter.people.someone': 'Başka biri',
1382
+ /* surucu:d1-sort — filtre satırının sağ ucundaki sıralama denetimi. Dört
1383
+ ölçütün adı `col.*`: menü, liste görünümünün sütun başlıklarındaki
1384
+ sözcüklerin aynısını sunar — tek bir sıralamayı süren iki denetim onu
1385
+ farklı adlarla anamaz. */
1386
+ 'sort.by': 'Sıralama ölçütü',
1387
+ 'sort.asc': 'Artan',
1388
+ 'sort.desc': 'Azalan',
1389
+ /* Bir ARAMA SONUCUNUN sırası. Beşinci bir sıralama ölçütü değildir —
1390
+ ekrandaki satırları sunucu sıraladığında denetim, ölçüt adı yerine bunu
1391
+ yazar; böylece yapmadığı bir sıralamayı üstlenmez. `_why` denetimin neden
1392
+ kapalı olduğudur: Burak, denetimin sessizce işlevsizleşmesini değil
1393
+ nedeninin yazılmasını istedi. */
1394
+ 'sort.relevance': 'Alaka',
1395
+ 'sort.relevance_why':
1396
+ 'Arama sonuçları eşleşme yakınlığına göre listelenir. Seçtiğiniz sıralama, aramadan çıkınca geri gelir.',
1397
+ /* === tablo:t1 — tablonun kendi yapılandırması ==========================
1398
+ Sütun genişlikleri ve görünürlüğü EKRANINIZA dair bir tercihtir; bir
1399
+ klasörün hangi görünümle açılacağı ise KLASÖRE dair bir olgudur. İkisi de
1400
+ buradan ayarlanır; `folder_hint` kuralı tek cümlede, tam da ona şaşıracak
1401
+ kişinin okuyabileceği yerde söyler. */
1402
+ 'col.location': 'Konum',
1403
+ 'cols.menu': 'Sütun seçenekleri',
1404
+ 'cols.title': 'Sütunlar',
1405
+ 'cols.resize': '{col} sütununu yeniden boyutlandır',
1406
+ 'cols.move_left': '{col} sütununu sola taşı',
1407
+ 'cols.move_right': '{col} sütununu sağa taşı',
1408
+ 'cols.reset': 'Sütunları sıfırla',
1409
+ 'cols.folder_title': 'Klasör görünümü',
1410
+ 'cols.folder_hint':
1411
+ 'Ayarladığınız klasörler kendi görünümünü korur. Son seçiminiz diğer her yerde varsayılan olur.',
1412
+ 'cols.forget_folder': 'Bu klasörün görünümünü unut',
1413
+ 'cols.apply_all': 'Tüm klasörlere uygula ({count} klasör hatırlanıyor)',
1414
+ /* === tablo:t1 — çöp kutusu bilgi şeridi ================================
1415
+ ⚠ `retention` yalnızca kurulum bize sayıyı SÖYLEDİĞİNDE kullanılır
1416
+ (GET /api/admin/protection). Diğer her durumda `retention_unknown` aynı
1417
+ şeyi, doğrulayamadığımız bir süreyi taahhüt etmeden söyler: yanlış saklama
1418
+ süresi yazan bir şerit, hiç şerit olmamasından kötüdür — insanlar ona
1419
+ bakıp karar verir. */
1420
+ 'trash.retention': 'Çöp kutusundaki öğeler {days} gün sonra kalıcı olarak silinir.',
1421
+ 'trash.retention_one': 'Çöp kutusundaki öğeler {days} gün sonra kalıcı olarak silinir.',
1422
+ 'trash.retention_unknown':
1423
+ 'Çöp kutusundaki öğeler, yöneticinizin belirlediği saklama süresi dolunca kalıcı olarak silinir.',
1424
+ 'trash.empty_action': 'Çöp kutusunu boşalt',
1425
+ 'trash.empty_confirm_title': 'Çöp kutusu boşaltılsın mı?',
1426
+ 'trash.empty_confirm_body_one': 'Bu işlem 1 öğeyi ({size}) kalıcı olarak siler. Geri alınamaz.',
1427
+ 'trash.empty_confirm_body':
1428
+ 'Bu işlem {count} öğeyi ({size}) kalıcı olarak siler. Geri alınamaz.',
1429
+ 'trash.empty_confirm_body_nosize_one': 'Bu işlem 1 öğeyi kalıcı olarak siler. Geri alınamaz.',
1430
+ 'trash.empty_confirm_body_nosize': 'Bu işlem {count} öğeyi kalıcı olarak siler. Geri alınamaz.',
1431
+ 'trash.emptied': 'Çöp kutusu boşaltıldı',
1432
+ 'empty.trash.hint': 'Sildiğiniz dosyalar önce buraya düşer, böylece geri alabilirsiniz.',
1433
+
1434
+ /* tasi:m1 — hedef klasör seçici (modals/DestinationPickerModal.vue) ve
1435
+ üzerine kurulan iki seçim eylemi. */
1436
+ 'destpicker.title.move': 'Şuraya taşı',
1437
+ 'destpicker.title.copy': 'Şuraya kopyala',
1438
+ 'destpicker.title.choose': 'Klasör seç',
1439
+ 'destpicker.confirm.move': 'Buraya taşı',
1440
+ 'destpicker.confirm.copy': 'Buraya kopyala',
1441
+ 'destpicker.confirm.choose': 'Bu klasörü seç',
1442
+ 'destpicker.cancel': 'Vazgeç',
1443
+ 'destpicker.up': 'Bir üst klasör',
1444
+ 'destpicker.crumbs': 'Konum',
1445
+ 'destpicker.drives': 'Sürücüler',
1446
+ 'destpicker.loading': 'Yükleniyor…',
1447
+ 'destpicker.empty': 'Burada alt klasör yok',
1448
+ 'destpicker.unreadable': 'Bu klasör açılamıyor.',
1449
+ 'destpicker.readonly': 'Salt okunur',
1450
+ 'destpicker.readonly_here': 'Bu klasöre yazamazsınız.',
1451
+ 'destpicker.pick_a_drive': 'Bir klasör seçmek için önce bir depo açın.',
1452
+ 'destpicker.target': 'Hedef: {name}',
1453
+ 'destpicker.tag.blocked': 'Uygun değil',
1454
+ 'destpicker.blocked.self': 'Bir klasör kendi içine taşınamaz.',
1455
+ 'destpicker.blocked.descendant': 'Bir klasör kendi alt klasörlerinden birine taşınamaz.',
1456
+
1457
+ 'ctx.move_to': 'Şuraya taşı…',
1458
+ 'ctx.copy_to': 'Şuraya kopyala…',
1459
+ 'ctx.access.one_only': 'Paylaşım aynı anda tek öğe için çalışır.',
1460
+
1461
+ 'toast.archive.preparing': 'Arşiv hazırlanıyor…',
1462
+ 'toast.archive.started': '{name} indiriliyor ({count} dosya)',
1463
+ 'toast.archive.started_one': '{name} indiriliyor ({count} dosya)',
1464
+ 'toast.archive.empty': 'İndirilecek bir şey yok — seçimde okunabilir dosya bulunmuyor.',
1465
+ 'toast.moved_to': '{name} klasörüne taşındı',
1466
+ 'toast.copied_to': '{name} klasörüne kopyalama kuyruğa alındı',
1084
1467
  };