Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions web/src/lib/i18n/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
} from "react";
import { translations, type Lang, type TranslationKey } from "./translations";

const LANGS: Lang[] = ["en", "zh", "ar"];
const LANGS: Lang[] = ["en", "zh", "ar", "tr"];

export type TranslateFn = (
key: TranslationKey | string,
Expand All @@ -18,7 +18,7 @@ export type TranslateFn = (
function readLang(): Lang {
if (typeof window === "undefined") return "en";
const stored = localStorage.getItem("opencode-mem-lang");
if (stored === "en" || stored === "zh" || stored === "ar") return stored;
if (stored === "en" || stored === "zh" || stored === "ar" || stored === "tr") return stored;
return "en";
}

Expand Down
151 changes: 151 additions & 0 deletions web/src/lib/i18n/translations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -484,6 +484,157 @@ export const translations = {

"auth-warning-text": "التحرير عبر المصادر معطّل. قم بتعيين webServerAuthPassword لتفعيله.",
},
tr: {
title: "OpenCode Hafıza Gezgini",
brand: "opencode-mem",
"tab-project": "PROJE HAFIZASI",
"tab-profile": "KULLANICI PROFİLİ",
"nav-menu": "Menü",
"nav-close": "Menüyü kapat",
"nav-language": "Dil",
"nav-theme": "Tema",
"theme-dark": "Koyu",
"theme-light": "Açık",
"label-tag": "Etiket:",
"label-type": "Tür:",
"label-tags": "Etiketler:",
"label-content": "İçerik:",
"btn-cleanup": "Temizle",
"btn-deduplicate": "Yinelenenleri kaldır",
"btn-delete-selected": "Seçilenleri sil",
"btn-select-all": "Sayfayı seç",
"btn-deselect-all": "Seçimi kaldır",
"btn-add-memory": "Hafıza ekle",
"section-project": "Proje hafızası ({count})",
"section-profile": "Kullanıcı profili",
"section-add": "Yeni hafıza ekle",
"opt-all-tags": "Tüm etiketler",
"opt-select-tag": "Etiket seç",
"opt-other": "diğer (other)",
"opt-feature": "özellik (feature)",
"opt-bug-fix": "hata düzeltme (bug-fix)",
"opt-refactor": "yeniden düzenleme (refactor)",
"opt-architecture": "mimari (architecture)",
"opt-rule": "kural (rule)",
"opt-documentation": "dokümantasyon (documentation)",
"opt-discussion": "tartışma (discussion)",
"opt-analysis": "analiz (analysis)",
"opt-configuration": "yapılandırma (configuration)",
"modal-edit-title": "Hafızayı düzenle",
"modal-migration-title": "Hafıza etiketleme geçişi",
"modal-changelog-title": "Profil sürüm geçmişi",
"btn-cancel": "İptal",
"btn-save": "Değişiklikleri kaydet",
"btn-start-migration": "Geçişi başlat",
"loading-init": "Başlatılıyor...",
"loading-profile": "Profil yükleniyor...",
"loading-changelog": "Değişiklik günlüğü yükleniyor...",
"migration-mismatch": "Model boyut uyumsuzluğu algılandı!",
"migration-understand":
"Bu işlemin geri alınamaz olduğunu ve saklanan tüm hafızaları etkileyeceğini anlıyorum",
"btn-fresh-start": "Yeni başlangıç (tümünü sil)",
"btn-reembed": "Yeniden gömme (verileri koru)",
"migration-note":
"Lütfen tarayıcıyı kapatmayın. Hafızalarınız arama doğruluğunu artırmak için teknik etiketlerle yeniden vektörlenecek.",
"placeholder-search": "Hafızalarda ara...",
"placeholder-tags": "react, hooks, auth (virgülle ayrılmış)",
"placeholder-content": "Hafıza içeriğini girin...",
"toast-add-success": "Hafıza başarıyla eklendi",
"toast-add-error": "İçerik ve etiket zorunludur",
"toast-add-failed": "Hafıza eklenemedi",
"toast-delete-success": "Hafıza başarıyla silindi",
"toast-delete-failed": "Hafıza silinemedi",
"toast-update-success": "Hafıza başarıyla güncellendi",
"toast-update-failed": "Hafıza güncellenemedi",
"toast-cleanup-success": "Temizleme başarıyla tamamlandı",
"toast-cleanup-failed": "Temizleme başarısız oldu",
"toast-dedup-success": "Yinelenenleri kaldırma tamamlandı",
"toast-dedup-failed": "Yinelenenleri kaldırma başarısız oldu",
"toast-bulk-delete-success": "Seçilen hafızalar başarıyla silindi",
"toast-bulk-delete-failed": "Seçilen hafızalar silinemedi",
"toast-migration-success": "Geçiş başarıyla tamamlandı",
"toast-migration-failed": "Geçiş başarısız oldu",
"toast-fresh-start-success": "Yeni başlangıç başarıyla tamamlandı",
"toast-fresh-start-failed": "Yeni başlangıç başarısız oldu",
"confirm-delete": "Bu hafıza silinsin mi?",
"confirm-delete-title": "Silmeyi onayla",
"confirm-delete-pair": "Bu hafıza VE bağlı olduğu istem silinsin mi?",
"confirm-delete-prompt": "Bu istem VE bağlı olduğu hafıza silinsin mi?",
"confirm-bulk-delete": "Seçilen {count} hafıza silinsin mi?",
"confirm-cleanup": "Bu işlem, artık geçerli olmayan tüm hafızaları kaldırır. Devam edilsin mi?",
"confirm-dedup":
"Bu işlem, yinelenen veya birbirine çok benzer hafızaları birleştirir. Devam edilsin mi?",
"text-selected": "{count} seçili",
"text-page": "Sayfa {current} / {total}",
"text-total": "Toplam: {count}",
"empty-memories": "Hafıza bulunamadı",
"empty-changelog": "Değişiklik günlüğü yok",
"status-cleanup": "Temizleme çalışıyor...",
"status-dedup": "Yinelenenleri kaldırma çalışıyor...",
"status-migration-init": "Geçiş hazırlanıyor...",
"status-migration-progress": "Geçiş sürüyor... {current}/{total}",
"profile-version": "SÜRÜM",
"profile-prompts": "İSTEMLER",
"profile-updated": "SON GÜNCELLEME",
"profile-preferences": "TERCİHLER",
"profile-type-pref": "Tercih",
"profile-type-pat": "Desen",
"profile-type-wf": "Akış",
"profile-patterns": "DESENLER",
"profile-workflows": "İŞ AKIŞLARI",
"label-evidence-tooltip": "AI analizi {count} kez yakaladı",
"badge-prompt": "KULLANICI İSTEMİ",
"badge-memory": "HAFIZA",
"badge-pinned": "SABİTLENDİ",
"badge-linked": "BAĞLI",
"date-created": "Oluşturma:",
"date-updated": "Güncelleme:",
"empty-preferences": "Henüz öğrenilen tercih yok",
"empty-patterns": "Henüz algılanan desen yok",
"empty-workflows": "Henüz tanımlanan iş akışı yok",
"btn-delete-pair": "Çifti sil",
"btn-edit": "Düzenle",
"btn-delete": "Sil",
"label-category": "Kategori",
"label-description": "Açıklama",
"label-steps": "Adımlar",
"btn-add-step": "+ Adım ekle",
"text-generated-above": "Yukarıdaki hafızadan üretildi",
"text-from-below": "Aşağıdaki istemden",
"btn-refresh": "Yenile",
"btn-ai-cleanup": "AI temizleme",
"label-ai-cleanup-title": "AI profil temizliği",
"label-ai-cleanup-loading": "AI profili analiz ediyor...",
"label-ai-cleanup-merged": "Birleştirilen",
"label-ai-cleanup-removed": "Kaldırılan",
"label-ai-cleanup-kept": "Kalan",
"label-ai-cleanup-none": "Yok",
"label-ai-cleanup-select-all": "Tümünü seç",
"label-ai-cleanup-deselect-all": "Seçimi temizle",
"label-ai-cleanup-apply": "Değişiklikleri uygula",
"label-ai-cleanup-merge-check": "Birleştir",
"label-ai-cleanup-remove-check": "Kaldır",
"label-ai-cleanup-changes-selected": "{selected}/{total} değişiklik seçildi",
"label-ai-cleanup-merged-header": "Birleştirilen ({count} grup)",
"label-ai-cleanup-removed-header": "Kaldırılan ({count} öğe)",
"btn-apply": "Uygula",
"toast-ai-cleanup-success": "Profil temizliği tamamlandı",
"toast-ai-cleanup-failed": "AI temizleme başarısız oldu",
"toast-cleanup-apply-failed": "Temizlik uygulanamadı",
"label-ai-cleanup-select": "Temizlik analizi için öğe seçin",
"label-ai-cleanup-select-low": "Düşük sıklık (≤3)",
"label-ai-cleanup-select-same-cat": "Aynı kategoridekiler",
"label-ai-cleanup-analyze": "Seçilenleri analiz et",
"label-ai-cleanup-selected": "{count} seçili",
"migration-found-tags": "Teknik etiket gerektiren {count} hafıza bulundu.",
"migration-stopped": "Geçiş durduruldu: maksimum deneme sayısına ulaşıldı",
"migration-shards-mismatch": "{count} parçada farklı boyutlar var",
"migration-dimension-mismatch": "boyut uyumsuzluğu algılandı",
"migration-mismatch-details":
"Model uyumsuzluğu: Yapılandırma {configDimensions}D ({configModel}) kullanıyor, ancak {shardInfo}.",
"auth-warning-text":
"Çapraz kaynak düzenleme devre dışı. Etkinleştirmek için webServerAuthPassword ayarlayın.",
},
} as const;
export type Lang = keyof typeof translations;
export type TranslationKey = keyof typeof translations.en;