diff --git a/customize.dist/messages.js b/customize.dist/messages.js
index 2dac5b6c9..67759a15e 100644
--- a/customize.dist/messages.js
+++ b/customize.dist/messages.js
@@ -9,6 +9,7 @@ var map = {
'de': 'Deutsch',
'pt-br': 'Português do Brasil',
'ro': 'Română',
+ 'zh': '繁體中文',
};
var getStoredLanguage = function () { return localStorage.getItem(LS_LANG); };
diff --git a/customize.dist/translations/messages.zh.js b/customize.dist/translations/messages.zh.js
new file mode 100644
index 000000000..af8a37615
--- /dev/null
+++ b/customize.dist/translations/messages.zh.js
@@ -0,0 +1,545 @@
+define(function () {
+ var out = {};
+ // translations must set this key for their language to be available in
+ // the language dropdowns that are shown throughout Cryptpad's interface
+
+ out._languageName = 'Chinese';
+
+ out.main_title = "CryptPad: 零知識, 即時協作編寫";
+ out.main_slogan = "團結就是力量 - 合作是關鍵"; // TODO remove?
+
+ out.type = {};
+ out.type.pad = '富文本';
+ out.type.code = '編碼';
+ out.type.poll = '投票';
+ out.type.slide = '投影片簡報';
+ out.type.drive = '磁碟';
+ out.type.whiteboard = '白板';
+ out.type.file = '檔案';
+ out.type.media = '多媒體';
+
+ out.button_newpad = '富文件檔案';
+ out.button_newcode = '新代碼檔案';
+ out.button_newpoll = '新投票調查';
+ out.button_newslide = '新簡報';
+ out.button_newwhiteboard = '新白板';
+
+ // NOTE: We want to update the 'common_connectionLost' key.
+ // Please do not add a new 'updated_common_connectionLostAndInfo' but change directly the value of 'common_connectionLost'
+ out.updated_0_common_connectionLost = "伺服器連線中斷
現在是唯讀狀態,直到連線恢復正常。";
+ out.common_connectionLost = out.updated_0_common_connectionLost;
+
+ out.websocketError = '無法連結上 websocket 伺服器...';
+ out.typeError = "這個編輯檔與所選的應用程式並不相容";
+ out.onLogout = '你已登出, 點擊這裏 來登入
或按Escape 來以唯讀模型使用你的編輯檔案';
+ out.wrongApp = "無法在瀏覽器顯示即時期間的內容,請試著再重新載入本頁。";
+
+ out.loading = "載入中...";
+ out.error = "錯誤";
+ out.saved = "儲存";
+ out.synced = "所有資料已儲存好了";
+ out.deleted = "自 CryptDrive 刪除檔案";
+
+ out.disconnected = '已斷線';
+ out.synchronizing = '同步中';
+ out.reconnecting = '重新連結...';
+ out.lag = 'Lag';
+ out.readonly = '唯讀';
+ out.anonymous = "匿名";
+ out.yourself = "你自己";
+ out.anonymousUsers = "匿名的編輯群";
+ out.anonymousUser = "匿名的編輯群者";
+ out.users = "用戶";
+ out.and = "與";
+ out.viewer = "檢視者";
+ out.viewers = "檢視群";
+ out.editor = "編輯者";
+ out.editors = "編輯群";
+
+ out.language = "語言";
+
+ out.comingSoon = "即將上市...";
+
+ out.newVersion = 'CryptPad 已更新!
' +
+ '檢查最新版本有什麼新功能:
'+
+ 'CryptPad新發佈記事 {0}';
+
+ out.upgrade = "昇級";
+ out.upgradeTitle = "昇級帳戶以取得更多的儲存空間";
+ out.MB = "MB";
+ out.GB = "GB";
+ out.KB = "KB";
+
+ out.formattedMB = "{0} MB";
+ out.formattedGB = "{0} GB";
+ out.formattedKB = "{0} KB";
+
+ out.greenLight = "每件事都很順利";
+ out.orangeLight = "連線速度慢可能會影響用戶體驗";
+ out.redLight = "你這段期間的連線已中斷";
+
+ out.pinLimitReached = "你已達到儲存容量上限";
+ out.updated_0_pinLimitReachedAlert = "你已達到儲存容量上限,新檔案不會儲存到你的 CryptDrive.
" +
+ '要嘛你可以自 CryptDrive 移除原有文件或是 昇級到付費版增加你的儲存容量。';
+ out.pinLimitReachedAlert = out.updated_0_pinLimitReachedAlert;
+ out.pinAboveLimitAlert = '這個版本中, 我們對免費用戶實施 50MB 容量上限的儲存限制,你目前已使用了 {0}。你可以刪除一些檔案或是昇級到付費帳戶 accounts.cryptpad.fr。你的貢獻可助我們改善 CryptPad 並散佈零知識技術。可聯絡 用戶支援如果有任何問題的話。';
+ out.pinLimitNotPinned = "你已達到容量使用上限
"+
+ "這個檔案無法儲存到你的 CryptDrive.";
+ out.pinLimitDrive = "你已達到容量使用上限
" +
+ "你不能建立新的編輯檔案";
+ out.importButtonTitle = '從電腦上傳滙入檔案';
+
+ out.exportButtonTitle = '將這個檔案滙出到電腦';
+ out.exportPrompt = '你希望怎麼命名你的檔案?';
+
+ out.changeNamePrompt = '更換你的名稱(若留空白則會成為無名氏): ';
+ out.user_rename = "改變顯示名稱";
+ out.user_displayName = "顯示名稱";
+ out.user_accountName = "帳號名稱";
+
+ out.clickToEdit = "點擊以編輯";
+
+ out.forgetButtonTitle = '將這個檔案移置垃圾筒';
+ out.forgetPrompt = '點擊 OK 將把這個檔案移置垃圾筒,確定要這樣做嗎';
+ out.movedToTrash = '這個檔案已被移置垃圾筒
讀取我的雲端硬碟';
+
+ out.shareButton = '分享';
+ out.shareSuccess = '複製連結到剪貼版';
+
+ out.newButton = '新';
+ out.newButtonTitle = '建立新的工作檔案';
+
+ out.saveTemplateButton = "存成模版";
+ out.saveTemplatePrompt = "為這個模版選一個標題";
+ out.templateSaved = "模版已儲存!";
+ out.selectTemplate = "選擇一個模版或是按 escape 跳出";
+
+ out.previewButtonTitle = "顯示或隱藏 Markdown 預覽模式";
+
+ out.presentButtonTitle = "輸入簡報模式";
+ out.presentSuccess = '按 ESC 以退出簡報模式';
+
+ out.backgroundButtonTitle = '改變簡報的顏色背景';
+ out.colorButtonTitle = '在簡報模式下改變文字顏色';
+
+ out.printButton = "列印 (enter)";
+ out.printButtonTitle = "列印投影片或滙出成 PDF 檔案";
+ out.printOptions = "版型選項";
+ out.printSlideNumber = "顯示投影片號碼";
+ out.printDate = "顯示日期";
+ out.printTitle = "顯示檔案標題";
+ out.printCSS = "自定風格規則 (CSS):";
+ out.printTransition = "啟用轉場動畫";
+
+ out.slideOptionsTitle = "自定你的投影片";
+ out.slideOptionsButton = "儲存 (enter)";
+
+ out.editShare = "編輯連結";
+ out.editShareTitle = "複製所編輯的連結到剪貼版";
+ out.editOpen = "在新分頁開啟連結編輯";
+ out.editOpenTitle = "在新分頁開啟這個檔案為編輯模式";
+ out.viewShare = "唯讀連結";
+ out.viewShareTitle = "複製唯讀的連結到剪貼版";
+ out.viewOpen = "在新分頁開啟唯讀連結";
+ out.viewOpenTitle = "在新分頁開啟這個檔案為唯讀模式";
+
+ out.notifyJoined = "{0} 已加入此協作期間";
+ out.notifyRenamed = "{0} 現在改名為 {1}";
+ out.notifyLeft = "{0} 已離開了這個協作期間";
+
+ out.okButton = 'OK (enter)';
+
+ out.cancel = "取消";
+ out.cancelButton = '取消 (esc)';
+
+ out.historyButton = "顯示文件歷史";
+ out.history_next = "到下一個版本";
+ out.history_prev = "到之前的版本";
+ out.history_goTo = "到所選擇的版本";
+ out.history_close = "回到";
+ out.history_closeTitle = "關閉歷史記錄";
+ out.history_restore = "重建";
+ out.history_restoreTitle = "將此文件重建到所挑選的版本";
+ out.history_restorePrompt = "確定要將這個展現的版本來取代現有版本嗎?";
+ out.history_restoreDone = "文件已重建";
+ out.history_version = "版本:";
+
+ // Polls
+
+ out.poll_title = "零知識日期挑選";
+ out.poll_subtitle = "零知識, 即時 排程";
+
+ out.poll_p_save = "你的設定會立即更新, 因此從不需要按鍵儲存或擔心遺失。";
+ out.poll_p_encryption = "你所有幹入的資料都會予以加密,只有取得連結者才可以讀取它。即便是伺服器也不能看到你作了什麼變動。";
+
+ out.wizardLog = "點擊左上方的按鍵以回到你的調查";
+ out.wizardTitle = "使用精靈來建立調查投票";
+ out.wizardConfirm = "你真的要新增這些問題到你的調查中嗎?";
+
+ out.poll_publish_button = "發佈";
+ out.poll_admin_button = "管理者";
+ out.poll_create_user = "新增使用者";
+ out.poll_create_option = "新增選項";
+ out.poll_commit = "投入";
+
+ out.poll_closeWizardButton = "關閉協助精靈";
+ out.poll_closeWizardButtonTitle = "關閉協助精靈";
+ out.poll_wizardComputeButton = "計算最適化";
+ out.poll_wizardClearButton = "清除表格";
+ out.poll_wizardDescription = "透過輸入任何日期或時間分段,可自動建立一些選項";
+ out.poll_wizardAddDateButton = "+ 日期";
+ out.poll_wizardAddTimeButton = "+ 時間";
+
+ out.poll_optionPlaceholder = "選項";
+ out.poll_userPlaceholder = "你的名稱";
+ out.poll_removeOption = "確定要移除這個選項嗎?";
+ out.poll_removeUser = "確定要移除這位使用者嗎?";
+
+ out.poll_titleHint = "標題";
+ out.poll_descriptionHint = "請簡述這個調查目的,完成時使用「發佈鍵」。任何知道此調查連結者可以更改這裏的描述內容,但我們不鼓勵這麼做。.";
+
+ // Canvas
+ out.canvas_clear = "清除";
+ out.canvas_delete = "刪除所選";
+ out.canvas_disable = "取消繪圖";
+ out.canvas_enable = "啟動繪圖";
+ out.canvas_width = "寛度";
+ out.canvas_opacity = "透明度";
+
+ // File manager
+
+ out.fm_rootName = "根目錄";
+ out.fm_trashName = "垃圾桶";
+ out.fm_unsortedName = "未整理的檔案";
+ out.fm_filesDataName = "所有檔案";
+ out.fm_templateName = "模版";
+ out.fm_searchName = "搜尋";
+ out.fm_searchPlaceholder = "搜尋...";
+ out.fm_newButton = "新的";
+ out.fm_newButtonTitle = "建立新工作檔案或資料夾";
+ out.fm_newFolder = "新資料夾";
+ out.fm_newFile = "新工作檔案";
+ out.fm_folder = "資料夾";
+ out.fm_folderName = "資料夾名稱";
+ out.fm_numberOfFolders = "# 個資料夾";
+ out.fm_numberOfFiles = "# 檔案";
+ out.fm_fileName = "檔案名";
+ out.fm_title = "標題";
+ out.fm_type = "類型";
+ out.fm_lastAccess = "上回使用";
+ out.fm_creation = "創建";
+ out.fm_forbidden = "禁止的行為";
+ out.fm_originalPath = "原始路徑";
+ out.fm_openParent = "顯示在目錄夾中";
+ out.fm_noname = "無標題文件";
+ out.fm_emptyTrashDialog = "確定要清理垃圾筒嗎?";
+ out.fm_removeSeveralPermanentlyDialog = "確定要將這些 {0} 東西永自垃圾筒移除嗎?";
+ out.fm_removePermanentlyDialog = "你確定要永久地移除這些項目嗎?";
+ out.fm_removeSeveralDialog = "確定要將這些 {0} 東西移至垃圾筒嗎?";
+ out.fm_removeDialog = "確定要將移動 {0} 至垃圾筒嗎?";
+ out.fm_restoreDialog = "確定要重置 {0} 到它之前的位置嗎?";
+ out.fm_unknownFolderError = "所選或上回訪問的目錄不再存在了,正開啟上層目錄中...";
+ out.fm_contextMenuError = "無法在此元件下打開文本選單。如果這個問題一直發生,請試著重新載入此頁。";
+ out.fm_selectError = "無法選取目標的要素。如果這個問題一直發生,請試著重新載入此頁。";
+ out.fm_categoryError = "無法打開所選的類別,正在顯示根目錄。";
+ out.fm_info_root = "在此建立任何巢狀目錄夾以便於整理分類你的檔案。";
+ out.fm_info_unsorted = '包含所有你曾訪問過的檔案,其尚未被整理在 "根目錄" 或移到到"垃圾筒".'; // "My Documents" should match with the "out.fm_rootName" key, and "Trash" with "out.fm_trashName"
+ out.fm_info_template = '包含所有工作檔案已存成模版,便於讓你在建立新工作檔案時套用。';
+ out.updated_0_fm_info_trash = '清空垃圾筒好讓 CryptDrive 多出一些空間';
+ out.fm_info_trash = out.updated_0_fm_info_trash;
+ out.fm_info_allFiles = '包含在 "根目錄", "未整理的" 和 "垃圾筒" 裏的所有檔案。這裏你無法移動或移除檔案。'; // Same here
+ out.fm_info_anonymous = '你尚未登入,因此這些工作檔案可能會被刪除。 (了解原因). ' +
+ '註冊或登入以便保留它們。';
+ out.fm_alert_backupUrl = "這個雲端硬碟的備份連結
" +
+ "高度建議把自己的 IP 資訊保留成只有自己知道
" +
+ "萬一瀏覽器記憶被消除,你可以用它來接收所有的檔案。
" +
+ "任何知道此連結的人可以編輯或移除你檔案管理底下的所有檔案。
";
+ out.fm_alert_anonymous = "嗨你好, 你目前正以匿名方式在使用 CryptPad , 這也沒問題,不過你的東西過一段時間沒動靜後,就會自動被刪除。 " +
+ "匿名的用戶我們也取消其進階功能,因為我們要明確地讓用戶知道,這裏 " +
+ '不是一個安全存放東西的地方。你可以 進一步了解 關於 ' +
+ '為何我們這樣作,以及為何你最好能夠註冊 以及 登錄使用。';
+ out.fm_backup_title = '備份連結';
+ out.fm_nameFile = '你想要如何來命名這個檔案呢?';
+ out.fm_error_cantPin = "內部伺服器出錯,請重新載入本頁並再試一次。";
+ // File - Context menu
+ out.fc_newfolder = "新資料夾";
+ out.fc_rename = "重新命名";
+ out.fc_open = "打開";
+ out.fc_open_ro = "打開 (唯讀)";
+ out.fc_delete = "刪除";
+ out.fc_restore = "重置";
+ out.fc_remove = "永久刪除";
+ out.fc_empty = "清理垃圾筒";
+ out.fc_prop = "Properties";
+ out.fc_sizeInKilobytes = "容量大小 (Kilobytes)";
+ // fileObject.js (logs)
+ out.fo_moveUnsortedError = "你不能移動資料夾到未整理的工作檔案清單";
+ out.fo_existingNameError = "名稱已被使用,請選擇其它名稱";
+ out.fo_moveFolderToChildError = "你不能移動資料夾到它的子資料夾底下";
+ out.fo_unableToRestore = "無法將這個檔案重置到原始的位置。你可以試著將它移動到其它新位置。";
+ out.fo_unavailableName = "在新位置裏同名的檔案或資料夾名稱已存在,請重新命名後再試看看。";
+
+ // login
+ out.login_login = "登入";
+ out.login_makeAPad = '匿名地建立一個工作檔案';
+ out.login_nologin = "瀏覽本地的工作檔案";
+ out.login_register = "註冊";
+ out.logoutButton = "登出";
+ out.settingsButton = "設定";
+
+ out.login_username = "用戶名";
+ out.login_password = "密碼";
+ out.login_confirm = "確認你的密碼";
+ out.login_remember = "記住我";
+
+ out.login_hashing = "散列你的密碼中,這要花上一點時間";
+
+ out.login_hello = 'Hello {0},'; // {0} is the username
+ out.login_helloNoName = 'Hello,';
+ out.login_accessDrive = '取用你的磁碟';
+ out.login_orNoLogin = '或';
+
+ out.login_noSuchUser = '無效的用戶名或密碼,請再試一次或重新註冊';
+ out.login_invalUser = '要求用戶名';
+ out.login_invalPass = '要求密碼';
+ out.login_unhandledError = '發生了未預期的錯誤 :(';
+
+ out.register_importRecent = "滙入檔案記錄 (建議)";
+ out.register_acceptTerms = "我同意 服務條款";
+ out.register_passwordsDontMatch = "密碼不相符!";
+ out.register_mustAcceptTerms = "你必須同意我們的服務條款。";
+ out.register_mustRememberPass = "如果你忘了密碼,我們也無法為你重置。因此務必自行好好記住! 請在勾選處勾選確認。";
+
+ out.register_header = "歡迎來到 CryptPad";
+ out.register_explanation = [
+ "
首先讓我們先了解幾件事
", + "',
+ '這是 CryptPad, 零知識即時協作編輯平台,當你輸入時一切已即存好。',
+ '
',
+ '分享這個工作檔案的網址連結給友人或是使用、 分享 按鈕分享唯讀的連結 其只能看不能編寫。',
+ '
', + '來吧, 開始打字輸入吧...', + '
', + '