diff --git a/src/main/services/i18n/index.ts b/src/main/services/i18n/index.ts
index c70fc36e..b0e05b2b 100644
--- a/src/main/services/i18n/index.ts
+++ b/src/main/services/i18n/index.ts
@@ -4,9 +4,11 @@ import i18next from 'i18next'
import Backend from 'i18next-fs-backend'
import { store } from '../../store'
+const lng = store.preferences.get('language')
+
i18next.use(Backend).init({
fallbackLng: 'en',
- lng: store.preferences.get('language'),
+ lng,
debug: false,
ns: ['common', 'dialog', 'preferences', 'special', 'menu'],
defaultNS: 'common',
@@ -21,4 +23,12 @@ i18next.use(Backend).init({
}
})
+i18next.addResourceBundle(lng, 'language', {
+ en: 'English',
+ ru: 'Русский',
+ zh_CN: '中文 (简体)',
+ zh_TW: '中文 (繁體)',
+ zh_HK: '中文 (繁體 香港特別行政區)'
+})
+
export default i18next
diff --git a/src/main/services/i18n/locales/en/preferences.json b/src/main/services/i18n/locales/en/preferences.json
index 2a283b46..8915a0b6 100644
--- a/src/main/services/i18n/locales/en/preferences.json
+++ b/src/main/services/i18n/locales/en/preferences.json
@@ -39,9 +39,6 @@
}
},
"language": {
- "label": "Language",
- "en": "English",
- "ru": "Русский",
- "zh_CN": "简体中文"
+ "label": "Language"
}
}
\ No newline at end of file
diff --git a/src/main/services/i18n/locales/ru/preferences.json b/src/main/services/i18n/locales/ru/preferences.json
index bceb3fe7..68513e02 100644
--- a/src/main/services/i18n/locales/ru/preferences.json
+++ b/src/main/services/i18n/locales/ru/preferences.json
@@ -39,9 +39,6 @@
}
},
"language": {
- "label": "Язык",
- "en": "English",
- "ru": "Русский",
- "zh_CN": "简体中文"
+ "label": "Язык"
}
}
\ No newline at end of file
diff --git a/src/main/services/i18n/locales/zh_CN/preferences.json b/src/main/services/i18n/locales/zh_CN/preferences.json
index b938bb1d..fc4ac48e 100644
--- a/src/main/services/i18n/locales/zh_CN/preferences.json
+++ b/src/main/services/i18n/locales/zh_CN/preferences.json
@@ -39,9 +39,6 @@
}
},
"language": {
- "label": "语言",
- "en": "English",
- "ru": "Русский",
- "zh_CN": "简体中文"
+ "label": "语言"
}
}
\ No newline at end of file
diff --git a/src/main/services/i18n/locales/zh_CN/special.json b/src/main/services/i18n/locales/zh_CN/special.json
index 477a9f55..ddd63ddb 100644
--- a/src/main/services/i18n/locales/zh_CN/special.json
+++ b/src/main/services/i18n/locales/zh_CN/special.json
@@ -16,7 +16,7 @@
"migrate": "数据库迁移成功。"
},
"error": {
- "folderNotContainDb": "文件夹内不存在 \"db.json\"."
+ "folderNotContainDb": "文件夹内不存在 \"db.json\"。"
},
"unsponsored": "未赞助的",
"supportMessage": "Hi,我是 Anton 👋
\n感谢你使用 massCode 。如果你觉得这个应用很有帮助,请{{-tagStart}} 捐赠 {{-tagEnd}}。这将激励我继续开发这个项目。",
diff --git a/src/main/services/i18n/locales/zh_HK/common.json b/src/main/services/i18n/locales/zh_HK/common.json
new file mode 100644
index 00000000..0ebf3f76
--- /dev/null
+++ b/src/main/services/i18n/locales/zh_HK/common.json
@@ -0,0 +1,56 @@
+{
+ "button": {
+ "moveStorage": "更改存儲路徑",
+ "openStorage": "打開現有存儲",
+ "fromMassCodeV1": "來自 massCode v1.0",
+ "fromSnippetsLab": "來自 SnippetsLab",
+ "confirm": "確認",
+ "cancel": "取消",
+ "update": ["前往 GitHub", "OK"]
+ },
+ "newFolder": "新建文件夾",
+ "newSnippet": "新建代碼片段",
+ "newFragment": "新建子片段",
+ "addDescription": "添加描述",
+ "addToFavorites": "添加至收藏夾",
+ "addTag": "添加標籤",
+ "rename": "重命名",
+ "duplicate": "創建副本",
+ "delete": "刪除",
+ "deleteNow": "立即刪除",
+ "defaultLanguage": "默認語言",
+ "removeFromFavorites": "從收藏夾移除",
+ "emptyTrash": "清空回收站",
+ "close": "關閉",
+ "folder": {
+ "untitled": "未命名文件夾",
+ "plural": "文件夾"
+ },
+ "snippet": {
+ "untitled": "未命名代碼片段",
+ "plural": "代碼片段",
+ "emptyName": "請輸入該代碼片段名稱",
+ "selectedMultiple": "已選中 {{count}} 個代碼片段",
+ "noSelected": "未選中代碼片段"
+ },
+ "fragment": "子片段",
+ "search": "搜索",
+ "line": "行",
+ "column": "列",
+ "sidebar": {
+ "inbox": "暫存區",
+ "favorites": "收藏夾",
+ "allSnippets": "所有的",
+ "trash": "回收站",
+ "untitled": "未命名文件夾",
+ "folders": "自定義文件夾",
+ "library": "庫",
+ "tags": "標籤"
+ },
+ "darkMode": "深色模式",
+ "background": "背景",
+ "restartApp": "重啓 massCode",
+ "updateAvailable": "存在新版本",
+ "hide": "隱藏",
+ "show": "顯示"
+}
\ No newline at end of file
diff --git a/src/main/services/i18n/locales/zh_HK/dialog.json b/src/main/services/i18n/locales/zh_HK/dialog.json
new file mode 100644
index 00000000..cd2b27dd
--- /dev/null
+++ b/src/main/services/i18n/locales/zh_HK/dialog.json
@@ -0,0 +1,12 @@
+{
+ "deleteConfirm": "你是否確定要永久刪除 {{name}} ?",
+ "deleteConfirmMultipleSnippets": "你是否確定要永久刪除 {{count}} 個選中的代碼片段?",
+ "noUndo": "本操作將無法撤銷。",
+ "allSnippetsMoveToTrash": "本文件夾內的所有代碼片段將被移動至回收站。",
+ "deleteTag": "將會從所有擁有該標籤的代碼片段中刪除該標籤。",
+ "emptyTrash": "你是否確定要永久刪除回收站內的所有代碼片段?",
+ "migrateConfirm": [
+ "你是否確定要從 {{name}} 遷移數據?",
+ "在遷移過程中,當前的庫將被覆蓋。"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/services/i18n/locales/zh_HK/menu.json b/src/main/services/i18n/locales/zh_HK/menu.json
new file mode 100644
index 00000000..26b49fa8
--- /dev/null
+++ b/src/main/services/i18n/locales/zh_HK/menu.json
@@ -0,0 +1,68 @@
+{
+ "app": {
+ "label": "massCode",
+ "preferences": "首選項",
+ "update": {
+ "label": "檢查更新…",
+ "message": "新版本 {{newVersion}} 現在已經可以下載。\n現在的版本是 {{oldVersion}} 。",
+ "button": ["前往 GitHub", "OK"],
+ "noUpdate": "當前沒有可用的更新。"
+ },
+ "quit": "退出 massCode",
+ "about": "關於 massCode",
+ "hide": "最小化 massCode",
+ "hideOther": "最小化其它窗口",
+ "showAll": "顯示所有窗口"
+ },
+ "help": {
+ "label": "幫助",
+ "website": "訪問官網",
+ "documentation": "訪問文檔",
+ "viewInGitHub": "訪問 GitHub",
+ "changeLog": "更新日誌",
+ "reportIssue": "提交 Issue",
+ "giveStar": "給個 Star",
+ "extension": {
+ "vscode": "VS Code 插件",
+ "raycast": "Raycast 插件",
+ "alfred": "Alfred 插件"
+ },
+ "donate": {
+ "openCollective": "通過 Open Collective 捐贈",
+ "payPal": "通過 PayPal 捐贈"
+ },
+ "twitter": "訪問作者 Twitter",
+ "devTools": "開發者工具"
+ },
+ "file": {
+ "label": "文件",
+ "find": "查找"
+ },
+ "view": {
+ "label": "查看",
+ "sortBy": {
+ "label": "排序方式",
+ "dateModified": "根據修改日期",
+ "dateCreated": "根據創建日期",
+ "name": "根據片段名"
+ }
+ },
+ "edit": {
+ "label": "編輯",
+ "undo": "撤銷",
+ "redo": "恢復",
+ "cut": "剪切",
+ "copy": "複製",
+ "paste": "粘貼",
+ "delete": "刪除",
+ "selectAll": "全選"
+ },
+ "editor": {
+ "label": "編輯器",
+ "copy": "將代碼片段複製至剪貼板",
+ "format": "格式化",
+ "previewMarkdown": "預覽 Markdown",
+ "previewCode": "預覽 HTML 和 CSS",
+ "previewScreenshot": "生成並預覽代碼截圖"
+ }
+}
\ No newline at end of file
diff --git a/src/main/services/i18n/locales/zh_HK/preferences.json b/src/main/services/i18n/locales/zh_HK/preferences.json
new file mode 100644
index 00000000..9ecc0583
--- /dev/null
+++ b/src/main/services/i18n/locales/zh_HK/preferences.json
@@ -0,0 +1,44 @@
+{
+ "title": "首選項",
+ "storage": {
+ "label": "存儲路徑",
+ "migrate": "遷移",
+ "count": "總計"
+ },
+ "editor": {
+ "label": "編輯器",
+ "fontSize": "字體大小",
+ "fontFamily": "字體系列",
+ "wrap": {
+ "label": "自動換行",
+ "wordWrap": "開啓",
+ "off": "關閉"
+ },
+ "tabSize": "Tab 空格數",
+ "showInvisibles": "顯示空格與換行符",
+ "highlightLine": "高亮光標所在行整行",
+ "highlightGutter": "高亮光標所在行行號",
+ "prettier": {
+ "label": "Prettier",
+ "trailingComma": {
+ "label": "尾後逗號",
+ "none": "None",
+ "all": "All",
+ "es6": "ES6"
+ },
+ "semi": "句尾添加分號",
+ "singleQuote": "使用單引號代替雙引號"
+ }
+ },
+ "appearance": {
+ "label": "外觀",
+ "theme": {
+ "label": "主題",
+ "light": "淺色",
+ "dark": "深色"
+ }
+ },
+ "language": {
+ "label": "語言"
+ }
+}
\ No newline at end of file
diff --git a/src/main/services/i18n/locales/zh_HK/special.json b/src/main/services/i18n/locales/zh_HK/special.json
new file mode 100644
index 00000000..ac6ab2b0
--- /dev/null
+++ b/src/main/services/i18n/locales/zh_HK/special.json
@@ -0,0 +1,24 @@
+{
+ "description": {
+ "storage": "要使用 iCloud Drive、Google Drive 和 Dropbox 等同步服務,只需將存儲路徑設置為相應的同步文件夾即可。",
+ "migrate": {
+ "1": "從 massCode v1.0 遷移:選擇包含數據庫文件的文件夾。",
+ "2": "從 SnippetsLab 遷移:選擇 JSON 文件。",
+ "3": [
+ "從 SnippetsLab 遷移將會遇到一些侷限:",
+ "所有的文件夾將是第一層,因為 JSON 文件(低於 v2.1)無法表示嵌套的文件夾。",
+ "某些片段可能會因為其語言暫時不被 massCode 而被識別為純文本。"
+ ]
+ },
+ "htmlCssPreview": "添加帶有 HTML 和 CSS 語言的片段來查看預覽結果。"
+ },
+ "success": {
+ "migrate": "數據庫遷移成功。"
+ },
+ "error": {
+ "folderNotContainDb": "文件夾內不存在 \"db.json\"。"
+ },
+ "unsponsored": "未贊助的",
+ "supportMessage": "Hi,我是 Anton 👋
\n感謝你使用 massCode 。如果你覺得這個應用很有幫助,請{{-tagStart}} 捐贈 {{-tagEnd}}。這將激勵我繼續開發這個項目。",
+ "snippetsShowcase": "代碼片段展示區"
+}
\ No newline at end of file
diff --git a/src/main/services/i18n/locales/zh_TW/common.json b/src/main/services/i18n/locales/zh_TW/common.json
new file mode 100644
index 00000000..4c72c0cc
--- /dev/null
+++ b/src/main/services/i18n/locales/zh_TW/common.json
@@ -0,0 +1,56 @@
+{
+ "button": {
+ "moveStorage": "更改儲存路徑",
+ "openStorage": "開啟現有儲存",
+ "fromMassCodeV1": "來自 massCode v1.0",
+ "fromSnippetsLab": "來自 SnippetsLab",
+ "confirm": "確認",
+ "cancel": "取消",
+ "update": ["前往 GitHub", "OK"]
+ },
+ "newFolder": "新建資料夾",
+ "newSnippet": "新建程式碼片段",
+ "newFragment": "新建子片段",
+ "addDescription": "新增描述",
+ "addToFavorites": "新增至收藏夾",
+ "addTag": "新增標籤",
+ "rename": "重新命名",
+ "duplicate": "建立副本",
+ "delete": "刪除",
+ "deleteNow": "立即刪除",
+ "defaultLanguage": "預設語言",
+ "removeFromFavorites": "從收藏夾移除",
+ "emptyTrash": "清空回收站",
+ "close": "關閉",
+ "folder": {
+ "untitled": "未命名資料夾",
+ "plural": "資料夾"
+ },
+ "snippet": {
+ "untitled": "未命名程式碼片段",
+ "plural": "程式碼片段",
+ "emptyName": "請輸入該程式碼片段名稱",
+ "selectedMultiple": "已選中 {{count}} 個程式碼片段",
+ "noSelected": "未選中程式碼片段"
+ },
+ "fragment": "子片段",
+ "search": "搜尋",
+ "line": "行",
+ "column": "列",
+ "sidebar": {
+ "inbox": "暫存區",
+ "favorites": "收藏夾",
+ "allSnippets": "所有的",
+ "trash": "回收站",
+ "untitled": "未命名資料夾",
+ "folders": "自定義資料夾",
+ "library": "庫",
+ "tags": "標籤"
+ },
+ "darkMode": "深色模式",
+ "background": "背景",
+ "restartApp": "重啟 massCode",
+ "updateAvailable": "存在新版本",
+ "hide": "隱藏",
+ "show": "顯示"
+}
\ No newline at end of file
diff --git a/src/main/services/i18n/locales/zh_TW/dialog.json b/src/main/services/i18n/locales/zh_TW/dialog.json
new file mode 100644
index 00000000..7c9506e1
--- /dev/null
+++ b/src/main/services/i18n/locales/zh_TW/dialog.json
@@ -0,0 +1,12 @@
+{
+ "deleteConfirm": "你是否確定要永久刪除 {{name}} ?",
+ "deleteConfirmMultipleSnippets": "你是否確定要永久刪除 {{count}} 個選中的程式碼片段?",
+ "noUndo": "本操作將無法撤銷。",
+ "allSnippetsMoveToTrash": "本資料夾內的所有程式碼片段將被移動至回收站。",
+ "deleteTag": "將會從所有擁有該標籤的程式碼片段中刪除該標籤。",
+ "emptyTrash": "你是否確定要永久刪除回收站內的所有程式碼片段?",
+ "migrateConfirm": [
+ "你是否確定要從 {{name}} 遷移資料?",
+ "在遷移過程中,當前的庫將被覆蓋。"
+ ]
+}
\ No newline at end of file
diff --git a/src/main/services/i18n/locales/zh_TW/menu.json b/src/main/services/i18n/locales/zh_TW/menu.json
new file mode 100644
index 00000000..7eb195e4
--- /dev/null
+++ b/src/main/services/i18n/locales/zh_TW/menu.json
@@ -0,0 +1,68 @@
+{
+ "app": {
+ "label": "massCode",
+ "preferences": "首選項",
+ "update": {
+ "label": "檢查更新…",
+ "message": "新版本 {{newVersion}} 現在已經可以下載。\n現在的版本是 {{oldVersion}} 。",
+ "button": ["前往 GitHub", "OK"],
+ "noUpdate": "當前沒有可用的更新。"
+ },
+ "quit": "退出 massCode",
+ "about": "關於 massCode",
+ "hide": "最小化 massCode",
+ "hideOther": "最小化其它視窗",
+ "showAll": "顯示所有視窗"
+ },
+ "help": {
+ "label": "幫助",
+ "website": "訪問官網",
+ "documentation": "訪問文件",
+ "viewInGitHub": "訪問 GitHub",
+ "changeLog": "更新日誌",
+ "reportIssue": "提交 Issue",
+ "giveStar": "給個 Star",
+ "extension": {
+ "vscode": "VS Code 外掛",
+ "raycast": "Raycast 外掛",
+ "alfred": "Alfred 外掛"
+ },
+ "donate": {
+ "openCollective": "透過 Open Collective 捐贈",
+ "payPal": "透過 PayPal 捐贈"
+ },
+ "twitter": "訪問作者 Twitter",
+ "devTools": "開發者工具"
+ },
+ "file": {
+ "label": "檔案",
+ "find": "查詢"
+ },
+ "view": {
+ "label": "檢視",
+ "sortBy": {
+ "label": "排序方式",
+ "dateModified": "根據修改日期",
+ "dateCreated": "根據建立日期",
+ "name": "根據片段名"
+ }
+ },
+ "edit": {
+ "label": "編輯",
+ "undo": "撤銷",
+ "redo": "恢復",
+ "cut": "剪下",
+ "copy": "複製",
+ "paste": "貼上",
+ "delete": "刪除",
+ "selectAll": "全選"
+ },
+ "editor": {
+ "label": "編輯器",
+ "copy": "將程式碼片段複製至剪貼簿",
+ "format": "格式化",
+ "previewMarkdown": "預覽 Markdown",
+ "previewCode": "預覽 HTML 和 CSS",
+ "previewScreenshot": "生成並預覽程式碼截圖"
+ }
+}
\ No newline at end of file
diff --git a/src/main/services/i18n/locales/zh_TW/preferences.json b/src/main/services/i18n/locales/zh_TW/preferences.json
new file mode 100644
index 00000000..80954f4d
--- /dev/null
+++ b/src/main/services/i18n/locales/zh_TW/preferences.json
@@ -0,0 +1,44 @@
+{
+ "title": "首選項",
+ "storage": {
+ "label": "儲存路徑",
+ "migrate": "遷移",
+ "count": "總計"
+ },
+ "editor": {
+ "label": "編輯器",
+ "fontSize": "字型大小",
+ "fontFamily": "字型系列",
+ "wrap": {
+ "label": "自動換行",
+ "wordWrap": "開啟",
+ "off": "關閉"
+ },
+ "tabSize": "Tab 空格數",
+ "showInvisibles": "顯示空格與換行符",
+ "highlightLine": "高亮游標所在行整行",
+ "highlightGutter": "高亮游標所在行行號",
+ "prettier": {
+ "label": "Prettier",
+ "trailingComma": {
+ "label": "尾後逗號",
+ "none": "None",
+ "all": "All",
+ "es6": "ES6"
+ },
+ "semi": "句尾新增分號",
+ "singleQuote": "使用單引號代替雙引號"
+ }
+ },
+ "appearance": {
+ "label": "外觀",
+ "theme": {
+ "label": "主題",
+ "light": "淺色",
+ "dark": "深色"
+ }
+ },
+ "language": {
+ "label": "語言"
+ }
+}
\ No newline at end of file
diff --git a/src/main/services/i18n/locales/zh_TW/special.json b/src/main/services/i18n/locales/zh_TW/special.json
new file mode 100644
index 00000000..ea5d5831
--- /dev/null
+++ b/src/main/services/i18n/locales/zh_TW/special.json
@@ -0,0 +1,24 @@
+{
+ "description": {
+ "storage": "要使用 iCloud Drive、Google Drive 和 Dropbox 等同步服務,只需將儲存路徑設定為相應的同步資料夾即可。",
+ "migrate": {
+ "1": "從 massCode v1.0 遷移:選擇包含資料庫檔案的資料夾。",
+ "2": "從 SnippetsLab 遷移:選擇 JSON 檔案。",
+ "3": [
+ "從SnippetsLab遷移將會遇到一些侷限:",
+ "所有的資料夾將是第一層,因為 JSON 檔案(低於 v2.1)無法表示巢狀的資料夾。",
+ "某些片段可能會因為其語言暫時不被 massCode 而被識別為純文字。"
+ ]
+ },
+ "htmlCssPreview": "新增帶有 HTML 和 CSS 語言的片段來檢視預覽結果。"
+ },
+ "success": {
+ "migrate": "資料庫遷移成功。"
+ },
+ "error": {
+ "folderNotContainDb": "資料夾內不存在 \"db.json\"。"
+ },
+ "unsponsored": "未贊助的",
+ "supportMessage": "Hi,我是 Anton 👋
\n感謝你使用 massCode 。如果你覺得這個應用很有幫助,請{{-tagStart}} 捐贈 {{-tagEnd}}。這將激勵我繼續開發這個專案。",
+ "snippetsShowcase": "程式碼片段展示區"
+}
\ No newline at end of file
diff --git a/src/renderer/components/preferences/LanguagePreferences.vue b/src/renderer/components/preferences/LanguagePreferences.vue
index 58ea44b7..9b80a91a 100644
--- a/src/renderer/components/preferences/LanguagePreferences.vue
+++ b/src/renderer/components/preferences/LanguagePreferences.vue
@@ -41,16 +41,24 @@ const localValue = computed({
const options = [
{
- label: i18n.t('preferences:language.en'),
+ label: i18n.t('language:en'),
value: 'en'
},
{
- label: i18n.t('preferences:language.ru'),
+ label: i18n.t('language:ru'),
value: 'ru'
},
{
- label: i18n.t('preferences:language.zh_CN'),
+ label: i18n.t('language:zh_CN'),
value: 'zh_CN'
+ },
+ {
+ label: i18n.t('language:zh_TW'),
+ value: 'zh_TW'
+ },
+ {
+ label: i18n.t('language:zh_HK'),
+ value: 'zh_HK'
}
]