Преглед изворни кода

feat(app): add Turkish (tr) locale for app and ui packages (#15278)

Co-authored-by: Ugur <[email protected]>
vaur94 пре 1 месец
родитељ
комит
a325c9af8f

+ 8 - 0
packages/app/src/context/language.tsx

@@ -19,6 +19,7 @@ import { dict as no } from "@/i18n/no"
 import { dict as br } from "@/i18n/br"
 import { dict as th } from "@/i18n/th"
 import { dict as bs } from "@/i18n/bs"
+import { dict as tr } from "@/i18n/tr"
 import { dict as uiEn } from "@opencode-ai/ui/i18n/en"
 import { dict as uiZh } from "@opencode-ai/ui/i18n/zh"
 import { dict as uiZht } from "@opencode-ai/ui/i18n/zht"
@@ -35,6 +36,7 @@ import { dict as uiNo } from "@opencode-ai/ui/i18n/no"
 import { dict as uiBr } from "@opencode-ai/ui/i18n/br"
 import { dict as uiTh } from "@opencode-ai/ui/i18n/th"
 import { dict as uiBs } from "@opencode-ai/ui/i18n/bs"
+import { dict as uiTr } from "@opencode-ai/ui/i18n/tr"
 
 export type Locale =
   | "en"
@@ -53,6 +55,7 @@ export type Locale =
   | "br"
   | "th"
   | "bs"
+  | "tr"
 
 type RawDictionary = typeof en & typeof uiEn
 type Dictionary = i18n.Flatten<RawDictionary>
@@ -78,6 +81,7 @@ const LOCALES: readonly Locale[] = [
   "no",
   "br",
   "th",
+  "tr",
 ]
 
 const LABEL_KEY: Record<Locale, keyof Dictionary> = {
@@ -97,6 +101,7 @@ const LABEL_KEY: Record<Locale, keyof Dictionary> = {
   br: "language.br",
   th: "language.th",
   bs: "language.bs",
+  tr: "language.tr",
 }
 
 const base = i18n.flatten({ ...en, ...uiEn })
@@ -117,6 +122,7 @@ const DICT: Record<Locale, Dictionary> = {
   br: { ...base, ...i18n.flatten({ ...br, ...uiBr }) },
   th: { ...base, ...i18n.flatten({ ...th, ...uiTh }) },
   bs: { ...base, ...i18n.flatten({ ...bs, ...uiBs }) },
+  tr: { ...base, ...i18n.flatten({ ...tr, ...uiTr }) },
 }
 
 const localeMatchers: Array<{ locale: Locale; match: (language: string) => boolean }> = [
@@ -138,6 +144,7 @@ const localeMatchers: Array<{ locale: Locale; match: (language: string) => boole
   { locale: "br", match: (language) => language.startsWith("pt") },
   { locale: "th", match: (language) => language.startsWith("th") },
   { locale: "bs", match: (language) => language.startsWith("bs") },
+  { locale: "tr", match: (language) => language.startsWith("tr") },
 ]
 
 type ParityKey = "command.session.previous.unseen" | "command.session.next.unseen"
@@ -157,6 +164,7 @@ const PARITY_CHECK: Record<Exclude<Locale, "en">, Record<ParityKey, string>> = {
   br,
   th,
   bs,
+  tr,
 }
 void PARITY_CHECK
 

+ 1 - 0
packages/app/src/i18n/en.ts

@@ -397,6 +397,7 @@ export const dict = {
   "language.br": "Português (Brasil)",
   "language.bs": "Bosanski",
   "language.th": "ไทย",
+  "language.tr": "Türkçe",
 
   "toast.language.title": "Language",
   "toast.language.description": "Switched to {{language}}",

+ 2 - 1
packages/app/src/i18n/parity.test.ts

@@ -15,8 +15,9 @@ import { dict as ru } from "./ru"
 import { dict as th } from "./th"
 import { dict as zh } from "./zh"
 import { dict as zht } from "./zht"
+import { dict as tr } from "./tr"
 
-const locales = [ar, br, bs, da, de, es, fr, ja, ko, no, pl, ru, th, zh, zht]
+const locales = [ar, br, bs, da, de, es, fr, ja, ko, no, pl, ru, th, tr, zh, zht]
 const keys = ["command.session.previous.unseen", "command.session.next.unseen"] as const
 
 describe("i18n parity", () => {

+ 831 - 0
packages/app/src/i18n/tr.ts

@@ -0,0 +1,831 @@
+import { dict as en } from "./en"
+
+type Keys = keyof typeof en
+
+export const dict = {
+  "command.category.suggested": "Önerilen",
+  "command.category.view": "Görünüm",
+  "command.category.project": "Proje",
+  "command.category.provider": "Sağlayıcı",
+  "command.category.server": "Sunucu",
+  "command.category.session": "Oturum",
+  "command.category.theme": "Tema",
+  "command.category.language": "Dil",
+  "command.category.file": "Dosya",
+  "command.category.context": "Bağlam",
+  "command.category.terminal": "Terminal",
+  "command.category.model": "Model",
+  "command.category.mcp": "MCP",
+  "command.category.agent": "Ajan",
+  "command.category.permissions": "İzinler",
+  "command.category.workspace": "Çalışma Alanı",
+  "command.category.settings": "Ayarlar",
+
+  "theme.scheme.system": "Sistem",
+  "theme.scheme.light": "Açık",
+  "theme.scheme.dark": "Koyu",
+
+  "command.sidebar.toggle": "Kenar çubuğunu aç/kapat",
+  "command.project.open": "Proje aç",
+  "command.provider.connect": "Sağlayıcı bağla",
+  "command.server.switch": "Sunucu değiştir",
+  "command.settings.open": "Ayarları aç",
+  "command.session.previous": "Önceki oturum",
+  "command.session.next": "Sonraki oturum",
+  "command.session.previous.unseen": "Önceki okunmamış oturum",
+  "command.session.next.unseen": "Sonraki okunmamış oturum",
+  "command.session.archive": "Oturumu arşivle",
+
+  "command.palette": "Komut paleti",
+
+  "command.theme.cycle": "Tema değiştir",
+  "command.theme.set": "Tema kullan: {{theme}}",
+  "command.theme.scheme.cycle": "Renk şemasını değiştir",
+  "command.theme.scheme.set": "Renk şeması kullan: {{scheme}}",
+
+  "command.language.cycle": "Dil değiştir",
+  "command.language.set": "Dil kullan: {{language}}",
+
+  "command.session.new": "Yeni oturum",
+  "command.file.open": "Dosya aç",
+  "command.tab.close": "Sekmeyi kapat",
+  "command.context.addSelection": "Seçimi bağlama ekle",
+  "command.context.addSelection.description": "Mevcut dosyadan seçili satırları ekle",
+  "command.input.focus": "Girişi odakla",
+  "command.terminal.toggle": "Terminali aç/kapat",
+  "command.fileTree.toggle": "Dosya ağacını aç/kapat",
+  "command.review.toggle": "İncelemeyi aç/kapat",
+  "command.terminal.new": "Yeni terminal",
+  "command.terminal.new.description": "Yeni bir terminal sekmesi oluştur",
+  "command.steps.toggle": "Adımları aç/kapat",
+  "command.steps.toggle.description": "Mevcut mesaj için adımları göster veya gizle",
+  "command.message.previous": "Önceki mesaj",
+  "command.message.previous.description": "Önceki kullanıcı mesajına git",
+  "command.message.next": "Sonraki mesaj",
+  "command.message.next.description": "Sonraki kullanıcı mesajına git",
+  "command.model.choose": "Model seç",
+  "command.model.choose.description": "Farklı bir model seç",
+  "command.mcp.toggle": "MCP'leri aç/kapat",
+  "command.mcp.toggle.description": "MCP'leri aç/kapat",
+  "command.agent.cycle": "Ajan değiştir",
+  "command.agent.cycle.description": "Sonraki ajana geç",
+  "command.agent.cycle.reverse": "Ajanı geri değiştir",
+  "command.agent.cycle.reverse.description": "Önceki ajana geç",
+  "command.model.variant.cycle": "Düşünme eforu değiştir",
+  "command.model.variant.cycle.description": "Sonraki efor seviyesine geç",
+  "command.prompt.mode.shell": "Kabuk",
+  "command.prompt.mode.normal": "Komut",
+  "command.permissions.autoaccept.enable": "Düzenlemeleri otomatik kabul et",
+  "command.permissions.autoaccept.disable": "Otomatik kabulü durdur",
+  "command.workspace.toggle": "Çalışma alanlarını aç/kapat",
+  "command.workspace.toggle.description": "Kenar çubuğunda birden fazla çalışma alanını göster veya gizle",
+  "command.session.undo": "Geri al",
+  "command.session.undo.description": "Son mesajı geri al",
+  "command.session.redo": "Yinele",
+  "command.session.redo.description": "Son geri alınan mesajı yinele",
+  "command.session.compact": "Oturumu sıkıştır",
+  "command.session.compact.description": "Bağlam boyutunu azaltmak için oturumu özetle",
+  "command.session.fork": "Mesajdan dallandır",
+  "command.session.fork.description": "Önceki bir mesajdan yeni oturum oluştur",
+  "command.session.share": "Oturumu paylaş",
+  "command.session.share.description": "Bu oturumu paylaş ve URL'yi panoya kopyala",
+  "command.session.unshare": "Paylaşımı kaldır",
+  "command.session.unshare.description": "Bu oturumun paylaşımını durdur",
+
+  "palette.search.placeholder": "Dosya, komut ve oturum ara",
+  "palette.empty": "Sonuç bulunamadı",
+  "palette.group.commands": "Komutlar",
+  "palette.group.files": "Dosyalar",
+
+  "dialog.provider.search.placeholder": "Sağlayıcı ara",
+  "dialog.provider.empty": "Sağlayıcı bulunamadı",
+  "dialog.provider.group.popular": "Popüler",
+  "dialog.provider.group.other": "Diğer",
+  "dialog.provider.tag.recommended": "Önerilen",
+  "dialog.provider.opencode.note": "Claude, GPT, Gemini ve daha fazlasını içeren seçilmiş modeller",
+  "dialog.provider.opencode.tagline": "Güvenilir optimize edilmiş modeller",
+  "dialog.provider.opencodeGo.tagline": "Herkes için düşük maliyetli abonelik",
+  "dialog.provider.anthropic.note": "Pro ve Max dahil Claude modellerine doğrudan erişim",
+  "dialog.provider.copilot.note": "GitHub Copilot üzerinden kodlama yardımı için yapay zekâ modelleri",
+  "dialog.provider.openai.note": "Hızlı ve yetenekli genel yapay zekâ görevleri için GPT modelleri",
+  "dialog.provider.google.note": "Hızlı ve yapılandırılmış yanıtlar için Gemini modelleri",
+  "dialog.provider.openrouter.note": "Tek bir sağlayıcıdan tüm desteklenen modellere eriş",
+  "dialog.provider.vercel.note": "Akıllı yönlendirme ile yapay zekâ modellerine birleşik erişim",
+
+  "dialog.model.select.title": "Model seç",
+  "dialog.model.search.placeholder": "Model ara",
+  "dialog.model.empty": "Model sonucu yok",
+  "dialog.model.manage": "Modelleri yönet",
+  "dialog.model.manage.description": "Model seçicide hangi modellerin görüneceğini özelleştirin.",
+  "dialog.model.manage.provider.toggle": "Tüm {{provider}} modellerini aç/kapat",
+
+  "dialog.model.unpaid.freeModels.title": "OpenCode tarafından sunulan ücretsiz modeller",
+  "dialog.model.unpaid.addMore.title": "Popüler sağlayıcılardan daha fazla model ekleyin",
+
+  "dialog.provider.viewAll": "Daha fazla sağlayıcı göster",
+
+  "provider.connect.title": "{{provider}} bağla",
+  "provider.connect.title.anthropicProMax": "Claude Pro/Max ile giriş yap",
+  "provider.connect.selectMethod": "{{provider}} için giriş yöntemini seçin.",
+  "provider.connect.method.apiKey": "API anahtarı",
+  "provider.connect.status.inProgress": "Yetkilendirme devam ediyor...",
+  "provider.connect.status.waiting": "Yetkilendirme bekleniyor...",
+  "provider.connect.status.failed": "Yetkilendirme başarısız: {{error}}",
+  "provider.connect.apiKey.description":
+    "{{provider}} hesabınızı bağlamak ve OpenCode'da {{provider}} modellerini kullanmak için {{provider}} API anahtarınızı girin.",
+  "provider.connect.apiKey.label": "{{provider}} API anahtarı",
+  "provider.connect.apiKey.placeholder": "API anahtarı",
+  "provider.connect.apiKey.required": "API anahtarı gerekli",
+  "provider.connect.opencodeZen.line1":
+    "OpenCode Zen, kodlama ajanları için seçilmiş güvenilir optimize edilmiş modellere erişim sağlar.",
+  "provider.connect.opencodeZen.line2":
+    "Tek bir API anahtarıyla Claude, GPT, Gemini, GLM ve daha fazlası gibi modellere erişebilirsiniz.",
+  "provider.connect.opencodeZen.visit.prefix": "",
+  "provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
+  "provider.connect.opencodeZen.visit.suffix": " adresini ziyaret ederek API anahtarınızı alın.",
+  "provider.connect.oauth.code.visit.prefix": "Hesabınızı bağlamak ve OpenCode'da {{provider}} modellerini kullanmak için ",
+  "provider.connect.oauth.code.visit.link": "bu bağlantıya",
+  "provider.connect.oauth.code.visit.suffix": " tıklayarak yetkilendirme kodunuzu alın.",
+  "provider.connect.oauth.code.label": "{{method}} yetkilendirme kodu",
+  "provider.connect.oauth.code.placeholder": "Yetkilendirme kodu",
+  "provider.connect.oauth.code.required": "Yetkilendirme kodu gerekli",
+  "provider.connect.oauth.code.invalid": "Geçersiz yetkilendirme kodu",
+  "provider.connect.oauth.auto.visit.prefix": "",
+  "provider.connect.oauth.auto.visit.link": "Bu bağlantıya",
+  "provider.connect.oauth.auto.visit.suffix":
+    " tıklayarak aşağıdaki kodu girin ve hesabınızı bağlayarak OpenCode'da {{provider}} modellerini kullanın.",
+  "provider.connect.oauth.auto.confirmationCode": "Onay kodu",
+  "provider.connect.toast.connected.title": "{{provider}} bağlandı",
+  "provider.connect.toast.connected.description": "{{provider}} modelleri artık kullanımda.",
+
+  "provider.custom.title": "Özel sağlayıcı",
+  "provider.custom.description.prefix": "OpenAI uyumlu bir sağlayıcı yapılandırın. ",
+  "provider.custom.description.link": "Sağlayıcı yapılandırma dökümanları",
+  "provider.custom.description.suffix": " sayfasına bakın.",
+  "provider.custom.field.providerID.label": "Sağlayıcı kimlik",
+  "provider.custom.field.providerID.placeholder": "saglayicim",
+  "provider.custom.field.providerID.description": "Küçük harfler, rakamlar, tire veya alt çizgi",
+  "provider.custom.field.name.label": "Görünen ad",
+  "provider.custom.field.name.placeholder": "Yapay Zekâ Sağlayıcım",
+  "provider.custom.field.baseURL.label": "Temel URL",
+  "provider.custom.field.baseURL.placeholder": "https://api.saglayicim.com/v1",
+  "provider.custom.field.apiKey.label": "API anahtarı",
+  "provider.custom.field.apiKey.placeholder": "API anahtarı",
+  "provider.custom.field.apiKey.description": "İsteğe bağlı. Kimlik doğrulamayı başlıklar ile yönetiyorsanız boş bırakın.",
+  "provider.custom.models.label": "Modeller",
+  "provider.custom.models.id.label": "Kimlik",
+  "provider.custom.models.id.placeholder": "model-kimlik",
+  "provider.custom.models.name.label": "Ad",
+  "provider.custom.models.name.placeholder": "Görünen Ad",
+  "provider.custom.models.remove": "Modeli kaldır",
+  "provider.custom.models.add": "Model ekle",
+  "provider.custom.headers.label": "Başlıklar (isteğe bağlı)",
+  "provider.custom.headers.key.label": "Başlık",
+  "provider.custom.headers.key.placeholder": "Başlık-Adı",
+  "provider.custom.headers.value.label": "Değer",
+  "provider.custom.headers.value.placeholder": "değer",
+  "provider.custom.headers.remove": "Başlığı kaldır",
+  "provider.custom.headers.add": "Başlık ekle",
+  "provider.custom.error.providerID.required": "Sağlayıcı kimlik gerekli",
+  "provider.custom.error.providerID.format": "Küçük harf, rakam, tire veya alt çizgi kullanın",
+  "provider.custom.error.providerID.exists": "Bu sağlayıcı kimlik zaten mevcut",
+  "provider.custom.error.name.required": "Görünen ad gerekli",
+  "provider.custom.error.baseURL.required": "Temel URL gerekli",
+  "provider.custom.error.baseURL.format": "http:// veya https:// ile başlamalı",
+  "provider.custom.error.required": "Gerekli",
+  "provider.custom.error.duplicate": "Tekrar",
+
+  "provider.disconnect.toast.disconnected.title": "{{provider}} bağlantısı kesildi",
+  "provider.disconnect.toast.disconnected.description": "{{provider}} modelleri artık kullanılabilir değil.",
+
+  "model.tag.free": "Ücretsiz",
+  "model.tag.latest": "En yeni",
+  "model.provider.anthropic": "Anthropic",
+  "model.provider.openai": "OpenAI",
+  "model.provider.google": "Google",
+  "model.provider.xai": "xAI",
+  "model.provider.meta": "Meta",
+  "model.input.text": "metin",
+  "model.input.image": "görsel",
+  "model.input.audio": "ses",
+  "model.input.video": "video",
+  "model.input.pdf": "pdf",
+  "model.tooltip.allows": "Kabul eder: {{inputs}}",
+  "model.tooltip.reasoning.allowed": "Akıl yürütme destekler",
+  "model.tooltip.reasoning.none": "Akıl yürütme yok",
+  "model.tooltip.context": "Bağlam limiti {{limit}}",
+
+  "common.search.placeholder": "Ara",
+  "common.goBack": "Geri git",
+  "common.goForward": "İleri git",
+  "common.loading": "Yükleniyor",
+  "common.loading.ellipsis": "...",
+  "common.cancel": "İptal",
+  "common.connect": "Bağlan",
+  "common.disconnect": "Bağlantı Kes",
+  "common.submit": "Gönder",
+  "common.save": "Kaydet",
+  "common.saving": "Kaydediliyor...",
+  "common.default": "Varsayılan",
+  "common.attachment": "ek",
+
+  "prompt.placeholder.shell": "Kabuk komutu girin...",
+  "prompt.placeholder.normal": 'Bir şeyler sorun... "{{example}}"',
+  "prompt.placeholder.simple": "Bir şeyler sorun...",
+  "prompt.placeholder.summarizeComments": "Yorumları özetle…",
+  "prompt.placeholder.summarizeComment": "Yorumu özetle…",
+  "prompt.mode.shell": "Kabuk",
+  "prompt.mode.normal": "Komut",
+  "prompt.mode.shell.exit": "çıkmak için esc",
+
+  "prompt.example.1": "Kod tabanındaki bir TODO'yu düzelt",
+  "prompt.example.2": "Bu projenin teknoloji yığını nedir?",
+  "prompt.example.3": "Bozuk testleri düzelt",
+  "prompt.example.4": "Kimlik doğrulamanın nasıl çalıştığını açıkla",
+  "prompt.example.5": "Güvenlik açıkları bul ve düzelt",
+  "prompt.example.6": "Kullanıcı servisi için birim testleri ekle",
+  "prompt.example.7": "Bu fonksiyonu daha okunabilir hale getir",
+  "prompt.example.8": "Bu hata ne anlama geliyor?",
+  "prompt.example.9": "Bu sorunu ayıklamama yardım et",
+  "prompt.example.10": "API dokümantasyonu oluştur",
+  "prompt.example.11": "Veritabanı sorgularını optimize et",
+  "prompt.example.12": "Girdi doğrulama ekle",
+  "prompt.example.13": "İçin yeni bir bileşen oluştur...",
+  "prompt.example.14": "Bu projeyi nasıl dağıtabilirim?",
+  "prompt.example.15": "Kodumu en iyi uygulamalar için incele",
+  "prompt.example.16": "Bu fonksiyona hata yönetimi ekle",
+  "prompt.example.17": "Bu regex kalıbını açıkla",
+  "prompt.example.18": "Bunu TypeScript'e dönüştür",
+  "prompt.example.19": "Kod tabanı boyunca loglama ekle",
+  "prompt.example.20": "Hangi bağımlılıklar güncellenmemiş?",
+  "prompt.example.21": "Bir göç betiği yazmama yardım et",
+  "prompt.example.22": "Bu uç nokta için önbellekleme uygula",
+  "prompt.example.23": "Bu listeye sayfalama ekle",
+  "prompt.example.24": "İçin bir CLI komutu oluştur...",
+  "prompt.example.25": "Ortam değişkenleri burada nasıl çalışıyor?",
+
+  "prompt.popover.emptyResults": "Eşleşen sonuç yok",
+  "prompt.popover.emptyCommands": "Eşleşen komut yok",
+  "prompt.dropzone.label": "Görsel veya PDF'leri buraya bırakın",
+  "prompt.dropzone.file.label": "@bahsetmek için dosyayı bırakın",
+  "prompt.slash.badge.custom": "özel",
+  "prompt.slash.badge.skill": "beceri",
+  "prompt.slash.badge.mcp": "mcp",
+  "prompt.context.active": "aktif",
+  "prompt.context.includeActiveFile": "Aktif dosyayı dahil et",
+  "prompt.context.removeActiveFile": "Aktif dosyayı bağlamdan çıkar",
+  "prompt.context.removeFile": "Dosyayı bağlamdan çıkar",
+  "prompt.action.attachFile": "Dosya ekle",
+  "prompt.attachment.remove": "Eki kaldır",
+  "prompt.action.send": "Gönder",
+  "prompt.action.stop": "Durdur",
+
+  "prompt.toast.pasteUnsupported.title": "Desteklenmeyen yapıştırma",
+  "prompt.toast.pasteUnsupported.description": "Buraya sadece görsel veya PDF yapıştırılabilir.",
+  "prompt.toast.modelAgentRequired.title": "Bir ajan ve model seçin",
+  "prompt.toast.modelAgentRequired.description": "Komut göndermeden önce bir ajan ve model seçin.",
+  "prompt.toast.worktreeCreateFailed.title": "Çalışma ağacı oluşturulamadı",
+  "prompt.toast.sessionCreateFailed.title": "Oturum oluşturulamadı",
+  "prompt.toast.shellSendFailed.title": "Kabuk komutu gönderilemedi",
+  "prompt.toast.commandSendFailed.title": "Komut gönderilemedi",
+  "prompt.toast.promptSendFailed.title": "Komut gönderilemedi",
+  "prompt.toast.promptSendFailed.description": "Oturum alınamadı",
+
+  "dialog.mcp.title": "MCP'ler",
+  "dialog.mcp.description": "{{total}} içerisinden {{enabled}} etkin",
+  "dialog.mcp.empty": "Yapılandırılmış MCP yok",
+
+  "dialog.lsp.empty": "LSP'ler dosya türlerinden otomatik algılanır",
+  "dialog.plugins.empty": "Eklentiler opencode.json içinde yapılandırılır",
+
+  "mcp.status.connected": "bağlı",
+  "mcp.status.failed": "başarısız",
+  "mcp.status.needs_auth": "kimlik doğrulama gerekli",
+  "mcp.status.disabled": "devre dışı",
+
+  "dialog.fork.empty": "Dallandırılacak mesaj yok",
+
+  "dialog.directory.search.placeholder": "Klasör ara",
+  "dialog.directory.empty": "Klasör bulunamadı",
+
+  "dialog.server.title": "Sunucular",
+  "dialog.server.description": "Bu uygulamanın hangi OpenCode sunucusuna bağlanacağını değiştirin.",
+  "dialog.server.search.placeholder": "Sunucu ara",
+  "dialog.server.empty": "Henüz sunucu yok",
+  "dialog.server.add.title": "Sunucu ekle",
+  "dialog.server.add.url": "Sunucu URL'si",
+  "dialog.server.add.placeholder": "http://localhost:4096",
+  "dialog.server.add.error": "Sunucuya bağlanılamadı",
+  "dialog.server.add.checking": "Kontrol ediliyor...",
+  "dialog.server.add.button": "Sunucu ekle",
+  "dialog.server.default.title": "Varsayılan sunucu",
+  "dialog.server.default.description":
+    "Uygulama başlatıldığında yerel sunucu başlatmak yerine bu sunucuya bağlan. Yeniden başlatma gerektirir.",
+  "dialog.server.default.none": "Sunucu seçilmedi",
+  "dialog.server.default.set": "Mevcut sunucuyu varsayılan olarak ayarla",
+  "dialog.server.default.clear": "Temizle",
+  "dialog.server.action.remove": "Sunucuyu kaldır",
+
+  "dialog.server.menu.edit": "Düzenle",
+  "dialog.server.menu.default": "Varsayılan olarak ayarla",
+  "dialog.server.menu.defaultRemove": "Varsayılanı kaldır",
+  "dialog.server.menu.delete": "Sil",
+  "dialog.server.current": "Mevcut Sunucu",
+  "dialog.server.status.default": "Varsayılan",
+
+  "dialog.project.edit.title": "Projeyi düzenle",
+  "dialog.project.edit.name": "Ad",
+  "dialog.project.edit.icon": "Simge",
+  "dialog.project.edit.icon.alt": "Proje simgesi",
+  "dialog.project.edit.icon.hint": "Tıkla veya bir görsel sürükle",
+  "dialog.project.edit.icon.recommended": "Önerilen: 128x128px",
+  "dialog.project.edit.color": "Renk",
+  "dialog.project.edit.color.select": "{{color}} rengini seç",
+  "dialog.project.edit.worktree.startup": "Çalışma alanı başlatma betiği",
+  "dialog.project.edit.worktree.startup.description": "Yeni bir çalışma alanı (worktree) oluşturduktan sonra çalışır.",
+  "dialog.project.edit.worktree.startup.placeholder": "örneğin bun install",
+
+  "context.breakdown.title": "Bağlam Dökümü",
+  "context.breakdown.note": 'Girdi tokenlerinin yaklaşık dökümü. "Diğer" araç tanımları ve ek yükleri içerir.',
+  "context.breakdown.system": "Sistem",
+  "context.breakdown.user": "Kullanıcı",
+  "context.breakdown.assistant": "Asistan",
+  "context.breakdown.tool": "Araç Çağrıları",
+  "context.breakdown.other": "Diğer",
+
+  "context.systemPrompt.title": "Sistem Komutu",
+  "context.rawMessages.title": "Ham mesajlar",
+
+  "context.stats.session": "Oturum",
+  "context.stats.messages": "Mesajlar",
+  "context.stats.provider": "Sağlayıcı",
+  "context.stats.model": "Model",
+  "context.stats.limit": "Bağlam Limiti",
+  "context.stats.totalTokens": "Toplam Token",
+  "context.stats.usage": "Kullanım",
+  "context.stats.inputTokens": "Girdi Tokenleri",
+  "context.stats.outputTokens": "Çıktı Tokenleri",
+  "context.stats.reasoningTokens": "Akıl Yürütme Tokenleri",
+  "context.stats.cacheTokens": "Önbellek Tokenleri (okuma/yazma)",
+  "context.stats.userMessages": "Kullanıcı Mesajları",
+  "context.stats.assistantMessages": "Asistan Mesajları",
+  "context.stats.totalCost": "Toplam Maliyet",
+  "context.stats.sessionCreated": "Oturum Oluşturulma",
+  "context.stats.lastActivity": "Son Etkinlik",
+
+  "context.usage.tokens": "Tokenler",
+  "context.usage.usage": "Kullanım",
+  "context.usage.cost": "Maliyet",
+  "context.usage.clickToView": "Bağlamı görüntüle",
+  "context.usage.view": "Bağlam kullanımını görüntüle",
+
+  "language.en": "English",
+  "language.zh": "简体中文",
+  "language.zht": "繁體中文",
+  "language.ko": "한국어",
+  "language.de": "Deutsch",
+  "language.es": "Español",
+  "language.fr": "Français",
+  "language.da": "Dansk",
+  "language.ja": "日本語",
+  "language.pl": "Polski",
+  "language.ru": "Русский",
+  "language.ar": "العربية",
+  "language.no": "Norsk",
+  "language.br": "Português (Brasil)",
+  "language.bs": "Bosanski",
+  "language.th": "ไทย",
+  "language.tr": "Türkçe",
+
+  "toast.language.title": "Dil",
+  "toast.language.description": "{{language}} diline geçildi",
+
+  "toast.theme.title": "Tema değiştirildi",
+  "toast.scheme.title": "Renk şeması",
+
+  "toast.workspace.enabled.title": "Çalışma alanları etkinleştirildi",
+  "toast.workspace.enabled.description": "Kenar çubuğunda birden fazla çalışma ağacı gösterilecek",
+  "toast.workspace.disabled.title": "Çalışma alanları devre dışı bırakıldı",
+  "toast.workspace.disabled.description": "Kenar çubuğunda yalnızca ana çalışma ağacı gösterilecek",
+
+  "toast.permissions.autoaccept.on.title": "Düzenlemeler otomatik kabul ediliyor",
+  "toast.permissions.autoaccept.on.description": "Düzenleme ve yazma izinleri otomatik olarak onaylanacak",
+  "toast.permissions.autoaccept.off.title": "Otomatik kabul durduruldu",
+  "toast.permissions.autoaccept.off.description": "Düzenleme ve yazma izinleri onay gerektirecek",
+
+  "toast.model.none.title": "Model seçilmedi",
+  "toast.model.none.description": "Bu oturumu özetlemek için bir sağlayıcı bağlayın",
+
+  "toast.file.loadFailed.title": "Dosya yüklenemedi",
+  "toast.file.listFailed.title": "Dosyalar listelenemedi",
+
+  "toast.context.noLineSelection.title": "Satır seçimi yok",
+  "toast.context.noLineSelection.description": "Önce bir dosya sekmesinde satır aralığı seçin.",
+
+  "toast.session.share.copyFailed.title": "URL panoya kopyalanamadı",
+  "toast.session.share.success.title": "Oturum paylaşıldı",
+  "toast.session.share.success.description": "Paylaşım URL'si panoya kopyalandı!",
+  "toast.session.share.failed.title": "Oturum paylaşılamadı",
+  "toast.session.share.failed.description": "Oturum paylaşılırken bir hata oluştu",
+
+  "toast.session.unshare.success.title": "Oturum paylaşımı kaldırıldı",
+  "toast.session.unshare.success.description": "Oturum paylaşımı başarıyla kaldırıldı!",
+  "toast.session.unshare.failed.title": "Oturum paylaşımı kaldırılamadı",
+  "toast.session.unshare.failed.description": "Oturum paylaşımı kaldırılırken bir hata oluştu",
+
+  "toast.session.listFailed.title": "{{project}} için oturumlar yüklenemedi",
+
+  "toast.update.title": "Güncelleme mevcut",
+  "toast.update.description": "OpenCode'un yeni bir sürümü ({{version}}) yüklemeye hazır.",
+  "toast.update.action.installRestart": "Yükle ve yeniden başlat",
+  "toast.update.action.notYet": "Şimdi değil",
+
+  "error.page.title": "Bir şeyler yanlış gitti",
+  "error.page.description": "Uygulama yüklenirken bir hata oluştu.",
+  "error.page.details.label": "Hata Detayları",
+  "error.page.action.restart": "Yeniden Başlat",
+  "error.page.action.checking": "Kontrol ediliyor...",
+  "error.page.action.checkUpdates": "Güncellemeleri kontrol et",
+  "error.page.action.updateTo": "{{version}} sürümüne güncelle",
+  "error.page.report.prefix": "Lütfen bu hatayı OpenCode ekibine bildirin",
+  "error.page.report.discord": "Discord üzerinden",
+  "error.page.version": "Sürüm: {{version}}",
+
+  "error.dev.rootNotFound":
+    "Kök eleman bulunamadı. index.html dosyanıza eklemeyi unuttunuz mu? Ya da id özelliği yanlış mı yazıldı?",
+
+  "error.globalSync.connectFailed": "Sunucuya bağlanılamadı. `{{url}}` adresinde çalışan bir sunucu var mı?",
+  "directory.error.invalidUrl": "URL'de geçersiz dizin.",
+
+  "error.chain.unknown": "Bilinmeyen hata",
+  "error.chain.causedBy": "Nedeni:",
+  "error.chain.apiError": "API hatası",
+  "error.chain.status": "Durum: {{status}}",
+  "error.chain.retryable": "Yeniden denenebilir: {{retryable}}",
+  "error.chain.responseBody": "Yanıt gövdesi:\n{{body}}",
+  "error.chain.didYouMean": "Bunu mu demek istediniz: {{suggestions}}",
+  "error.chain.modelNotFound": "Model bulunamadı: {{provider}}/{{model}}",
+  "error.chain.checkConfig": "Yapılandırma dosyanızı (opencode.json) sağlayıcı/model adlarını kontrol edin",
+  "error.chain.mcpFailed": 'MCP sunucusu "{{name}}" başarısız oldu. Not: OpenCode henüz MCP kimlik doğrulamasını desteklemiyor.',
+  "error.chain.providerAuthFailed": "Sağlayıcı kimlik doğrulaması başarısız ({{provider}}): {{message}}",
+  "error.chain.providerInitFailed":
+    '"{{provider}}" sağlayıcısı başlatılamadı. Kimlik bilgilerini ve yapılandırmayı kontrol edin.',
+  "error.chain.configJsonInvalid": "{{path}} adresindeki yapılandırma dosyası geçerli JSON(C) değil",
+  "error.chain.configJsonInvalidWithMessage": "{{path}} adresindeki yapılandırma dosyası geçerli JSON(C) değil: {{message}}",
+  "error.chain.configDirectoryTypo":
+    '"{{dir}}" dizini {{path}} içinde geçerli değil. Dizini "{{suggestion}}" olarak yeniden adlandırın veya kaldırın. Bu yaygın bir yazım hatasıdır.',
+  "error.chain.configFrontmatterError": "{{path}} içindeki ön bilgi ayrıştırılamadı:\n{{message}}",
+  "error.chain.configInvalid": "{{path}} adresindeki yapılandırma dosyası geçersiz",
+  "error.chain.configInvalidWithMessage": "{{path}} adresindeki yapılandırma dosyası geçersiz: {{message}}",
+
+  "notification.permission.title": "İzin gerekli",
+  "notification.permission.description": "{{projectName}} içindeki {{sessionTitle}} izin gerektiriyor",
+  "notification.question.title": "Soru",
+  "notification.question.description": "{{projectName}} içindeki {{sessionTitle}} bir soru soruyor",
+  "notification.action.goToSession": "Oturuma git",
+
+  "notification.session.responseReady.title": "Yanıt hazır",
+  "notification.session.error.title": "Oturum hatası",
+  "notification.session.error.fallbackDescription": "Bir hata oluştu",
+
+  "home.recentProjects": "Son projeler",
+  "home.empty.title": "Son proje yok",
+  "home.empty.description": "Yerel bir proje açarak başlayın",
+
+  "session.tab.session": "Oturum",
+  "session.tab.review": "İnceleme",
+  "session.tab.context": "Bağlam",
+  "session.panel.reviewAndFiles": "İnceleme ve dosyalar",
+  "session.review.filesChanged": "{{count}} Dosya Değişti",
+  "session.review.change.one": "Değişiklik",
+  "session.review.change.other": "Değişiklik",
+  "session.review.loadingChanges": "Değişiklikler yükleniyor...",
+  "session.review.empty": "Bu oturumda henüz değişiklik yok",
+  "session.review.noVcs": "Git VCS algılanamadı, oturum değişiklikleri tespit edilemeyecek",
+  "session.review.noChanges": "Değişiklik yok",
+
+  "session.files.selectToOpen": "Açmak için bir dosya seçin",
+  "session.files.all": "Tüm dosyalar",
+  "session.files.binaryContent": "İkili dosya (içerik görüntülenemiyor)",
+
+  "session.messages.renderEarlier": "Önceki mesajları göster",
+  "session.messages.loadingEarlier": "Önceki mesajlar yükleniyor...",
+  "session.messages.loadEarlier": "Önceki mesajları yükle",
+  "session.messages.loading": "Mesajlar yükleniyor...",
+  "session.messages.jumpToLatest": "En sona atla",
+
+  "session.context.addToContext": "{{selection}} bağlama ekle",
+  "session.todo.title": "Görevler",
+  "session.todo.collapse": "Daralt",
+  "session.todo.expand": "Genişlet",
+
+  "session.new.worktree.main": "Ana dal",
+  "session.new.worktree.mainWithBranch": "Ana dal ({{branch}})",
+  "session.new.worktree.create": "Yeni çalışma ağacı oluştur",
+  "session.new.lastModified": "Son değişiklik",
+
+  "session.header.search.placeholder": "{{project}} ara",
+  "session.header.searchFiles": "Dosya ara",
+  "session.header.openIn": "Aç",
+  "session.header.open.action": "{{app}} ile aç",
+  "session.header.open.ariaLabel": "{{app}} ile aç",
+  "session.header.open.menu": "Açma seçenekleri",
+  "session.header.open.copyPath": "Yolu kopyala",
+
+  "status.popover.trigger": "Durum",
+  "status.popover.ariaLabel": "Sunucu yapılandırmaları",
+  "status.popover.tab.servers": "Sunucular",
+  "status.popover.tab.mcp": "MCP",
+  "status.popover.tab.lsp": "LSP",
+  "status.popover.tab.plugins": "Eklentiler",
+  "status.popover.action.manageServers": "Sunucuları yönet",
+
+  "session.share.popover.title": "Web'de yayınla",
+  "session.share.popover.description.shared":
+    "Bu oturum web'de herkese açıktır. Bağlantıya sahip herkes erişebilir.",
+  "session.share.popover.description.unshared":
+    "Oturumu web'de herkese açık olarak paylaşın. Bağlantıya sahip herkes erişebilecek.",
+  "session.share.action.share": "Paylaş",
+  "session.share.action.publish": "Yayınla",
+  "session.share.action.publishing": "Yayınlanıyor...",
+  "session.share.action.unpublish": "Yayından kaldır",
+  "session.share.action.unpublishing": "Yayından kaldırılıyor...",
+  "session.share.action.view": "Görüntüle",
+  "session.share.copy.copied": "Kopyalandı",
+  "session.share.copy.copyLink": "Bağlantı kopyala",
+
+  "lsp.tooltip.none": "LSP sunucusu yok",
+  "lsp.label.connected": "{{count}} LSP",
+
+  "prompt.loading": "Komut yükleniyor...",
+  "terminal.loading": "Terminal yükleniyor...",
+  "terminal.title": "Terminal",
+  "terminal.title.numbered": "Terminal {{number}}",
+  "terminal.close": "Terminali kapat",
+  "terminal.connectionLost.title": "Bağlantı Kesildi",
+  "terminal.connectionLost.description":
+    "Terminal bağlantısı kesildi. Bu durum sunucu yeniden başladığında oluşabilir.",
+
+  "common.closeTab": "Sekmeyi kapat",
+  "common.dismiss": "Kapat",
+  "common.requestFailed": "İstek başarısız",
+  "common.moreOptions": "Daha fazla seçenek",
+  "common.learnMore": "Daha fazla bilgi",
+  "common.rename": "Yeniden adlandır",
+  "common.reset": "Sıfırla",
+  "common.archive": "Arşivle",
+  "common.delete": "Sil",
+  "common.close": "Kapat",
+  "common.edit": "Düzenle",
+  "common.loadMore": "Daha fazla yükle",
+  "common.key.esc": "ESC",
+
+  "sidebar.menu.toggle": "Menüyü aç/kapat",
+  "sidebar.nav.projectsAndSessions": "Projeler ve oturumlar",
+  "sidebar.settings": "Ayarlar",
+  "sidebar.help": "Yardım",
+  "sidebar.workspaces.enable": "Çalışma alanlarını etkinleştir",
+  "sidebar.workspaces.disable": "Çalışma alanlarını devre dışı bırak",
+  "sidebar.gettingStarted.title": "Başlarken",
+  "sidebar.gettingStarted.line1": "OpenCode ücretsiz modeller içerir, böylece hemen başlayabilirsiniz.",
+  "sidebar.gettingStarted.line2": "Claude, GPT, Gemini vb. modelleri kullanmak için herhangi bir sağlayıcı bağlayın.",
+  "sidebar.project.recentSessions": "Son oturumlar",
+  "sidebar.project.viewAllSessions": "Tüm oturumları görüntüle",
+  "sidebar.project.clearNotifications": "Bildirimleri temizle",
+
+  "app.name.desktop": "OpenCode Masaüstü",
+
+  "settings.section.desktop": "Masaüstü",
+  "settings.section.server": "Sunucu",
+  "settings.tab.general": "Genel",
+  "settings.tab.shortcuts": "Kısayollar",
+  "settings.desktop.section.wsl": "WSL",
+  "settings.desktop.wsl.title": "WSL entegrasyonu",
+  "settings.desktop.wsl.description": "OpenCode sunucusunu Windows'ta WSL içinde çalıştırın.",
+
+  "settings.general.section.appearance": "Görünüm",
+  "settings.general.section.notifications": "Sistem bildirimleri",
+  "settings.general.section.updates": "Güncellemeler",
+  "settings.general.section.sounds": "Ses efektleri",
+  "settings.general.section.feed": "Akış",
+  "settings.general.section.display": "Ekran",
+
+  "settings.general.row.language.title": "Dil",
+  "settings.general.row.language.description": "OpenCode'un görünüm dilini değiştirin",
+  "settings.general.row.appearance.title": "Görünüm",
+  "settings.general.row.appearance.description": "OpenCode'un cihazınızdaki görünümünü özelleştirin",
+  "settings.general.row.theme.title": "Tema",
+  "settings.general.row.theme.description": "OpenCode'un temasını özelleştirin.",
+  "settings.general.row.font.title": "Yazı Tipi",
+  "settings.general.row.font.description": "Kod bloklarında kullanılan monospace yazı tipini özelleştirin",
+  "settings.general.row.reasoningSummaries.title": "Akıl yürütme özetlerini göster",
+  "settings.general.row.reasoningSummaries.description": "Zaman çizelgesinde model akıl yürütme özetlerini görüntüle",
+  "settings.general.row.shellToolPartsExpanded.title": "Kabuk araç bileşenlerini genişlet",
+  "settings.general.row.shellToolPartsExpanded.description":
+    "Zaman çizelgesinde kabuk araç bileşenlerini varsayılan olarak genişletilmiş göster",
+  "settings.general.row.editToolPartsExpanded.title": "Düzenleme araç bileşenlerini genişlet",
+  "settings.general.row.editToolPartsExpanded.description":
+    "Zaman çizelgesinde düzenleme, yazma ve yama araç bileşenlerini varsayılan olarak genişletilmiş göster",
+
+  "settings.general.row.wayland.title": "Yerel Wayland kullan",
+  "settings.general.row.wayland.description": "Wayland'da X11 geri dönüşünü devre dışı bırak. Yeniden başlatma gerektirir.",
+  "settings.general.row.wayland.tooltip":
+    "Karışık yenileme hızlı monitörlere sahip Linux'ta yerel Wayland daha kararlı olabilir.",
+
+  "settings.general.row.releaseNotes.title": "Sürüm notları",
+  "settings.general.row.releaseNotes.description": "Güncellemelerden sonra Yenilikler bildirimlerini göster",
+
+  "settings.updates.row.startup.title": "Başlangıçta güncellemeleri kontrol et",
+  "settings.updates.row.startup.description": "OpenCode başladığında otomatik güncelleme kontrolü yap",
+  "settings.updates.row.check.title": "Güncellemeleri kontrol et",
+  "settings.updates.row.check.description": "Elle güncelleme kontrolü yap ve varsa yükle",
+  "settings.updates.action.checkNow": "Şimdi kontrol et",
+  "settings.updates.action.checking": "Kontrol ediliyor...",
+  "settings.updates.toast.latest.title": "Güncelsiniz",
+  "settings.updates.toast.latest.description": "OpenCode'un en son sürümünü kullanıyorsunuz.",
+
+  "font.option.ibmPlexMono": "IBM Plex Mono",
+  "font.option.cascadiaCode": "Cascadia Code",
+  "font.option.firaCode": "Fira Code",
+  "font.option.hack": "Hack",
+  "font.option.inconsolata": "Inconsolata",
+  "font.option.intelOneMono": "Intel One Mono",
+  "font.option.iosevka": "Iosevka",
+  "font.option.jetbrainsMono": "JetBrains Mono",
+  "font.option.mesloLgs": "Meslo LGS",
+  "font.option.robotoMono": "Roboto Mono",
+  "font.option.sourceCodePro": "Source Code Pro",
+  "font.option.ubuntuMono": "Ubuntu Mono",
+  "font.option.geistMono": "Geist Mono",
+
+  "sound.option.none": "Yok",
+  "sound.option.alert01": "Uyarı 01",
+  "sound.option.alert02": "Uyarı 02",
+  "sound.option.alert03": "Uyarı 03",
+  "sound.option.alert04": "Uyarı 04",
+  "sound.option.alert05": "Uyarı 05",
+  "sound.option.alert06": "Uyarı 06",
+  "sound.option.alert07": "Uyarı 07",
+  "sound.option.alert08": "Uyarı 08",
+  "sound.option.alert09": "Uyarı 09",
+  "sound.option.alert10": "Uyarı 10",
+  "sound.option.bipbop01": "Bip-bop 01",
+  "sound.option.bipbop02": "Bip-bop 02",
+  "sound.option.bipbop03": "Bip-bop 03",
+  "sound.option.bipbop04": "Bip-bop 04",
+  "sound.option.bipbop05": "Bip-bop 05",
+  "sound.option.bipbop06": "Bip-bop 06",
+  "sound.option.bipbop07": "Bip-bop 07",
+  "sound.option.bipbop08": "Bip-bop 08",
+  "sound.option.bipbop09": "Bip-bop 09",
+  "sound.option.bipbop10": "Bip-bop 10",
+  "sound.option.staplebops01": "Staplebops 01",
+  "sound.option.staplebops02": "Staplebops 02",
+  "sound.option.staplebops03": "Staplebops 03",
+  "sound.option.staplebops04": "Staplebops 04",
+  "sound.option.staplebops05": "Staplebops 05",
+  "sound.option.staplebops06": "Staplebops 06",
+  "sound.option.staplebops07": "Staplebops 07",
+  "sound.option.nope01": "Hayır 01",
+  "sound.option.nope02": "Hayır 02",
+  "sound.option.nope03": "Hayır 03",
+  "sound.option.nope04": "Hayır 04",
+  "sound.option.nope05": "Hayır 05",
+  "sound.option.nope06": "Hayır 06",
+  "sound.option.nope07": "Hayır 07",
+  "sound.option.nope08": "Hayır 08",
+  "sound.option.nope09": "Hayır 09",
+  "sound.option.nope10": "Hayır 10",
+  "sound.option.nope11": "Hayır 11",
+  "sound.option.nope12": "Hayır 12",
+  "sound.option.yup01": "Evet 01",
+  "sound.option.yup02": "Evet 02",
+  "sound.option.yup03": "Evet 03",
+  "sound.option.yup04": "Evet 04",
+  "sound.option.yup05": "Evet 05",
+  "sound.option.yup06": "Evet 06",
+
+  "settings.general.notifications.agent.title": "Ajan",
+  "settings.general.notifications.agent.description":
+    "Ajan tamamlandığında veya dikkat gerektirdiğinde sistem bildirimi göster",
+  "settings.general.notifications.permissions.title": "İzinler",
+  "settings.general.notifications.permissions.description": "İzin gerektiğinde sistem bildirimi göster",
+  "settings.general.notifications.errors.title": "Hatalar",
+  "settings.general.notifications.errors.description": "Hata oluştuğunda sistem bildirimi göster",
+
+  "settings.general.sounds.agent.title": "Ajan",
+  "settings.general.sounds.agent.description": "Ajan tamamlandığında veya dikkat gerektirdiğinde ses çal",
+  "settings.general.sounds.permissions.title": "İzinler",
+  "settings.general.sounds.permissions.description": "İzin gerektiğinde ses çal",
+  "settings.general.sounds.errors.title": "Hatalar",
+  "settings.general.sounds.errors.description": "Hata oluştuğunda ses çal",
+
+  "settings.shortcuts.title": "Klavye kısayolları",
+  "settings.shortcuts.reset.button": "Varsayılanlara sıfırla",
+  "settings.shortcuts.reset.toast.title": "Kısayollar sıfırlandı",
+  "settings.shortcuts.reset.toast.description": "Klavye kısayolları varsayılanlara sıfırlandı.",
+  "settings.shortcuts.conflict.title": "Kısayol zaten kullanılıyor",
+  "settings.shortcuts.conflict.description": "{{keybind}} zaten {{titles}} için atanmış.",
+  "settings.shortcuts.unassigned": "Atanmamış",
+  "settings.shortcuts.pressKeys": "Tuşlara basın",
+  "settings.shortcuts.search.placeholder": "Kısayol ara",
+  "settings.shortcuts.search.empty": "Kısayol bulunamadı",
+
+  "settings.shortcuts.group.general": "Genel",
+  "settings.shortcuts.group.session": "Oturum",
+  "settings.shortcuts.group.navigation": "Gezinme",
+  "settings.shortcuts.group.modelAndAgent": "Model ve ajan",
+  "settings.shortcuts.group.terminal": "Terminal",
+  "settings.shortcuts.group.prompt": "Komut",
+
+  "settings.providers.title": "Sağlayıcılar",
+  "settings.providers.description": "Sağlayıcı ayarları burada yapılandırılabilecek.",
+  "settings.providers.section.connected": "Bağlı sağlayıcılar",
+  "settings.providers.connected.empty": "Bağlı sağlayıcı yok",
+  "settings.providers.section.popular": "Popüler sağlayıcılar",
+  "settings.providers.tag.environment": "Ortam",
+  "settings.providers.tag.config": "Yapılandırma",
+  "settings.providers.tag.custom": "Özel",
+  "settings.providers.tag.other": "Diğer",
+  "settings.models.title": "Modeller",
+  "settings.models.description": "Model ayarları burada yapılandırılabilecek.",
+  "settings.agents.title": "Ajanlar",
+  "settings.agents.description": "Ajan ayarları burada yapılandırılabilecek.",
+  "settings.commands.title": "Komutlar",
+  "settings.commands.description": "Komut ayarları burada yapılandırılabilecek.",
+  "settings.mcp.title": "MCP",
+  "settings.mcp.description": "MCP ayarları burada yapılandırılabilecek.",
+
+  "settings.permissions.title": "İzinler",
+  "settings.permissions.description": "Sunucunun varsayılan olarak hangi araçları kullanabileceğini kontrol edin.",
+  "settings.permissions.section.tools": "Araçlar",
+  "settings.permissions.toast.updateFailed.title": "İzinler güncellenemedi",
+
+  "settings.permissions.action.allow": "İzin Ver",
+  "settings.permissions.action.ask": "Sor",
+  "settings.permissions.action.deny": "Reddet",
+
+  "settings.permissions.tool.read.title": "Oku",
+  "settings.permissions.tool.read.description": "Bir dosyayı okuma (dosya yoluyla eşleşir)",
+  "settings.permissions.tool.edit.title": "Düzenle",
+  "settings.permissions.tool.edit.description": "Düzenleme, yazma, yama ve çoklu düzenleme dahil dosyaları değiştir",
+  "settings.permissions.tool.glob.title": "Glob",
+  "settings.permissions.tool.glob.description": "Glob kalıpları kullanarak dosyaları eşle",
+  "settings.permissions.tool.grep.title": "Grep",
+  "settings.permissions.tool.grep.description": "Düzenli ifadeler kullanarak dosya içerikleri ara",
+  "settings.permissions.tool.list.title": "Listele",
+  "settings.permissions.tool.list.description": "Bir dizindeki dosyaları listele",
+  "settings.permissions.tool.bash.title": "Bash",
+  "settings.permissions.tool.bash.description": "Kabuk komutları çalıştır",
+  "settings.permissions.tool.task.title": "Görev",
+  "settings.permissions.tool.task.description": "Alt ajanlar başlat",
+  "settings.permissions.tool.skill.title": "Beceri",
+  "settings.permissions.tool.skill.description": "Ada göre bir beceri yükle",
+  "settings.permissions.tool.lsp.title": "LSP",
+  "settings.permissions.tool.lsp.description": "Dil sunucusu sorguları çalıştır",
+  "settings.permissions.tool.todoread.title": "Görev Oku",
+  "settings.permissions.tool.todoread.description": "Görev listesini oku",
+  "settings.permissions.tool.todowrite.title": "Görev Yaz",
+  "settings.permissions.tool.todowrite.description": "Görev listesini güncelle",
+  "settings.permissions.tool.webfetch.title": "Web Getir",
+  "settings.permissions.tool.webfetch.description": "Bir URL'den içerik getir",
+  "settings.permissions.tool.websearch.title": "Web Ara",
+  "settings.permissions.tool.websearch.description": "Web'de ara",
+  "settings.permissions.tool.codesearch.title": "Kod Ara",
+  "settings.permissions.tool.codesearch.description": "Web'de kod ara",
+  "settings.permissions.tool.external_directory.title": "Harici Dizin",
+  "settings.permissions.tool.external_directory.description": "Proje dizini dışındaki dosyalara eriş",
+  "settings.permissions.tool.doom_loop.title": "Sonsuz Döngü",
+  "settings.permissions.tool.doom_loop.description": "Aynı girdiyle tekrarlanan araç çağrılarını algıla",
+
+  "session.delete.failed.title": "Oturum silinemedi",
+  "session.delete.title": "Oturumu sil",
+  "session.delete.confirm": '"{{name}}" oturumu silinsin mi?',
+  "session.delete.button": "Oturumu sil",
+
+  "workspace.new": "Yeni çalışma alanı",
+  "workspace.type.local": "yerel",
+  "workspace.type.sandbox": "sandbox",
+  "workspace.create.failed.title": "Çalışma alanı oluşturulamadı",
+  "workspace.delete.failed.title": "Çalışma alanı silinemedi",
+  "workspace.resetting.title": "Çalışma alanı sıfırlanıyor",
+  "workspace.resetting.description": "Bu bir dakika sürebilir.",
+  "workspace.reset.failed.title": "Çalışma alanı sıfırlanamadı",
+  "workspace.reset.success.title": "Çalışma alanı sıfırlandı",
+  "workspace.reset.success.description": "Çalışma alanı artık varsayılan dalla eşleşiyor.",
+  "workspace.error.stillPreparing": "Çalışma alanı hâlâ hazırlanıyor",
+  "workspace.status.checking": "Birleşmemiş değişiklikler kontrol ediliyor...",
+  "workspace.status.error": "Git durumu doğrulanamadı.",
+  "workspace.status.clean": "Birleşmemiş değişiklik algılanmadı.",
+  "workspace.status.dirty": "Bu çalışma alanında birleşmemiş değişiklikler algılandı.",
+  "workspace.delete.title": "Çalışma alanını sil",
+  "workspace.delete.confirm": '"{{name}}" çalışma alanı silinsin mi?',
+  "workspace.delete.button": "Çalışma alanını sil",
+  "workspace.reset.title": "Çalışma alanını sıfırla",
+  "workspace.reset.confirm": '"{{name}}" çalışma alanı sıfırlansın mı?',
+  "workspace.reset.button": "Çalışma alanını sıfırla",
+  "workspace.reset.archived.none": "Arşivlenecek aktif oturum yok.",
+  "workspace.reset.archived.one": "1 oturum arşivlenecek.",
+  "workspace.reset.archived.many": "{{count}} oturum arşivlenecek.",
+  "workspace.reset.note": "Bu işlem çalışma alanını varsayılan dalla eşleşecek şekilde sıfırlayacak.",
+} satisfies Partial<Record<Keys, string>>

+ 123 - 0
packages/ui/src/i18n/tr.ts

@@ -0,0 +1,123 @@
+import { dict as en } from "./en"
+
+type Keys = keyof typeof en
+
+export const dict = {
+  "ui.sessionReview.title": "Oturum değişiklikleri",
+  "ui.sessionReview.title.lastTurn": "Son tur değişiklikleri",
+  "ui.sessionReview.diffStyle.unified": "Birleşik",
+  "ui.sessionReview.diffStyle.split": "Bölünmüş",
+  "ui.sessionReview.expandAll": "Tümünü genişlet",
+  "ui.sessionReview.collapseAll": "Tümünü daralt",
+
+  "ui.sessionReview.change.added": "Eklendi",
+  "ui.sessionReview.change.removed": "Kaldırıldı",
+  "ui.sessionReview.change.modified": "Değiştirildi",
+  "ui.sessionReview.image.loading": "Yükleniyor...",
+  "ui.sessionReview.image.placeholder": "Görsel",
+  "ui.sessionReview.largeDiff.title": "Fark gösterimi için çok büyük",
+  "ui.sessionReview.largeDiff.meta": "Limit: {{limit}} değişen satır. Mevcut: {{current}} değişen satır.",
+  "ui.sessionReview.largeDiff.renderAnyway": "Yine de göster",
+
+  "ui.lineComment.label.prefix": "Yorum: ",
+  "ui.lineComment.label.suffix": "",
+  "ui.lineComment.editorLabel.prefix": "Yorum yapılıyor: ",
+  "ui.lineComment.editorLabel.suffix": "",
+  "ui.lineComment.placeholder": "Yorum ekle",
+  "ui.lineComment.submit": "Yorum yap",
+
+  "ui.sessionTurn.steps.show": "Adımları göster",
+  "ui.sessionTurn.steps.hide": "Adımları gizle",
+  "ui.sessionTurn.summary.response": "Yanıt",
+  "ui.sessionTurn.diff.showMore": "Daha fazla değişiklik göster ({{count}})",
+
+  "ui.sessionTurn.retry.retrying": "yeniden deneniyor",
+  "ui.sessionTurn.retry.inSeconds": "{{seconds}}sn içinde",
+  "ui.sessionTurn.error.freeUsageExceeded": "Ücretsiz kullanım aşıldı",
+  "ui.sessionTurn.error.addCredits": "Kredi ekle",
+
+  "ui.sessionTurn.status.delegating": "Görev devrediliyor",
+  "ui.sessionTurn.status.planning": "Sonraki adımlar planlanıyor",
+  "ui.sessionTurn.status.gatheringContext": "Keşfediliyor",
+  "ui.sessionTurn.status.gatheredContext": "Keşfedildi",
+  "ui.sessionTurn.status.searchingCodebase": "Kod tabanı aranıyor",
+  "ui.sessionTurn.status.searchingWeb": "Web aranıyor",
+  "ui.sessionTurn.status.makingEdits": "Düzenlemeler yapılıyor",
+  "ui.sessionTurn.status.runningCommands": "Komutlar çalıştırılıyor",
+  "ui.sessionTurn.status.thinking": "Düşünüyor",
+  "ui.sessionTurn.status.thinkingWithTopic": "Düşünüyor - {{topic}}",
+  "ui.sessionTurn.status.gatheringThoughts": "Düşünceler toplanıyor",
+  "ui.sessionTurn.status.consideringNextSteps": "Sonraki adımlar değerlendiriliyor",
+
+  "ui.messagePart.diagnostic.error": "Hata",
+  "ui.messagePart.title.edit": "Düzenle",
+  "ui.messagePart.title.write": "Yaz",
+  "ui.messagePart.option.typeOwnAnswer": "Kendi cevabınızı yazın",
+  "ui.messagePart.review.title": "Cevapları inceleyin",
+
+  "ui.list.loading": "Yükleniyor",
+  "ui.list.empty": "Sonuç bulunamadı",
+  "ui.list.clearFilter": "Filtreyi temizle",
+  "ui.list.emptyWithFilter.prefix": "Sonuç bulunamadı:",
+  "ui.list.emptyWithFilter.suffix": "",
+
+  "ui.messageNav.newMessage": "Yeni mesaj",
+
+  "ui.textField.copyToClipboard": "Panoya kopyala",
+  "ui.textField.copyLink": "Bağlantı kopyala",
+  "ui.textField.copied": "Kopyalandı",
+
+  "ui.imagePreview.alt": "Görsel önizleme",
+
+  "ui.tool.read": "Oku",
+  "ui.tool.loaded": "Yüklendi",
+  "ui.tool.list": "Listele",
+  "ui.tool.glob": "Glob",
+  "ui.tool.grep": "Grep",
+  "ui.tool.webfetch": "Web getir",
+  "ui.tool.shell": "Kabuk",
+  "ui.tool.patch": "Yama",
+  "ui.tool.todos": "Görevler",
+  "ui.tool.todos.read": "Görevleri oku",
+  "ui.tool.questions": "Sorular",
+  "ui.tool.agent": "{{type}} Ajan",
+
+  "ui.common.file.one": "dosya",
+  "ui.common.file.other": "dosya",
+  "ui.common.question.one": "soru",
+  "ui.common.question.other": "soru",
+
+  "ui.common.add": "Ekle",
+  "ui.common.back": "Geri",
+  "ui.common.cancel": "İptal",
+  "ui.common.confirm": "Onayla",
+  "ui.common.dismiss": "Kapat",
+  "ui.common.close": "Kapat",
+  "ui.common.next": "İleri",
+  "ui.common.submit": "Gönder",
+
+  "ui.permission.deny": "Reddet",
+  "ui.permission.allowAlways": "Her zaman izin ver",
+  "ui.permission.allowOnce": "Bir kez izin ver",
+
+  "ui.message.expand": "Mesajı genişlet",
+  "ui.message.collapse": "Mesajı daralt",
+  "ui.message.copy": "Kopyala",
+  "ui.message.copyMessage": "Mesajı kopyala",
+  "ui.message.copyResponse": "Yanıtı kopyala",
+  "ui.message.copied": "Kopyalandı",
+  "ui.message.interrupted": "Kesildi",
+  "ui.message.attachment.alt": "ek",
+
+  "ui.patch.action.deleted": "Silindi",
+  "ui.patch.action.created": "Oluşturuldu",
+  "ui.patch.action.moved": "Taşındı",
+  "ui.patch.action.patched": "Yamalandı",
+
+  "ui.question.subtitle.answered": "{{count}} cevaplandı",
+  "ui.question.answer.none": "(cevap yok)",
+  "ui.question.review.notAnswered": "(cevaplanmadı)",
+  "ui.question.multiHint": "Geçerli tüm cevapları seçin",
+  "ui.question.singleHint": "Bir cevap seçin",
+  "ui.question.custom.placeholder": "Cevabınızı yazın...",
+} satisfies Partial<Record<Keys, string>>