Browse Source

Merged conflicts on applocale

TC pushbot 5 4 năm trước cách đây
mục cha
commit
e1a4e9a190

+ 1 - 0
reverseproxy.go

@@ -17,6 +17,7 @@ var (
 //Add user customizable reverse proxy
 func ReverseProxtInit() {
 
+	return
 	dprouter, err := dynamicproxy.NewDynamicProxy(80)
 	if err != nil {
 		log.Println(err.Error())

+ 0 - 6
web/SystemAO/desktop/personalization.html

@@ -10,12 +10,6 @@
         <script src="../../script/ao_module.js"></script>
         <script type="text/javascript" src="../../script/applocale.js"></script>
         <style>
-            @font-face {
-                font-family: 'TaipeiSansTCBeta-Regular';
-                src: url('../../script/font/TaipeiSansTCBeta-Regular.ttf');
-            }
-            h1, h2, h3, p, span, div,span { font-family: 'TaipeiSansTCBeta-Regular',"Lucida Console", "Courier New", monospace;}
-
             .hidden{
                 display:none;
             }

+ 67 - 52
web/SystemAO/disk/diskprop.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html>
 <head>
-    <title>File Properties</title>
+    <title locale="title/title">File Properties</title>
 	<meta name="mobile-web-app-capable" content="yes">
 	<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1"/>
 	<meta charset="UTF-8">
@@ -9,10 +9,12 @@
     <script src="../../script/jquery.min.js"></script>
 	<script 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>
         .hidden{
             display:none;
         }
+        
 
         .disabled{
             opacity: 0.5;
@@ -54,8 +56,8 @@
     <br>
     <div class="ui container">
         <h3 class="ui header">
-            Virtual Disk Properties
-            <div class="sub header">Show information about vroot mount points</div>
+            <span locale="title/title">Virtual Disk Properties</span>
+            <div class="sub header" locale="title/desc">Show information about vroot mount points</div>
         </h3>
         <div class="ui divider"></div>
         <div class="ui container">
@@ -75,7 +77,7 @@
         <table class="ui very basic collapsing compact unstackable table" style="vertical-align: middle;">
             <tbody>
             <tr>
-                <td>
+                <td locale="diskinfo/physical">
                     Physical Disk: 
                 </td>
                 <td id="phydisk">
@@ -83,7 +85,7 @@
                 </td>
             </tr>
             <tr>
-                <td>
+                <td locale="diskinfo/hierarchy">
                     Disk Hierarchy: 
                 </td>
                 <td id="hierarchy">
@@ -96,10 +98,10 @@
             <tbody>
             <tr>
                 <td>
-                    <div class="blue colorblock"></div>Total Used Space:
+                    <div class="blue colorblock"></div><span locale="spaceinfo/totalUsed">Total Used Space:</span>
                 </td>
                 <td>
-                    <span id="usedSpaceInBytes"></span> Bytes
+                    <span id="usedSpaceInBytes"></span> <span locale="unit/bytes">Bytes</span>
                 </td>
                 <td>
                     <span id="usedSpaceInHumanReadableFormat"></span>
@@ -107,10 +109,10 @@
             </tr>
             <tr>
                 <td>
-                    <div class="yellow colorblock"></div>User Used Space:
+                    <div class="yellow colorblock"></div><span locale="spaceinfo/userUsed">User Used Space:</span>
                 </td>
                 <td>
-                    <span id="usedVirtualSpaceInByte"></span> Bytes
+                    <span id="usedVirtualSpaceInByte"></span> <span locale="unit/bytes">Bytes</span>
                 </td>
                 <td>
                     <span id="usedVirtualSpaceInHumanReadableFormat"></span>
@@ -118,10 +120,10 @@
             </tr>
             <tr>
                 <td>
-                    <div class="grey colorblock"></div>Usable Space:
+                    <div class="grey colorblock"></div><span locale="spaceinfo/Usable">Usable Space:</span>
                 </td>
                 <td>
-                    <span id="usableSpaceInBytes"></span> Bytes
+                    <span id="usableSpaceInBytes"></span> <span locale="unit/bytes">Bytes</span>
                 </td>
                 <td>
                     <span id="usableSpaceInHumanReadableFormat"></span>
@@ -129,10 +131,10 @@
             </tr>
             <tr>
                 <td>
-                    <div class="transparent colorblock"></div>Capacity:
+                    <div class="transparent colorblock"></div><span locale="spaceinfo/Capacity">Capacity:</span>
                 </td>
                 <td>
-                    <span id="totalSpaceInBytes"></span> Bytes
+                    <span id="totalSpaceInBytes"></span> <span locale="unit/bytes">Bytes</span>
                 </td>
                 <td>
                     <span id="totalSpaceInHumanReadableFormat"></span>
@@ -152,7 +154,7 @@
         </div>
         <div class="ui divider" style="margin-top: 8px; margin-bottom: 8px;"></div>
         <br>
-           <button class="ui right floated button" onclick="ao_module_close();">Close</button>
+           <button class="ui right floated button" onclick="ao_module_close();" locale="button/close">Close</button>
         <br>
     </div>
         
@@ -164,51 +166,64 @@
         var fileInfo = {};
         var diskInfo = {};
 
-        //There are something to load. Load the vroot properties
-        if (window.location.hash.length > 0 && typeof(files) != null){
-            var rootName = files[0].split("/")[0];
-            $("#vrootName").val(rootName + "/");
+        try{
+            applocale.init("../locale/disk_properties.json", function(){
+                applocale.translate();
+                init();
+            });
+        }catch(ex){
+            init();
+        }
+        
 
-            getDiskProp(files[0], function(data){
-                if (data.error !== undefined){
-                    $("#phydisk").text(data.error);
-                    $("#hierarchy").text("Unknown");
-                    $("#usedSpaceInBytes").text("Not Available");
-                    $("#usableSpaceInBytes").text("Not Available");
-                    $("#totalSpaceInBytes").text("Not Available");
-                    
-                }else{
-                    $("#usedSpaceInBytes").text(new Intl.NumberFormat('en-US').format(data.Used));
-                    $("#usedSpaceInHumanReadableFormat").text(bytesToSize(data.Used));
+       function init(){
+            //There are something to load. Load the vroot properties
+            if (window.location.hash.length > 0 && typeof(files) != null){
+                var rootName = files[0].split("/")[0];
+                $("#vrootName").val(rootName + "/");
 
-                    $("#usableSpaceInBytes").text(new Intl.NumberFormat('en-US').format(data.Avilable));
-                    $("#usableSpaceInHumanReadableFormat").text(bytesToSize(data.Avilable));
+                getDiskProp(files[0], function(data){
+                    if (data.error !== undefined){
+                        $("#phydisk").text(data.error);
+                        $("#hierarchy").text("Unknown");
+                        $("#usedSpaceInBytes").text("Not Available");
+                        $("#usableSpaceInBytes").text("Not Available");
+                        $("#totalSpaceInBytes").text("Not Available");
+                        
+                    }else{
+                        $("#usedSpaceInBytes").text(new Intl.NumberFormat('en-US').format(data.Used));
+                        $("#usedSpaceInHumanReadableFormat").text(bytesToSize(data.Used));
 
-                    $("#totalSpaceInBytes").text(new Intl.NumberFormat('en-US').format(data.Total));
-                    $("#totalSpaceInHumanReadableFormat").text(bytesToSize(data.Total));
+                        $("#usableSpaceInBytes").text(new Intl.NumberFormat('en-US').format(data.Avilable));
+                        $("#usableSpaceInHumanReadableFormat").text(bytesToSize(data.Avilable));
 
-                    $("#phydisk").text(data.PhysicalDevice + "/");
-                    var s = data.MountingHierarchy;
-                    $("#hierarchy").text(s[0].toUpperCase() + s.slice(1));
-                    
-                    $("#totalUsedSpace").css("width", (data.Used / data.Total) * 100 + "%");
-                }
+                        $("#totalSpaceInBytes").text(new Intl.NumberFormat('en-US').format(data.Total));
+                        $("#totalSpaceInHumanReadableFormat").text(bytesToSize(data.Total));
 
-                getFileProp(files[0], function(folderdata){
-                    //User Used Space
-                    $("#usedVirtualSpaceInByte").text(new Intl.NumberFormat('en-US').format(folderdata.Filesize));
-                    $("#usedVirtualSpaceInHumanReadableFormat").text(bytesToSize(folderdata.Filesize));
-                    
-                    if (data.Total != undefined){
-                        $("#userUsedSpace").css("width", (folderdata.Filesize / data.Total) * 100 + "%");
-                    }else{
-                        //Error when reading disk size. Just make it full width
-                        $("#userUsedSpace").css("width", "100%");
+                        $("#phydisk").text(data.PhysicalDevice + "/");
+                        var s = data.MountingHierarchy;
+                        s = s[0].toUpperCase() + s.slice(1);
+                        $("#hierarchy").text(applocale.getString("hierarchy/" + s, s));
+                        
+                        $("#totalUsedSpace").css("width", (data.Used / data.Total) * 100 + "%");
                     }
-                    
+
+                    getFileProp(files[0], function(folderdata){
+                        //User Used Space
+                        $("#usedVirtualSpaceInByte").text(new Intl.NumberFormat('en-US').format(folderdata.Filesize));
+                        $("#usedVirtualSpaceInHumanReadableFormat").text(bytesToSize(folderdata.Filesize));
+                        
+                        if (data.Total != undefined){
+                            $("#userUsedSpace").css("width", (folderdata.Filesize / data.Total) * 100 + "%");
+                        }else{
+                            //Error when reading disk size. Just make it full width
+                            $("#userUsedSpace").css("width", "100%");
+                        }
+                        
+                    });
                 });
-            });
-        }
+            }
+       }
 
         function bytesToSize(bytes) {
             var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];

+ 1 - 1
web/SystemAO/file_system/file_explorer.html

@@ -4352,7 +4352,7 @@
             var hashPassthrough = encodeURIComponent(JSON.stringify(rootname));
             ao_module_newfw({
                 url: "SystemAO/disk/diskprop.html#" + hashPassthrough,
-                width: 410,
+                width: 420,
                 height: 580,
                 appicon: "img/system/drive.svg",
                 title: "Disk Properties",

+ 0 - 6
web/SystemAO/file_system/file_properties.html

@@ -13,12 +13,6 @@
                 overflow:hidden;
             }
 
-            @font-face {
-                font-family: 'TaipeiSansTCBeta-Regular';
-                src: url('../../script/font/TaipeiSansTCBeta-Regular.ttf');
-            }
-            h1, h2, h3, p, span, div,span { font-family: 'TaipeiSansTCBeta-Regular',"Lucida Console", "Courier New", monospace;}
-
         </style>
     </head>
     <body id="filePropertiesWindow">

+ 10 - 1
web/SystemAO/locale/desktop.json

@@ -2,7 +2,7 @@
     "author": "tobychui",
     "version": "1.0",
     "keys": {
-        "zh-TW": {
+        "zh-tw": {
             "strings":{
                 "topbar/welcome":"歡迎回來",
                 "topbar/arozos":"ArozOS 網頁桌面模式",
@@ -75,6 +75,15 @@
                 "contextmenu/Folder": "資料夾",
                 "contextmenu/Shortcut": "捷徑",
 
+                "power/shutdown/title":"關機 - 輸入密碼以作確認",
+                "power/shutdown/text":"關閉伺服器主機",
+                "power/shutdown/instruction":"請輸入你的管理員密碼以啟動關機程序",
+
+                "power/restart/title":"重新啟動 - 輸入密碼以作確認",
+                "power/restart/text":"重啟伺服器主機",
+                "power/restart/instruction":"請輸入你的管理員密碼以確認重啟伺服器",
+
+                "upload/message/uploading": "上載中…",
                 "":""
             },
             "placeholder":{

+ 69 - 0
web/SystemAO/locale/disk_properties.json

@@ -0,0 +1,69 @@
+{
+    "author": "tobychui",
+    "version": "1.0",
+    "keys": {
+        "zh-tw": {
+            "fwtitle" : "磁碟概覽",
+            "fontFamily":"\"Microsoft JhengHei\",\"SimHei\", \"Apple LiGothic Medium\", \"STHeiti\"",
+            "strings":{
+                "title/title":"磁碟概覽",
+                "title/desc":"關於此虛擬儲存裝置對應之磁碟機掛載點",
+
+                "diskinfo/physical":"物理磁碟機",
+                "diskinfo/hierarchy":"儲存裝置結構",
+
+                "hierarchy/User":"使用者分隔",
+                "hierarchy/Public":"共用磁碟區",
+                "hierarchy/Backup":"備份磁碟區",
+
+                "spaceinfo/totalUsed":"已使用磁碟空間",
+                "spaceinfo/userUsed":"使用者磁碟空間",
+                "spaceinfo/Usable":"可用磁碟空間",
+                "spaceinfo/Capacity":"磁碟容量",
+
+                "unit/bytes":" 個位元組",
+
+                "button/close":"確認",
+
+                "":""
+            },
+            "titles":{
+
+            },
+            "placeholder":{
+
+            }
+        },
+        "zh-hk": {
+            "fwtitle" : "磁碟概覽",
+            "strings":{
+                "title/title":"磁碟概覽",
+                "title/desc":"關於此虛擬儲存裝置對應之磁碟機掛載點",
+
+                "diskinfo/physical":"物理磁碟機",
+                "diskinfo/hierarchy":"儲存裝置結構",
+
+                "hierarchy/User":"使用者分隔",
+                "hierarchy/Public":"共用磁碟區",
+                "hierarchy/Backup":"備份磁碟區",
+
+                "spaceinfo/totalUsed":"已使用磁碟空間",
+                "spaceinfo/userUsed":"使用者磁碟空間",
+                "spaceinfo/Usable":"可用磁碟空間",
+                "spaceinfo/Capacity":"磁碟容量",
+
+                "unit/bytes":" 個位元組",
+
+                "button/close":"確認",
+
+                "":""
+            },
+            "titles":{
+
+            },
+            "placeholder":{
+
+            }
+        }
+    }
+}

+ 168 - 5
web/SystemAO/locale/file_explorer.json

@@ -2,7 +2,7 @@
     "author": "tobychui",
     "version": "1.0",
     "keys": {
-        "zh-TW": {
+        "zh-tw": {
             "strings": {
                 "title/title": "檔案管理員",
                 "menu/button/download": "下載所選",
@@ -32,7 +32,7 @@
                 "func/search/tip2": "如你需要輸入萬用字元,請先輸入 / 號,例如: /*.mp3",
 
                 "opr/overwrite/title": "覆寫、保留或是跳過檔案",
-                "opr/overwrite/copying": "正在複",
+                "opr/overwrite/copying": "正在複",
                 "opr/overwrite/files": "個檔案。來源:",
                 "opr/overwrite/to": " → 目的地:",
                 "opr/overwrite/dest": "目的地有 ",
@@ -97,7 +97,7 @@
                 "contextmenu/openFileLocation": "開啟檔案位置",
                 "contextmenu/Share": "分享",
                 "contextmenu/MuitSelect": "切換多選",
-                "contextmenu/copy": "複",
+                "contextmenu/copy": "複",
                 "contextmenu/paste": "貼上",
                 "contextmenu/cut": "剪下",
                 "contextmenu/newFile": "新增檔案",
@@ -139,7 +139,7 @@
                 "Open with": "以…開啟",
                 "Share File": "分享所選",
                 "Download": "下載",
-                "Copy": "複",
+                "Copy": "複",
                 "Paste": "貼上",
                 "Cut": "剪下",
                 "New File": "新增檔案",
@@ -168,8 +168,171 @@
 
             }
         },
-        "zh-HK": {
+        "zh-hk": {
+            "strings": {
+                "title/title": "檔案管理員",
+                "menu/button/download": "下載所選",
+                "menu/sort/asc": "檔名順序",
+                "menu/sort/desc": "檔名倒序",
+                "menu/sort/small": "小至大",
+                "menu/sort/large": "大至小",
+                "menu/sort/mostrecent": "新到舊",
+                "menu/sort/leastrecent": "舊到新",
+
+                "sidebar/vroot/user": "使用者",
+                "sidebar/vroot/fsh": "虛擬儲存裝置",
+
+                "sidebar/vroot/desktop": "桌面",
+                "sidebar/vroot/document": "文件",
+                "sidebar/vroot/music": "音樂",
+                "sidebar/vroot/photo": "圖片",
+                "sidebar/vroot/video": "影片",
+                "sidebar/vroot/trash": "回收箱",
+                "sidebar/vroot/download": "下載",
+                "sidebar/vroot/web": "網頁",
+                "sidebar/vroot/model": "模型",
+                "sidebar/vroot/appdata": "應用",
+
+                "func/search/typeToStart": "輸入關鍵字以開始搜尋",
+                "func/search/tip1": "在上面的輸入欄位輸入關鍵字,然後按「搜尋」按鈕以開始搜尋",
+                "func/search/tip2": "如你需要輸入萬用字元,請先輸入 / 號,例如: /*.mp3",
+
+                "opr/overwrite/title": "覆寫、保留或是跳過檔案",
+                "opr/overwrite/copying": "正在複製",
+                "opr/overwrite/files": "個檔案。來源:",
+                "opr/overwrite/to": " → 目的地:",
+                "opr/overwrite/dest": "目的地有 ",
+                "opr/overwrite/samename": " 個相同名稱的檔案",
+                "opr/overwrite/replace": "覆寫目的地檔案",
+                "opr/overwrite/skip": "跳過這些檔案",
+                "opr/overwrite/keep": "重新命名並保留目的地檔案",
+
+                "opr/per-remove/title": "永久移除檔案",
+                "opr/per-remove/questions": "確定<u>永久移除</u>以下檔案?<br>移除後檔案將<u>無法復原</u>",
+                "opr/per-remove/confirm": "確認永久移除所選檔案",
+                "opr/per-remove/cancel": "取消",
+
+                "opr/remove/title": "移動到資源回收箱",
+                "opr/remove/question": "確認移動所選檔案到資源回收箱?",
+                "opr/remove/confirm": "確認",
+                "opr/remove/cancel": "取消",
+
+                "opr/rename/title": "重新命名",
+                "opr/rename/instruction": "請在下方輸入欄輸入新檔案名稱",
+                "opr/rename/ok": "確認",
+                "opr/rename/cancel": "取消",
+
+                "opr/newfile/title": "創建檔案",
+                "opr/newfile/instruction": "選擇一種要新增的檔案格式樣本",
+                "opr/newfile/newempty": "或輸入檔案名稱以新增一個空白檔案",
+                "opr/newfile/create": "新增",
+                "opr/newfile/cancel": "取消",
+
+                "opr/newfolder/title": "創建資料夾",
+                "opr/newfolder/desc": "請在下方輸入欄輸入新資料夾名稱",
+                "opr/newfolder/alreadyExists": "此資料夾已存在",
+                "opr/newfolder/create": "創建",
+                "opr/newfolder/cancel": "取消",
+
+                "opr/share/title": "分享檔案",
+                "opr/share/settings": "分享設定",
+                "opr/share/setdesc": "更改誰能看到此檔案",
+                "opr/share/visableoption": "分享對像:",
+                "opr/share/anyone": "擁有連接的使用者",
+                "opr/share/anyonedesc": "任何擁有分享連接的使用者皆可下載此檔案",
+                "opr/share/signedin": "已登入的使用者",
+                "opr/share/signedindesc": "任何已登入並擁有分享連接的使用者皆可下載此檔案",
+                "opr/share/samegroup": "在同一權限群組內的使用者",
+                "opr/share/samegroupdesc": "任何擁有相同使用者權限的使用者皆可下載此檔案",
+                "opr/share/update": "更新權限",
+                "opr/share/remove": "移除檔案分享",
+                "opr/share/ok": "完成",
+
+                "opr/openwith/title": "使用 … 開啟",
+                "opr/openwith/desc": "選擇一個 WebApp 以開啟此檔案",
+                "opr/openwith/loading": "載入中…",
+                "opr/openwith/openWithWebApp": "使用所選的 WebApp 開啟檔案",
+                "opr/openwith/openWithWebAppInNewWindow": "使用所選的 WebApp 在新視窗開啟",
+                "opr/openwith/openInNewWindow": "直接於新視窗開啟檔案",
+                "opr/openwith/cancel": "取消",
+
+                "contextmenu/open": "開啟",
+                "contextmenu/openWith": "使用 … 開啟",
+                "contextmenu/openNewWindow": "在新視窗開啟",
+                "contextmenu/openNewWindowVroot": "在新視窗開啟",
+                "contextmenu/openFileLocation": "開啟檔案位置",
+                "contextmenu/Share": "分享",
+                "contextmenu/MuitSelect": "切換多選",
+                "contextmenu/copy": "複製",
+                "contextmenu/paste": "貼上",
+                "contextmenu/cut": "剪下",
+                "contextmenu/newFile": "新增檔案",
+                "contextmenu/newFolder": "新增資料夾",
+                "contextmenu/upload": "上載",
+                "contextmenu/zip": "建立壓縮檔",
+                "contextmenu/rename": "重新命名",
+                "contextmenu/delete": "刪除",
+                "contextmenu/backup": "備份及還原",
+                "contextmenu/refresh": "重新整理",
+                "contextmenu/download": "下載",
+                "contextmenu/properties": "內容",
+
+                "upload/count/uploading": " 上載中",
+                "upload/count/pending": " 等待中",
+
+                "message/rename/success": "重新命名成功",
+                "message/copy/success": " 個檔案已準備複製",
+                "message/move/success": " 個檔案已準備移動",
+                "message/paste/nothing": "沒有可貼上的檔案",
+                "message/remove/success": " 個檔案已被成功刪除",
+                "message/recycle/success": " 個檔案已被成功移動到資源回收箱",
+                "message/upload/started": "檔案上載已開始",
+                "message/zip/fail": "檔案壓縮失敗:原因不明",
+                "message/newfolder/success": "新資料夾建立完成",
+                "message/newItem/success": " 建立完成",
+                "message/nofileSelected": "沒有選擇檔案",
+                "message/moduleNotSupport": "此模組無法開啟任何檔案",
+
+                "message/destIdentical": "檔案來源及目的地相同",
+                "message/decodeFilelistFail": "載案置入失敗:無法讀取檔案列表",
+                "message/uploadFailed": "載案上載失敗:檔案太大或目標儲存裝置已滿",
+                "message/newFilenameIdentical": "重新命名失敗:新舊檔案名稱相同"
+            },
+            "titles": {
+                "Back": "上一頁",
+                "Parent Folder": "返回上層目錄",
+                "Open": "開啟",
+                "Open with": "以…開啟",
+                "Share File": "分享所選",
+                "Download": "下載",
+                "Copy": "複製",
+                "Paste": "貼上",
+                "Cut": "剪下",
+                "New File": "新增檔案",
+                "New Folder": "新增資料夾",
+                "Upload": "上載",
+                "Create Zip": "建立壓縮檔",
+                "Rename": "重新命名",
+                "Delete": "刪除",
+                "Refresh": "重新整理",
+                "Home": "根目錄",
+                "File Info": "檔案資訊",
+                "Toggle Folder List": "檢視根目錄列表",
+                "Dark Theme": "切換主題配色",
+                "Edit Path": "編輯路徑",
+                "Sorting Method": "檔案排序",
+                "Search": "搜尋",
+                "Block View": "顯示檔案預覽",
+                "List View": "顯示檔案列表",
+                "Case Sensitive": "區分大小寫",
+                "Clear Search": "清除搜尋結果"
+            },
+            "placeholder": {
+                "New Filename": "在此輸入新檔案名稱",
+                "New Folder Name": "在此輸入新資料夾名稱",
+                "File Search (Start wildcard search with / , e.g. /*.mp3)": "檔案搜尋(如要使用萬用字元,請先輸入 / 號,例如: /*.mp3)"
 
+            }
         }
     }
 }

+ 40 - 1
web/SystemAO/locale/file_properties.json

@@ -2,8 +2,47 @@
     "author": "tobychui",
     "version": "1.0",
     "keys": {
-        "zh-TW": {
+        "zh-tw": {
             "fwtitle" : "檔案內容",
+            "fontFamily":"\"Microsoft JhengHei\",\"SimHei\", \"Apple LiGothic Medium\", \"STHeiti\"",
+            "strings": {
+                "title/title":"檔案內容",
+                "title/desc": "檔案基本內容及描述",
+
+                "properties/key/Default WebApp": "預設開啟應用",
+                "properties/key/Virtual Path": "虛擬存取路徑",
+                "properties/key/Storage Path": "磁碟儲存路徑",
+                "properties/key/File Size": "檔案大小",
+                "properties/key/Folder Size": "資料夾大小",
+                "properties/key/Permission": "存取權限",
+                "properties/key/Last Modified": "最後修改",
+                "properties/key/File Type": "檔案類型",
+                "properties/key/Owner": "擁有者",
+                "properties/key/Total Size": "總共大小",
+                "properties/key/Virtual Directory": "虛擬存放位置",
+                "properties/key/Storage Directory": "磁碟存放位置",
+
+                "lastmod/time/year": " 年",
+                "lastmod/time/month": " 個月",
+                "lastmod/time/days": " 日",
+                "lastmod/time/today": "今天",
+                "lastmod/time/s": "",
+                "lastmod/time/ago": "前",
+
+                "button/changeDefault":"更改預設啟動應用",
+                "button/changeFilePermission":"更改檔案存取權限",
+                "loader/loadingFileSize": "正在計算檔案大小",
+                "selection/multi": "已選擇多個檔案",
+
+                "counter/files": " 個檔案",
+                "counter/folders": " 個資料夾",
+
+                "":""
+            }
+        },
+        "zh-hk": {
+            "fwtitle" : "檔案內容",
+            "fontFamily":"\"Microsoft JhengHei\",\"SimHei\", \"Apple LiGothic Medium\", \"STHeiti\"",
             "strings": {
                 "title/title":"檔案內容",
                 "title/desc": "檔案基本內容及描述",

+ 84 - 1
web/SystemAO/locale/personalization.json

@@ -2,8 +2,91 @@
     "author": "tobychui",
     "version": "1.0",
     "keys": {
-        "zh-TW": {
+        "zh-tw": {
             "fwtitle" : "個人化",
+            "fontFamily":"\"Microsoft JhengHei\",\"SimHei\", \"Apple LiGothic Medium\", \"STHeiti\"",
+            "strings":{
+                "menu/wallpaper":"壁紙",
+                "menu/sound":"音效",
+                "menu/theme":"主題",
+                "menu/advance":"進階",
+
+                "wallpaper/title":"桌面壁紙圖包",
+                "wallpaper/desc":"使用內置桌面壁紙圖包",
+                "wallpaper/option/title": "桌面壁紙背景",
+                "wallpaper/option/desc": "如果您已在進階頁面選擇從自定資料夾載入壁紙圖包,此項將會自動禁用。",
+                "wallpaper/option/apply": "<i class=\"checkmark icon\"></i> 更新壁紙",
+                "wallpaper/option/updated": "桌面壁紙已更新",
+                "wallpaper/option/updateddesc": "您應該很快便能在桌面看到你的新背景",
+                "wallpaper/option/interval": "桌面壁紙替換間隔",
+                "wallpaper/option/intervaldesc": "設定多久之後自動替換為下一張壁紙",
+
+                "wallpaper/interval/10s":"10 秒",
+                "wallpaper/interval/30s":"30 秒",
+                "wallpaper/interval/60s":"60 秒",
+                "wallpaper/interval/3min":"3 分鐘",
+                "wallpaper/interval/5min":"5 分鐘",
+                "wallpaper/interval/10min":"10 分鐘",
+                "wallpaper/interval/30min":"30 分鐘",
+                "wallpaper/interval/1h":"1 小時",
+
+                "wallpaper/interval/succ":"壁紙替換間隔設定已更新",
+                "wallpaper/interval/succdesc":"注意:此設定只適用於此瀏覽器。",
+
+                "sound/title":"系統音效",
+                "sound/desc":"自定系統音效設定",
+                "sound/custom/title":"自定啟動音效",
+                "sound/custom/desc":"設定使用者進入網頁桌面時的啟動音效",
+                "sound/custom/disable":"停用",
+                "sound/custom/clear":"清除所選",
+                "sound/custom/select":"選擇檔案",
+                "sound/disabled": "已停用",
+
+                "themecolor/title":"主題顏色",
+                "themecolor/desc":"變更系統主題配色",
+                "themecolor/color/Red":"紅色系",
+                "themecolor/color/Pink":"粉色系",
+                "themecolor/color/Purple":"紫色系",
+                "themecolor/color/Deeppurple":"深紫色系",
+                "themecolor/color/Indigo":"靛青色系",
+                "themecolor/color/Blue":"藍色系",
+                "themecolor/color/Lightblue":"淺藍色系",
+                "themecolor/color/Cyan":"淺青色系",
+                "themecolor/color/Teal":"深青色系",
+                "themecolor/color/Green":"綠色系",
+                "themecolor/color/Lightgreen":"淺綠色系",
+                "themecolor/color/Lime":"黃綠色系",
+                "themecolor/color/Yellow":"黃色系",
+                "themecolor/color/Amber":"琥珀色系",
+                "themecolor/color/Orange":"橘橙色系",
+                "themecolor/color/Deeporange":"深橙色系",
+                "themecolor/color/Brown":"棕色系",
+                "themecolor/color/Grey":"灰色系",
+                "themecolor/color/Bluegrey":"灰藍色系",
+                "themecolor/color/Default":"還原預設主題配色",
+
+
+                "advance/title":"進階個人化選項",
+                "advance/desc":"管理您的桌面選項",
+                "advance/wallpaper/title":"自定桌面圖包",
+                "advance/wallpaper/desc":"使用自定義資料夾作為桌面圖包的存取路徑",
+                "advance/wallpaper/disabled":"已停用",
+                "advance/wallpaper/reminder":"如果您選擇從個人資料夾載入照片作桌面壁紙圖包,系統將會自動停用 <code>壁紙 > 桌面壁紙圖包 </code> 內之選項。",
+                "advance/wallpaper/clear":"清除選項",
+                "advance/wallpaper/select":"選擇資料夾",
+                
+                "":""
+            },
+            "titles":{
+
+            },
+            "placeholder":{
+
+            }
+        },
+        "zh-hk": {
+            "fwtitle" : "個人化",
+            "fontFamily":"\"Microsoft JhengHei\",\"SimHei\", \"Apple LiGothic Medium\", \"STHeiti\"",
             "strings":{
                 "menu/wallpaper":"壁紙",
                 "menu/sound":"音效",

+ 1 - 1
web/SystemAO/locale/system_settings.json

@@ -2,7 +2,7 @@
     "author": "tobychui",
     "version": "1.0",
     "keys": {
-        "zh-TW": {
+        "zh-tw": {
             "fwtitle" : "",
             "strings":{
 

+ 13 - 1
web/SystemAO/locale/template.json

@@ -2,7 +2,19 @@
     "author": "tobychui",
     "version": "1.0",
     "keys": {
-        "zh-TW": {
+        "zh-tw": {
+            "fwtitle" : "",
+            "strings":{
+
+            },
+            "titles":{
+
+            },
+            "placeholder":{
+
+            }
+        },
+        "zh-hk": {
             "fwtitle" : "",
             "strings":{
 

+ 8 - 8
web/desktop.system

@@ -5430,8 +5430,8 @@
             var apiObject = {
                 api: "/system/power/restart",
                 data: {},
-                title: "Password Required",
-                desc: "for restarting the ArozOS Host",
+                title: applocale.getString("power/restart/text", "Password Required"),
+                desc: applocale.getString("power/restart/instruction", "for restarting the ArozOS Host"),
                 thisuser: true, //This username as default, set to false for entering other user
                 method: "GET"
             }
@@ -5442,7 +5442,7 @@
                 width: 480,
                 height: 300,
                 appicon: "SystemAO/security/img/lock.svg",
-                title: "Restart - Authentication Required",
+                title: applocale.getString("power/restart/title", "Restart - Authentication Required"),
                 parent: ao_module_windowID,
                 callback: "handleRestartCallback"
             });
@@ -5456,8 +5456,8 @@
             var apiObject = {
                 api: "system/power/shutdown",
                 data: {},
-                title: "<i class='red exclamation triangle icon'></i> Shutdown Host <i class='red exclamation triangle icon'></i>",
-                desc: "Please enter your password to confirm operation.",
+                title: `<i class='red exclamation triangle icon'></i> ${applocale.getString("power/shutdown/text", "Shutdown Host")} <i class='red exclamation triangle icon'></i>`,
+                desc: applocale.getString("power/shutdown/instruction", "Please enter your password to confirm operation."),
                 thisuser: true, //This username as default, set to false for entering other user
                 method: "GET",
                 success: "SystemAO/boot/shutdown.html" //Success redirection
@@ -5469,10 +5469,10 @@
                 width: 480,
                 height: 300,
                 appicon: "SystemAO/security/img/lock.svg",
-                title: "Shutdown - Authentication Required",
+                title: applocale.getString("power/shutdown/title", "Shutdown - Authentication Required"),
                 parent: ao_module_windowID,
                 callback: "handleShutdownCallback"
-            })
+            });
            
         }
 
@@ -5509,7 +5509,7 @@
             $("#iconwrapper").append(`<div href="javascript:void(0);" class="${uploadIconUUID} launchIcon" type="dummy" filename="${filename}" filepath="user:/Desktop/${filename}"  style="width:70px; height:106px;left:${onScreenLocation[0]}px; top:${onScreenLocation[1]}px;">
                 <span class="launchIconWrapper">
                     <img class="launchIconImage medium" src="img/desktop/files_icon/${desktopIconPack}/file upload.png" draggable="false">
-                    <p class="launchIconText ${desktopIconSize}" >Uploading</p>
+                    <p class="launchIconText ${desktopIconSize}" >${applocale.getString( "upload/message/uploading", "Uploading")}</p>
                     <div class="ts tiny primary progress" style="margin-top: -4px;">
                         <div class="bar" style="min-width: 0px !important; width: 0%;"></div>
                     </div>

+ 1 - 1
web/login.system

@@ -94,7 +94,7 @@
 
             <div class="ts borderless basic segment">
                 <p><i class="key icon"></i> Sign in <span class="hostname">ArozOS</span> with your username and password</p>
-                <div class="oauthonly">
+                <div class="oauthonly" style="display:none;">
                     <a class="ts fluid small button oauthbtn" href="system/auth/oauth/login">Sign In via OAuth 2.0</a><br>
                 </div>
                 <br>

+ 8 - 0
web/script/applocale.js

@@ -19,6 +19,7 @@
 
 var applocale = {
     lang: localStorage.getItem('global_language') == null || localStorage.getItem('global_language') == "default" ? navigator.language : localStorage.getItem('global_language'),
+    lang: navigator.language.toLowerCase(),
     localeFile: "",
     localData: {},
     init: function(localeFile, callback = undefined) {
@@ -36,6 +37,13 @@ var applocale = {
                     //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, span").css({
+                        "font-family":data.keys[applocale.lang].fontFamily
+                    })
+                }
             }
         });
     },