浏览代码

Updated System setting localization and icons

Toby Chui 2 年之前
父节点
当前提交
6148e45abc
共有 53 个文件被更改,包括 886 次插入343 次删除
  1. 1 1
      network.go
  2. 1 1
      system.go
  3. 371 2
      web/SystemAO/locale/system_settings.json
  4. 21 1
      web/SystemAO/system_setting/img/cluster.svg
  5. 9 1
      web/SystemAO/system_setting/img/code.svg
  6. 17 1
      web/SystemAO/system_setting/img/device.svg
  7. 12 1
      web/SystemAO/system_setting/img/drive.svg
  8. 9 1
      web/SystemAO/system_setting/img/info.svg
  9. 二进制
      web/SystemAO/system_setting/img/legacy/Data recovery Icon.png
  10. 二进制
      web/SystemAO/system_setting/img/legacy/HDD icon 5.png
  11. 二进制
      web/SystemAO/system_setting/img/legacy/HDD icon.png
  12. 二进制
      web/SystemAO/system_setting/img/legacy/Storage icon 1.png
  13. 二进制
      web/SystemAO/system_setting/img/legacy/Team icon 3.png
  14. 二进制
      web/SystemAO/system_setting/img/legacy/Wi-Fiのアイコン.png
  15. 二进制
      web/SystemAO/system_setting/img/legacy/about.png
  16. 二进制
      web/SystemAO/system_setting/img/legacy/about.psd
  17. 二进制
      web/SystemAO/system_setting/img/legacy/advance.png
  18. 二进制
      web/SystemAO/system_setting/img/legacy/advance.psd
  19. 1 0
      web/SystemAO/system_setting/img/legacy/cluster.svg
  20. 1 0
      web/SystemAO/system_setting/img/legacy/code.svg
  21. 二进制
      web/SystemAO/system_setting/img/legacy/desktop_icon.psd
  22. 二进制
      web/SystemAO/system_setting/img/legacy/device.png
  23. 二进制
      web/SystemAO/system_setting/img/legacy/device.psd
  24. 1 0
      web/SystemAO/system_setting/img/legacy/device.svg
  25. 二进制
      web/SystemAO/system_setting/img/legacy/disk.png
  26. 二进制
      web/SystemAO/system_setting/img/legacy/disk.psd
  27. 21 0
      web/SystemAO/system_setting/img/legacy/disk.svg
  28. 1 0
      web/SystemAO/system_setting/img/legacy/drive.svg
  29. 二进制
      web/SystemAO/system_setting/img/legacy/info.png
  30. 二进制
      web/SystemAO/system_setting/img/legacy/info.psd
  31. 1 0
      web/SystemAO/system_setting/img/legacy/info.svg
  32. 二进制
      web/SystemAO/system_setting/img/legacy/module.png
  33. 二进制
      web/SystemAO/system_setting/img/legacy/module.psd
  34. 1 0
      web/SystemAO/system_setting/img/legacy/module.svg
  35. 二进制
      web/SystemAO/system_setting/img/legacy/network.png
  36. 二进制
      web/SystemAO/system_setting/img/legacy/network.psd
  37. 1 0
      web/SystemAO/system_setting/img/legacy/network.svg
  38. 1 0
      web/SystemAO/system_setting/img/legacy/security.svg
  39. 1 0
      web/SystemAO/system_setting/img/legacy/server.svg
  40. 二进制
      web/SystemAO/system_setting/img/legacy/time.png
  41. 二进制
      web/SystemAO/system_setting/img/legacy/time.psd
  42. 二进制
      web/SystemAO/system_setting/img/legacy/users.png
  43. 二进制
      web/SystemAO/system_setting/img/legacy/users.psd
  44. 1 0
      web/SystemAO/system_setting/img/legacy/users.svg
  45. 二进制
      web/SystemAO/system_setting/img/legacy/ギャングのアイコン.png
  46. 二进制
      web/SystemAO/system_setting/img/legacy/ノートPCアイコン.png
  47. 20 1
      web/SystemAO/system_setting/img/module.svg
  48. 15 1
      web/SystemAO/system_setting/img/security.svg
  49. 12 1
      web/SystemAO/system_setting/img/server.svg
  50. 14 1
      web/SystemAO/system_setting/img/users.svg
  51. 241 223
      web/SystemAO/system_setting/index.html
  52. 2 2
      web/script/ao_module.js
  53. 110 105
      web/script/applocale.js

+ 1 - 1
network.go

@@ -61,7 +61,7 @@ func NetworkServiceInit() {
 		//Register as a system setting
 		registerSetting(settingModule{
 			Name:     "Network Info",
-			Desc:     "System Information",
+			Desc:     "Network Information",
 			IconPath: "SystemAO/network/img/ethernet.png",
 			Group:    "Network",
 			StartDir: "SystemAO/network/hardware.html",

+ 1 - 1
system.go

@@ -26,7 +26,7 @@ func SystemIDInit() {
 	//Register as a system setting
 	registerSetting(settingModule{
 		Name:     "ArozOS",
-		Desc:     "System Information",
+		Desc:     "About this ArozOS",
 		IconPath: "SystemAO/info/img/small_icon.png",
 		Group:    "About",
 		StartDir: "SystemAO/info/about.html",

+ 371 - 2
web/SystemAO/locale/system_settings.json

@@ -3,36 +3,405 @@
     "version": "1.0",
     "keys": {
         "zh-tw": {
-            "fwtitle" : "",
+            "name": "繁體中文(台灣)",
+            "fontFamily":"\"Microsoft JhengHei\",\"SimHei\", \"Apple LiGothic Medium\", \"STHeiti\"",
+            "fwtitle" : "系統設定",
             "strings":{
+                "menu/group/Host Information":"系統資訊",
+                "menu/group/Devices & IoT":"裝置與物聯網",
+                "menu/group/Module Management":"模組管理",
+                "menu/group/Disk & Storage":"磁碟與儲存池",
+                "menu/group/Network & Connection":"網頁與連接",
+                "menu/group/Users & Groups":"使用者及群組",
+                "menu/group/Clusters & Scheduling":"集群與排程",
+                "menu/group/Security & Auth":"安全與登入",
+                "menu/group/Developer Options":"開發者選項",
+                "menu/group/About ArOZ":"關於 ArozOS",
+                
+                "tab/info/Overview":"系統概覽",
+                "tab/info/Host Info":"伺服器資訊",
+                "tab/info/Performance":"效能",
+                "tab/info/Runtime":"運行環境",
+                "tab/info/Power":"電源",
+
+                "tab/module/Add & Remove Module":"新增或移除模組",
+                "tab/module/Subservices":"子服務",
+                "tab/module/Default Module":"預設開啟",
+                "tab/module/Module List":"已安裝模組",
+
+                "tab/disk/Storage Quota":"儲存配額",
+                "tab/disk/Space Finder":"空間魔術師",
+                "tab/disk/Disk Space":"磁碟空間",
+                "tab/disk/Disk SMART":"SMART(磁碟健康)",
+                "tab/disk/Storage Pools":"系統儲存池",
+
+                "tab/device/Client Device":"客戶端",
+                "tab/device/Audio Testing":"喇叭測試",
+                "tab/device/Display Testing":"顯示測試",
+                "tab/device/Language":"裝置語言",
+                "tab/device/IoT Hub":"物聯網驅動",
+
+                "tab/network/Network Info":"網絡概覽",
+                "tab/network/Port Forward":"連接埠轉送",
+                "tab/network/Personal Page":"個人網頁",
+                "tab/network/WiFi Info":"無線網絡資訊",
+                "tab/network/WiFi Settings":"無線網絡設定",
+                "tab/network/File Servers":"檔案伺服器",
+                
+                "tab/users/My Account":"我的帳戶",
+                "tab/users/User List":"使用者管理",
+                "tab/users/Permission Groups":"權限群組",
+                "tab/users/Public Registry":"公眾注冊",
+
+                "tab/cluster/Tasks Scheduler":"工作排程",
+                "tab/cluster/Neighbourhood":"網路上的芳鄰",
+                "tab/cluster/Cluster List":"集群管理",
+                "tab/cluster/Cluster Toolbox":"集群工具",
 
+                "tab/security/Connection Log":"連接記錄",
+                "tab/security/Access Control":"存取管理",
+                "tab/security/OAuth":"OAuth 設定",
+                "tab/security/LDAP":"LDAP 設定",
+
+                "tab/advance/System Log":"系統記錄",
+                "tab/advance/Auto Login Mode":"自動登入模式",
+                "tab/advance/Disk Manager":"磁碟管理員",
+
+                "tab/about/ArozOS":"關於 ArozOS",
+                "tab/about/Open Source":"開源元件",
+                "tab/about/License":"系統授權",
+                "tab/about/Vendor":"供應商",
+
+                "":""
             },
             "titles":{
+                "Config and info about the Server Host":"伺服器設定與資訊",
+                "Connected clients and IoT devices":"客戶端及物聯網裝置",
+                "List of modules loaded in the system":"系統模組及子服務",
+                "Manage Storage Devices and Disks":"儲存池及硬碟管理",
+                "Manage Host Network and Connections":"網絡與連接",
+                "Add, removed or edit users and groups":"使用者及權限群組",
+                "Cluster, Network Scanning and Task Scheduling":"集群、網絡掃描及定時執行",
+                "System Security and Auth Credentials":"系統安全與登入",
+                "Advance configs for developers":"開發者選項",
+                "Information of the current running ArOZ Online System":"關於 ArozOS",
+
+                "Set the power state of the host device":"變更系統電源狀態",
+                "Change startup paramter in runtime":"更改執行環境之啟用參數",
+                "System CPU and RAM usage":"系統 CPU 及記憶體用量",
+                "System Information":"系統資訊",
+                "Overview for user information":"系統與使用者概覽",
+
+                "Detail about the browser you are using":"關於您的瀏覽器資訊",
+                "Speaker and volume testing":"喇叭與音量測試",
+                "Display testing tools":"顯示器測試工具",
+                "Set the display language of the system":"設定在本裝置上使用的語言",
+                "Manage IoT Devices Scanners":"已安裝之物聯網裝置驅動程式",
+
+                "A list of module currently loaded in the system":"已安裝的 WebApp 模組列表",
+                "Default module use to open a file":"設定預設開啟檔案之模組",
+                "Launch and kill subservices":"啟用和停用子服務",
+                "Install & Remove Module to the system":"新增或移除 WebApp 模組",
 
+                "User Remaining Space":"顯示仍可使用的容量",
+                "Reclaim Storage Space on Disks":"找出佔用空間的檔案",
+                "System Storage Space on Disks":"磁碟容量與剩餘空間",
+                "HardDisk Health Checking":"磁碟健康狀態",
+                "Storage Pool Mounting Configuration":"掛載及管理系統儲存池",
+
+                "Network Information":"網絡狀態及資訊",
+                "UPnP based port forwarding":"設定 UPnP 連接埠轉送",
+                "Personal Web Page":"架設個人網頁",
+                "Current Connected WiFi Information":"現時連接之無線網絡資訊",
+                "Setup WiFi Conenctions":"無線網絡設定",
+                "Network File Transfer Servers":"網頁檔案傳輸伺服器設定",
+
+                "System Tasks and Excution Scheduler":"系統工作排程管理",
+                "Nearby ArOZ Host for Clustering":"掃描附近的 ArozOS 伺服器",
+
+                "Logs for login attempts":"登入記錄",
+                "Prevent / Allow certain IP ranges from logging in":"黑 / 白名單管理",
+                "Allows external account access to system":"開放或關閉帳戶註冊功能",
+                
+                "View ArozOS System Log":"查閱系統記錄檔",
+                "Allow bots logging into the system automatically":"啟用 bot 自動登錄功能",
+                "Mount, Unmount and Formatting Local Disks":"掛載或格式化磁碟",
+
+                "About this ArozOS":"關於本 ArozOS",
+                "License from the Open Source Community":"本系統使用之開源元件",
+                "License of ArozOS":"ArozOS 開源授權",
+                "Vendor Notes":"供應商備忘錄",
+                "":""
             },
             "placeholder":{
 
             }
         },
         "zh-hk": {
-            "fwtitle" : "",
+            "name": "繁體中文(香港)",
+            "fontFamily":"\"Microsoft JhengHei\",\"SimHei\", \"Apple LiGothic Medium\", \"STHeiti\"",
+            "fwtitle" : "系統設定",
             "strings":{
+                "menu/group/Host Information":"系統資訊",
+                "menu/group/Devices & IoT":"裝置與物聯網",
+                "menu/group/Module Management":"模組管理",
+                "menu/group/Disk & Storage":"磁碟與儲存池",
+                "menu/group/Network & Connection":"網頁與連接",
+                "menu/group/Users & Groups":"使用者及群組",
+                "menu/group/Clusters & Scheduling":"集群與排程",
+                "menu/group/Security & Auth":"安全與登入",
+                "menu/group/Developer Options":"開發者選項",
+                "menu/group/About ArOZ":"關於 ArozOS",
+                
+                "tab/info/Overview":"系統概覽",
+                "tab/info/Host Info":"伺服器資訊",
+                "tab/info/Performance":"效能",
+                "tab/info/Runtime":"運行環境",
+                "tab/info/Power":"電源",
+
+                "tab/module/Add & Remove Module":"新增或移除模組",
+                "tab/module/Subservices":"子服務",
+                "tab/module/Default Module":"預設開啟",
+                "tab/module/Module List":"已安裝模組",
+
+                "tab/disk/Storage Quota":"儲存配額",
+                "tab/disk/Space Finder":"空間魔術師",
+                "tab/disk/Disk Space":"磁碟空間",
+                "tab/disk/Disk SMART":"SMART(磁碟健康)",
+                "tab/disk/Storage Pools":"系統儲存池",
+
+                "tab/device/Client Device":"客戶端",
+                "tab/device/Audio Testing":"喇叭測試",
+                "tab/device/Display Testing":"顯示測試",
+                "tab/device/Language":"裝置語言",
+                "tab/device/IoT Hub":"物聯網驅動",
+
+                "tab/network/Network Info":"網絡概覽",
+                "tab/network/Port Forward":"連接埠轉送",
+                "tab/network/Personal Page":"個人網頁",
+                "tab/network/WiFi Info":"無線網絡資訊",
+                "tab/network/WiFi Settings":"無線網絡設定",
+                "tab/network/File Servers":"檔案伺服器",
+                
+                "tab/users/My Account":"我的帳戶",
+                "tab/users/User List":"使用者管理",
+                "tab/users/Permission Groups":"權限群組",
+                "tab/users/Public Registry":"公眾注冊",
+
+                "tab/cluster/Tasks Scheduler":"工作排程",
+                "tab/cluster/Neighbourhood":"網路上的芳鄰",
+                "tab/cluster/Cluster List":"集群管理",
+                "tab/cluster/Cluster Toolbox":"集群工具",
+
+                "tab/security/Connection Log":"連接記錄",
+                "tab/security/Access Control":"存取管理",
+                "tab/security/OAuth":"OAuth 設定",
+                "tab/security/LDAP":"LDAP 設定",
+
+                "tab/advance/System Log":"系統記錄",
+                "tab/advance/Auto Login Mode":"自動登入模式",
+                "tab/advance/Disk Manager":"磁碟管理員",
 
+                "tab/about/ArozOS":"關於 ArozOS",
+                "tab/about/Open Source":"開源元件",
+                "tab/about/License":"系統授權",
+                "tab/about/Vendor":"供應商",
+
+                "":""
             },
             "titles":{
+                "Config and info about the Server Host":"伺服器設定與資訊",
+                "Connected clients and IoT devices":"客戶端及物聯網裝置",
+                "List of modules loaded in the system":"系統模組及子服務",
+                "Manage Storage Devices and Disks":"儲存池及硬碟管理",
+                "Manage Host Network and Connections":"網絡與連接",
+                "Add, removed or edit users and groups":"使用者及權限群組",
+                "Cluster, Network Scanning and Task Scheduling":"集群、網絡掃描及定時執行",
+                "System Security and Auth Credentials":"系統安全與登入",
+                "Advance configs for developers":"開發者選項",
+                "Information of the current running ArOZ Online System":"關於 ArozOS",
+
+                "Set the power state of the host device":"變更系統電源狀態",
+                "Change startup paramter in runtime":"更改執行環境之啟用參數",
+                "System CPU and RAM usage":"系統 CPU 及記憶體用量",
+                "System Information":"系統資訊",
+                "Overview for user information":"系統與使用者概覽",
+
+                "Detail about the browser you are using":"關於您的瀏覽器資訊",
+                "Speaker and volume testing":"喇叭與音量測試",
+                "Display testing tools":"顯示器測試工具",
+                "Set the display language of the system":"設定在本裝置上使用的語言",
+                "Manage IoT Devices Scanners":"已安裝之物聯網裝置驅動程式",
+
+                "A list of module currently loaded in the system":"已安裝的 WebApp 模組列表",
+                "Default module use to open a file":"設定預設開啟檔案之模組",
+                "Launch and kill subservices":"啟用和停用子服務",
+                "Install & Remove Module to the system":"新增或移除 WebApp 模組",
+
+                "User Remaining Space":"顯示仍可使用的容量",
+                "Reclaim Storage Space on Disks":"找出佔用空間的檔案",
+                "System Storage Space on Disks":"磁碟容量與剩餘空間",
+                "HardDisk Health Checking":"磁碟健康狀態",
+                "Storage Pool Mounting Configuration":"掛載及管理系統儲存池",
+
+                "Network Information":"網絡狀態及資訊",
+                "UPnP based port forwarding":"設定 UPnP 連接埠轉送",
+                "Personal Web Page":"架設個人網頁",
+                "Current Connected WiFi Information":"現時連接之無線網絡資訊",
+                "Setup WiFi Conenctions":"無線網絡設定",
+                "Network File Transfer Servers":"網頁檔案傳輸伺服器設定",
 
+                "System Tasks and Excution Scheduler":"系統工作排程管理",
+                "Nearby ArOZ Host for Clustering":"掃描附近的 ArozOS 伺服器",
+
+                "Logs for login attempts":"登入記錄",
+                "Prevent / Allow certain IP ranges from logging in":"黑 / 白名單管理",
+                "Allows external account access to system":"開放或關閉帳戶註冊功能",
+                
+                "View ArozOS System Log":"查閱系統記錄檔",
+                "Allow bots logging into the system automatically":"啟用 bot 自動登錄功能",
+                "Mount, Unmount and Formatting Local Disks":"掛載或格式化磁碟",
+
+                "About this ArozOS":"關於本 ArozOS",
+                "License from the Open Source Community":"本系統使用之開源元件",
+                "License of ArozOS":"ArozOS 開源授權",
+                "Vendor Notes":"供應商備忘錄",
+                "":""
             },
             "placeholder":{
 
             }
         },
         "zh-cn": {
+            "name": "简体中文(简体)",
             "fwtitle" : "",
             "strings":{
+                "menu/group/Host Information":"系统资讯",
+                "menu/group/Devices & IoT":"装置与物联网",
+                "menu/group/Module Management":"模组管理",
+                "menu/group/Disk & Storage":"磁碟与储存池",
+                "menu/group/Network & Connection":"网页与连接",
+                "menu/group/Users & Groups":"使用者及群组",
+                "menu/group/Clusters & Scheduling":"集群与排程",
+                "menu/group/Security & Auth":"安全与登入",
+                "menu/group/Developer Options":"开发者选项",
+                "menu/group/About ArOZ":"关于 ArozOS",
+                
+                "tab/info/Overview":"系统概览",
+                "tab/info/Host Info":"伺服器资讯",
+                "tab/info/Performance":"效能",
+                "tab/info/Runtime":"运行环境",
+                "tab/info/Power":"电源",
+
+                "tab/module/Add & Remove Module":"新增或移除模组",
+                "tab/module/Subservices":"子服务",
+                "tab/module/Default Module":"预设开启",
+                "tab/module/Module List":"已安装模组",
+
+                "tab/disk/Storage Quota":"储存配额",
+                "tab/disk/Space Finder":"空间魔术师",
+                "tab/disk/Disk Space":"磁碟空间",
+                "tab/disk/Disk SMART":"SMART(磁碟健康)",
+                "tab/disk/Storage Pools":"系统储存池",
+
+                "tab/device/Client Device":"客户端",
+                "tab/device/Audio Testing":"喇叭测试",
+                "tab/device/Display Testing":"显示测试",
+                "tab/device/Language":"装置语言",
+                "tab/device/IoT Hub":"物联网驱动",
+
+                "tab/network/Network Info":"网络概览",
+                "tab/network/Port Forward":"连接埠转送",
+                "tab/network/Personal Page":"个人网页",
+                "tab/network/WiFi Info":"无线网络资讯",
+                "tab/network/WiFi Settings":"无线网络设定",
+                "tab/network/File Servers":"档案伺服器",
+                
+                "tab/users/My Account":"我的帐户",
+                "tab/users/User List":"使用者管理",
+                "tab/users/Permission Groups":"权限群组",
+                "tab/users/Public Registry":"公众注册",
 
+                "tab/cluster/Tasks Scheduler":"工作排程",
+                "tab/cluster/Neighbourhood":"网路上的芳邻",
+                "tab/cluster/Cluster List":"集群管理",
+                "tab/cluster/Cluster Toolbox":"集群工具",
+
+                "tab/security/Connection Log":"连接记录",
+                "tab/security/Access Control":"存取管理",
+                "tab/security/OAuth":"OAuth 设定",
+                "tab/security/LDAP":"LDAP 设定",
+
+                "tab/advance/System Log":"系统记录",
+                "tab/advance/Auto Login Mode":"自动登入模式",
+                "tab/advance/Disk Manager":"磁碟管理员",
+
+                "tab/about/ArozOS":"关于 ArozOS",
+                "tab/about/Open Source":"开源元件",
+                "tab/about/License":"系统授权",
+                "tab/about/Vendor":"供应商",
+
+                "":""
             },
             "titles":{
+                "Config and info about the Server Host":"伺服器設定與資訊",
+                "Connected clients and IoT devices":"客戶端及物聯網裝置",
+                "List of modules loaded in the system":"系統模組及子服務",
+                "Manage Storage Devices and Disks":"儲存池及硬碟管理",
+                "Manage Host Network and Connections":"網絡與連接",
+                "Add, removed or edit users and groups":"使用者及權限群組",
+                "Cluster, Network Scanning and Task Scheduling":"集群、網絡掃描及定時執行",
+                "System Security and Auth Credentials":"系統安全與登入",
+                "Advance configs for developers":"開發者選項",
+                "Information of the current running ArOZ Online System":"關於 ArozOS",
+
+                "Set the power state of the host device":"變更系統電源狀態",
+                "Change startup paramter in runtime":"更改執行環境之啟用參數",
+                "System CPU and RAM usage":"系統 CPU 及記憶體用量",
+                "System Information":"系統資訊",
+                "Overview for user information":"系統與使用者概覽",
+
+                "Detail about the browser you are using":"關於您的瀏覽器資訊",
+                "Speaker and volume testing":"喇叭與音量測試",
+                "Display testing tools":"顯示器測試工具",
+                "Set the display language of the system":"設定在本裝置上使用的語言",
+                "Manage IoT Devices Scanners":"已安裝之物聯網裝置驅動程式",
+
+                "A list of module currently loaded in the system":"已安裝的 WebApp 模組列表",
+                "Default module use to open a file":"設定預設開啟檔案之模組",
+                "Launch and kill subservices":"啟用和停用子服務",
+                "Install & Remove Module to the system":"新增或移除 WebApp 模組",
+
+                "User Remaining Space":"顯示仍可使用的容量",
+                "Reclaim Storage Space on Disks":"找出佔用空間的檔案",
+                "System Storage Space on Disks":"磁碟容量與剩餘空間",
+                "HardDisk Health Checking":"磁碟健康狀態",
+                "Storage Pool Mounting Configuration":"掛載及管理系統儲存池",
+
+                "Network Information":"網絡狀態及資訊",
+                "UPnP based port forwarding":"設定 UPnP 連接埠轉送",
+                "Personal Web Page":"架設個人網頁",
+
+                "Current Connected WiFi Information":"现时连接之无线网络资讯",
+                "Setup WiFi Conenctions":"无线网络设定",
+                "Network File Transfer Servers":"网页档案传输伺服器设定",
+
+                "System Tasks and Excution Scheduler":"系统工作排程管理",
+                "Nearby ArOZ Host for Clustering":"扫描附近的 ArozOS 伺服器",
+
+                "Logs for login attempts":"登入记录",
+                "Prevent / Allow certain IP ranges from logging in":"黑 / 白名单管理",
+                "Allows external account access to system":"开放或关闭帐户注册功能",
+                
+                "View ArozOS System Log":"查阅系统记录档",
+                "Allow bots logging into the system automatically":"启用 bot 自动登录功能",
+                "Mount, Unmount and Formatting Local Disks":"挂载或格式化磁碟",
 
+                "About this ArozOS":"关于本 ArozOS",
+                "License from the Open Source Community":"本系统使用之开源元件",
+                "License of ArozOS":"ArozOS 开源授权",
+                "Vendor Notes":"供应商备忘录",
+                "":""
             },
             "placeholder":{
 

+ 21 - 1
web/SystemAO/system_setting/img/cluster.svg

@@ -1 +1,21 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black" width="48px" height="48px"><path d="M0 0h24v24H0z" fill="none"/><path d="M2 20h20v-4H2v4zm2-3h2v2H4v-2zM2 4v4h20V4H2zm4 3H4V5h2v2zm-4 7h20v-4H2v4zm2-3h2v2H4v-2z"/></svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="圖層_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve">
+<g id="圖層_1_1_">
+	<rect x="7.262" y="12.935" fill="#727171" width="33.461" height="28.254"/>
+	<path fill="#3E3A39" d="M40.019,39.662c0,0.563-0.441,1.018-0.987,1.018H8.914c-0.545,0-0.988-0.454-0.988-1.018v-6.444
+		c0-0.563,0.442-1.019,0.988-1.019h30.117c0.547,0,0.987,0.456,0.987,1.019V39.662L40.019,39.662z"/>
+	<circle fill="#00A0E9" cx="35.87" cy="36.442" r="1.206"/>
+</g>
+<g id="圖層_2">
+	<polygon fill="#DCDDDD" points="34.555,6.811 13.024,6.811 7.275,12.935 40.737,12.935 	"/>
+	<path fill="#3E3A39" d="M39.952,30.181c0,0.563-0.442,1.018-0.987,1.018H8.847c-0.545,0-0.988-0.455-0.988-1.018v-6.445
+		c0-0.563,0.442-1.018,0.988-1.018h30.118c0.546,0,0.987,0.455,0.987,1.018V30.181L39.952,30.181z"/>
+	<circle fill="#00A0E9" cx="35.803" cy="26.961" r="1.207"/>
+	<path fill="#3E3A39" d="M39.918,20.9c0,0.563-0.441,1.018-0.986,1.018H8.813c-0.546,0-0.988-0.455-0.988-1.018v-6.445
+		c0-0.563,0.442-1.018,0.988-1.018h30.118c0.545,0,0.986,0.455,0.986,1.018V20.9z"/>
+	<circle fill="#00A0E9" cx="35.77" cy="17.68" r="1.207"/>
+</g>
+</svg>

+ 9 - 1
web/SystemAO/system_setting/img/code.svg

@@ -1 +1,9 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black" width="48px" height="48px"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"/></svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="圖層_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve">
+<path fill="none" d="M0,0h48v48H0V0z"/>
+<path fill="#3E3A39" d="M19.425,33.825l-9.2-9.2l9.2-9.2l-2.8-2.8l-12,12l12,12L19.425,33.825z M29.825,33.825l9.2-9.2l-9.2-9.2
+	l2.8-2.8l12,12l-12,12L29.825,33.825z"/>
+</svg>

+ 17 - 1
web/SystemAO/system_setting/img/device.svg

@@ -1 +1,17 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black" width="48px" height="48px"><path d="M0 0h24v24H0z" fill="none"/><path d="M4 6h18V4H4c-1.1 0-2 .9-2 2v11H0v3h14v-3H4V6zm19 2h-6c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h6c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zm-1 9h-4v-7h4v7z"/></svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="圖層_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve">
+<path fill="none" d="M0,0h48v48H0V0z"/>
+<polygon fill="#BFC7BF" points="-54.75,-17.419 -54.75,-17.419 -54.75,-17.419 -54.75,-17.419 -54.75,-17.419 -54.75,-17.419 
+	-54.75,-17.419 -54.75,-17.419 "/>
+<path fill="#DCDDDD" d="M44.441,33.393c0,2.338-1.652,4.232-3.689,4.232H5.815c-2.038,0-3.69-1.895-3.69-4.232V12.232
+	C2.125,9.895,3.777,8,5.815,8h34.937c2.037,0,3.689,1.895,3.689,4.232V33.393z"/>
+<path fill="#DCDDDD" d="M48,38c0,1.104-0.896,2-2,2H-2.25c-1.104,0-2-0.896-2-2v-2c0-1.104,0.896-2,2-2H46c1.104,0,2,0.896,2,2V38z"
+	/>
+<rect x="6.125" y="12" fill="#00A0E9" width="34.875" height="22"/>
+<path fill="#3E3A39" d="M48,39c0,0.553-0.447,1-1,1H34.288c-0.553,0-1-0.447-1-1V18.079c0-0.552,0.447-1,1-1H47c0.553,0,1,0.448,1,1
+	V39z"/>
+<rect x="35.5" y="19.438" fill="#00A0E9" width="10.5" height="17.563"/>
+</svg>

+ 12 - 1
web/SystemAO/system_setting/img/drive.svg

@@ -1 +1,12 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black" width="48px" height="48px"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M9.17 6l2 2H20v10H4V6h5.17M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"/></svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="圖層_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve">
+<g id="圖層_2">
+	<polygon fill="#DBAC50" points="36.993,16.513 36.993,39.816 6.786,39.816 6.786,12.757 16.892,12.687 19.098,16.607 	"/>
+</g>
+<g id="圖層_3">
+	<polygon fill="#E5BD64" points="37.103,40.148 6.952,40.148 12.64,21.924 42.46,21.924 	"/>
+</g>
+</svg>

+ 9 - 1
web/SystemAO/system_setting/img/info.svg

@@ -1 +1,9 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M11 7h2v2h-2zm0 4h2v6h-2zm1-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/></svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="圖層_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
+<path fill="none" d="M0,0h24v24H0V0z"/>
+<path fill="#00A0E9" d="M11,7h2v2h-2V7z M11,11h2v6h-2V11z M12,2C6.48,2,2,6.48,2,12c0,5.52,4.48,10,10,10c5.52,0,10-4.48,10-10
+	C22,6.48,17.52,2,12,2z M12,20c-4.41,0-8-3.59-8-8s3.59-8,8-8s8,3.59,8,8S16.41,20,12,20z"/>
+</svg>

二进制
web/SystemAO/system_setting/img/legacy/Data recovery Icon.png


二进制
web/SystemAO/system_setting/img/legacy/HDD icon 5.png


二进制
web/SystemAO/system_setting/img/legacy/HDD icon.png


二进制
web/SystemAO/system_setting/img/legacy/Storage icon 1.png


二进制
web/SystemAO/system_setting/img/legacy/Team icon 3.png


二进制
web/SystemAO/system_setting/img/legacy/Wi-Fiのアイコン.png


二进制
web/SystemAO/system_setting/img/legacy/about.png


二进制
web/SystemAO/system_setting/img/legacy/about.psd


二进制
web/SystemAO/system_setting/img/legacy/advance.png


二进制
web/SystemAO/system_setting/img/legacy/advance.psd


+ 1 - 0
web/SystemAO/system_setting/img/legacy/cluster.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black" width="48px" height="48px"><path d="M0 0h24v24H0z" fill="none"/><path d="M2 20h20v-4H2v4zm2-3h2v2H4v-2zM2 4v4h20V4H2zm4 3H4V5h2v2zm-4 7h20v-4H2v4zm2-3h2v2H4v-2z"/></svg>

+ 1 - 0
web/SystemAO/system_setting/img/legacy/code.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black" width="48px" height="48px"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"/></svg>

二进制
web/SystemAO/system_setting/img/legacy/desktop_icon.psd


二进制
web/SystemAO/system_setting/img/legacy/device.png


二进制
web/SystemAO/system_setting/img/legacy/device.psd


+ 1 - 0
web/SystemAO/system_setting/img/legacy/device.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black" width="48px" height="48px"><path d="M0 0h24v24H0z" fill="none"/><path d="M4 6h18V4H4c-1.1 0-2 .9-2 2v11H0v3h14v-3H4V6zm19 2h-6c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h6c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zm-1 9h-4v-7h4v7z"/></svg>

二进制
web/SystemAO/system_setting/img/legacy/disk.png


二进制
web/SystemAO/system_setting/img/legacy/disk.psd


+ 21 - 0
web/SystemAO/system_setting/img/legacy/disk.svg

@@ -0,0 +1,21 @@
+<!--?xml version="1.0" encoding="utf-8"?-->
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+
+<svg version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512" style="width: 256px; height: 256px; opacity: 1;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#4B4B4B;}
+</style>
+<g>
+	<path class="st0" d="M481.798,203.986l-85.257-69.984c-15.802-12.967-35.629-20.067-56.089-20.067H256h-84.457
+		c-20.452,0-40.28,7.1-56.085,20.067l-85.258,69.984C11.938,217.201,0.012,238.638,0,262.916v62.38
+		c0.016,40.199,32.579,72.762,72.77,72.77H256h183.23c40.191-0.008,72.762-32.571,72.77-72.77v-62.38
+		C511.992,238.638,500.066,217.201,481.798,203.986z M41.584,262.916c0.008-8.677,3.458-16.345,9.137-22.044
+		c5.703-5.676,13.372-9.134,22.049-9.141H256h183.23c8.677,0.008,16.345,3.466,22.053,9.141c5.675,5.699,9.125,13.367,9.134,22.044
+		v62.38c-0.008,8.677-3.458,16.345-9.134,22.052c-5.708,5.676-13.376,9.126-22.053,9.134H256H72.77
+		c-8.677-0.008-16.346-3.458-22.049-9.134c-5.679-5.707-9.129-13.375-9.137-22.052V262.916z" style="fill: rgb(75, 75, 75);"></path>
+	<path class="st0" d="M326.168,319.444c12.924,0,23.393-10.478,23.393-23.39c0-12.912-10.47-23.389-23.393-23.389
+		c-12.919,0-23.394,10.478-23.394,23.389C302.775,308.966,313.249,319.444,326.168,319.444z" style="fill: rgb(75, 75, 75);"></path>
+	<path class="st0" d="M404.578,319.444c12.912,0,23.39-10.478,23.39-23.39c0-12.912-10.478-23.389-23.39-23.389
+		c-12.919,0-23.397,10.478-23.397,23.389C381.181,308.966,391.659,319.444,404.578,319.444z" style="fill: rgb(75, 75, 75);"></path>
+</g>
+</svg>

+ 1 - 0
web/SystemAO/system_setting/img/legacy/drive.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black" width="48px" height="48px"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M9.17 6l2 2H20v10H4V6h5.17M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"/></svg>

二进制
web/SystemAO/system_setting/img/legacy/info.png


二进制
web/SystemAO/system_setting/img/legacy/info.psd


+ 1 - 0
web/SystemAO/system_setting/img/legacy/info.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M11 7h2v2h-2zm0 4h2v6h-2zm1-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/></svg>

二进制
web/SystemAO/system_setting/img/legacy/module.png


二进制
web/SystemAO/system_setting/img/legacy/module.psd


+ 1 - 0
web/SystemAO/system_setting/img/legacy/module.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M4 5v13h17V5H4zm10 2v3.5h-3V7h3zM6 7h3v3.5H6V7zm0 9v-3.5h3V16H6zm5 0v-3.5h3V16h-3zm8 0h-3v-3.5h3V16zm-3-5.5V7h3v3.5h-3z"/></svg>

二进制
web/SystemAO/system_setting/img/legacy/network.png


二进制
web/SystemAO/system_setting/img/legacy/network.psd


+ 1 - 0
web/SystemAO/system_setting/img/legacy/network.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black" width="48px" height="48px"><path d="M0 0h24v24H0z" fill="none"/><path d="M1 9l2 2c4.97-4.97 13.03-4.97 18 0l2-2C16.93 2.93 7.08 2.93 1 9zm8 8l3 3 3-3c-1.65-1.66-4.34-1.66-6 0zm-4-4l2 2c2.76-2.76 7.24-2.76 10 0l2-2C15.14 9.14 8.87 9.14 5 13z"/></svg>

+ 1 - 0
web/SystemAO/system_setting/img/legacy/security.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 0 24 24" width="48px" fill="#000000"><g fill="none"><path d="M0 0h24v24H0V0z"/><path d="M0 0h24v24H0V0z" opacity=".87"/></g><path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM9 6c0-1.66 1.34-3 3-3s3 1.34 3 3v2H9V6zm9 14H6V10h12v10zm-6-3c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z"/></svg>

+ 1 - 0
web/SystemAO/system_setting/img/legacy/server.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M19 15v4H5v-4h14m1-2H4c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h16c.55 0 1-.45 1-1v-6c0-.55-.45-1-1-1zM7 18.5c-.82 0-1.5-.67-1.5-1.5s.68-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zM19 5v4H5V5h14m1-2H4c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h16c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zM7 8.5c-.82 0-1.5-.67-1.5-1.5S6.18 5.5 7 5.5s1.5.68 1.5 1.5S7.83 8.5 7 8.5z"/></svg>

二进制
web/SystemAO/system_setting/img/legacy/time.png


二进制
web/SystemAO/system_setting/img/legacy/time.psd


二进制
web/SystemAO/system_setting/img/legacy/users.png


二进制
web/SystemAO/system_setting/img/legacy/users.psd


+ 1 - 0
web/SystemAO/system_setting/img/legacy/users.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black" width="48px" height="48px"><path d="M0 0h24v24H0z" fill="none"/><path d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z"/></svg>

二进制
web/SystemAO/system_setting/img/legacy/ギャングのアイコン.png


二进制
web/SystemAO/system_setting/img/legacy/ノートPCアイコン.png


+ 20 - 1
web/SystemAO/system_setting/img/module.svg

@@ -1 +1,20 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M4 5v13h17V5H4zm10 2v3.5h-3V7h3zM6 7h3v3.5H6V7zm0 9v-3.5h3V16H6zm5 0v-3.5h3V16h-3zm8 0h-3v-3.5h3V16zm-3-5.5V7h3v3.5h-3z"/></svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="圖層_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
+<path d="M24.938-14.625v13h17v-13H24.938z M34.938-12.625v3.5h-3v-3.5H34.938z M26.938-12.625h3v3.5h-3V-12.625z M26.938-3.625v-3.5
+	h3v3.5H26.938z M31.938-3.625v-3.5h3v3.5H31.938z M39.938-3.625h-3v-3.5h3V-3.625z M36.938-9.125v-3.5h3v3.5H36.938z"/>
+<path fill="#FA3F68" d="M8.219,10.297c0,0.552-0.448,1-1,1H3.656c-0.552,0-1-0.448-1-1V6.734c0-0.552,0.448-1,1-1h3.563
+	c0.552,0,1,0.448,1,1V10.297z"/>
+<path fill="#53BCE9" d="M14.719,10.297c0,0.552-0.447,1-1,1h-3.563c-0.552,0-1-0.448-1-1V6.734c0-0.552,0.448-1,1-1h3.563
+	c0.553,0,1,0.448,1,1V10.297z"/>
+<path fill="#FCB65F" d="M21.281,10.297c0,0.552-0.447,1-1,1h-3.563c-0.553,0-1-0.448-1-1V6.734c0-0.552,0.447-1,1-1h3.563
+	c0.553,0,1,0.448,1,1V10.297z"/>
+<path fill="#FCB65F" d="M8.188,16.859c0,0.553-0.448,1-1,1H3.625c-0.552,0-1-0.447-1-1v-3.563c0-0.552,0.448-1,1-1h3.563
+	c0.552,0,1,0.448,1,1V16.859z"/>
+<path fill="#FA3F68" d="M14.688,16.859c0,0.553-0.447,1-1,1h-3.563c-0.552,0-1-0.447-1-1v-3.563c0-0.552,0.448-1,1-1h3.563
+	c0.553,0,1,0.448,1,1V16.859z"/>
+<path fill="#53BCE9" d="M21.25,16.859c0,0.553-0.447,1-1,1h-3.563c-0.553,0-1-0.447-1-1v-3.563c0-0.552,0.447-1,1-1h3.563
+	c0.553,0,1,0.448,1,1V16.859z"/>
+</svg>

+ 15 - 1
web/SystemAO/system_setting/img/security.svg

@@ -1 +1,15 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 0 24 24" width="48px" fill="#000000"><g fill="none"><path d="M0 0h24v24H0V0z"/><path d="M0 0h24v24H0V0z" opacity=".87"/></g><path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM9 6c0-1.66 1.34-3 3-3s3 1.34 3 3v2H9V6zm9 14H6V10h12v10zm-6-3c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z"/></svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="圖層_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve">
+<path fill="none" stroke="#1B2C2E" stroke-width="4" stroke-miterlimit="10" d="M32.208,25.51v-9.387v0.197
+	c0-4.538-3.671-8.209-8.208-8.209c-4.428,0-8.012,3.583-8.012,8.012v9.387"/>
+<path fill="#E5BD64" d="M35.772,37.479c0,2.117-1.932,3.836-4.313,3.836H16.542c-2.382,0-4.313-1.719-4.313-3.836V25.734
+	c0-2.119,1.931-3.836,4.313-3.836h14.917c2.382,0,4.313,1.718,4.313,3.836V37.479z"/>
+<g>
+	<circle fill="#455A64" cx="24" cy="29.518" r="2.752"/>
+	<path fill="#455A64" d="M25.555,30.623c0-0.328,1.047-1.939,0.719-1.939h-4.546c-0.327,0,0.75,1.74,0.75,2.068l-1.342,4.006
+		c0,0.328,0.266,0.592,0.593,0.592h4.546c0.328,0,0.593-0.264,0.593-0.592L25.555,30.623z"/>
+</g>
+</svg>

+ 12 - 1
web/SystemAO/system_setting/img/server.svg

@@ -1 +1,12 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M19 15v4H5v-4h14m1-2H4c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h16c.55 0 1-.45 1-1v-6c0-.55-.45-1-1-1zM7 18.5c-.82 0-1.5-.67-1.5-1.5s.68-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zM19 5v4H5V5h14m1-2H4c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h16c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zM7 8.5c-.82 0-1.5-.67-1.5-1.5S6.18 5.5 7 5.5s1.5.68 1.5 1.5S7.83 8.5 7 8.5z"/></svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="圖層_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
+<path fill="none" d="M0,0h24v24H0V0z"/>
+<rect x="1.446" y="13.231" fill="#727171" width="21.107" height="5.986"/>
+<polygon fill="#DCDDDD" points="18.67,4.782 5.089,4.782 1.464,13.231 22.57,13.231 "/>
+<path fill="#3E3A39" d="M22.108,18.256c0,0.354-0.278,0.642-0.622,0.642H2.488c-0.344,0-0.623-0.287-0.623-0.642V14.19
+	c0-0.355,0.279-0.643,0.623-0.643h18.998c0.344,0,0.622,0.287,0.622,0.643V18.256z"/>
+<circle fill="#00A0E9" cx="19.491" cy="16.225" r="0.762"/>
+</svg>

+ 14 - 1
web/SystemAO/system_setting/img/users.svg

@@ -1 +1,14 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black" width="48px" height="48px"><path d="M0 0h24v24H0z" fill="none"/><path d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z"/></svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="圖層_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve">
+<circle fill="#00A0E9" cx="32.305" cy="14.798" r="6.823"/>
+<path fill="#00A0E9" d="M31.926,36.73c5.529,0,10.002-0.756,10.002-1.69c0-7.195-3-13.02-6.707-13.02
+	c0,1.108-1.357,2.005-3.039,2.005c-1.598,0-2.893-0.896-2.893-2.005c-3.652,0-6.609,5.824-6.609,13.02
+	c0,0.935,4.166,1.69,9.316,1.69"/>
+<circle fill="#3E3A39" cx="16.595" cy="19.13" r="6.823"/>
+<path fill="#3E3A39" d="M16.219,41.063c5.526,0,9.998-0.756,9.998-1.69c0-7.195-2.997-13.02-6.704-13.02
+	c0,1.107-1.359,2.005-3.038,2.005c-1.599,0-2.893-0.897-2.893-2.005c-3.655,0-6.611,5.824-6.611,13.02
+	c0,0.935,4.167,1.69,9.315,1.69"/>
+</svg>

+ 241 - 223
web/SystemAO/system_setting/index.html

@@ -1,224 +1,242 @@
-<html>
-    <head>
-        <title>System Setting</title>
-        <meta charset="UTF-8">
-        <meta name="viewport" content="width=device-width, initial-scale=1.0 user-scalable=no">
-        <link rel="stylesheet" href="../../script/semantic/semantic.min.css">
-        <script type="text/javascript" src="../../script/jquery.min.js"></script>
-        <script type="text/javascript" src="../../script/semantic/semantic.min.js"></script>
-        <script type="text/javascript" src="../../script/ao_module.js"></script>
-        <style>
-            html{
-                overflow:hidden;
-                height:100%;
-            }
-            body{
-                background-color:#fcfcfc;
-                overflow:hidden !important;
-                height:100%;
-            }
-            #mainSideMenuDimmer{
-                width:100%;
-                height:100%;
-                position:fixed;
-                top:0px;
-                left:0px;
-                background-color: rgba(26,26,26,0.3);
-                z-index:99;
-            }
-            #mainSideMenu{
-                z-index:100;
-            }
-            #settingContentLoader{
-                overflow-x: hidden;
-                overflow-y:auto;
-                height: calc(100% - 60px);
-            }
-        </style>
-    </head>
-    <body>
-        <div id="mainSideMenu" class="ui left fixed vertical menu">
-            <div class="item">
-                <img class="ui image" src="img/banner.png">
-            </div>
-            
-        </div>
-        <div id="mainSideMenuDimmer" onclick="hideToolBar();"></div>
-        <div class="ui top attached tabular menu" style="overflow-x:auto;overflow-y:hidden;">
-            <a id="toolbarBtn" class="item" onclick="showToolBar();">
-                <i class="content icon"></i>
-            </a>
-        
-            <div class="right menu">
-                <!--
-                <div class="item">
-                    <div class="ui transparent icon input">
-                    <input id="searchInput" type="text" placeholder="Search Settings..." onkeydown="if (event.which == 13){ search(); }">
-                        <i class="search link icon" onclick="search();"></i>
-                    </div>
-                </div>
-                -->
-            </div>
-          </div>
-          <div id="settingContentLoader" class="ui bottom attached segment">
-
-          </div>
-          </div>
-         
-          <script>
-              var currentSettingModuleList = [];
-              var loadViaSystemSetting = true; //Check for this parameter to see if launching in Setting Interface
-              var loadToPage = undefined; //Load setting page directly to the given tab, passed in via window hash
-
-              if (window.location.hash.length > 0){
-                var hashObject = window.location.hash.substr(1);
-                hashObject = JSON.parse(decodeURIComponent(hashObject));
-                if (typeof(hashObject.group) != 'undefined' && typeof(hashObject.name) != 'undefined'){
-                    loadToPage = hashObject;
-                }
-              }
-
-                //Initiation Functions
-                initMainSideMenu();
-                hideToolBar();
-                
-                if (loadToPage == undefined){
-                    initSettingGroup("Info");
-                }else{
-                    initSettingGroup(loadToPage.group, function(settingList){
-                        let reversedList = JSON.parse(JSON.stringify(settingList)).reverse();
-                        for (var i = 0; i < settingList.length; i++){
-                            var settingTab = settingList[i];
-                            if (settingTab.Name == loadToPage.name){
-                                //This is the tab we are looking for
-                                initSettingModules(i - 1);
-                            }
-                        }
-                           
-                    });
-                }
-                
-                function initMainSideMenu(){
-                    $.get("../../system/setting/list",function(data){
-                        for (var i =0; i < data.length; i++){
-                            var settingGroupName = data[i].Name;
-                            var groupUUID = data[i].Group;
-                            var iconPath = "../../" + data[i].IconPath;
-                            var toolTip = data[i].Desc;
-                            $("#mainSideMenu").append(`<a class="item" group="${groupUUID}" title="${toolTip}" style="padding:4px;" onclick="menuClicked(this);"><img class="ui middle aligned mini image" src="${iconPath}" style="padding: 2px;"></img> ${settingGroupName}</a>`);
-                        }
-
-                    });
-                }
-
-                function initSettingGroup(group, callback=undefined){
-                    $.get("../../system/setting/list?listGroup=" + group,function(data){
-                        if (data.error !== undefined){
-                            console.log(data.error);
-                        }else{
-                            currentSettingModuleList = data;
-                            initSettingModuleTabs();
-                            initSettingModules(0);
-                            if (callback != undefined){
-                                callback(data);
-                            }
-                        }
-                    });
-                }
-
-              function menuClicked(object){
-                var group=$(object).attr("group");
-                initSettingGroup(group);
-                hideToolBar();
-              }
-
-              //Initiate the setting modules tabs
-              function initSettingModuleTabs(){
-                $(".settingTab").remove();
-                var moduleListInReverse = currentSettingModuleList.reverse();
-                for (var i =0; i < moduleListInReverse.length; i ++){
-                    var thisModuleInfo = moduleListInReverse[i];
-                    var stringifyModuleInfo = encodeURIComponent(JSON.stringify(thisModuleInfo));
-                    $("#toolbarBtn").after(`<a class="item settingTab" moduleInfo="${stringifyModuleInfo}" title="${thisModuleInfo.Desc}" onclick="loadSettingModuleFromTab(this);">${thisModuleInfo.Name}</a>`);
-                }
-              }
-
-              function initSettingModules(index){
-                var targetObject = $(".settingTab")[index];
-                $(".settingTab.active").removeClass("active");
-                if (targetObject !== undefined){
-                    //Select this object
-                    $(targetObject).addClass("active");
-
-                    //Load this object into the tab
-                    var settingModuleInfo = JSON.parse(decodeURIComponent($(targetObject).attr("moduleInfo")));
-                    var settingStartDir = settingModuleInfo.StartDir;
-                    $("#settingContentLoader").html("");
-                    $("#settingContentLoader").load("../../" + settingStartDir, function(){
-                        injectIMEToLoadedConetentFrame();
-                    });
-                }
-              }
-
-              function loadSettingModuleFromTab(object){
-                targetObject = $(object);
-                $(".settingTab.active").removeClass("active");
-                if (targetObject !== undefined){
-                    //Select this object
-                    $(targetObject).addClass("active");
-
-                    //Load this object into the tab
-                    var settingModuleInfo = JSON.parse(decodeURIComponent($(targetObject).attr("moduleInfo")));
-                    var settingStartDir = settingModuleInfo.StartDir;
-                    $("#settingContentLoader").html("");
-                    $("#settingContentLoader").load("../../" + settingStartDir, function(){
-                        injectIMEToLoadedConetentFrame();
-                    });
-                }
-              }
-
-              function injectIMEToLoadedConetentFrame(){
-                    //Inject IME listener into the loaded content window
-                    var inputFields = document.getElementById("settingContentLoader").querySelectorAll("input,textarea");
-                    for (var i = 0; i < inputFields.length; i++){
-                        if ($(inputFields[i]).attr("type") != undefined){
-                            var thisType = $(inputFields[i]).attr("type");
-                            if (thisType == "text" || thisType =="search" || thisType =="url"){
-                                //Supported types of input
-                                if (ao_module_virtualDesktop){
-                                    ao_module_bindCustomIMEEvents(inputFields[i]);
-                                }
-                                
-                                console.log(inputFields[i]);
-                            }else{
-                                //Not supported type of inputs
-                                
-                            }
-                        }else{
-                            //text area
-                            if (ao_module_virtualDesktop){
-                                ao_module_bindCustomIMEEvents(inputFields[i]);
-                            }
-                        }
-                    }
-              }
-
-
-              function hideToolBar(){
-                  $("#mainSideMenuDimmer").fadeOut('fast');
-                  $("#mainSideMenu").animate({left: -1 * $("#mainSideMenu").width()},300);
-              }
-
-              function showToolBar(){
-                $("#mainSideMenuDimmer").fadeIn('fast');
-                $("#mainSideMenu").animate({left: "0px"},300);
-              }
-
-              function search(){
-                var keyword = $("#searchInput").val();
-                alert(keyword);
-              }
-
-          </script>
-    </body>
+<html>
+    <head>
+        <title>System Setting</title>
+        <meta charset="UTF-8">
+        <meta name="viewport" content="width=device-width, initial-scale=1.0 user-scalable=no">
+        <link rel="stylesheet" href="../../script/semantic/semantic.min.css">
+        <script type="text/javascript" src="../../script/jquery.min.js"></script>
+        <script type="text/javascript" src="../../script/semantic/semantic.min.js"></script>
+        <script type="text/javascript" src="../../script/ao_module.js"></script>
+        <script type="text/javascript" src="../../script/applocale.js"></script>
+        <style>
+            html{
+                overflow:hidden;
+                height:100%;
+            }
+            body{
+                background-color:#fcfcfc;
+                overflow:hidden !important;
+                height:100%;
+            }
+            #mainSideMenuDimmer{
+                width:100%;
+                height:100%;
+                position:fixed;
+                top:0px;
+                left:0px;
+                background-color: rgba(26,26,26,0.3);
+                z-index:99;
+            }
+            #mainSideMenu{
+                z-index:100;
+            }
+            #settingContentLoader{
+                overflow-x: hidden;
+                overflow-y:auto;
+                height: calc(100% - 60px);
+            }
+            #mainFunctionTabMenu{
+                background-color: #f8f8f8;
+                margin-top: 0;
+                padding-top: 1em;
+                border-radius: 0 0 0 0 !important;
+            }
+        </style>
+    </head>
+    <body>
+        <div id="mainSideMenu" class="ui left fixed vertical menu">
+            <div class="item">
+                <img class="ui image" src="img/banner.png">
+            </div>
+            
+        </div>
+        <div id="mainSideMenuDimmer" onclick="hideToolBar();"></div>
+        <div id="mainFunctionTabMenu" class="ui top attached tabular menu" style="overflow-x:auto;overflow-y:hidden;">
+            <a id="toolbarBtn" class="item" onclick="showToolBar();">
+                <i class="content icon"></i>
+            </a>
+        
+            <div class="right menu">
+                <!--
+                <div class="item">
+                    <div class="ui transparent icon input">
+                    <input id="searchInput" type="text" placeholder="Search Settings..." onkeydown="if (event.which == 13){ search(); }">
+                        <i class="search link icon" onclick="search();"></i>
+                    </div>
+                </div>
+                -->
+            </div>
+          </div>
+          <div id="settingContentLoader" class="ui bottom attached segment">
+
+          </div>
+          </div>
+         
+          <script>
+              var currentSettingModuleList = [];
+              var loadViaSystemSetting = true; //Check for this parameter to see if launching in Setting Interface
+              var loadToPage = undefined; //Load setting page directly to the given tab, passed in via window hash
+
+              if (window.location.hash.length > 0){
+                var hashObject = window.location.hash.substr(1);
+                hashObject = JSON.parse(decodeURIComponent(hashObject));
+                if (typeof(hashObject.group) != 'undefined' && typeof(hashObject.name) != 'undefined'){
+                    loadToPage = hashObject;
+                }
+              }
+
+            applocale.init("../locale/system_settings.json", function(){
+                applocale.translate();
+                //Initiation Functions
+                initMainSideMenu();
+                hideToolBar();
+
+                if (loadToPage == undefined){
+                    initSettingGroup("Info");
+                }else{
+                    initSettingGroup(loadToPage.group, function(settingList){
+                        let reversedList = JSON.parse(JSON.stringify(settingList)).reverse();
+                        for (var i = 0; i < settingList.length; i++){
+                            var settingTab = settingList[i];
+                            if (settingTab.Name == loadToPage.name){
+                                //This is the tab we are looking for
+                                initSettingModules(i - 1);
+                            }
+                        }
+                           
+                    });
+                }
+            });
+ 
+            
+            function initMainSideMenu(){
+                $.get("../../system/setting/list",function(data){
+                    for (var i =0; i < data.length; i++){
+                        var settingGroupName = data[i].Name;
+                        var groupUUID = data[i].Group;
+                        var iconPath = "../../" + data[i].IconPath;
+                        var toolTip = data[i].Desc;
+                        settingGroupName = applocale.getString("menu/group/" + settingGroupName, settingGroupName);
+                        $("#mainSideMenu").append(`<a class="item" group="${groupUUID}" title="${toolTip}" style="padding:4px;" onclick="menuClicked(this);"><img class="ui middle aligned mini image" src="${iconPath}" style="padding: 2px;"></img> ${settingGroupName}</a>`);
+                    }
+                    applocale.translate();
+                });
+            }
+
+            function initSettingGroup(group, callback=undefined){
+                $.get("../../system/setting/list?listGroup=" + group,function(data){
+                    if (data.error !== undefined){
+                        console.log(data.error);
+                    }else{
+                        currentSettingModuleList = data;
+                        initSettingModuleTabs(group);
+                        initSettingModules(0);
+                        if (callback != undefined){
+                            callback(data);
+                        }
+                    }
+                });
+            }
+
+              function menuClicked(object){
+                var group=$(object).attr("group");
+                initSettingGroup(group);
+                hideToolBar();
+              }
+
+              //Initiate the setting modules tabs
+              function initSettingModuleTabs(groupName){
+                $(".settingTab").remove();
+                var moduleListInReverse = currentSettingModuleList.reverse();
+                for (var i =0; i < moduleListInReverse.length; i ++){
+                    var thisModuleInfo = moduleListInReverse[i];
+                    var stringifyModuleInfo = encodeURIComponent(JSON.stringify(thisModuleInfo));
+                    let localeGroupKey = "tab/" + groupName.toLowerCase() + "/" + thisModuleInfo.Name;
+                    let displayTabName = applocale.getString(localeGroupKey, thisModuleInfo.Name)
+                    console.log(thisModuleInfo.Desc);
+                    $("#toolbarBtn").after(`<a class="item settingTab" moduleInfo="${stringifyModuleInfo}" title="${thisModuleInfo.Desc}" onclick="loadSettingModuleFromTab(this);">${displayTabName}</a>`);
+                }
+
+                applocale.translate();
+            
+              }
+
+              function initSettingModules(index){
+                var targetObject = $(".settingTab")[index];
+                $(".settingTab.active").removeClass("active");
+                if (targetObject !== undefined){
+                    //Select this object
+                    $(targetObject).addClass("active");
+
+                    //Load this object into the tab
+                    var settingModuleInfo = JSON.parse(decodeURIComponent($(targetObject).attr("moduleInfo")));
+                    var settingStartDir = settingModuleInfo.StartDir;
+                    $("#settingContentLoader").html("");
+                    $("#settingContentLoader").load("../../" + settingStartDir, function(){
+                        injectIMEToLoadedConetentFrame();
+                    });
+                }
+              }
+
+              function loadSettingModuleFromTab(object){
+                targetObject = $(object);
+                $(".settingTab.active").removeClass("active");
+                if (targetObject !== undefined){
+                    //Select this object
+                    $(targetObject).addClass("active");
+
+                    //Load this object into the tab
+                    var settingModuleInfo = JSON.parse(decodeURIComponent($(targetObject).attr("moduleInfo")));
+                    var settingStartDir = settingModuleInfo.StartDir;
+                    $("#settingContentLoader").html("");
+                    $("#settingContentLoader").load("../../" + settingStartDir, function(){
+                        injectIMEToLoadedConetentFrame();
+                    });
+                }
+              }
+
+              function injectIMEToLoadedConetentFrame(){
+                    //Inject IME listener into the loaded content window
+                    var inputFields = document.getElementById("settingContentLoader").querySelectorAll("input,textarea");
+                    for (var i = 0; i < inputFields.length; i++){
+                        if ($(inputFields[i]).attr("type") != undefined){
+                            var thisType = $(inputFields[i]).attr("type");
+                            if (thisType == "text" || thisType =="search" || thisType =="url"){
+                                //Supported types of input
+                                if (ao_module_virtualDesktop){
+                                    ao_module_bindCustomIMEEvents(inputFields[i]);
+                                }
+                                
+                                console.log(inputFields[i]);
+                            }else{
+                                //Not supported type of inputs
+                                
+                            }
+                        }else{
+                            //text area
+                            if (ao_module_virtualDesktop){
+                                ao_module_bindCustomIMEEvents(inputFields[i]);
+                            }
+                        }
+                    }
+              }
+
+
+              function hideToolBar(){
+                  $("#mainSideMenuDimmer").fadeOut('fast');
+                  $("#mainSideMenu").animate({left: -1 * $("#mainSideMenu").width()},300);
+              }
+
+              function showToolBar(){
+                $("#mainSideMenuDimmer").fadeIn('fast');
+                $("#mainSideMenu").animate({left: "0px"},300);
+              }
+
+              function search(){
+                var keyword = $("#searchInput").val();
+                alert(keyword);
+              }
+
+          </script>
+    </body>
 </html>

+ 2 - 2
web/script/ao_module.js

@@ -392,8 +392,8 @@ function ao_module_newfw(launchConfig){
         filter: ["mp3","aac","ogg","flac","wav"] //File extension filter
     }
 */
-let ao_module_fileSelectionListener;
-let ao_module_fileSelectorWindow;
+var ao_module_fileSelectionListener;
+var ao_module_fileSelectorWindow;
 function ao_module_openFileSelector(callback,root="user:/", type="file",allowMultiple=false, options=undefined){
     var initInfo = {
         root: root,

+ 110 - 105
web/script/applocale.js

@@ -1,106 +1,111 @@
-/*
-    Application Locale Module
-    author: tobychui
-
-    This module translate the current web application page 
-    to the desired language specific by the browser.
-
-
-    Example Usage:
-     if (applocale){
-        //Applocale found. Do localization
-        applocale.init("../locale/file_explorer.json", function(){
-            applocale.translate();
-            //Do other init things on the page
-        });
-    }
-*/
-
-var applocale = {
-    lang: (localStorage.getItem('global_language') == null || localStorage.getItem('global_language') == "default" ? navigator.language : localStorage.getItem('global_language')).toLowerCase(),
-    localeFile: "",
-    localData: {},
-    init: function(localeFile, callback = undefined) {
-        this.localeFile = localeFile;
-        $.ajax({
-            dataType: "json",
-            url: localeFile,
-            success: function(data) {
-                applocale.localData = data;
-                if (callback != undefined) {
-                    callback(data);
-                }
-                
-                if (data.keys[applocale.lang] != undefined && data.keys[applocale.lang].fwtitle != undefined && ao_module_virtualDesktop) {
-                    //Update the floatwindow title as well
-                    ao_module_setWindowTitle(data.keys[applocale.lang].fwtitle);
-                }
-
-                if (data.keys[applocale.lang] != undefined && data.keys[applocale.lang].fontFamily != undefined){
-                    //This language has a prefered font family. Inject it
-                    $("h1, h2, h3, p, span, div, a, button").css({
-                        "font-family":data.keys[applocale.lang].fontFamily
-                    });
-                    console.log("[Applocale] Updating font family to: ", data.keys[applocale.lang].fontFamily)
-                }
-              
-            }
-        });
-    },
-    translate: function(targetLang = "") {
-        var targetLang = targetLang || this.lang;
-        //Check if the given locale exists
-        if (this.localData == undefined || this.localData.keys === undefined || this.localData.keys[targetLang] == undefined) {
-            console.log("[Applocale] This language is not supported. Using default")
-            return
-        }
-
-        //Update the page content to fit the localization
-        let hasTitleLocale = (this.localData.keys[targetLang].titles !== undefined);
-        let hasStringLocale = (this.localData.keys[targetLang].strings !== undefined);
-        let hasPlaceHolderLocale = (this.localData.keys[targetLang].placeholder !== undefined);
-        let localizedDataset =  this.localData.keys[targetLang];
-        $("*").each(function() {
-            if ($(this).attr("title") != undefined && hasTitleLocale) {
-                let targetString = localizedDataset.titles[$(this).attr("title")];
-                if (targetString != undefined) {
-                    $(this).attr("title", targetString);
-                }
-
-            }
-
-            if ($(this).attr("locale") != undefined && hasStringLocale) {
-                let targetString = localizedDataset.strings[$(this).attr("locale")];
-                if (targetString != undefined) {
-                    $(this).html(targetString);
-                }
-            }
-
-            if ($(this).attr("placeholder") != undefined && hasPlaceHolderLocale) {
-                let targetString = localizedDataset.placeholder[$(this).attr("placeholder")];
-                if (targetString != undefined) {
-                    $(this).attr("placeholder", targetString);
-                }
-            }
-        })
-
-        if (applocale.localData.keys[applocale.lang] != undefined && applocale.localData.keys[applocale.lang].fontFamily != undefined){
-            //This language has a prefered font family. Inject it
-            $("h1, h2, h3, p, span, div, a").css({
-                "font-family":applocale.localData.keys[applocale.lang].fontFamily
-            });
-        }
-    },
-    getString: function(key, original, type = "strings") {
-        var targetLang = this.lang;
-        if (this.localData.keys === undefined || this.localData.keys[targetLang] == undefined) {
-            return original;
-        }
-        let targetString = this.localData.keys[targetLang].strings[key];
-        if (targetString != undefined) {
-            return targetString
-        } else {
-            return original
-        }
-    }
+/*
+    Application Locale Module
+    author: tobychui
+
+    This module translate the current web application page 
+    to the desired language specific by the browser.
+
+
+    Example Usage:
+     if (applocale){
+        //Applocale found. Do localization
+        applocale.init("../locale/file_explorer.json", function(){
+            applocale.translate();
+            //Do other init things on the page
+        });
+    }
+*/
+
+var applocale = {
+    lang: (localStorage.getItem('global_language') == null || localStorage.getItem('global_language') == "default" ? navigator.language : localStorage.getItem('global_language')).toLowerCase(),
+    localeFile: "",
+    localData: {},
+    init: function(localeFile, callback = undefined) {
+        this.localeFile = localeFile;
+        $.ajax({
+            dataType: "json",
+            url: localeFile,
+            success: function(data) {
+                applocale.localData = data;
+                if (callback != undefined) {
+                    callback(data);
+                }
+                
+                if (data.keys[applocale.lang] != undefined && data.keys[applocale.lang].fwtitle != undefined && ao_module_virtualDesktop) {
+                    //Update the floatwindow title as well
+                    ao_module_setWindowTitle(data.keys[applocale.lang].fwtitle);
+                }
+
+                if (data.keys[applocale.lang] != undefined && data.keys[applocale.lang].fontFamily != undefined){
+                    //This language has a prefered font family. Inject it
+                    $("h1, h2, h3, p, span, div, a, button").css({
+                        "font-family":data.keys[applocale.lang].fontFamily
+                    });
+                    console.log("[Applocale] Updating font family to: ", data.keys[applocale.lang].fontFamily)
+                }
+              
+            }
+        });
+    },
+    translate: function(targetLang = "") {
+        var targetLang = targetLang || this.lang;
+        //Check if the given locale exists
+        if (this.localData == undefined || this.localData.keys === undefined || this.localData.keys[targetLang] == undefined) {
+            console.log("[Applocale] This language is not supported. Using default")
+            return
+        }
+
+        //Update the page content to fit the localization
+        let hasTitleLocale = (this.localData.keys[targetLang].titles !== undefined);
+        let hasStringLocale = (this.localData.keys[targetLang].strings !== undefined);
+        let hasPlaceHolderLocale = (this.localData.keys[targetLang].placeholder !== undefined);
+        let localizedDataset =  this.localData.keys[targetLang];
+        $("*").each(function() {
+            if ($(this).attr("title") != undefined && hasTitleLocale) {
+                let targetString = localizedDataset.titles[$(this).attr("title")];
+                if (targetString != undefined) {
+                    $(this).attr("title", targetString);
+                }
+
+            }
+
+            if ($(this).attr("locale") != undefined && hasStringLocale) {
+                let targetString = localizedDataset.strings[$(this).attr("locale")];
+                if (targetString != undefined) {
+                    $(this).html(targetString);
+                }
+            }
+
+            if ($(this).attr("placeholder") != undefined && hasPlaceHolderLocale) {
+                let targetString = localizedDataset.placeholder[$(this).attr("placeholder")];
+                if (targetString != undefined) {
+                    $(this).attr("placeholder", targetString);
+                }
+            }
+        })
+
+        if (applocale.localData.keys[applocale.lang] != undefined && applocale.localData.keys[applocale.lang].fontFamily != undefined){
+            //This language has a prefered font family. Inject it
+            $("h1, h2, h3, p, span, div, a").css({
+                "font-family":applocale.localData.keys[applocale.lang].fontFamily
+            });
+        }
+    },
+    getString: function(key, original, type = "strings") {
+        var targetLang = this.lang;
+        if (this.localData.keys === undefined || this.localData.keys[targetLang] == undefined) {
+            return original;
+        }
+        let targetString = this.localData.keys[targetLang].strings[key];
+        if (targetString != undefined) {
+            return targetString
+        } else {
+            return original
+        }
+    },
+    applyFontStyle: function(target){
+        $(target).css({
+            "font-family":applocale.localData.keys[applocale.lang].fontFamily
+        })
+    }
 }