Skip to content

Commit 29aba0b

Browse files
authored
Merge branch 'development' into dependabot/npm_and_yarn/nuxt/typescript-build-2.0.2
2 parents 43f85c2 + 6c39e64 commit 29aba0b

File tree

10 files changed

+263
-19
lines changed

10 files changed

+263
-19
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@
3333
"@nuxtjs/pwa": "^3.0.0-beta.20",
3434
"@types/js-cookie": "^2.2.6",
3535
"@types/jwt-decode": "^2.2.1",
36-
"@types/node": "^14.0.23",
36+
"@types/node": "^14.0.27",
3737
"cookieparser": "^0.1.0",
3838
"core-js": "3.6.5",
3939
"cross-env": "^7.0.2",
4040
"date-fns": "^2.15.0",
41-
"dayjs": "^1.8.29",
41+
"dayjs": "^1.8.31",
4242
"express": "^4.17.1",
4343
"firebase": "7.16.1",
4444
"firebase-admin": "^9.0.0",

src/assets/locales/zh_TW.json

Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,188 @@
1+
{
2+
"common": {
3+
"general": {
4+
"buttons": {
5+
"cancel": "取消",
6+
"close": "關閉",
7+
"go_back": "返回",
8+
"login": "登入",
9+
"logout": "登出",
10+
"ok": "OK",
11+
"save": "儲存"
12+
},
13+
"error": {
14+
"default": "發生錯誤,請稍後再試。"
15+
}
16+
},
17+
"footer": {
18+
"about": "關於在家學習時間表",
19+
"contact": "聯絡我們",
20+
"terms": "使用條款"
21+
},
22+
"lesson_data": {
23+
"labels": {
24+
"title": "標題",
25+
"subject_name": "科目名",
26+
"textbook": "教科書",
27+
"goal": "學習目標",
28+
"description": "詳細",
29+
"videos": "參考影片",
30+
"materials": "輔助教材"
31+
},
32+
"tags": {
33+
"video": "影片"
34+
}
35+
},
36+
"user_data": {
37+
"labels": {
38+
"nickname": "姓名(顯示名稱)",
39+
"email": "電子信箱",
40+
"password": "密碼",
41+
"password_rules": "密碼必須至少 6 個字元",
42+
"password_not_acceptable": "密碼不符合密碼規則需求",
43+
"password_not_same": "密碼不符合"
44+
}
45+
},
46+
"agree_terms": {
47+
"checkbox": {
48+
"agree": "我同意使用條款"
49+
},
50+
"buttons": {
51+
"agree": "前往註冊",
52+
"disagree": "不同意"
53+
}
54+
},
55+
"class_id_dialog": {
56+
"title": "目前登入的課程",
57+
"label": {
58+
"class_id": "課程 ID"
59+
}
60+
}
61+
},
62+
"components": {
63+
"editing_screen": {
64+
"title": "製作時間表",
65+
"error": {
66+
"could_not_add_lesson": "出現錯誤,加入課程失敗。請經過一段時間再試一次。"
67+
},
68+
"labels": {
69+
"date": "設定日期",
70+
"time": "設定時間",
71+
"subject_label_color": "標籤顏色",
72+
"description": "詳細說明",
73+
"video_url": "參考影片 URL",
74+
"video_thumbnail": "顯示影片縮圖",
75+
"textbook_page": "教科書頁",
76+
"material_title": "副教材標題",
77+
"material_url": "輔助教材 URL"
78+
},
79+
"required": "*符號者為必填項目"
80+
},
81+
"editing_visibility_dialog": {
82+
"title": {
83+
"show": "公開時間表",
84+
"hide": "隱藏時間表"
85+
},
86+
"buttons": {
87+
"show": "設為公開",
88+
"hide": "設為非公開"
89+
},
90+
"error": {
91+
"could_not_change_visibility": "發生錯誤,變更公開狀態失敗。請經過一段時間再試一次。"
92+
},
93+
"success": {
94+
"message": "已變更課程公開狀態。"
95+
}
96+
}
97+
},
98+
"layouts": {
99+
"protected": {
100+
"class_id_dialog": {
101+
"buttons": {
102+
"switch_to_or_create_class": "課程的切換、登錄"
103+
}
104+
}
105+
}
106+
},
107+
"pages": {
108+
"classes_index": {
109+
"no_lessons": "{date} 的時間表尚未開始。",
110+
"no_lessons_today": "今天的時間表尚未開始。"
111+
},
112+
"edit_index": {
113+
"add_or_edit_lesson": "追加或編輯{className}的課程",
114+
"no_lessons": "尚無{date}的時間表",
115+
"no_lessons_today": "本日尚未安排時間表"
116+
},
117+
"index": {
118+
"error": {
119+
"invalid_class_id": "您的課程 ID 有誤"
120+
},
121+
"students": {
122+
"label": "給上課的學生",
123+
"class_id": "課程 ID"
124+
},
125+
"teachers": {
126+
"label": "給製作時間表的教師",
127+
"buttons": {
128+
"signup": "使用者註冊",
129+
"login": "登入"
130+
}
131+
}
132+
},
133+
"user_classlist": {
134+
"add_class": "登錄課程",
135+
"login_to_class": "選擇課程進行登入",
136+
"no_classes": "無可以編輯的課程。請先進行課程登錄。"
137+
},
138+
"user_edit_user_data": {
139+
"title": "使用者資料變更",
140+
"labels":{
141+
"new_password": "請輸入新密碼",
142+
"new_password_confirm": "請輸入新密碼(確認用)"
143+
}
144+
},
145+
"user_login": {
146+
"title": "請先登入",
147+
"error": {
148+
"invalid": "您輸入的 Email 或密碼有誤"
149+
}
150+
},
151+
"user_register_class": {
152+
"title": "課程登錄",
153+
"buttons": {
154+
"register": "登錄結束"
155+
},
156+
"error": {
157+
"default": "課程追加失敗,請您再次登錄。"
158+
},
159+
"labels": {
160+
"school_name": "學校名稱",
161+
"class_name": "課程名稱",
162+
"class_name_visible": "請注意,課程名稱將會被顯示"
163+
}
164+
},
165+
"user_registered": {
166+
"title": "登錄成功!",
167+
"buttons": {
168+
"add_or_edit_lessons": "新增或編輯課程"
169+
},
170+
"labels": {
171+
"new_class_id": "您的課程 ID"
172+
}
173+
},
174+
"user_signup": {
175+
"title": "使用者註冊",
176+
"buttons": {
177+
"signup": "登錄"
178+
},
179+
"labels": {
180+
"password_confirm": "密碼(確認用)"
181+
},
182+
"success": {
183+
"go_back_to_top": "回到首頁",
184+
"message": "已寄送確認信至您的電子郵件信箱,請點擊確認信內的網址進行驗證。"
185+
}
186+
}
187+
}
188+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<template>
2+
<div class="LauguageSelector">
3+
<v-select
4+
:value="$root.$i18n.locale"
5+
:items="locales"
6+
class="LauguageSelector-Menu"
7+
dense
8+
hide-details
9+
solo
10+
@input="$root.$i18n.setLocale($event)"
11+
/>
12+
</div>
13+
</template>
14+
15+
<script lang="ts">
16+
import Vue from 'vue'
17+
18+
type LocaleListItem = { text: string; value: string }
19+
type LocalData = {
20+
locales: LocaleListItem[]
21+
}
22+
23+
export default Vue.extend({
24+
data(): LocalData {
25+
if (!this.$root.$i18n.locales)
26+
return { locales: [{ text: 'N/A', value: '' }] }
27+
28+
return {
29+
locales: this.$root.$i18n.locales.map(l => {
30+
if (typeof l === 'string') return { text: l, value: l }
31+
else return { text: l.displayName, value: l.code }
32+
})
33+
}
34+
}
35+
})
36+
</script>
37+
38+
<style lang="scss" scoped>
39+
.LauguageSelector-Menu {
40+
width: 8rem;
41+
margin: 0 2rem;
42+
padding: 0.2rem 0;
43+
}
44+
</style>

src/layouts/background.vue

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
</v-overlay>
88
<v-app-bar fixed app class="bar" elevation="0">
99
<header-logo />
10+
<AppLanguageSelector />
1011
</v-app-bar>
1112
<v-content class="LayerContent">
1213
<nuxt />
@@ -16,6 +17,7 @@
1617

1718
<script lang="ts">
1819
import Vue from 'vue'
20+
import AppLanguageSelector from '@/components/AppLanguageSelector.vue'
1921
import HeaderLogo from '@/assets/svgs/header_logo.svg'
2022
2123
type DataType = {
@@ -24,6 +26,7 @@ type DataType = {
2426
2527
export default Vue.extend({
2628
components: {
29+
AppLanguageSelector,
2730
HeaderLogo
2831
},
2932
data(): DataType {

src/layouts/classes.vue

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
</v-overlay>
5353
<v-app-bar fixed app class="bar" elevation="0">
5454
<HeaderLogo />
55+
<AppLanguageSelector />
5556
<v-spacer />
5657
<div class="classes-buttons">
5758
<v-btn
@@ -92,6 +93,7 @@
9293
<script lang="ts">
9394
import Vue from 'vue'
9495
import dayjs from 'dayjs'
96+
import AppLanguageSelector from '@/components/AppLanguageSelector.vue'
9597
import HeaderLogo from '@/assets/svgs/header_logo.svg'
9698
import CalendarBar from '@/components/CalendarBar.vue'
9799
import BaseDialog from '@/components/BaseDialog.vue'
@@ -109,6 +111,7 @@ type LocalData = {
109111
export default Vue.extend({
110112
middleware: 'checkClassData',
111113
components: {
114+
AppLanguageSelector,
112115
CalendarBar,
113116
BaseDialog,
114117
HeaderLogo

src/layouts/default.vue

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
</v-overlay>
88
<v-app-bar fixed app class="bar" elevation="0">
99
<HeaderLogo />
10+
<AppLanguageSelector />
1011
</v-app-bar>
1112
<v-content class="content">
1213
<v-container class="px-4 py-8">
@@ -18,6 +19,7 @@
1819

1920
<script lang="ts">
2021
import Vue from 'vue'
22+
import AppLanguageSelector from '@/components/AppLanguageSelector.vue'
2123
import HeaderLogo from '@/assets/svgs/header_logo.svg'
2224
2325
type LocalData = {
@@ -26,6 +28,7 @@ type LocalData = {
2628
2729
export default Vue.extend({
2830
components: {
31+
AppLanguageSelector,
2932
HeaderLogo
3033
},
3134
data(): LocalData {

src/layouts/lesson.vue

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
</v-overlay>
88
<v-app-bar fixed app class="bar" elevation="0">
99
<HeaderLogo />
10+
<AppLanguageSelector />
1011
<v-spacer />
1112
<v-btn outlined rounded color="#0071C2" @click="back">
1213
<v-icon>mdi-arrow-left</v-icon>
@@ -24,6 +25,7 @@
2425

2526
<script lang="ts">
2627
import Vue from 'vue'
28+
import AppLanguageSelector from '@/components/AppLanguageSelector.vue'
2729
import HeaderLogo from '@/assets/svgs/header_logo.svg'
2830
// import { vxm } from '@/store'
2931
@@ -34,6 +36,7 @@ type LocalData = {
3436
3537
export default Vue.extend({
3638
components: {
39+
AppLanguageSelector,
3740
HeaderLogo
3841
},
3942
data(): LocalData {

src/layouts/protected.vue

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
</v-overlay>
4646
<v-app-bar fixed app class="bar" elevation="0">
4747
<HeaderLogo />
48+
<AppLanguageSelector />
4849
<v-spacer />
4950
<div class="admin-buttons">
5051
<v-btn
@@ -96,6 +97,7 @@
9697
import Vue from 'vue'
9798
import dayjs from 'dayjs'
9899
import { vxm } from '@/store'
100+
import AppLanguageSelector from '@/components/AppLanguageSelector.vue'
99101
import HeaderLogo from '@/assets/svgs/header_logo.svg'
100102
import CalendarBar from '@/components/CalendarBar.vue'
101103
import BaseDialog from '@/components/BaseDialog.vue'
@@ -110,6 +112,7 @@ type LocalData = {
110112
export default Vue.extend({
111113
middleware: ['authenticated', 'checkClassData'],
112114
components: {
115+
AppLanguageSelector,
113116
CalendarBar,
114117
BaseDialog,
115118
HeaderLogo

src/layouts/simple.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
</v-overlay>
88
<v-app-bar fixed app class="bar" elevation="0">
99
<HeaderLogo />
10+
<AppLanguageSelector />
1011
<v-spacer />
1112
<v-btn outlined rounded color="#0071C2" @click="$router.back()">
1213
<v-icon left>mdi-arrow-left</v-icon>
@@ -23,14 +24,15 @@
2324

2425
<script lang="ts">
2526
import Vue from 'vue'
27+
import AppLanguageSelector from '@/components/AppLanguageSelector.vue'
2628
import HeaderLogo from '@/assets/svgs/header_logo.svg'
2729
2830
type LocalData = {
2931
loading: boolean
3032
}
3133
3234
export default Vue.extend({
33-
components: { HeaderLogo },
35+
components: { AppLanguageSelector, HeaderLogo },
3436
data(): LocalData {
3537
return {
3638
loading: true

0 commit comments

Comments
 (0)