mirror of
https://github.com/netbirdio/netbird.git
synced 2024-11-29 19:43:57 +01:00
92 lines
2.1 KiB
Go
92 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"path"
|
|
"unsafe"
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
"golang.org/x/sys/windows"
|
|
)
|
|
|
|
func (s *serviceClient) setDefaultFonts() {
|
|
defaultFontPath := s.getWindowsFontFilePath()
|
|
|
|
if _, err := os.Stat(defaultFontPath); err != nil {
|
|
log.Errorf("Failed to find default font file: %v", err)
|
|
return
|
|
}
|
|
|
|
os.Setenv("FYNE_FONT", defaultFontPath)
|
|
}
|
|
|
|
func (s *serviceClient) getWindowsFontFilePath() string {
|
|
var (
|
|
fontFolder = "C:/Windows/Fonts"
|
|
fontMapping = map[string]string{
|
|
"default": "Segoeui.ttf",
|
|
"zh-CN": "Msyh.ttc",
|
|
"am-ET": "Ebrima.ttf",
|
|
"nirmala": "Nirmala.ttf",
|
|
"chr-CHER-US": "Gadugi.ttf",
|
|
"zh-HK": "Msjh.ttc",
|
|
"zh-TW": "Msjh.ttc",
|
|
"ja-JP": "Yugothm.ttc",
|
|
"km-KH": "Leelawui.ttf",
|
|
"ko-KR": "Malgun.ttf",
|
|
"th-TH": "Leelawui.ttf",
|
|
"ti-ET": "Ebrima.ttf",
|
|
}
|
|
nirMalaLang = []string{
|
|
"as-IN",
|
|
"bn-BD",
|
|
"bn-IN",
|
|
"gu-IN",
|
|
"hi-IN",
|
|
"kn-IN",
|
|
"kok-IN",
|
|
"ml-IN",
|
|
"mr-IN",
|
|
"ne-NP",
|
|
"or-IN",
|
|
"pa-IN",
|
|
"si-LK",
|
|
"ta-IN",
|
|
"te-IN",
|
|
}
|
|
)
|
|
|
|
// getUserDefaultLocaleName.Call() panics if the func is not found
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
log.Errorf("Recovered from panic: %v", r)
|
|
}
|
|
}()
|
|
|
|
kernel32 := windows.NewLazySystemDLL("kernel32.dll")
|
|
getUserDefaultLocaleName := kernel32.NewProc("GetUserDefaultLocaleName")
|
|
|
|
buf := make([]uint16, 85) // LOCALE_NAME_MAX_LENGTH is usually 85
|
|
r, _, err := getUserDefaultLocaleName.Call(uintptr(unsafe.Pointer(&buf[0])), uintptr(len(buf)))
|
|
// returns 0 on failure, err is always non-nil
|
|
// https://learn.microsoft.com/en-us/windows/win32/api/winnls/nf-winnls-getuserdefaultlocalename
|
|
if r == 0 {
|
|
log.Errorf("GetUserDefaultLocaleName call failed: %v", err)
|
|
return path.Join(fontFolder, fontMapping["default"])
|
|
}
|
|
|
|
defaultLanguage := windows.UTF16ToString(buf)
|
|
|
|
for _, lang := range nirMalaLang {
|
|
if defaultLanguage == lang {
|
|
return path.Join(fontFolder, fontMapping["nirmala"])
|
|
}
|
|
}
|
|
|
|
if font, ok := fontMapping[defaultLanguage]; ok {
|
|
return path.Join(fontFolder, font)
|
|
}
|
|
|
|
return path.Join(fontFolder, fontMapping["default"])
|
|
}
|