aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-11-11 19:50:31 +0800
committercrupest <crupest@outlook.com>2020-11-11 19:50:31 +0800
commit3652e1c69f12b90b155bc73c3fe5a2ace9caf26c (patch)
treef179e87c39f5a966045cc57a1fc9cae1ceca7bcf
parente276e62456c3a89f9541976e05260ac7ef4a8798 (diff)
downloadtimeline-3652e1c69f12b90b155bc73c3fe5a2ace9caf26c.tar.gz
timeline-3652e1c69f12b90b155bc73c3fe5a2ace9caf26c.tar.bz2
timeline-3652e1c69f12b90b155bc73c3fe5a2ace9caf26c.zip
refactor: Refactor i18n.
-rw-r--r--FrontEnd/src/app/i18n.ts8
-rw-r--r--FrontEnd/src/app/locales/en/translation.json183
-rw-r--r--FrontEnd/src/app/locales/en/translation.ts203
-rw-r--r--FrontEnd/src/app/locales/scheme.ts183
-rw-r--r--FrontEnd/src/app/locales/zh/translation.json183
-rw-r--r--FrontEnd/src/app/locales/zh/translation.ts196
6 files changed, 370 insertions, 586 deletions
diff --git a/FrontEnd/src/app/i18n.ts b/FrontEnd/src/app/i18n.ts
index aeac1f1f..c39888ed 100644
--- a/FrontEnd/src/app/i18n.ts
+++ b/FrontEnd/src/app/i18n.ts
@@ -18,10 +18,10 @@ const backend: BackendModule = {
}
if (language === "en") {
- const res = (await import("./locales/en/translation")).default;
+ const res = (await import("./locales/en/translation.json")).default;
success(res);
- } else if (language === "zh-cn" || language === "zh") {
- const res = (await import("./locales/zh/translation")).default;
+ } else if (language === "zh") {
+ const res = (await import("./locales/zh/translation.json")).default;
success(res);
} else {
error(`Language ${language} is not supported.`);
@@ -61,7 +61,7 @@ export const i18nPromise = i18n
if (module.hot) {
module.hot.accept(
- ["./locales/en/translation", "./locales/zh/translation"],
+ ["./locales/en/translation.json", "./locales/zh/translation.json"],
() => {
void i18n.reloadResources();
}
diff --git a/FrontEnd/src/app/locales/en/translation.json b/FrontEnd/src/app/locales/en/translation.json
new file mode 100644
index 00000000..662a1aac
--- /dev/null
+++ b/FrontEnd/src/app/locales/en/translation.json
@@ -0,0 +1,183 @@
+{
+ "welcome": "Welcome!",
+ "search": "Search",
+ "loadFailReload": "Load failed, click <1>here</1> to reload.",
+ "serviceWorker": {
+ "availableOffline": "Timeline is now cached in your computer and you can use it offline. 🎉🎉🎉",
+ "upgradePrompt": "App is getting a new version!",
+ "upgradeNow": "Update Now",
+ "upgradeSuccess": "Congratulations! App update succeeded! Still you can use it offline. 🎉🎉🎉",
+ "externalActivatedPrompt": "A new version of app is activated. Please refresh the page. Or it may be broken.",
+ "reloadNow": "Refresh Now"
+ },
+ "nav": {
+ "settings": "Settings",
+ "login": "Login",
+ "about": "About"
+ },
+ "chooseImage": "Choose a image",
+ "loadImageError": "Failed to load image.",
+ "home": {
+ "go": "Go!",
+ "allTimeline": "All Timelines",
+ "joinTimeline": "Joined Timelines",
+ "ownTimeline": "Owned Timelines",
+ "offlinePrompt": "Oh oh, it seems you are offline. Here list some timelines cached locally. You can view them or click <1>here</1> to refresh.",
+ "createButton": "Create Timeline",
+ "createDialog": {
+ "title": "Create Timeline!",
+ "name": "Name",
+ "nameFormat": "Name must consist of only letter including non-English letter, digit, hyphen(-) and underline(_) and be no longer than 26.",
+ "badFormat": "Bad format.",
+ "noEmpty": "Empty is not allowed.",
+ "tooLong": "Too long."
+ }
+ },
+ "operationDialog": {
+ "retry": "Retry",
+ "nextStep": "Next",
+ "previousStep": "Previous",
+ "confirm": "Confirm",
+ "cancel": "Cancel",
+ "ok": "OK!",
+ "processing": "Processing...",
+ "success": "Success!",
+ "error": "An error occured."
+ },
+ "timeline": {
+ "messageCantSee": "Sorry, you are not allowed to see this timeline.😅",
+ "userNotExist": "The user does not exist!",
+ "timelineNotExist": "The timeline does not exist!",
+ "manage": "Manage",
+ "memberButton": "Member",
+ "send": "Send",
+ "deletePostFailed": "Failed to delete post.",
+ "sendPostFailed": "Failed to send post.",
+ "visibility": {
+ "public": "public to everyone",
+ "register": "only registed people can see",
+ "private": "only members can see"
+ },
+ "visibilityTooltip": {
+ "public": "Everyone including those without accounts can see content of the timeline.",
+ "register": "Only those who have an account and logined can see content of the timeline.",
+ "private": "Only members of this timeline can see content of the timeline."
+ },
+ "dialogChangeProperty": {
+ "title": "Change Timeline Properties",
+ "titleField": "Title",
+ "visibility": "Visibility",
+ "description": "Description"
+ },
+ "member": {
+ "alreadyMember": "The user is already a member.",
+ "add": "Add",
+ "remove": "Remove"
+ },
+ "manageItem": {
+ "nickname": "Nickname",
+ "avatar": "Avatar",
+ "property": "Timeline Property",
+ "member": "Timeline Member",
+ "delete": "Delete Timeline"
+ },
+ "deleteDialog": {
+ "title": "Delete Timeline",
+ "inputPrompt": "This is a dangerous action. If you are sure to delete timeline<1>{{name}}</1>, please input its name below and click confirm button.",
+ "notMatch": "Name does not match."
+ },
+ "postSyncState": {
+ "syncing": "Syncing",
+ "synced": "Synced",
+ "offline": "Offline"
+ },
+ "post": {
+ "deleteDialog": {
+ "title": "Confirm Delete",
+ "prompt": "Are you sure to delete the post? This operation is not recoverable."
+ }
+ }
+ },
+ "user": {
+ "username": "username",
+ "password": "password",
+ "login": "login",
+ "rememberMe": "Remember Me",
+ "welcomeBack": "Welcome back!",
+ "verifyTokenFailed": "User login info is expired. Please login again!",
+ "verifyTokenFailedNetwork": "Verifying user login info failed. Please check your network and refresh page!"
+ },
+ "login": {
+ "emptyUsername": "Username can't be empty.",
+ "emptyPassword": "Password can't be empty.",
+ "badCredential": "Username or password is invalid.",
+ "alreadyLogin": "Already login! Redirect to home page in 3s!"
+ },
+ "userPage": {
+ "dialogChangeNickname": {
+ "title": "Change Nickname",
+ "inputLabel": "New nickname"
+ },
+ "dialogChangeAvatar": {
+ "title": "Change Avatar",
+ "previewImgAlt": "preview",
+ "prompt": {
+ "select": "Please select a picture.",
+ "crop": "Please crop the picture.",
+ "processingCrop": "Cropping picture...",
+ "uploading": "Uploading...",
+ "preview": "Please preview avatar"
+ },
+ "upload": "upload"
+ }
+ },
+ "settings": {
+ "subheaders": {
+ "account": "Account",
+ "customization": "Customization"
+ },
+ "languagePrimary": "Choose display language.",
+ "languageSecondary": "You language preference will be saved locally. Next time you visit this page, last language option will be used.",
+ "changePassword": "Change account's password.",
+ "logout": "Log out this account.",
+ "gotoSelf": "Click here to go to timeline of myself to change nickname and avatar.",
+ "dialogChangePassword": {
+ "title": "Change Password",
+ "prompt": "You are changing your password. You need to input the correct old password. After change, you need to login again and all old login will be invalid.",
+ "inputOldPassword": "Old password",
+ "inputNewPassword": "New password",
+ "inputRetypeNewPassword": "Retype new password",
+ "errorEmptyOldPassword": "Old password can't be empty.",
+ "errorEmptyNewPassword": "New password can't be empty.",
+ "errorRetypeNotMatch": "Password retyped does not match."
+ },
+ "dialogConfirmLogout": {
+ "title": "Confirm Logout",
+ "prompt": "Are you sure to log out? All cached data in the browser will be deleted."
+ }
+ },
+ "about": {
+ "author": {
+ "title": "Site Developer",
+ "fullname": "Fullname: ",
+ "nickname": "Nickname: ",
+ "introduction": "Introduction: ",
+ "introductionContent": "A programmer coding based on coincidence",
+ "links": "Links: "
+ },
+ "site": {
+ "title": "Site Information",
+ "content": "The name of this site is <1>Timeline</1>, which is a Web App with <3>timeline</3> as its core concept. Its frontend and backend are both developed by <5>me</5>, and open source on GitHub. It is relatively easy to deploy it on your own server, which is also one of my goals. Welcome to comment anything in GitHub repository.",
+ "repo": "GitHub Repo"
+ },
+ "credits": {
+ "title": "Credits",
+ "content": "Timeline is works standing on shoulders of gaints. Special appreciation for many open source projects listed below or not. Related licenses could be found in GitHub repository.",
+ "frontend": "Frontend: ",
+ "backend": "Backend: "
+ }
+ },
+ "admin": {
+ "title": "admin"
+ }
+}
diff --git a/FrontEnd/src/app/locales/en/translation.ts b/FrontEnd/src/app/locales/en/translation.ts
deleted file mode 100644
index d88a3376..00000000
--- a/FrontEnd/src/app/locales/en/translation.ts
+++ /dev/null
@@ -1,203 +0,0 @@
-import TranslationResource from "../scheme";
-
-const translation: TranslationResource = {
- welcome: "Welcome!",
- search: "Search",
- loadFailReload: "Load failed, click <1>here</1> to reload.",
- serviceWorker: {
- availableOffline:
- "Timeline is now cached in your computer and you can use it offline. 🎉🎉🎉",
- upgradePrompt: "App is getting a new version!",
- upgradeNow: "Update Now",
- upgradeSuccess:
- "Congratulations! App update succeeded! Still you can use it offline. 🎉🎉🎉",
- externalActivatedPrompt:
- "A new version of app is activated. Please refresh the page. Or it may be broken.",
- reloadNow: "Refresh Now",
- },
- nav: {
- settings: "Settings",
- login: "Login",
- about: "About",
- },
- chooseImage: "Choose a image",
- loadImageError: "Failed to load image.",
- home: {
- go: "Go!",
- allTimeline: "All Timelines",
- joinTimeline: "Joined Timelines",
- ownTimeline: "Owned Timelines",
- offlinePrompt:
- "Oh oh, it seems you are offline. Here list some timelines cached locally. You can view them or click <1>here</1> to refresh.",
- createButton: "Create Timeline",
- createDialog: {
- title: "Create Timeline!",
- name: "Name",
- nameFormat:
- "Name must consist of only letter including non-English letter, digit, hyphen(-) and underline(_) and be no longer than 26.",
- badFormat: "Bad format.",
- noEmpty: "Empty is not allowed.",
- tooLong: "Too long.",
- },
- },
- operationDialog: {
- retry: "Retry",
- nextStep: "Next",
- previousStep: "Previous",
- confirm: "Confirm",
- cancel: "Cancel",
- ok: "OK!",
- processing: "Processing...",
- success: "Success!",
- error: "An error occured.",
- },
- timeline: {
- messageCantSee: "Sorry, you are not allowed to see this timeline.😅",
- userNotExist: "The user does not exist!",
- timelineNotExist: "The timeline does not exist!",
- manage: "Manage",
- memberButton: "Member",
- send: "Send",
- deletePostFailed: "Failed to delete post.",
- sendPostFailed: "Failed to send post.",
- visibility: {
- public: "public to everyone",
- register: "only registed people can see",
- private: "only members can see",
- },
- visibilityTooltip: {
- public:
- "Everyone including those without accounts can see content of the timeline.",
- register:
- "Only those who have an account and logined can see content of the timeline.",
- private: "Only members of this timeline can see content of the timeline.",
- },
- dialogChangeProperty: {
- title: "Change Timeline Properties",
- titleField: "Title",
- visibility: "Visibility",
- description: "Description",
- },
- member: {
- alreadyMember: "The user is already a member.",
- add: "Add",
- remove: "Remove",
- },
- manageItem: {
- nickname: "Nickname",
- avatar: "Avatar",
- property: "Timeline Property",
- member: "Timeline Member",
- delete: "Delete Timeline",
- },
- deleteDialog: {
- title: "Delete Timeline",
- inputPrompt:
- "This is a dangerous action. If you are sure to delete timeline<1>{{name}}</1>, please input its name below and click confirm button.",
- notMatch: "Name does not match.",
- },
- postSyncState: {
- syncing: "Syncing",
- synced: "Synced",
- offline: "Offline",
- },
- post: {
- deleteDialog: {
- title: "Confirm Delete",
- prompt:
- "Are you sure to delete the post? This operation is not recoverable.",
- },
- },
- },
- user: {
- username: "username",
- password: "password",
- login: "login",
- rememberMe: "Remember Me",
- welcomeBack: "Welcome back!",
- verifyTokenFailed: "User login info is expired. Please login again!",
- verifyTokenFailedNetwork:
- "Verifying user login info failed. Please check your network and refresh page!",
- },
- login: {
- emptyUsername: "Username can't be empty.",
- emptyPassword: "Password can't be empty.",
- badCredential: "Username or password is invalid.",
- alreadyLogin: "Already login! Redirect to home page in 3s!",
- },
- userPage: {
- dialogChangeNickname: {
- title: "Change Nickname",
- inputLabel: "New nickname",
- },
- dialogChangeAvatar: {
- title: "Change Avatar",
- previewImgAlt: "preview",
- prompt: {
- select: "Please select a picture.",
- crop: "Please crop the picture.",
- processingCrop: "Cropping picture...",
- uploading: "Uploading...",
- preview: "Please preview avatar",
- },
- upload: "upload",
- },
- },
- settings: {
- subheaders: {
- account: "Account",
- customization: "Customization",
- },
- languagePrimary: "Choose display language.",
- languageSecondary:
- "You language preference will be saved locally. Next time you visit this page, last language option will be used.",
- changePassword: "Change account's password.",
- logout: "Log out this account.",
- gotoSelf:
- "Click here to go to timeline of myself to change nickname and avatar.",
- dialogChangePassword: {
- title: "Change Password",
- prompt:
- "You are changing your password. You need to input the correct old password. After change, you need to login again and all old login will be invalid.",
- inputOldPassword: "Old password",
- inputNewPassword: "New password",
- inputRetypeNewPassword: "Retype new password",
- errorEmptyOldPassword: "Old password can't be empty.",
- errorEmptyNewPassword: "New password can't be empty.",
- errorRetypeNotMatch: "Password retyped does not match.",
- },
- dialogConfirmLogout: {
- title: "Confirm Logout",
- prompt:
- "Are you sure to log out? All cached data in the browser will be deleted.",
- },
- },
- about: {
- author: {
- title: "Site Developer",
- fullname: "Fullname: ",
- nickname: "Nickname: ",
- introduction: "Introduction: ",
- introductionContent: "A programmer coding based on coincidence",
- links: "Links: ",
- },
- site: {
- title: "Site Information",
- content:
- "The name of this site is <1>Timeline</1>, which is a Web App with <3>timeline</3> as its core concept. Its frontend and backend are both developed by <5>me</5>, and open source on GitHub. It is relatively easy to deploy it on your own server, which is also one of my goals. Welcome to comment anything in GitHub repository.",
- repo: "GitHub Repo",
- },
- credits: {
- title: "Credits",
- content:
- "Timeline is works standing on shoulders of gaints. Special appreciation for many open source projects listed below or not. Related licenses could be found in GitHub repository.",
- frontend: "Frontend: ",
- backend: "Backend: ",
- },
- },
- admin: {
- title: "admin",
- },
-};
-
-export default translation;
diff --git a/FrontEnd/src/app/locales/scheme.ts b/FrontEnd/src/app/locales/scheme.ts
deleted file mode 100644
index dcb478cc..00000000
--- a/FrontEnd/src/app/locales/scheme.ts
+++ /dev/null
@@ -1,183 +0,0 @@
-export default interface TranslationResource {
- welcome: string;
- search: string;
- chooseImage: string;
- loadImageError: string;
- loadFailReload: string;
- serviceWorker: {
- availableOffline: string;
- upgradePrompt: string;
- upgradeNow: string;
- upgradeSuccess: string;
- externalActivatedPrompt: string;
- reloadNow: string;
- };
- nav: {
- settings: string;
- login: string;
- about: string;
- };
- home: {
- go: string;
- allTimeline: string;
- joinTimeline: string;
- ownTimeline: string;
- offlinePrompt: string;
- createButton: string;
- createDialog: {
- title: string;
- name: string;
- nameFormat: string;
- badFormat: string;
- noEmpty: string;
- tooLong: string;
- };
- };
- operationDialog: {
- retry: string;
- nextStep: string;
- previousStep: string;
- confirm: string;
- cancel: string;
- ok: string;
- processing: string;
- success: string;
- error: string;
- };
- timeline: {
- messageCantSee: string;
- userNotExist: string;
- timelineNotExist: string;
- manage: string;
- memberButton: string;
- send: string;
- deletePostFailed: string;
- sendPostFailed: string;
- visibility: {
- public: string;
- register: string;
- private: string;
- };
- visibilityTooltip: {
- public: string;
- register: string;
- private: string;
- };
- dialogChangeProperty: {
- title: string;
- titleField: string;
- visibility: string;
- description: string;
- };
- member: {
- alreadyMember: string;
- add: string;
- remove: string;
- };
- manageItem: {
- nickname: string;
- avatar: string;
- property: string;
- member: string;
- delete: string;
- };
- deleteDialog: {
- title: string;
- inputPrompt: string;
- notMatch: string;
- };
- postSyncState: {
- syncing: string;
- synced: string;
- offline: string;
- };
- post: {
- deleteDialog: {
- title: string;
- prompt: string;
- };
- };
- };
- user: {
- username: string;
- password: string;
- login: string;
- rememberMe: string;
- welcomeBack: string;
- verifyTokenFailed: string;
- verifyTokenFailedNetwork: string;
- };
- login: {
- emptyUsername: string;
- emptyPassword: string;
- badCredential: string;
- alreadyLogin: string;
- };
- userPage: {
- dialogChangeNickname: {
- title: string;
- inputLabel: string;
- };
- dialogChangeAvatar: {
- title: string;
- previewImgAlt: string;
- prompt: {
- select: string;
- crop: string;
- processingCrop: string;
- preview: string;
- uploading: string;
- };
- upload: string;
- };
- };
- settings: {
- subheaders: {
- account: string;
- customization: string;
- };
- languagePrimary: string;
- languageSecondary: string;
- changePassword: string;
- logout: string;
- gotoSelf: string;
- dialogChangePassword: {
- title: string;
- prompt: string;
- inputOldPassword: string;
- inputNewPassword: string;
- inputRetypeNewPassword: string;
- errorEmptyOldPassword: string;
- errorEmptyNewPassword: string;
- errorRetypeNotMatch: string;
- };
- dialogConfirmLogout: {
- title: string;
- prompt: string;
- };
- };
- about: {
- author: {
- title: string;
- fullname: string;
- nickname: string;
- introduction: string;
- introductionContent: string;
- links: string;
- };
- site: {
- title: string;
- content: string;
- repo: string;
- };
- credits: {
- title: string;
- content: string;
- frontend: string;
- backend: string;
- };
- };
- admin: {
- title: string;
- };
-}
diff --git a/FrontEnd/src/app/locales/zh/translation.json b/FrontEnd/src/app/locales/zh/translation.json
new file mode 100644
index 00000000..ecd1df4b
--- /dev/null
+++ b/FrontEnd/src/app/locales/zh/translation.json
@@ -0,0 +1,183 @@
+{
+ "welcome": "欢迎!",
+ "search": "搜索",
+ "loadFailReload": "加载失败,<1>点击</1>重试。",
+ "serviceWorker": {
+ "availableOffline": "Timeline 已经缓存在本地,你可以离线使用它。🎉🎉🎉",
+ "upgradePrompt": "App 有新版本!",
+ "upgradeNow": "现在升级",
+ "upgradeSuccess": "App 升级成功,当然,你仍可以离线使用它。 🎉🎉🎉",
+ "externalActivatedPrompt": "一个新的 App 版本已经激活,请刷新页面使用,否则页面可能会出现故障。",
+ "reloadNow": "立刻刷新"
+ },
+ "nav": {
+ "settings": "设置",
+ "login": "登陆",
+ "about": "关于"
+ },
+ "chooseImage": "选择一个图片",
+ "loadImageError": "加载图片失败",
+ "home": {
+ "go": "冲!",
+ "allTimeline": "所有的时间线",
+ "joinTimeline": "加入的时间线",
+ "ownTimeline": "拥有的时间线",
+ "offlinePrompt": "你好像处于离线状态。以下是一些缓存在本地的时间线。你可以查看它们或者<1>点击</1>重新获取在线信息。",
+ "createButton": "创建时间线",
+ "createDialog": {
+ "title": "创建时间线!",
+ "name": "名字",
+ "nameFormat": "名字只能由字母、汉字、数字、下划线(_)和连字符(-)构成,且长度不能超过26.",
+ "badFormat": "格式错误",
+ "noEmpty": "不能为空",
+ "tooLong": "太长了"
+ }
+ },
+ "operationDialog": {
+ "retry": "重试",
+ "nextStep": "下一步",
+ "previousStep": "上一步",
+ "confirm": "确定",
+ "cancel": "取消",
+ "ok": "好的!",
+ "processing": "处理中...",
+ "success": "成功!",
+ "error": "出错啦!"
+ },
+ "timeline": {
+ "messageCantSee": "不好意思,你没有权限查看这个时间线。😅",
+ "userNotExist": "该用户不存在!",
+ "timelineNotExist": "该时间线不存在!",
+ "manage": "管理",
+ "memberButton": "成员",
+ "send": "发送",
+ "deletePostFailed": "删除消息失败。",
+ "sendPostFailed": "发送消息失败。",
+ "visibility": {
+ "public": "对所有人公开",
+ "register": "仅注册可见",
+ "private": "仅成员可见"
+ },
+ "visibilityTooltip": {
+ "public": "所有人都可以看到这个时间线的内容,包括没有注册的人。",
+ "register": "只有拥有本网站的账号且登陆了的人才能看到这个时间线的内容。",
+ "private": "只有这个时间线的成员可以看到这个时间线的内容。"
+ },
+ "dialogChangeProperty": {
+ "title": "修改时间线属性",
+ "titleField": "标题",
+ "visibility": "可见性",
+ "description": "描述"
+ },
+ "member": {
+ "alreadyMember": "该用户已经是一个成员。",
+ "add": "添加",
+ "remove": "移除"
+ },
+ "manageItem": {
+ "nickname": "昵称",
+ "avatar": "头像",
+ "property": "时间线属性",
+ "member": "时间线成员",
+ "delete": "删除时间线"
+ },
+ "deleteDialog": {
+ "title": "删除时间线",
+ "inputPrompt": "这是一个危险的操作。如果您确认要删除时间线<1>{{name}}</1>,请在下面输入它的名字并点击确认。",
+ "notMatch": "名字不匹配"
+ },
+ "postSyncState": {
+ "syncing": "同步中",
+ "synced": "同步成功",
+ "offline": "离线"
+ },
+ "post": {
+ "deleteDialog": {
+ "title": "确认删除",
+ "prompt": "确定删除这个消息?这个操作不可撤销。"
+ }
+ }
+ },
+ "user": {
+ "username": "用户名",
+ "password": "密码",
+ "login": "登录",
+ "rememberMe": "记住我",
+ "welcomeBack": "欢迎回来!",
+ "verifyTokenFailed": "用户登录信息已过期,请重新登陆!",
+ "verifyTokenFailedNetwork": "验证用户登录信息失败,请检查网络连接并刷新页面!"
+ },
+ "login": {
+ "emptyUsername": "用户名不能为空。",
+ "emptyPassword": "密码不能为空。",
+ "badCredential": "用户名或密码错误。",
+ "alreadyLogin": "已经登陆,三秒后导航到首页!"
+ },
+ "userPage": {
+ "dialogChangeNickname": {
+ "title": "更改昵称",
+ "inputLabel": "新昵称"
+ },
+ "dialogChangeAvatar": {
+ "title": "修改头像",
+ "previewImgAlt": "预览",
+ "prompt": {
+ "select": "请选择一个图片",
+ "crop": "请裁剪图片",
+ "processingCrop": "正在裁剪图片",
+ "uploading": "正在上传",
+ "preview": "请预览图片"
+ },
+ "upload": "上传"
+ }
+ },
+ "settings": {
+ "subheaders": {
+ "account": "账户",
+ "customization": "个性化"
+ },
+ "languagePrimary": "选择显示的语言。",
+ "languageSecondary": "您的语言偏好将会存储在本地,下次浏览时将自动使用上次保存的语言选项。",
+ "changePassword": "更改账号的密码。",
+ "logout": "注销此账号。",
+ "gotoSelf": "点击前往个人时间线修改昵称和头像!",
+ "dialogChangePassword": {
+ "title": "修改密码",
+ "prompt": "您正在修改密码,您需要输入正确的旧密码。成功修改后您需要重新登陆,而且以前所有的登录都会失效。",
+ "inputOldPassword": "旧密码",
+ "inputNewPassword": "新密码",
+ "inputRetypeNewPassword": "再次输入新密码",
+ "errorEmptyOldPassword": "旧密码不能为空。",
+ "errorEmptyNewPassword": "新密码不能为空",
+ "errorRetypeNotMatch": "两次输入的密码不一致"
+ },
+ "dialogConfirmLogout": {
+ "title": "确定注销",
+ "prompt": "您确定注销此账号?这将删除所有已经缓存在浏览器的数据。"
+ }
+ },
+ "about": {
+ "author": {
+ "title": "网站作者",
+ "fullname": "姓名:",
+ "nickname": "昵称:",
+ "introduction": "简介:",
+ "introductionContent": "一个基于巧合编程的代码爱好者。",
+ "links": "链接:"
+ },
+ "site": {
+ "title": "网站信息",
+ "content": "这个网站的名字叫 <1>Timeline</1>,是一个以<3>时间线</3>为核心概念的 Web App . 它的前端和后端都是由<5>我</5>开发,并且在 GitHub 上开源。大家可以相对轻松的把它们部署在自己的服务器上,这也是我的目标之一。欢迎大家前往 GitHub 仓库提出任何意见。",
+ "repo": "GitHub 仓库"
+ },
+ "credits": {
+ "title": "鸣谢",
+ "content": "Timeline 是站在巨人肩膀上的作品,感谢以下列出的和其他未列出的许多开源项目,相关 License 请在 GitHub 仓库中查看。",
+ "frontend": "前端:",
+ "backend": "后端:"
+ }
+ },
+ "admin": {
+ "title": "管理"
+ }
+}
diff --git a/FrontEnd/src/app/locales/zh/translation.ts b/FrontEnd/src/app/locales/zh/translation.ts
deleted file mode 100644
index 71f0d9fc..00000000
--- a/FrontEnd/src/app/locales/zh/translation.ts
+++ /dev/null
@@ -1,196 +0,0 @@
-import TranslationResource from "../scheme";
-
-const translation: TranslationResource = {
- welcome: "欢迎!",
- search: "搜索",
- loadFailReload: "加载失败,<1>点击</1>重试。",
- serviceWorker: {
- availableOffline: "Timeline 已经缓存在本地,你可以离线使用它。🎉🎉🎉",
- upgradePrompt: "App 有新版本!",
- upgradeNow: "现在升级",
- upgradeSuccess: "App 升级成功,当然,你仍可以离线使用它。 🎉🎉🎉",
- externalActivatedPrompt:
- "一个新的 App 版本已经激活,请刷新页面使用,否则页面可能会出现故障。",
- reloadNow: "立刻刷新",
- },
- nav: {
- settings: "设置",
- login: "登陆",
- about: "关于",
- },
- chooseImage: "选择一个图片",
- loadImageError: "加载图片失败",
- home: {
- go: "冲!",
- allTimeline: "所有的时间线",
- joinTimeline: "加入的时间线",
- ownTimeline: "拥有的时间线",
- offlinePrompt:
- "你好像处于离线状态。以下是一些缓存在本地的时间线。你可以查看它们或者<1>点击</1>重新获取在线信息。",
- createButton: "创建时间线",
- createDialog: {
- title: "创建时间线!",
- name: "名字",
- nameFormat:
- "名字只能由字母、汉字、数字、下划线(_)和连字符(-)构成,且长度不能超过26.",
- badFormat: "格式错误",
- noEmpty: "不能为空",
- tooLong: "太长了",
- },
- },
- operationDialog: {
- retry: "重试",
- nextStep: "下一步",
- previousStep: "上一步",
- confirm: "确定",
- cancel: "取消",
- ok: "好的!",
- processing: "处理中...",
- success: "成功!",
- error: "出错啦!",
- },
- timeline: {
- messageCantSee: "不好意思,你没有权限查看这个时间线。😅",
- userNotExist: "该用户不存在!",
- timelineNotExist: "该时间线不存在!",
- manage: "管理",
- memberButton: "成员",
- send: "发送",
- deletePostFailed: "删除消息失败。",
- sendPostFailed: "发送消息失败。",
- visibility: {
- public: "对所有人公开",
- register: "仅注册可见",
- private: "仅成员可见",
- },
- visibilityTooltip: {
- public: "所有人都可以看到这个时间线的内容,包括没有注册的人。",
- register: "只有拥有本网站的账号且登陆了的人才能看到这个时间线的内容。",
- private: "只有这个时间线的成员可以看到这个时间线的内容。",
- },
- dialogChangeProperty: {
- title: "修改时间线属性",
- titleField: "标题",
- visibility: "可见性",
- description: "描述",
- },
- member: {
- alreadyMember: "该用户已经是一个成员。",
- add: "添加",
- remove: "移除",
- },
- manageItem: {
- nickname: "昵称",
- avatar: "头像",
- property: "时间线属性",
- member: "时间线成员",
- delete: "删除时间线",
- },
- deleteDialog: {
- title: "删除时间线",
- inputPrompt:
- "这是一个危险的操作。如果您确认要删除时间线<1>{{name}}</1>,请在下面输入它的名字并点击确认。",
- notMatch: "名字不匹配",
- },
- postSyncState: {
- syncing: "同步中",
- synced: "同步成功",
- offline: "离线",
- },
- post: {
- deleteDialog: {
- title: "确认删除",
- prompt: "确定删除这个消息?这个操作不可撤销。",
- },
- },
- },
- user: {
- username: "用户名",
- password: "密码",
- login: "登录",
- rememberMe: "记住我",
- welcomeBack: "欢迎回来!",
- verifyTokenFailed: "用户登录信息已过期,请重新登陆!",
- verifyTokenFailedNetwork:
- "验证用户登录信息失败,请检查网络连接并刷新页面!",
- },
- login: {
- emptyUsername: "用户名不能为空。",
- emptyPassword: "密码不能为空。",
- badCredential: "用户名或密码错误。",
- alreadyLogin: "已经登陆,三秒后导航到首页!",
- },
- userPage: {
- dialogChangeNickname: {
- title: "更改昵称",
- inputLabel: "新昵称",
- },
- dialogChangeAvatar: {
- title: "修改头像",
- previewImgAlt: "预览",
- prompt: {
- select: "请选择一个图片",
- crop: "请裁剪图片",
- processingCrop: "正在裁剪图片",
- uploading: "正在上传",
- preview: "请预览图片",
- },
- upload: "上传",
- },
- },
- settings: {
- subheaders: {
- account: "账户",
- customization: "个性化",
- },
- languagePrimary: "选择显示的语言。",
- languageSecondary:
- "您的语言偏好将会存储在本地,下次浏览时将自动使用上次保存的语言选项。",
- changePassword: "更改账号的密码。",
- logout: "注销此账号。",
- gotoSelf: "点击前往个人时间线修改昵称和头像!",
- dialogChangePassword: {
- title: "修改密码",
- prompt:
- "您正在修改密码,您需要输入正确的旧密码。成功修改后您需要重新登陆,而且以前所有的登录都会失效。",
- inputOldPassword: "旧密码",
- inputNewPassword: "新密码",
- inputRetypeNewPassword: "再次输入新密码",
- errorEmptyOldPassword: "旧密码不能为空。",
- errorEmptyNewPassword: "新密码不能为空",
- errorRetypeNotMatch: "两次输入的密码不一致",
- },
- dialogConfirmLogout: {
- title: "确定注销",
- prompt: "您确定注销此账号?这将删除所有已经缓存在浏览器的数据。",
- },
- },
- about: {
- author: {
- title: "网站作者",
- fullname: "姓名:",
- nickname: "昵称:",
- introduction: "简介:",
- introductionContent: "一个基于巧合编程的代码爱好者。",
- links: "链接:",
- },
- site: {
- title: "网站信息",
- content:
- "这个网站的名字叫 <1>Timeline</1>,是一个以<3>时间线</3>为核心概念的 Web App . 它的前端和后端都是由<5>我</5>开发,并且在 GitHub 上开源。大家可以相对轻松的把它们部署在自己的服务器上,这也是我的目标之一。欢迎大家前往 GitHub 仓库提出任何意见。",
- repo: "GitHub 仓库",
- },
- credits: {
- title: "鸣谢",
- content:
- "Timeline 是站在巨人肩膀上的作品,感谢以下列出的和其他未列出的许多开源项目,相关 License 请在 GitHub 仓库中查看。",
- frontend: "前端:",
- backend: "后端:",
- },
- },
- admin: {
- title: "管理",
- },
-};
-
-export default translation;