Files
Crosspoint/lib/I18n/translations/turkish.yaml
T
Wylan SwetsandClaude Sonnet 4.6 e64155ed63 fix: free Epub RAM and simplify KOSync navigation via ActivityManager (#1860)
## Summary

* **What is the goal of this PR?** Fix KOSync failing with "Network
error" on large/complex EPUBs, and simplify the sync navigation flow by
removing the callback/result pattern.

* **What changes are included?**

This PR combines the approaches from #1855 and #1760 into a single,
cleaner solution:

  **Memory fix (from #1855):**
- `EpubReaderActivity` pre-computes the local KOReader position and
chapter name, then explicitly releases `epub` and `section` before
launching `KOReaderSyncActivity`. This frees ~65KB measured on device,
giving the TLS handshake sufficient heap. The root cause was
`MBEDTLS_ERR_X509_ALLOC_FAILED` (-0x2880) when a 3-cert chain consumed
~48KB during the handshake with only ~50KB available.
- `KOReaderSyncActivity` no longer receives a `shared_ptr<Epub>` at
construction — it lazy-loads the Epub after TLS only if remote progress
is found (`ensureEpubLoaded()`).
- Added `MIN_HEAP_FOR_TLS = 55000` guard in `KOReaderSyncClient` —
returns `LOW_MEMORY` early if aggregate free heap is too low before
attempting a TLS connection.

  **Navigation simplification (from #1760):**
- Replaced `startActivityForResult` + callback with
`activityManager.replaceActivity` / `activityManager.goToReader`.
Progress is saved to `progress.bin` before the epub is released
(cancel/upload paths) and in `saveProgressAndReturn` (apply remote
path). The reader re-launches from the saved position naturally via
`goToReader`, eliminating the need to reload the epub in a callback.
- Extracted `ReaderUtils::saveProgress()` as a shared helper used by
both `EpubReaderActivity` and `KOReaderSyncActivity`.
- Added `STR_SAVE_PROGRESS_FAILED` to all 22 language files for the case
where writing the synced position to SD fails.

  **Orientation fix (found during device testing):**
- `EpubReaderActivity::onExit()` resets the renderer to portrait before
destruction. With `replaceActivity` the reader is fully torn down before
KOSync starts, so KOSync was always rendering in portrait even when
reading in landscape. Fixed by calling `ReaderUtils::applyOrientation`
in `KOReaderSyncActivity::onEnter()`.

## Additional Context

Heap measurements on device (large EPUB with complex CSS):

| Metric | Before | After |
|---|---|---|
| Heap before Epub release | 88,156 bytes | — |
| Heap after Epub release | — | 153,892 bytes (+65,736) |
| Heap at TLS handshake | ~50,000 bytes (fails) | ~116,384 bytes
(passes) |
| Min-free-ever during sync session | 2,600 bytes | 33,052 bytes |
| TLS result | `MBEDTLS_ERR_X509_ALLOC_FAILED` | HTTP 200 |

Tested on device: sync from inside a large EPUB in both portrait and
landscape, cancel, apply remote progress, upload local progress.

---

### AI Usage

Did you use AI tools to help write this code? _**YES**_

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 22:01:31 -05:00

298 lines
11 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
_language_name: "Türkçe"
_language_code: "TR"
_order: "17"
STR_CROSSPOINT: "CrossPoint"
STR_BOOTING: "BAŞLATILIYOR"
STR_SLEEPING: "UYKU MODU"
STR_ENTERING_SLEEP: "Uyku moduna geçiliyor"
STR_BROWSE_FILES: "Dosyalara Göz At"
STR_FILE_TRANSFER: "Dosya Transferi"
STR_SETTINGS_TITLE: "Ayarlar"
STR_CONTINUE_READING: "Okumaya Devam Et"
STR_NO_OPEN_BOOK: "Açık kitap yok"
STR_START_READING: "Aşağıdan okumaya başlayın"
STR_SELECT_CHAPTER: "Bölüm Seç"
STR_NO_CHAPTERS: "Bölüm yok"
STR_END_OF_BOOK: "Kitabın sonu"
STR_EMPTY_CHAPTER: "Boş bölüm"
STR_INDEXING: "Endeksleniyor"
STR_MEMORY_ERROR: "Bellek hatası"
STR_PAGE_LOAD_ERROR: "Sayfa yükleme hatası"
STR_EMPTY_FILE: "Boş dosya"
STR_OUT_OF_BOUNDS: "Sınırların dışında"
STR_LOADING: "Yükleniyor..."
STR_LOADING_POPUP: "Yükleniyor"
STR_WIFI_NETWORKS: "WiFi Ağları"
STR_NO_NETWORKS: "Ağ bulunamadı"
STR_NETWORKS_FOUND: "%zu ağ bulundu"
STR_SCANNING: "Tarıyor..."
STR_CONNECTING: "Bağlanıyor..."
STR_CONNECTED: "Bağlandı!"
STR_CONNECTION_FAILED: "Bağlantı Başarısız"
STR_FORGET_NETWORK: "Ağı Unut?"
STR_SAVE_PASSWORD: "Şifre kaydedilsin mi?"
STR_PRESS_OK_SCAN: "Tekrar taramak için OK'e basın"
STR_JOIN_NETWORK: "Bir Ağa Katıl"
STR_CREATE_HOTSPOT: "Erişim Noktası Oluştur"
STR_JOIN_DESC: "Mevcut bir WiFi ağına bağlan"
STR_HOTSPOT_DESC: "Başkalarının katılabileceği ağ oluştur"
STR_STARTING_HOTSPOT: "Erişim Noktası Başlatılıyor..."
STR_HOTSPOT_MODE: "Erişim Noktası Modu"
STR_CONNECT_WIFI_HINT: "Cihazınızı bu WiFi ağına bağlayın"
STR_OPEN_URL_HINT: "Tarayıcınızda bu adresi açın"
STR_OR_HTTP_PREFIX: "veya http://"
STR_SCAN_QR_HINT: "veya telefonunuzla QR kodu tarayın:"
STR_CALIBRE_WIRELESS: "Calibre Kablosuz"
STR_CALIBRE_WEB_URL: "OPDS URL"
STR_NETWORK_LEGEND: "* = Şifreli | + = Kayıtlı"
STR_MAC_ADDRESS: "MAC adresi:"
STR_CHECKING_WIFI: "WiFi kontrol ediliyor..."
STR_ENTER_WIFI_PASSWORD: "WiFi Şifresini Girin"
STR_TO_PREFIX: "Ağ: "
STR_CALIBRE_RECEIVING: "Alınıyor: "
STR_CALIBRE_RECEIVED: "Alındı: "
STR_CALIBRE_INSTRUCTION_1: "1) CrossPoint Reader eklentisini kurun"
STR_CALIBRE_INSTRUCTION_2: "2) Aynı WiFi ağında olun"
STR_CALIBRE_INSTRUCTION_3: "3) Calibre'de: \"Cihaza gönder\""
STR_CALIBRE_INSTRUCTION_4: "\"Gönderim sırasında bu ekranı açık tutun\""
STR_CAT_DISPLAY: "Ekran"
STR_CAT_READER: "Okuyucu"
STR_CAT_CONTROLS: "Kontroller"
STR_CAT_SYSTEM: "Sistem"
STR_SLEEP_SCREEN: "Uyku Ekranı"
STR_SLEEP_COVER_MODE: "Uyku Ekranı Kapak Modu"
STR_HIDE_BATTERY: "Pil Yüzdesini Gizle"
STR_EXTRA_SPACING: "Ekstra Paragraf Boşluğu"
STR_TEXT_AA: "Metin Yumuşatma (AA)"
STR_SHORT_PWR_BTN: "Kısa Güç Tuşu Tıklaması"
STR_ORIENTATION: "Okuma Yönü"
STR_SIDE_BTN_LAYOUT: "Yan Tuş Dizilimi (okuyucu)"
STR_LONG_PRESS_BEHAVIOR: "Long-press button behavior"
STR_LONG_PRESS_BEHAVIOR_OFF: "OFF"
STR_LONG_PRESS_BEHAVIOR_SKIP: "Chapter skip"
STR_LONG_PRESS_BEHAVIOR_ORIENTATION: "Orientation change"
STR_FONT_FAMILY: "Okuyucu Yazı Tipi Ailesi"
STR_FONT_SIZE: "Arayüz Yazı Boyutu"
STR_LINE_SPACING: "Okuyucu Satır Aralığı"
STR_SCREEN_MARGIN: "Okuyucu Ekran Kenar Boşluğu"
STR_PARA_ALIGNMENT: "Okuyucu Paragraf Hizalaması"
STR_HYPHENATION: "Hecelerden Ayırma"
STR_TIME_TO_SLEEP: "Uykuya Geçme Süresi"
STR_SHOW_HIDDEN_FILES: "Gizli Dosyaları Göster"
STR_REFRESH_FREQ: "Yenileme Sıklığı"
STR_KOREADER_SYNC: "KOReader Senkronizasyonu"
STR_CHECK_UPDATES: "Güncellemeleri denetle"
STR_LANGUAGE: "Dil"
STR_CLEAR_READING_CACHE: "Okuma Önbelleğini Temizle"
STR_USERNAME: "Kullanıcı Adı"
STR_PASSWORD: "Şifre"
STR_SYNC_SERVER_URL: "Senkronizasyon Sunucu Adresi"
STR_DOCUMENT_MATCHING: "Belge Eşleştirme"
STR_AUTHENTICATE: "Kimlik Doğrula"
STR_KOREADER_USERNAME: "KOReader Kullanıcı Adı"
STR_KOREADER_PASSWORD: "KOReader Şifresi"
STR_FILENAME: "Dosya Adı"
STR_BINARY: "İkili"
STR_SET_CREDENTIALS_FIRST: "Önce kimlik bilgilerini ayarlayın"
STR_WIFI_CONN_FAILED: "WiFi bağlantısı başarısız"
STR_AUTHENTICATING: "Kimlik doğrulanıyor..."
STR_AUTH_SUCCESS: "Kimlik doğrulama başarılı!"
STR_KOREADER_AUTH: "KOReader Doğrulaması"
STR_SYNC_READY: "KOReader senkronizasyonu hazır"
STR_AUTH_FAILED: "Kimlik Doğrulama Başarısız"
STR_DONE: "Tamamlandı"
STR_CLEAR_CACHE_WARNING_1: "Bu işlem tüm önbelleğe alınmış verileri siler."
STR_CLEAR_CACHE_WARNING_2: "Tüm okuma ilerlemesi kaybolacak!"
STR_CLEAR_CACHE_WARNING_3: "Kitapların tekrar açıldığında yeniden"
STR_CLEAR_CACHE_WARNING_4: "endekslenmesi gerekecek."
STR_CLEARING_CACHE: "Önbellek temizleniyor..."
STR_CACHE_CLEARED: "Önbellek Temizlendi"
STR_ITEMS_REMOVED: "öğe kaldırıldı"
STR_FAILED_LOWER: "başarısız"
STR_CLEAR_CACHE_FAILED: "Önbellek temizlenemedi"
STR_CHECK_SERIAL_OUTPUT: "Detaylar için seri çıktıya bakın"
STR_DARK: "Koyu"
STR_LIGHT: "Açık"
STR_CUSTOM: "Özel"
STR_COVER: "Kapak"
STR_NONE_OPT: "Yok"
STR_FIT: "Sığdır"
STR_CROP: "Kırp"
STR_NEVER: "Asla"
STR_IN_READER: "Okuyucuda"
STR_ALWAYS: "Her Zaman"
STR_IGNORE: "Yoksay"
STR_SLEEP: "Uyku"
STR_PAGE_TURN: "Sayfa Çevirme"
STR_PORTRAIT: "Dikey"
STR_LANDSCAPE_CW: "Yatay (Saat Yönü)"
STR_INVERTED: "Ters"
STR_LANDSCAPE_CCW: "Yatay (Saat Yönü Tersi)"
STR_PREV_NEXT: "Önceki/Sonraki"
STR_NEXT_PREV: "Sonraki/Önceki"
STR_NOTO_SERIF: "Noto Serif"
STR_NOTO_SANS: "Noto Sans"
STR_OPEN_DYSLEXIC: "Open Dyslexic"
STR_SMALL: "Küçük"
STR_MEDIUM: "Orta"
STR_LARGE: "Büyük"
STR_X_LARGE: "Çok Büyük"
STR_TIGHT: "Dar"
STR_NORMAL: "Normal"
STR_WIDE: "Geniş"
STR_JUSTIFY: "İki Yana Yasla"
STR_ALIGN_LEFT: "Sola Yasla"
STR_CENTER: "Ortala"
STR_ALIGN_RIGHT: "Sağa Yasla"
STR_MIN_1: "1 dak"
STR_MIN_5: "5 dak"
STR_MIN_10: "10 dak"
STR_MIN_15: "15 dak"
STR_MIN_30: "30 dak"
STR_PAGES_1: "1 sayfa"
STR_PAGES_5: "5 sayfa"
STR_PAGES_10: "10 sayfa"
STR_PAGES_15: "15 sayfa"
STR_PAGES_30: "30 sayfa"
STR_UPDATE: "Güncelle"
STR_CHECKING_UPDATE: "Güncelleme denetleniyor..."
STR_NEW_UPDATE: "Yeni güncelleme mevcut!"
STR_CURRENT_VERSION: "Mevcut Sürüm: "
STR_NEW_VERSION: "Yeni Sürüm: "
STR_UPDATING: "Güncelleniyor..."
STR_NO_UPDATE: "Güncelleme yok"
STR_UPDATE_FAILED: "Güncelleme başarısız"
STR_UPDATE_COMPLETE: "Güncelleme tamamlandı"
STR_POWER_ON_HINT: "Açmak için güç tuşuna basılı tutun"
STR_NO_ENTRIES: "Girdi bulunamadı"
STR_DOWNLOADING: "İndiriliyor..."
STR_DOWNLOAD_FAILED: "İndirme başarısız"
STR_ERROR_MSG: "Hata:"
STR_UNNAMED: "İsimsiz"
STR_NO_SERVER_URL: "Sunucu adresi ayarlanmamış"
STR_FETCH_FEED_FAILED: "Akış alınamadı"
STR_PARSE_FEED_FAILED: "Akış ayrıştırılamadı"
STR_NETWORK_PREFIX: "Ağ: "
STR_IP_ADDRESS_PREFIX: "IP Adresi: "
STR_ERROR_GENERAL_FAILURE: "Hata: Genel hata"
STR_ERROR_NETWORK_NOT_FOUND: "Hata: Ağ bulunamadı"
STR_ERROR_CONNECTION_TIMEOUT: "Hata: Bağlantı zaman aşımı"
STR_SD_CARD: "SD kart"
STR_BACK: "« Geri"
STR_EXIT: "« Çıkış"
STR_HOME: "« Ana Sayfa"
STR_SELECT: "Seç"
STR_TOGGLE: "Değiştir"
STR_CONFIRM: "Onayla"
STR_CANCEL: "İptal"
STR_CONNECT: "Bağlan"
STR_OPEN: "Aç"
STR_DOWNLOAD: "İndir"
STR_RETRY: "Tekrar Dene"
STR_YES: "Evet"
STR_NO: "Hayır"
STR_STATE_ON: "AÇIK"
STR_STATE_OFF: "KAPALI"
STR_NOT_SET: "Ayarlanmadı"
STR_DIR_LEFT: "Sol"
STR_DIR_RIGHT: "Sağ"
STR_DIR_UP: "Yukarı"
STR_DIR_DOWN: "Aşağı"
STR_OK_BUTTON: "Tamam"
STR_SLEEP_COVER_FILTER: "Uyku Ekranı Kapak Filtresi"
STR_FILTER_CONTRAST: "Kontrast"
STR_UI_THEME: "Arayüz Teması"
STR_THEME_CLASSIC: "Klasik"
STR_THEME_LYRA: "Lyra"
STR_THEME_LYRA_EXTENDED: "Lyra Genişletilmiş"
STR_SUNLIGHT_FADING_FIX: "Güneş Işığı Solma Düzeltmesi"
STR_REMAP_FRONT_BUTTONS: "Ön Tuşları Yeniden Ata"
STR_OPDS_BROWSER: "OPDS Tarayıcı"
STR_COVER_CUSTOM: "Kapak + Özel"
STR_MENU_RECENT_BOOKS: "Son Kitaplar"
STR_NO_RECENT_BOOKS: "Son okunan kitap yok"
STR_CALIBRE_DESC: "Calibre kablosuz cihaz transferini kullan"
STR_FORGET_AND_REMOVE: "Ağı unut ve kayıtlı şifreyi sil?"
STR_FORGET_BUTTON: "Unut"
STR_CALIBRE_STARTING: "Calibre Başlatılıyor..."
STR_CALIBRE_SETUP: "Kurulum"
STR_CALIBRE_STATUS: "Durum"
STR_CLEAR_BUTTON: "Temizle"
STR_DEFAULT_VALUE: "Varsayılan"
STR_REMAP_PROMPT: "Her rol için bir ön tuşa basın"
STR_UNASSIGNED: "Atanmamış"
STR_ALREADY_ASSIGNED: "Zaten atanmış"
STR_REMAP_RESET_HINT: "Yan tuş Yukarı: Varsayılan dizilime dön"
STR_REMAP_CANCEL_HINT: "Yan tuş Aşağı: Atamayı iptal et"
STR_HW_BACK_LABEL: "Geri (1. tuş)"
STR_HW_CONFIRM_LABEL: "Onayla (2. tuş)"
STR_HW_LEFT_LABEL: "Sol (3. tuş)"
STR_HW_RIGHT_LABEL: "Sağ (4. tuş)"
STR_GO_TO_PERCENT: "%'ye git"
STR_GO_HOME_BUTTON: "Ana Sayfaya Git"
STR_SYNC_PROGRESS: "Okuma İlerlemesini Senkronize Et"
STR_DELETE_CACHE: "Kitap Önbelleğini Sil"
STR_CHAPTER_PREFIX: "Bölüm: "
STR_PAGES_SEPARATOR: " sayfa | "
STR_BOOK_PREFIX: "Kitap: "
STR_CALIBRE_URL_HINT: "Calibre için URL'nize /opds ekleyin"
STR_PERCENT_STEP_HINT: "Sol/Sağ: %1 Yukarı/Aşağı: %10"
STR_SYNCING_TIME: "Zaman senkronize ediliyor..."
STR_CALC_HASH: "Belge özeti hesaplanıyor..."
STR_HASH_FAILED: "Belge özeti hesaplanamadı"
STR_FETCH_PROGRESS: "Uzak ilerleme alınıyor..."
STR_UPLOAD_PROGRESS: "İlerleme yükleniyor..."
STR_NO_CREDENTIALS_MSG: "Kimlik bilgisi ayarlanmamış"
STR_KOREADER_SETUP_HINT: "Ayarlar'da KOReader hesabını kurun"
STR_PROGRESS_FOUND: "İlerleme bulundu!"
STR_REMOTE_LABEL: "Uzak:"
STR_LOCAL_LABEL: "Yerel:"
STR_PAGE_OVERALL_FORMAT: "Sayfa %d, genel %.2f%%"
STR_PAGE_TOTAL_OVERALL_FORMAT: "Sayfa %d/%d, genel %.2f%%"
STR_DEVICE_FROM_FORMAT: " Şuradan: %s"
STR_APPLY_REMOTE: "Uzak ilerlemeyi uygula"
STR_UPLOAD_LOCAL: "Yerel ilerlemeyi yükle"
STR_NO_REMOTE_MSG: "Uzak ilerleme bulunamadı"
STR_UPLOAD_PROMPT: "Mevcut konumu yükle?"
STR_UPLOAD_SUCCESS: "İlerleme yüklendi!"
STR_SYNC_FAILED_MSG: "Senkronizasyon başarısız"
STR_SAVE_PROGRESS_FAILED: "İlerleme kaydedilemedi"
STR_SECTION_PREFIX: "Bölüm "
STR_UPLOAD: "Yükle"
STR_BOOK_S_STYLE: "Kitabın Stili"
STR_EMBEDDED_STYLE: "Gömülü Stil"
STR_OPDS_SERVER_URL: "OPDS Sunucu Adresi"
STR_AUTO_TURN_ENABLED: "Otomatik Çevirme Etkin: "
STR_AUTO_TURN_PAGES_PER_MIN: "Otomatik Çevirme (Dakikada Sayfa)"
STR_BATTERY: "Pil"
STR_BOOK: "Kitap"
STR_BOOK_PROGRESS_PERCENTAGE: "Kitap İlerleme Yüzdesi"
STR_CHAPTER: "Bölüm"
STR_CHAPTER_PAGE_COUNT: "Bölüm Sayfa Sayısı"
STR_CUSTOMISE_STATUS_BAR: "Durum Çubuğunu Özelleştir"
STR_DELETE: "Sil"
STR_DISPLAY_QR: "Sayfayı QR olarak göster"
STR_EXAMPLE_BOOK: "Kitap Başlığı"
STR_EXAMPLE_CHAPTER: "Bölüm 21"
STR_FOOTNOTES: "Dipnotlar"
STR_HIDE: "Gizle"
STR_IMAGES: "Görseller"
STR_IMAGES_DISPLAY: "Göster"
STR_IMAGES_PLACEHOLDER: "Yer Tutucu"
STR_IMAGES_SUPPRESS: "Bastır"
STR_LINK: "[bağlantı]"
STR_NO_FILES_FOUND: "Dosya bulunamadı"
STR_NO_FOOTNOTES: "Bu sayfada dipnot yok"
STR_PREVIEW: "Önizleme"
STR_PROGRESS_BAR: "İlerleme Çubuğu"
STR_PROGRESS_BAR_MEDIUM: "Orta"
STR_PROGRESS_BAR_THICK: "Kalın"
STR_PROGRESS_BAR_THICKNESS: "İlerleme Çubuğu Kalınlığı"
STR_PROGRESS_BAR_THIN: "İnce"
STR_SCREENSHOT_BUTTON: "Ekran görüntüsü al"
STR_SELECTED: "Seçili"
STR_SHOW: "Göster"
STR_TITLE: "Başlık"
STR_TILT_PAGE_TURN: "Eğerek sayfa çevirme"