diff --git a/README.md b/README.md
index b9e1c757..591354cc 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
+[](README.md) | [](README.zh.md)
+
# aw-webui
A web-based UI for ActivityWatch, built with Vue.js
diff --git a/README.zh.md b/README.zh.md
new file mode 100644
index 00000000..c0bf69c6
--- /dev/null
+++ b/README.zh.md
@@ -0,0 +1,32 @@
+[](README.md) | [](README.zh.md)
+
+# aw-webui
+
+ActivityWatch 的 Web 界面,使用 Vue.js 构建
+
+[](https://github.com/ActivityWatch/aw-webui/actions)
+[](https://codecov.io/gh/ActivityWatch/aw-webui)
+[](https://snyk.io/test/github/ActivityWatch/aw-webui)
+
+## 快速开始
+
+设置开发环境非常简单:
+
+```bash
+# 以测试模式启动 aw-server 实例(端口 5666,使用独立数据库)
+# 开发模式下 Web UI 默认连接到此实例
+aw-qt --testing
+# 或不带监控器运行:
+aw-server --testing
+
+# 安装依赖
+npm install
+
+# 以开发模式运行(带有热重载)
+npm run serve
+
+# 构建生产版本
+npm run build
+```
+
+更多详情,请参阅[官方文档](https://docs.activitywatch.net)。
diff --git a/package-lock.json b/package-lock.json
index edbb412a..da880cfe 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -62,6 +62,7 @@
"vue-color": "^2.8.1",
"vue-d3-sunburst": "git+https://github.com/ErikBjare/Vue.D3.sunburst.git#patch-1",
"vue-datetime": "^1.0.0-beta.13",
+ "vue-i18n": "^8.28.2",
"vuedraggable": "^2.24.3",
"weekstart": "^1.0.1",
"xss": "^1.0.14"
@@ -4165,6 +4166,9 @@
"cpu": [
"arm"
],
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4185,6 +4189,9 @@
"cpu": [
"arm"
],
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4205,6 +4212,9 @@
"cpu": [
"arm64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4225,6 +4235,9 @@
"cpu": [
"arm64"
],
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4245,6 +4258,9 @@
"cpu": [
"x64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4265,6 +4281,9 @@
"cpu": [
"x64"
],
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4738,6 +4757,9 @@
"cpu": [
"arm"
],
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4751,6 +4773,9 @@
"cpu": [
"arm"
],
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4764,6 +4789,9 @@
"cpu": [
"arm64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4777,6 +4805,9 @@
"cpu": [
"arm64"
],
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4790,6 +4821,9 @@
"cpu": [
"loong64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4803,6 +4837,9 @@
"cpu": [
"loong64"
],
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4816,6 +4853,9 @@
"cpu": [
"ppc64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4829,6 +4869,9 @@
"cpu": [
"ppc64"
],
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4842,6 +4885,9 @@
"cpu": [
"riscv64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4855,6 +4901,9 @@
"cpu": [
"riscv64"
],
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4868,6 +4917,9 @@
"cpu": [
"s390x"
],
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4881,6 +4933,9 @@
"cpu": [
"x64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4894,6 +4949,9 @@
"cpu": [
"x64"
],
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -23568,6 +23626,13 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/vue-i18n": {
+ "version": "8.28.2",
+ "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.28.2.tgz",
+ "integrity": "sha512-C5GZjs1tYlAqjwymaaCPDjCyGo10ajUphiwA922jKt9n7KPpqR7oM1PCwYzhB/E7+nT3wfdG3oRre5raIT1rKA==",
+ "deprecated": "v9 and v10 no longer supported. please migrate to v11. about maintenance status, see https://vue-i18n.intlify.dev/guide/maintenance.html",
+ "license": "MIT"
+ },
"node_modules/vue-loader": {
"version": "17.4.2",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.4.2.tgz",
diff --git a/package.json b/package.json
index 4c2892f2..353aeac1 100644
--- a/package.json
+++ b/package.json
@@ -69,6 +69,7 @@
"vue-color": "^2.8.1",
"vue-d3-sunburst": "git+https://github.com/ErikBjare/Vue.D3.sunburst.git#patch-1",
"vue-datetime": "^1.0.0-beta.13",
+ "vue-i18n": "^8.28.2",
"vuedraggable": "^2.24.3",
"weekstart": "^1.0.1",
"xss": "^1.0.14"
diff --git a/src/components/Footer.vue b/src/components/Footer.vue
index a2aef0a2..8d22d9ce 100644
--- a/src/components/Footer.vue
+++ b/src/components/Footer.vue
@@ -1,30 +1,32 @@
div.container(style="color: #555; font-size: 0.9em")
div.mb-2
- | Made with
- a(href="https://activitywatch.net/donate/", target="_blank")
- icon(name="heart" scale=0.75 style="fill: #E55")
- | by the #[a(href="http://activitywatch.net/contributors/") ActivityWatch developers]
+ i18n(path="footer.madeWith" tag="span")
+ template(v-slot:heart)
+ a(href="https://activitywatch.net/donate/", target="_blank")
+ icon(name="heart" scale=0.75 style="fill: #E55")
+ template(v-slot:developers)
+ a(href="http://activitywatch.net/contributors/") {{ $t('footer.developers') }}
div
span.mt-2(v-if="info", style="color: #888; font-size: 0.8em")
span.mr-2
- b Host:
+ b {{ $t('footer.host') }}
| {{info.hostname}}
span
- b Version:
+ b {{ $t('footer.version') }}
| {{info.version}}
div(style="font-size: 0.9em; opacity: 0.8; fill: #88F")
div.float-none.float-md-right.my-2
a(href="https://github.com/ActivityWatch/activitywatch/issues/new/choose", target="_blank").mr-3
icon(name="bug")
- | Report a bug
+ | {{ $t('footer.reportBug') }}
a(href="https://forum.activitywatch.net/c/support", target="_blank").mr-3
icon(name="question-circle")
- | Ask for help
+ | {{ $t('footer.askHelp') }}
a(href="https://forum.activitywatch.net/c/features", target="_blank")
icon(name="vote-yea")
- | Vote on features
+ | {{ $t('footer.voteFeatures') }}
div.float-none.float-md-left.my-2
a(href="https://twitter.com/ActivityWatchIt", target="_blank")
icon(name="brands/twitter")
@@ -34,7 +36,7 @@ div.container(style="color: #555; font-size: 0.9em")
| GitHub
a(href="https://activitywatch.net/donate/", target="_blank").ml-3
icon(name="hand-holding-heart")
- | Donate
+ | {{ $t('footer.donate') }}