import type { MenuItemConstructorOptions } from 'electron' export type NativeMenuLocale = 'en' | 'tr' // Only the primary settings surface owns the app-wide menu language. Utility // windows have their own I18nProvider and must not overwrite that preference. export function resolveNativeMenuLocale( value: unknown, senderId: number, primaryId: number | undefined ): NativeMenuLocale | null { if (primaryId === undefined || senderId !== primaryId) { return null } if (value === 'tr') { return 'tr' } if (typeof value === 'string' && ['en', 'zh', 'zh-hant', 'ja', 'ar', 'ru'].includes(value)) { return 'en' } return null } export function localizeNativeMenu( template: MenuItemConstructorOptions[], locale: NativeMenuLocale, appName: string ): MenuItemConstructorOptions[] { if (locale !== 'tr') { return template } const labels: Record = { [`About ${appName}`]: `${appName} Hakkında`, 'Check for Updates…': 'Güncellemeleri kontrol et…', File: 'Dosya', 'New Window': 'Yeni pencere', 'Open Folder…': 'Klasör aç…', Close: 'Kapat', Edit: 'Düzen', View: 'Görünüm', Reload: 'Yenile', 'Toggle Developer Tools': 'Geliştirici araçlarını aç/kapat', 'Actual Size': 'Gerçek boyut', 'Zoom In': 'Yakınlaştır', 'Zoom Out': 'Uzaklaştır', Window: 'Pencere', Help: 'Yardım' } const roles: Partial, string>> = { services: 'Servisler', hide: `${appName} uygulamasını gizle`, hideOthers: 'Diğerlerini gizle', unhide: 'Tümünü göster', quit: `${appName} uygulamasından çık`, undo: 'Geri al', redo: 'Yinele', cut: 'Kes', copy: 'Kopyala', paste: 'Yapıştır', pasteAndMatchStyle: 'Biçimlendirmeden yapıştır', delete: 'Sil', selectAll: 'Tümünü seç', forceReload: 'Uygulamayı zorla yenile', togglefullscreen: 'Tam ekranı aç/kapat', minimize: 'Simge durumuna küçült', zoom: 'Pencereyi büyüt/küçült', front: 'Tümünü öne getir', close: 'Kapat' } return template.map(item => { const label = item.label !== undefined ? Object.hasOwn(labels, item.label) ? labels[item.label] : item.label : item.role && roles[item.role] return { ...item, ...(label !== undefined && { label }), ...(Array.isArray(item.submenu) && { submenu: localizeNativeMenu(item.submenu, locale, appName) }) } }) }