From 078d0279edb4e1deddcbc80ce4998c9ebc19552f Mon Sep 17 00:00:00 2001 From: cuu Date: Wed, 19 Dec 2018 20:31:32 +0800 Subject: [PATCH] start to add Languages in Settings --- .../10_Settings/Languages/languages_page.go | 153 ++++++++++++++++ .../10_Settings/Languages/plugin_init.go | 39 ++++ sysgo/UI/UI.go | 6 + sysgo/UI/info_page_list_item.go | 2 +- sysgo/UI/label.go | 9 +- sysgo/UI/lang_manager.go | 173 ++++++++++++++++++ sysgo/UI/multilabel.go | 10 +- sysgo/UI/page.go | 52 ++++++ sysgo/langs/00_English.ini | 107 +++++++++++ sysgo/langs/01_日本語.ini | 110 +++++++++++ sysgo/langs/03_简体中文.ini | 108 +++++++++++ sysgo/langs/04_繁体中文.ini | 108 +++++++++++ 12 files changed, 873 insertions(+), 4 deletions(-) create mode 100644 Menu/GameShell/10_Settings/Languages/languages_page.go create mode 100644 Menu/GameShell/10_Settings/Languages/plugin_init.go create mode 100644 sysgo/UI/lang_manager.go create mode 100644 sysgo/langs/00_English.ini create mode 100644 sysgo/langs/01_日本語.ini create mode 100644 sysgo/langs/03_简体中文.ini create mode 100644 sysgo/langs/04_繁体中文.ini diff --git a/Menu/GameShell/10_Settings/Languages/languages_page.go b/Menu/GameShell/10_Settings/Languages/languages_page.go new file mode 100644 index 0000000..a5d5812 --- /dev/null +++ b/Menu/GameShell/10_Settings/Languages/languages_page.go @@ -0,0 +1,153 @@ +package Languages + +import ( + "github.com/cuu/gogame/draw" + "github.com/cuu/gogame/rect" + + "github.com/cuu/LauncherGoDev/sysgo/UI" + +) + +type ListPageSelector struct { + UI.InfoPageSelector +} + +func NewListPageSelector() *ListPageSelector { + + p := &ListPageSelector{} + + p.Width = UI.Width + p.BackgroundColor = &color.Color{131,199,219,255} //SkinManager().GiveColor('Front') + + return p + +} + + +func (self *ListPageSelector) Draw() { + + idx := self.Parent.GetPsIndex() + mylist := self.Parent.GetMyList() + + if idx < len(mylist) { + x,y := mylist[idx].Coord() + _,h := mylist[idx].Size() + + self.PosX = x+2 + self.PosY = y+1 + self.Height = h-3 + + canvas_ := self.Parent.GetCanvasHWND() + rect_ := rect.Rect(self.PosX,self.PosY,self.Width-4, self.Height) + + draw.AARoundRect(canvas_,&rect_,self.BackgroundColor,4,0,self.BackgroundColor) + } +} + +type PageListItem struct { + UI.InfoPageListItem + + Active bool + +} + + +func NewPageListItem() *PageListItem { + + p := &PageListItem{} + p.Height = UI.DefaultInfoPageListItemHeight + p.ReadOnly = false + p.Labels = make(map[string]LabelInterface) + p.Icons = make( map[string]IconItemInterface) + p.Fonts = make(map[string]*ttf.Font) + + return p +} + + +func (self *PageListItem) Draw() { + + x,_ := self.Labels["Text"].Coord() + w,h := self.Labels["Text"].Size() + + self.Labels["Text"].NewCoord( x, self.PosY + (self.Height - h)/2 ) + + + if self.Active == true { + self.Parent.(*LanguagesPage).Icons["done"].NewCoord(self.Parent.(*LanguagesPage).Width-30,self.PosY+5) + self.Parent.(*LanguagesPage).Icons["done"].Draw() + } + + self.Labels["Text"].SetBold(self.Active) + self.Labels["Text"].Draw() + + + + if _, ok := self.Labels["Small"]; ok { + x,_ = self.Labels["Small"].Coord() + w,h = self.Labels["Small"].Size() + + self.Labels["Small"].NewCoord( self.Width - w - 10 , self.PosY + (self.Height - h)/2 ) + self.Labels["Small"].Draw() + + } + + canvas_ := self.Parent.GetCanvasHWND() + draw.Line(canvas_, &color.Color{169,169,169,255}, + self.PosX, self.PosY+self.Height -1, + self.PosX + self.Width, self.PosY+self.Height -1 ,1) + +} + +type LanguagesPage struct { + UI.Page + + ListFont *ttf.Font + + BGwidth int + BGheight int + + DrawOnce bool + + Scroller *UI.ListScroller + + Icons map[string]UI.IconItemInterface +} + + +func NewLanguagesPage() *LanguagesPage { + p := &LanguagesPage{} + + p.ListFont = UI.Fonts["notosanscjk15"] + p.FootMsg = [5]string{"Nav","","","Back","Select"} + + p.BGwidth = UI.Width + p.BGheight = UI.Height - 24 - 20 + + p.Icons = make(map[string]UI.IconItemInterface) + + return p +} + +func (self *LanguagesPage) GenList() { + + self.MyList = nil + + start_x := 0 + start_y := 0 + last_height := 0 + + file_paths,err := filepath.Glob("sysgo/langs/*.ini")//sorted + + if err == nil { + for i,u := range file_paths { + li := NewPageListItem() + + + } + + } + +} + + diff --git a/Menu/GameShell/10_Settings/Languages/plugin_init.go b/Menu/GameShell/10_Settings/Languages/plugin_init.go new file mode 100644 index 0000000..cfe25d5 --- /dev/null +++ b/Menu/GameShell/10_Settings/Languages/plugin_init.go @@ -0,0 +1,39 @@ +package Languages + +import ( +/* + "github.com/veandco/go-sdl2/ttf" + + "github.com/cuu/gogame/surface" + "github.com/cuu/gogame/event" + "github.com/cuu/gogame/rect" + "github.com/cuu/gogame/color" +*/ + "github.com/cuu/LauncherGoDev/sysgo/UI" + //"github.com/cuu/LauncherGoDev/sysgo/DBUS" +) + +/******************************************************************************/ +type LanguagesPlugin struct { + UI.Plugin + LanguagesPage *LanguagesPage +} + + +func (self *LanguagesPlugin) Init( main_screen *UI.MainScreen ) { + self.LanguagesPage = NewLanguagesPage() + self.LanguagesPage.SetScreen( main_screen) + self.LanguagesPage.SetName("Languages") + self.LanguagesPage.Init() +} + +func (self *LanguagesPlugin) Run( main_screen *UI.MainScreen ) { + if main_screen != nil { + main_screen.PushCurPage() + main_screen.SetCurPage(self.LanguagesPage) + main_screen.Draw() + main_screen.SwapAndShow() + } +} + +var APIOBJ LanguagesPlugin diff --git a/sysgo/UI/UI.go b/sysgo/UI/UI.go index fa35a36..bf26544 100644 --- a/sysgo/UI/UI.go +++ b/sysgo/UI/UI.go @@ -85,4 +85,10 @@ func init() { if MyIconPool == nil { MyIconPool = NewIconPool() } + if MyLangManager == nil { + + MyLangManager = NewLangManager() + MyLangManager.Init() + + } } diff --git a/sysgo/UI/info_page_list_item.go b/sysgo/UI/info_page_list_item.go index 87c91f7..081c685 100644 --- a/sysgo/UI/info_page_list_item.go +++ b/sysgo/UI/info_page_list_item.go @@ -17,7 +17,7 @@ type InfoPageListItem struct { func NewInfoPageListItem() *InfoPageListItem { p := &InfoPageListItem{} - p.Height = 30 + p.Height = DefaultInfoPageListItemHeight p.ReadOnly = false p.Labels = make(map[string]LabelInterface) p.Icons = make( map[string]IconItemInterface) diff --git a/sysgo/UI/label.go b/sysgo/UI/label.go index 712bf7f..c398390 100644 --- a/sysgo/UI/label.go +++ b/sysgo/UI/label.go @@ -25,6 +25,7 @@ type LabelInterface interface { SetText(text string) Draw() DrawCenter(bold bool) + SetBold(b bool) } type Label struct { @@ -33,12 +34,14 @@ type Label struct { FontObj *ttf.Font Color *color.Color CanvasHWND *sdl.Surface + Bold bool // TextSurf *sdl.Surface } func NewLabel() *Label { l := &Label{} l.Color = &color.Color{83,83,83,255} + l.Bold = false return l } @@ -90,6 +93,10 @@ func (self *Label) SetText(text string) { self.Width,self.Height = font.Size(self.FontObj, self.Text) } +func (self *Label) SetBold(b bool) { + self.Bold = b +} + func (self *Label) DrawCenter(bold bool) { // default bold is false font.SetBold(self.FontObj,bold) my_text := font.Render(self.FontObj,self.Text, true, self.Color, nil) @@ -100,7 +107,7 @@ func (self *Label) DrawCenter(bold bool) { // default bold is false } func (self *Label) Draw() { - font.SetBold(self.FontObj,false) // avoing same font tangling set_bold to others + font.SetBold(self.FontObj,self.Bold) // avoing same font tangling set_bold to others my_text := font.Render(self.FontObj,self.Text, true, self.Color, nil) diff --git a/sysgo/UI/lang_manager.go b/sysgo/UI/lang_manager.go new file mode 100644 index 0000000..4213435 --- /dev/null +++ b/sysgo/UI/lang_manager.go @@ -0,0 +1,173 @@ +package UI + +import ( + "fmt" + "strings" + "io/ioutil" + "path/filepath" + "github.com/veandco/go-sdl2/ttf" + "github.com/go-ini/ini" + +) + + +func sliceToInt(s []int) int { + res := 0 + op := 1 + for i := len(s) - 1; i >= 0; i-- { + res += s[i] * op + op *= 10 + } + return res +} + + +func ParseNum(s string) []int { + nLen := 0 + for i := 0; i < len(s); i++ { + if b := s[i]; '0' <= b && b <= '9' { + nLen++ + } + } + var n = make([]int, 0, nLen) + for i := 0; i < len(s); i++ { + if b := s[i]; '0' <= b && b <= '9' { + n = append(n, int(b)-'0') + } + } + return n +} + +func GetNumberFromString(s string) int { + is := ParseNum(s) + + return sliceToInt(is) + +} + +type LangManager struct { + + Langs map[string]string + ConfigFilename string + + CJKMode bool +} + +func NewLangManager() *LangManager { + p := &LangManager{} + + p.ConfigFilename = "00_English.ini" + p.CJKMode = false + + return p +} + +func (self *LangManager) Init() { + if self.Langs == nil { + self.SetLangs() + } +} + +func (self *LangManager) UpdateLang() { + + self.Langs = nil + self.SetLangs() + +} + +func (self *LangManager) IsCJKMode() bool { + var latins = [1]string{"English"} + + self.CJKMode= false + + for _,v := range latins { + if strings.HasPrefix(self.ConfigFilename,v) { + self.CJKMode = false + break + } + } + + return self.CJKMode +} + +func (self *LangManager) SetLangs() { + + self.Langs = make(map[string]string) + fname := "sysgo/.lang" + + load_opts := ini.LoadOptions{ + IgnoreInlineComment:true, + } + + if FileExists(fname) { + config_bytes,err := ioutil.ReadFile(fname) + if err == nil { + self.ConfigFilename = strings.Trim(string(config_bytes),"\r\n ") + if len(self.ConfigFilename) < 3 { + self.ConfigFilename = "00_English.ini" + } + } + }else { + System("touch " + fname) + } + + config_file_relative_path := filepath.Join("sysgo","langs",self.ConfigFilename) + + if FileExists(config_file_relative_path) == false { + return + } + + //no matter what ,we must have 00_English.ini + cfg, err := ini.LoadSources(load_opts, config_file_relative_path) + if err != nil { + fmt.Printf("Fail to read file: %v\n", err) + return + } + + section := cfg.Section("Langs") + if section != nil { + opts := section.KeyStrings() + for _,v := range opts { + self.Langs[v] = section.Key(v).String() + } + } + +} + +func (self *LangManager) Tr(english_key_str string) string { + + if self.Langs == nil { + return english_key_str + } + + if len(self.Langs) == 0 { + return english_key_str + } + + if v,ok := self.Langs[english_key_str]; ok { + + return v + } + return english_key_str +} + +func (self *LangManager) TrFont(orig_font_str string) *ttf.Font { + + font_size_number := GetNumberFromString(orig_font_str) + if font_size_number > 120 { + panic("font string format error") + } + + if strings.Contains(self.ConfigFilename,"English.ini") { + return Fonts[orig_font_str] + }else { + if font_size_number > 28 { + panic("cjk font size over 28") + } + } + + return Fonts[ fmt.Sprintf("notosanscjk%d",font_size_number) ] + +} + +var MyLangManager *LangManager diff --git a/sysgo/UI/multilabel.go b/sysgo/UI/multilabel.go index 3c1bfa4..b64590d 100644 --- a/sysgo/UI/multilabel.go +++ b/sysgo/UI/multilabel.go @@ -21,6 +21,7 @@ type MultiLabel struct { CanvasHWND *sdl.Surface //TextSurf *sdl.Surface MaxWidth int + Bold bool } func NewMultiLabel() *MultiLabel{ @@ -28,7 +29,7 @@ func NewMultiLabel() *MultiLabel{ l.Color = &color.Color{83,83,83,255} l.Width = 135 l.Height = 100 - + l.Bold = false return l } @@ -66,12 +67,17 @@ func (self *MultiLabel) SetText(text string) { } +func (self *MultiLabel) SetBold(b bool) { + self.Bold = b + +} + func (self *MultiLabel) DrawCenter(bold bool) { } func (self *MultiLabel) Draw() { - font.SetBold(self.FontObj,false) // avoing same font tangling set_bold to others + font.SetBold(self.FontObj,self.Bold) // avoing same font tangling set_bold to others self.blit_text(self.CanvasHWND, self.Text,self.PosX,self.PosY,self.FontObj) } diff --git a/sysgo/UI/page.go b/sysgo/UI/page.go index 8add5bc..e5d3906 100644 --- a/sysgo/UI/page.go +++ b/sysgo/UI/page.go @@ -174,6 +174,9 @@ type PageInterface interface { GetAlign() int SetAlign(al int) + ScrollUp() + ScrollDown() + SetIconIndex(idx int) GetIconIndex() int @@ -1013,3 +1016,52 @@ func (self *Page) GetAlign() int { return self.Align } +func (self *Page) ScrollUp() { + if len(self.MyList) == 0 { + return + } + + self.PsIndex -=1 + + if self.PsIndex < 0 { + self.PsIndex = 0 + } + + cur_li := self.MyList[self.PsIndex] + x,y := cur_li.Coord() + _,h := cur_li.Size() + if y < 0 { + for i,_ := range self.MyList{ + x,y = self.MyList[i].Coord() + _, h = self.MyList[i].Size() + self.MyList[i].NewCoord(x,y + h) + } + + //self.Scrolled +=1 + } + +} + +func (self *Page) ScrollDown() { + if len(self.MyList) == 0 { + return + } + self.PsIndex +=1 + + if self.PsIndex >= len(self.MyList) { + self.PsIndex = len(self.MyList) - 1 + } + + cur_li := self.MyList[self.PsIndex] + x,y := cur_li.Coord() + _,h := cur_li.Size() + + if y+ h > self.Height { + for i,_ := range self.MyList{ + x,y = self.MyList[i].Coord() + _, h = self.MyList[i].Size() + self.MyList[i].NewCoord(x,y - h) + } + // self.Scrolled -=1 + } +} diff --git a/sysgo/langs/00_English.ini b/sysgo/langs/00_English.ini new file mode 100644 index 0000000..00e92d5 --- /dev/null +++ b/sysgo/langs/00_English.ini @@ -0,0 +1,107 @@ +[Langs] +Settings=Settings +Retro Games=Retro Games +Music Player=Music Player +TinyCloud=Tiny Cloud +PowerOFF=PowerOFF +Reload UI=Reload UI +freeDM=freeDM +CaveStory=CaveStory +RetroArch=RetroArch +Launching=Launching.... +Nav=Nav +Scan=Scan +Back=Back +Enter=Enter +Remove=Remove +Backspace=Backspace +Done=Done +Run=Run +AddToPlayList=Add to Playlist +Add to Playlist=Add to Playlist +DownloadConfirm=Download Confirm +MyFavGames=my favorite games +Deleting=Deleting... +AddFav=Add Fav +ADdFavList=Add to favourite list +Del=Del +Please upload data over Wi-Fi=Please upload data over Wi-Fi +ConfirmDeleteQ=Confirm Delete ? +AlreadyExisted=Already existed +Cancel=Cancel +Yes=Yes +ConfirmQ=Confirm? +Disconnecting=Disconnecting... +ConfirmUpdateToFQ=Confirm Update to %%s ? +UpdateToFQ=Update to %%s ? +SetupGameEngineAutoQ=Do you want to setup this game engine automatically? +Downloading=Downloading... +BATOver5Pct=Battery must over 5%% +DeleteConfirm=Delete Confirm +FavouriteGames=Favourite Games +ConfirmForgetQ=Confirm Forget? +ConfirmForget=Confirm Forget +Disconnect=Disconnect +ConfirmDisconnectQ=Confirm Disconnect ? +Confirm Disconnect=Confirm Disconnect +Forget=Forget +Forgeting=Forgeting... +Info=Info +TryConnect=TryConnect +Bluetooth Info=Bluetooth info +Connecting=Connecting +BluetoothScanning=Bluetooth scanning... +Scanning=Scanning.. +ShutDownConnecting=ShutDownConnecting... +Select=Select +Detail=Detail +Applying=Applying... +DownloadFailed=Download failed +LauncherIsUpToDate=Launcher is up to date +CheckWifiConnection=Please Check your Wi-Fi connection +TurningOn=Turning On +TurningOff=Turning Off +Invalid=Invalid +CheckingUpdate=Checking update... +CheckingUpdateFailed=Checking update failed +Update=Update +Toggle=Toggle +Rescue=Rescue +Airplane Mode=Airplane Mode +minutes=minutes +seconds=seconds +second=second +minute=minute +Never=Never +Power Options=Power Options +Languages=Languages +Notify=Notify +Setting List=Setting List +Wi-Fi=Wi-Fi +Bluetooth=Bluetooth +Sound Volume=Sound Volume +Sound Volume=Sound volume +Brightness=Brightness +BackLight Brightness=BackLight Brightness +Storage=Storage +Timezone=Timezone +Timezone Selection=Timezone Selection +Notification=Notification +About=About +Power off=Power off +Buttons Layout=Buttons Layout +UpdateRetroArch=UpdateRetroArch +Wifi scanning=Wifi scanning... +Power option detail=Power option detail +Screen dimming=Screen dimming +Screen OFF=Screen OFF +Power OFF=Power OFF +Power saving=Power saving +Balanced=Balanced +Server=Server +Performance=Performance +Confirm Power OFF?=Confirm Power OFF? +Reboot=Reboot +Shutdown=Shutdown +my favorite music=my favorite music +Check Update=Check Update diff --git a/sysgo/langs/01_日本語.ini b/sysgo/langs/01_日本語.ini new file mode 100644 index 0000000..fb1ef32 --- /dev/null +++ b/sysgo/langs/01_日本語.ini @@ -0,0 +1,110 @@ +[Langs] +Settings=設定 +Retro Games=Retro Games +Music Player=音楽プレーヤー +TinyCloud=Tiny Cloud +PowerOFF=電源オフ +Reload UI=リロードUI +freeDM=デュークニューケム +CaveStory=洞窟物語 +RetroArch=RetroArch +Launching=起動中... +Nav=ナビ +Scan=スキャン +Back=後ろ +Enter=エンター +Remove=削除 +Backspace=後退 +Done=完了 +Run=起動 +AddToPlayList=再生リストに追加 +Add to Playlist=再生リストに追加 +DownloadConfirm=ダウンロード確認 +MyFavGames=お気に入りのゲーム +Deleting=削除 +AddFav=お気に入りに追加 +ADdFavList=お気に入りリストに登録 +Del=削除 +Please upload data over Wi-Fi=Wi-Fiでデータ転送 +ConfirmDeleteQ=削除しますか? +AlreadyExisted=既に存在している +Cancel=取り消す +Yes=はい +ConfirmQ=確認? +Disconnecting=接続を切断 +ConfirmUpdateToFQ=%%sにアップデートしますか? +UpdateToFQ=%%sにアップデート? +SetupGameEngineAutoQ=ゲームエンジンの自動セットアップを希望しますか? +Downloading=ダウンロード中 +BATOver5Pct=バッテリーは5%%以上が必要 +DeleteConfirm=削除の確認 +FavouriteGames=お気に入りのゲーム +ConfirmForgetQ=無視しますか? +ConfirmForget=無視しますか +Disconnect=接続を切断 +ConfirmDisconnectQ=接続を切りますか? +Confirm Disconnect=接続を切りますか +Forget=無視 +Forgeting=無視中 +Info=情報 +TryConnect=接続を試みる +Bluetooth Info=ブルートゥース情報 +Connecting=接続中 +BluetoothScanning=ブルートゥーススキャン中 +Scanning=スキャン中 +ShutDownConnecting=接続を切断 +Select=選択 +Detail=詳細 +Applying=応用中 +DownloadFailed=ダウンロード失敗 +LauncherIsUpToDate=Launcher更新済み +CheckWifiConnection=wifi接続をチェックしてください +TurningOn=開けている +TurningOff=閉じている +Invalid=無効 +CheckingUpdate=アップデート確認中 +CheckingUpdateFailed=アップデート確認失敗 +Update=更新 +Toggle=切り替え +Rescue=救う +Airplane Mode=機内モード +minutes=分 +seconds=秒 +second=秒 +minute=分 +Never=決してしない +Power Options=電源オプション +Languages=言語 +Notify=通知ウィジェット +Setting List=設定リスト +Wi-Fi=Wi-Fi +Bluetooth=ブルートゥース +Sound Volume=音量 +Sound Volume=音量 +Brightness=明るさ +BackLight Brightness=バックライトの明るさ +Storage=ストレージ +Timezone=時地 +Timezone Selection=タイムゾーン選択 +Notification=注意を通知する +About=について +Power off=電源オフ +Buttons Layout=ボタンの配置 +UpdateRetroArch=RetroArchを更新 +Wifi scanning=wifiスキャン中 +Power option detail=電源オプション +Screen dimming=画面が暗くなる +Screen OFF=スクリーンオフ +Power OFF=電源オフ +Power saving=省エネルギー +Balanced=バランス +Server=サーバ +Performance=性能 +Confirm Power OFF?=電源オフしますか? +Reboot=再起動 +Shutdown=シャットダウン +Play List=プレイリスト +Music Library=ミュージックライブラリ +Play/Pause=再生/停止 +my favorite music=お気に入り +Check Update=アップデートをチェック diff --git a/sysgo/langs/03_简体中文.ini b/sysgo/langs/03_简体中文.ini new file mode 100644 index 0000000..1757ff4 --- /dev/null +++ b/sysgo/langs/03_简体中文.ini @@ -0,0 +1,108 @@ +[Langs] +Settings=设置 +Retro Games=Retro Games +Music Player=音乐播放器 +TinyCloud=Tiny Cloud +PowerOFF=关机 +Reload UI=重载菜单 +freeDM=freeDM +CaveStory=洞窟物语 +Launching=正在启动... +Nav=导航 +Scan=扫描 +Back=返回 +Enter=进入 +Remove=删除 +Backspace=退格 +Done=完成 +Run=运行 +AddToPlayList=添加到播放列表 +Add to Playlist=添加到播放列表 +DownloadConfirm=下载确认 +MyFavGames=加星游戏列表 +Deleting=删除中... +AddFav=加星 +Del=删 +Please upload data over Wi-Fi=请通过无线Wifi上传数据 +ConfirmDeleteQ=确认删除? +AlreadyExisted=已存在 +Cancel=取消 +Yes=是 +ConfirmQ=确认? +Disconnecting=断开连接... +ConfirmUpdateToFQ=确认升级至 %%s ? +UpdateToFQ=更新至 %%s ? +SetupGameEngineAutoQ=你希望自动安装游戏引擎部件吗? +Downloading=下载中... +BATOver5Pct=电量必须多余5%% +DeleteConfirm=删除确认 +FavouriteGames=偏好游戏 +ConfirmForgetQ=确认忽略? +ConfirmForget=确认忽略 +Disconnect=断开 +ConfirmDisconnectQ=确认断开? +Confirm Disconnect=确认断开 +Forget=忽略 +Forgeting=忽略中... +Info=属性 +TryConnect=试连接 +Bluetooth Info=蓝牙属性 +Connecting=连接中 +BluetoothScanning=蓝牙搜索中... +Scanning=搜索中.. +ShutDownConnecting=断开连接... +Select=选择 +Detail=详细 +Applying=设置中... +DownloadFailed=下载失败 +LauncherIsUpToDate=Launcher已是最新 +CheckWifiConnection=请检查 Wi-Fi 连接 +TurningOn=打开 +TurningOff=关闭 +Invalid=非法 +CheckingUpdate=检查更新... +CheckingUpdateFailed=检查更新失败 +Update=更新 +Toggle=切换 +Rescue=拯救 +Airplane Mode=飞行模式 +minutes=分 +seconds=秒 +second=秒 +minute=分 +Never=永不 +Power Options=电源选项 +Languages=语言 +Notify=提醒 +Setting List=设置列表 +Wi-Fi=Wi-Fi +Bluetooth=蓝牙 +Sound Volume=音量 +Sound volume=音量 +Brightness=亮度 +BackLight Brightness=背光亮度 +Storage=存储空间 +Timezone=时区 +Timezone Selection=时区选择 +Notification=提醒控件 +About=关于GameShell +Power off=关机 +Buttons Layout=按纽布局 +UpdateRetroArch=更新RetroArch +Wifi scanning=WiFi扫描中 +Power option detail=电源选项 +Screen dimming=屏幕变暗 +Screen OFF=关闭屏幕 +Power OFF=关机 +Power saving=节能 +Balanced=平衡 +Server=服务器 +Performance=性能 +Confirm Power OFF?=确认关机? +Reboot=重启 +Shutdown=关闭 +Play List=播放列表 +Music Library=乐库 +Play/Pause=播放/暂停 +my favorite music=我的音乐库 +Check Update=检查更新 diff --git a/sysgo/langs/04_繁体中文.ini b/sysgo/langs/04_繁体中文.ini new file mode 100644 index 0000000..6b07a71 --- /dev/null +++ b/sysgo/langs/04_繁体中文.ini @@ -0,0 +1,108 @@ +[Langs] +Settings=設置 +Retro Games=Retro Games +Music Player=音樂播放器 +TinyCloud=Tiny Cloud +PowerOFF=關機 +Reload UI=重載菜單 +freeDM=freeDM +CaveStory=洞窟物語 +Launching=正在啟動... +Nav=導航 +Scan=掃描 +Back=返回 +Enter=進入 +Remove=刪除 +Backspace=退格 +Done=完成 +Run=運行 +AddToPlayList=添加到播放列表 +Add to Playlist=添加到播放列表 +DownloadConfirm=下載確認 +MyFavGames=加星遊戲列表 +Deleting=刪除中... +AddFav=加星 +Del=刪 +Please upload data over Wi-Fi=請通過無線Wifi上傳數據 +ConfirmDeleteQ=確認刪除? +AlreadyExisted=已存在 +Cancel=取消 +Yes=是 +ConfirmQ=確認? +Disconnecting=斷開連接... +ConfirmUpdateToFQ=確認升級至 %%s ? +UpdateToFQ=更新至 %%s ? +SetupGameEngineAutoQ=你希望自動安裝遊戲引擎部件嗎? +Downloading=下載中... +BATOver5Pct=電量必須多余5%% +DeleteConfirm=刪除確認 +FavouriteGames=偏好遊戲 +ConfirmForgetQ=確認忽略? +ConfirmForget=確認忽略 +Disconnect=斷開 +ConfirmDisconnectQ=確認斷開? +Confirm Disconnect=確認斷開 +Forget=忽略 +Forgeting=忽略中... +Info=屬性 +TryConnect=試連接 +Bluetooth Info=藍牙屬性 +Connecting=連接中 +BluetoothScanning=藍牙搜索中... +Scanning=搜索中.. +ShutDownConnecting=斷開連接... +Select=選擇 +Detail=詳細 +Applying=設置中... +DownloadFailed=下載失敗 +LauncherIsUpToDate=Launcher已是最新 +CheckWifiConnection=請檢查 Wi-Fi 連接 +TurningOn=打開 +TurningOff=關閉 +Invalid=非法 +CheckingUpdate=檢查更新... +CheckingUpdateFailed=檢查更新失敗 +Update=更新 +Toggle=切換 +Rescue=拯救 +Airplane Mode=飛行模式 +minutes=分 +seconds=秒 +second=秒 +minute=分 +Never=永不 +Power Options=電源選項 +Languages=語言 +Notify=提醒 +Setting List=設置列表 +Wi-Fi=Wi-Fi +Bluetooth=藍牙 +Sound Volume=音量 +Sound volume=音量 +Brightness=亮度 +BackLight Brightness=背光亮度 +Storage=存儲空間 +Timezone=時區 +Timezone Selection=時區選擇 +Notification=提醒控件 +About=關於GameShell +Power off=關機 +Buttons Layout=按紐布局 +UpdateRetroArch=更新RetroArch +Wifi scanning=WiFi掃描中 +Power option detail=電源選項 +Screen dimming=屏幕變暗 +Screen OFF=關閉屏幕 +Power OFF=關機 +Power saving=節能 +Balanced=平衡 +Server=服務器 +Performance=性能 +Confirm Power OFF?=確認關機? +Reboot=重啟 +Shutdown=關閉 +Play List=播放列表 +Music Library=樂庫 +Play/Pause=播放/暫停 +my favorite music=我的音樂庫 +Check Update=檢查更新