Expand AITURK Turkish settings and desktop surfaces for beta 5
This commit is contained in:
1 parent
237d1e2060
commit
5e76f58637
108 files changed
+6675
-1034
No files matched your search
@@ -24,25 +24,32 @@ const en = BOTS_LOCALES.en
|
||||
const ja = BOTS_LOCALES.ja
|
||||
const zh = BOTS_LOCALES.zh
|
||||
const zhHant = BOTS_LOCALES['zh-hant']
|
||||
const tr = BOTS_LOCALES.tr
|
||||
|
||||
describe('BOTS_LOCALES', () => {
|
||||
it('covers the English key tree in every shipped locale', () => {
|
||||
expect(ja).toBeDefined()
|
||||
expect(zh).toBeDefined()
|
||||
expect(zhHant).toBeDefined()
|
||||
expect(tr).toBeDefined()
|
||||
|
||||
const enPaths = leafEntries(en).map(([path]) => path)
|
||||
|
||||
expect(leafEntries(ja).map(([path]) => path)).toEqual(enPaths)
|
||||
expect(leafEntries(zh).map(([path]) => path)).toEqual(enPaths)
|
||||
expect(leafEntries(zhHant).map(([path]) => path)).toEqual(enPaths)
|
||||
expect(
|
||||
leafEntries(tr)
|
||||
.map(([path]) => path)
|
||||
.sort()
|
||||
).toEqual([...enPaths].sort())
|
||||
})
|
||||
|
||||
it('translates user-visible chrome instead of echoing English', () => {
|
||||
const samples = ['roster.emptyTitle', 'bot.newTitle', 'group.manageTitle', 'tools.skillsHub'] as const
|
||||
const enByPath = Object.fromEntries(leafEntries(en))
|
||||
|
||||
for (const locale of [ja, zh, zhHant]) {
|
||||
for (const locale of [tr, ja, zh, zhHant]) {
|
||||
const byPath = Object.fromEntries(leafEntries(locale))
|
||||
|
||||
for (const path of samples) {
|
||||
@@ -55,7 +62,7 @@ describe('BOTS_LOCALES', () => {
|
||||
const sentinel = 'QUERY_SENTINEL'
|
||||
const gateway = 'GATEWAY_SENTINEL'
|
||||
|
||||
for (const locale of [en, ja, zh, zhHant]) {
|
||||
for (const locale of [en, tr, ja, zh, zhHant]) {
|
||||
const byPath = Object.fromEntries(leafEntries(locale))
|
||||
const queryFn = byPath['roster.noMatchQuery'] as (query: string) => string
|
||||
const bothFn = byPath['roster.noMatchQueryOn'] as (query: string, gateway: string) => string
|
||||
|
||||
@@ -33,8 +33,9 @@ import { type PluginLocaleBundles, type PluginTranslate, usePluginI18n } from '@
|
||||
import { useMemo } from 'react'
|
||||
|
||||
import { getPluginCtx } from './shared'
|
||||
import { tr } from './tr'
|
||||
|
||||
type BotsMessages = {
|
||||
export type BotsMessages = {
|
||||
/** Left rail: the bot + group-chat roster. */
|
||||
roster: {
|
||||
search: string
|
||||
@@ -1128,7 +1129,7 @@ const zhHant: BotsMessages = {
|
||||
}
|
||||
|
||||
/** Registered via `ctx.i18n.register` at plugin load (disposer tracked). */
|
||||
export const BOTS_LOCALES: PluginLocaleBundles = { en, ja, zh, 'zh-hant': zhHant }
|
||||
export const BOTS_LOCALES: PluginLocaleBundles = { en, tr, ja, zh, 'zh-hant': zhHant }
|
||||
|
||||
// Bind the message SHAPE to a plugin translator: string leaves resolve now,
|
||||
// function leaves forward their args through t(path, …).
|
||||
|
||||
@@ -0,0 +1,218 @@
|
||||
import type { BotsMessages } from './i18n'
|
||||
|
||||
export const tr: BotsMessages = {
|
||||
roster: {
|
||||
search: 'Bot ve grup sohbetlerinde ara',
|
||||
searchPlaceholder: 'Bot ve grup sohbetlerinde ara…',
|
||||
newBotOrGroup: 'Yeni bot veya grup sohbeti',
|
||||
groupChats: 'Grup sohbetleri',
|
||||
emptyTitle: 'Henüz bot yok',
|
||||
emptyDesc: 'İlk botunuzu oluşturun.',
|
||||
noMatchQuery: query => `“${query}” ile eşleşen bot veya grup sohbeti yok`,
|
||||
noMatchQueryOn: (query, gateway) => `${gateway} üzerinde “${query}” ile eşleşen bot veya grup sohbeti yok`,
|
||||
noMatchFiltersOn: gateway => `${gateway} üzerinde bu filtrelere uyan bot veya grup sohbeti yok`,
|
||||
noMatchFilters: 'Bu filtrelere uyan bot veya grup sohbeti yok.',
|
||||
clearFilters: 'Filtreleri temizle',
|
||||
allHidden: 'Tüm botlar gizli',
|
||||
allHiddenDesc: 'Botlar çalışmaya devam eder ve geçmişleri korunur.',
|
||||
showHidden: 'Gizli botları göster',
|
||||
noHiddenMatch: 'Bu filtrelere uyan gizli bot yok.',
|
||||
hiddenFromRoster: 'Listede gizli',
|
||||
pinned: 'Sabitlenenler',
|
||||
needsAttention: 'ilgilenmeniz gerekiyor',
|
||||
needsInput: 'Yanıtınız gerekiyor',
|
||||
botsAndGroups: 'Botlar ve grup sohbetleri',
|
||||
botsOnly: 'Yalnızca botlar',
|
||||
groupsOnly: 'Yalnızca grup sohbetleri',
|
||||
anyActivity: 'Tüm etkinlikler',
|
||||
activeNow: 'Şu anda etkin',
|
||||
recentlyActive: 'Yakın zamanda etkin',
|
||||
older: 'Daha eski',
|
||||
gatewayRemoved: 'Ağ geçidi kaldırıldı',
|
||||
onDemand: 'Gerektiğinde',
|
||||
ready: 'Hazır',
|
||||
statusUnknown: 'Durum bilinmiyor',
|
||||
unavailable: 'Kullanılamıyor',
|
||||
retryNow: 'Şimdi yeniden dene',
|
||||
rosterUnavailable: reason =>
|
||||
`Liste kullanılamıyor: ${reason}. Ağ geçidi profiles.list özelliğini desteklemiyorsa AITURK’ü güncelleyip ağ geçidini yeniden başlatın.`,
|
||||
waitingForGateway:
|
||||
'Ağ geçidi bağlantısı bekleniyor… Uzak bağlantılar birkaç saniye sürebilir; otomatik olarak yeniden denenir.'
|
||||
},
|
||||
sections: {
|
||||
newSection: 'Yeni bölüm',
|
||||
newTitle: 'Yeni bölüm',
|
||||
renameTitle: 'Bölümü yeniden adlandır',
|
||||
nameLabel: 'Bölüm adı',
|
||||
namePlaceholder: 'ör. Müşteriler',
|
||||
create: 'Oluştur',
|
||||
rename: 'Yeniden adlandır…',
|
||||
moveUp: 'Yukarı taşı',
|
||||
moveDown: 'Aşağı taşı',
|
||||
unassigned: 'Atanmamış',
|
||||
options: name => `${name} bölümü seçenekleri`,
|
||||
headingTip: 'Botları buraya bırakın · yeniden adlandırmak için çift tıklayın',
|
||||
emptyHint: 'Botları buraya sürükleyin',
|
||||
moveTo: 'Bölüme taşı',
|
||||
newSectionEllipsis: 'Yeni bölüm…',
|
||||
removeFromSection: 'Bölümden çıkar',
|
||||
deleted: (name, count) =>
|
||||
count === 0 ? `“${name}” silindi` : `“${name}” silindi; ${count} bot Atanmamış bölümüne taşındı`,
|
||||
undo: 'Geri al'
|
||||
},
|
||||
bot: {
|
||||
newTitle: 'Yeni bot',
|
||||
editTitle: 'Profili düzenle',
|
||||
editMenu: 'Düzenle…',
|
||||
helpPromptPlaceholder: 'Bu bot hangi konuda yardımcı olsun?',
|
||||
descriptionHint: 'Botun adı ve açıklamasından otomatik oluşturmak için boş bırakın.',
|
||||
newChatWith: 'Bu botla yeni sohbet',
|
||||
openBotChat: 'Bot sohbetini aç',
|
||||
duplicate: 'Çoğalt',
|
||||
duplicateFailed: 'Çoğaltılamadı',
|
||||
deleteTitle: 'Bot ve profili silinsin mi?',
|
||||
removeFromAllGroups: 'Tüm gruplardan çıkar',
|
||||
createFirstHint: 'Botlar panelini açıp “Yeni bot” düğmesine basın.',
|
||||
createFailed: 'Profil henüz oluşturulamadı',
|
||||
advanced: 'Gelişmiş',
|
||||
advancedHint: 'Gelişmiş — model, beceriler, araç grupları, SOUL.md',
|
||||
advancedFailed: 'Gelişmiş yapılandırma başarısız oldu',
|
||||
openAnotherChatUnsupported: 'Başka bir bot sohbeti açmak için AITURK IDE’yi güncelleyin.',
|
||||
remoteConnectionsUnsupported: 'Diğer bağlantılardaki botlarla sohbet etmek için AITURK IDE’yi güncelleyin.',
|
||||
chatEmpty: 'Başlamak için bir mesaj yazın.',
|
||||
kickoff: 'Merhaba, bana kendinden bahseder misin?'
|
||||
},
|
||||
avatar: {
|
||||
classicShapes: 'Klasik şekiller',
|
||||
blobFromName: 'Botun adından oluşturulan yüz',
|
||||
unlockFollowsName: 'Kilidi aç; yüz yeniden botun adına göre oluşsun',
|
||||
randomize: 'Rastgele oluştur',
|
||||
tabBot: 'Bot',
|
||||
tabGenerate: 'Oluştur',
|
||||
upload: 'Yükle',
|
||||
tabPet: 'Maskot',
|
||||
removeImage: 'Görseli kaldır; şekil kullan',
|
||||
removeBackToShape: 'Kaldır; şekil avatarına dön',
|
||||
describePlaceholder: 'Avatarınızı tarif edin…',
|
||||
describeHint: 'Ad, unvan, açıklama ve ajan mesajlaşma listesinden otomatik oluşturmak için boş bırakın.',
|
||||
matchTheName: 'Ada uygun oluştur',
|
||||
pickPet: 'Bu botun profil resmi için bir maskot seçin.',
|
||||
petLoadFailed: 'Maskot yüklenemedi; başka birini deneyin.',
|
||||
imageTooLarge: 'Görsel çok büyük (en fazla 15 MB).',
|
||||
generationFailed: 'Avatar oluşturulamadı',
|
||||
savedLocally: 'Görünüm yerel olarak kaydedildi; uzak sunucuya kaydedilemedi',
|
||||
savedLocallyDescriptionFailed: 'Görünüm yerel olarak kaydedildi; açıklama güncellenemedi',
|
||||
generate: 'Oluştur',
|
||||
generating: 'Oluşturuluyor…'
|
||||
},
|
||||
group: {
|
||||
newTitle: 'Yeni grup sohbeti',
|
||||
manageDesc: 'Bir bot birden fazla grup sohbetine katılabilir. Üyelikler tüm bilgisayarlarla eşitlenir.',
|
||||
manageTitle: 'Grupları yönet',
|
||||
settingsTitle: 'Grup ayarları',
|
||||
settingsDesc: 'Grubu yeniden adlandırın veya oda resmi seçin. Üyeler ve geçmiş korunur.',
|
||||
nameLabel: 'Grup adı',
|
||||
searchToAdd: 'Eklenecek botları ara',
|
||||
searchToAddPlaceholder: 'Eklenecek botları ara…',
|
||||
removeFromSelection: 'Seçimden çıkar',
|
||||
disbandTitle: 'Grup sohbeti dağıtılsın mı?',
|
||||
deleteTitle: 'Grup sohbeti silinsin mi?',
|
||||
deleteAction: 'Sil',
|
||||
composerPlaceholder: 'Bir mesaj yazın; gruptaki tüm botlar odadaki mesajları duyar.',
|
||||
attachHint: 'Dosya ekleyin; yanıt veren tüm botlar dosyaları görür',
|
||||
newThread: 'Yeni konuşma',
|
||||
reply: 'Yanıtla',
|
||||
replyInThread: 'Konuşmada yanıtla',
|
||||
replyInThreadPlaceholder: 'Konuşmada yanıtla…',
|
||||
openThread: 'Bu konuşmayı aç',
|
||||
collapseThread: 'Konuşmayı daralt',
|
||||
collapseThreadLabel: 'Bu konuşmayı daralt',
|
||||
activity: 'Etkinlik',
|
||||
noActivityYet: 'Bu turda henüz etkinlik yok.',
|
||||
showActivity: 'Oda etkinliğini göster',
|
||||
hideActivity: 'Oda etkinliğini gizle',
|
||||
stop: 'Durdur',
|
||||
stopHint: 'Bu çalıştırmayı durdur; sıradaki üyeyi keser ve diğerlerini bekletir',
|
||||
allHeldStatus: count => `${count} botun tümü duraklatıldı`,
|
||||
heldMembersStatus: members => `Duraklatılanlar: ${members}`,
|
||||
holdReleaseHint: 'Sürdürmek için duraklatılan botu etiketleyin veya @all resume gönderin.',
|
||||
needsYourInput: 'Bu grup sohbetindeki bir bot yanıtınızı bekliyor',
|
||||
pictureGenerationFailed: 'Grup resmi oluşturulamadı',
|
||||
nameTaken: name => `“${name}” adlı grup zaten var.`,
|
||||
memberCount: count => `${count} bot`,
|
||||
settingsHint: group => `Grup ayarları — ${group} grubunu yeniden adlandırın veya oda resmi seçin`,
|
||||
settingsLabel: group => `${group} grup ayarları`,
|
||||
disbandHint: group => `${group} grup sohbetini dağıt`,
|
||||
disbandLabel: group => `${group} grubunu dağıt`,
|
||||
disbandAction: 'Dağıt',
|
||||
disbanding: 'Dağıtılıyor…',
|
||||
disbandDone: 'Dağıtıldı',
|
||||
disbanded: group => `“${group}” dağıtıldı`,
|
||||
disbandDescPrefix: 'Dağıtılacak grup: ',
|
||||
disbandDescSuffix: count =>
|
||||
`. ${count} botun grup bağlantısı kaldırılır ve ortak oda günlüğü temizlenir. Botlar ve gruba ait bireysel oturumları korunur.`,
|
||||
stopped: group => `${group} durduruldu; kalan turlar siz sürdürünceye kadar bekletilir`,
|
||||
removeAttachment: 'Eki kaldır',
|
||||
threadFallback: 'Konuşma',
|
||||
replyCount: replies => `${replies} yanıt`,
|
||||
dropToThread: 'Bu konuşma yanıtına eklemek için bırakın',
|
||||
dropToRoom: 'Eklemek için bırakın; yanıt veren tüm botlar görür',
|
||||
waitingForAnswer: 'Yanıtınız bekleniyor…',
|
||||
memberThinking: name => `${name} düşünüyor…`,
|
||||
roomWorking: 'Odada çalışılıyor…',
|
||||
messageRoom: group => `${group} grubuna mesaj gönder`,
|
||||
newThreadPlaceholder: group => `${group} içinde yeni konuşma… (yönlendirmek için @ad, tümü için @everyone)`,
|
||||
everyoneMeta: 'Odadaki tüm botlar',
|
||||
commandApproval: 'komut onayı',
|
||||
answerFailed: (handle, error) => `Yanıt @${handle} kullanıcısına gönderilemedi: ${error}`,
|
||||
wantsToRunCommand: handle => `@${handle} bir komut çalıştırmak istiyor:`,
|
||||
asks: handle => `@${handle} soruyor:`,
|
||||
answerTo: member => `@${member} kullanıcısına yanıt ver`
|
||||
},
|
||||
tools: {
|
||||
skillsHub: 'AITURK beceri merkezi',
|
||||
filterSkills: 'Becerileri filtrele…',
|
||||
searchHub: 'Merkezde ara (topluluk ve bilinen kaynaklar)…',
|
||||
noMcpServers: 'Yapılandırılmış veya katalogda bulunan MCP sunucusu yok.'
|
||||
},
|
||||
cron: {
|
||||
filterHint:
|
||||
'Bu profilde zamanlanmış görevler var ancak hiçbiri bu bot için etiketlenmemiş. Burada görünmesi için göreve “[bot:<ad>] …” biçiminde ad verin veya aşağıdaki zamanlanmış görevler bölümüne bakın.',
|
||||
needsRosterFirst: 'Bu bot önce listede görünmeli.',
|
||||
staleNotice: 'Zamanlanmış görevler yenilenemedi. Son alınan liste gösteriliyor.',
|
||||
readFailure: 'Liste hâlâ mevcut olabilir; okuma başarısız oldu, silme işlemi yapılmadı.',
|
||||
createDesc: bot =>
|
||||
`${bot} tarafından zamanlanarak çalıştırılan yinelenen görev. Çalıştırmalar botun kendi sohbet geçmişinde görünür.`,
|
||||
instruction: 'Talimat',
|
||||
whenToRun: 'Çalıştırma zamanı',
|
||||
dayOfMonth: 'Ayın günü',
|
||||
sendResultsTo: 'Sonuçların gönderileceği yer',
|
||||
runHistoryOnly: 'Yalnızca çalıştırma geçmişi',
|
||||
botChatTarget: bot => `${bot} sohbeti (bot yanıt verir)`,
|
||||
continuity: 'Süreklilik: her çalıştırma önceki çıktıyı görür; tekrarları önleyip kaldığı yerden sürdürür',
|
||||
onceIn: when => `Bir kez (${when})`,
|
||||
everyNDays: days => `${days} günde bir`,
|
||||
everyNHours: hours => `${hours} saatte bir`,
|
||||
everyNMinutes: minutes => `${minutes} dakikada bir`,
|
||||
freqOnce: 'Bir kez, şu süre sonra…',
|
||||
freqHourly: 'Her saat',
|
||||
freqDaily: 'Her gün',
|
||||
freqWeekdays: 'Hafta içi',
|
||||
freqWeekly: 'Her hafta',
|
||||
freqMonthly: 'Her ay',
|
||||
freqInterval: 'Aralık',
|
||||
freqAdvanced: 'Gelişmiş…',
|
||||
unitMinutes: 'dakika',
|
||||
unitHours: 'saat',
|
||||
unitDays: 'gün',
|
||||
runsOnce: (count, unit) => `${count} ${unit} sonra bir kez çalışır`,
|
||||
runsHourly: 'Her saat başında çalışır',
|
||||
runsDaily: time => `Her gün ${time} saatinde çalışır`,
|
||||
runsWeekdays: time => `Pazartesiden cumaya ${time} saatinde çalışır`,
|
||||
runsWeekly: (day, time) => `Her ${day} ${time} saatinde çalışır`,
|
||||
runsMonthly: (day, time) => `Her ayın ${day}. günü ${time} saatinde çalışır`,
|
||||
runsInterval: (count, unit) => `${count} ${unit} aralıkla çalışır`,
|
||||
runsRaw: 'Ham zamanlama — every Nm/Nh/Nd veya 5 alanlı cron ifadesi',
|
||||
timesTotal: count => `, toplam ${count} kez`
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user