Localize macOS application menu and correct AITURK package checks
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
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<string, string> = {
|
||||
[`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<Record<NonNullable<MenuItemConstructorOptions['role']>, 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) })
|
||||
}
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user