1
1
<script lang="ts" setup>
2
2
import { version } from ' vue-demi'
3
- import { reactive , ref , watch } from ' vue'
3
+ import { computed , reactive , ref , watch } from ' vue'
4
+ import { useI18n } from ' vue-i18n'
4
5
import { newShortText } from ' ./text/new-short-text'
5
6
import { oldShortText } from ' ./text/old-short-text'
6
7
@@ -34,12 +35,14 @@ function resetText() {
34
35
oldString .value = oldShortText .value
35
36
newString .value = newShortText .value
36
37
}
38
+
37
39
function clearText() {
38
40
localStorage .removeItem (' oldString' )
39
41
localStorage .removeItem (' newString' )
40
42
oldString .value = ' '
41
43
newString .value = ' '
42
44
}
45
+
43
46
watch (oldString , () => localStorage .setItem (' oldString' , oldString .value ))
44
47
watch (newString , () => localStorage .setItem (' newString' , newString .value ))
45
48
@@ -49,18 +52,29 @@ function printEvent(e) {
49
52
// eslint-disable-next-line no-console
50
53
console .log (e )
51
54
}
55
+
56
+ const { locale, t } = useI18n ()
57
+
58
+ function toggleLang() {
59
+ locale .value = locale .value === ' en' ? ' cn' : ' en'
60
+ }
61
+
62
+ const label = computed (() => t (' options.theme' ))
52
63
</script >
53
64
54
65
<template >
55
66
<div style =" padding :10px 35px " >
56
67
<div class =" banner" >
57
68
<h1 >v-code-diff</h1 >
58
- <p >A code diff display plugin, available for Vue2 / Vue3. </p >
69
+ <p >{{ t('desc') }} </p >
59
70
<p align =" center" >
60
- Vue version : {{ version }}. CodeDiff version : {{ appVersion }}
71
+ Vue ver : {{ version }}. CodeDiff ver : {{ appVersion }}
61
72
</p >
62
73
<a-button type =" primary" >
63
- <a href =" https://github.com/Shimada666/v-code-diff" >View on Github</a >
74
+ <a href =" https://github.com/Shimada666/v-code-diff" >GitHub</a >
75
+ </a-button >
76
+ <a-button v-model =" locale" style =" margin-left : 5px ; width : 100px " @click =" toggleLang" >
77
+ {{ t('tools.lang') }}
64
78
</a-button >
65
79
</div >
66
80
<div style =" display : flex ; justify-content : space-between ;" >
@@ -75,17 +89,18 @@ function printEvent(e) {
75
89
</div >
76
90
<div style =" margin-top : 10px ;" >
77
91
<a-button style =" margin-right : 5px ;" @click =" resetText" >
78
- 重置文本(reset text)
92
+ {{ t('tools.resetText') }}
79
93
</a-button >
80
94
<a-button type =" default" @click =" clearText" >
81
- 清空文本(clear text)
95
+ {{ t('tools.clearText') }}
82
96
</a-button >
83
97
</div >
84
- <a-card style =" margin-top :15px " title =" Options " >
98
+ <a-card style =" margin-top :15px " : title =" t('options.title') " >
85
99
<a-form layout =" inline" :model =" formState" >
86
100
<a-row :gutter =" 16" >
87
101
<a-col :md =" 8" :sm =" 24" >
88
- <a-form-item label =" 语言(langauge)" >
102
+ <a-form-item >
103
+ <slot ><span class =" form-item-label" >{{ t('options.language') }}</span > </slot >
89
104
<a-select v-model:value =" formState.language" style =" width : 12vw ;" >
90
105
<a-select-option
91
106
v-for =" item in ['plaintext', 'json', 'yaml', 'javascript', 'java', 'python', 'sql', 'xml', 'bash']"
@@ -97,63 +112,71 @@ function printEvent(e) {
97
112
</a-form-item >
98
113
</a-col >
99
114
<a-col :md =" 8" :sm =" 24" >
100
- <a-form-item label =" 主题模式(theme)" >
115
+ <a-form-item >
116
+ <slot ><span class =" form-item-label" >{{ t('options.theme') }}</span > </slot >
101
117
<a-radio-group v-model:value =" formState.theme" >
102
118
<a-radio value =" light" >
103
- 日间模式(light)
119
+ {{ t('options.dayMode') }}
104
120
</a-radio >
105
121
<a-radio value =" dark" >
106
- 夜间模式(dark)
122
+ {{ t('options.nightMode') }}
107
123
</a-radio >
108
124
</a-radio-group >
109
125
</a-form-item >
110
126
</a-col >
111
127
<a-col :md =" 8" :sm =" 24" >
112
- <a-form-item label =" 差异化范围(context)" >
128
+ <a-form-item >
129
+ <slot ><span class =" form-item-label" >{{ t('options.contextRange') }}</span > </slot >
113
130
<a-input-number v-model:value =" formState.context" :min =" 0" style =" width : 12vw ;" />
114
131
</a-form-item >
115
132
</a-col >
116
133
<a-col :md =" 8" :sm =" 24" >
117
- <a-form-item label =" 显示方式(outputFormat)" >
134
+ <a-form-item >
135
+ <slot ><span class =" form-item-label" >{{ t('options.outputFormat') }}</span > </slot >
118
136
<a-radio-group v-model:value =" formState.outputFormat" >
119
137
<a-radio value =" line-by-line" >
120
- line-by-line
138
+ {{ t('options.lineByLine') }}
121
139
</a-radio >
122
140
<a-radio value =" side-by-side" >
123
- side-by-side
141
+ {{ t('options.sideBySide') }}
124
142
</a-radio >
125
143
</a-radio-group >
126
144
</a-form-item >
127
145
</a-col >
128
146
<a-col :md =" 8" :sm =" 24" >
129
- <a-form-item label =" 差异级别(diffStyle)" >
147
+ <a-form-item >
148
+ <slot ><span class =" form-item-label" >{{ t('options.diffStyle') }}</span > </slot >
130
149
<a-radio-group v-model:value =" formState.diffStyle" >
131
150
<a-radio value =" word" >
132
- word
151
+ {{ t('options. word') }}
133
152
</a-radio >
134
153
<a-radio value =" char" >
135
- char
154
+ {{ t('options. char') }}
136
155
</a-radio >
137
156
</a-radio-group >
138
157
</a-form-item >
139
158
</a-col >
140
159
<a-col :md =" 8" :sm =" 24" >
141
- <a-form-item label =" 移除字符串前后空白字符(trim)" >
160
+ <a-form-item >
161
+ <slot ><span class =" form-item-label" >{{ t('options.trim') }}</span > </slot >
142
162
<a-switch v-model:checked =" formState.trim" />
143
163
</a-form-item >
144
164
</a-col >
145
165
<a-col :md =" 8" :sm =" 24" >
146
- <a-form-item label =" 不 diff 换行符(noDiffLineFeed)" >
166
+ <a-form-item >
167
+ <slot ><span class =" form-item-label" >{{ t('options.noDiffLineFeed') }}</span > </slot >
147
168
<a-switch v-model:checked =" formState.noDiffLineFeed" />
148
169
</a-form-item >
149
170
</a-col >
150
171
<a-col :md =" 8" :sm =" 24" >
151
- <a-form-item label =" 隐藏首部(hide Header)" >
172
+ <a-form-item >
173
+ <slot ><span class =" form-item-label" >{{ t('options.hideHeader') }}</span > </slot >
152
174
<a-switch v-model:checked =" formState.hideHeader" />
153
175
</a-form-item >
154
176
</a-col >
155
177
<a-col :md =" 8" :sm =" 24" >
156
- <a-form-item label =" 隐藏统计信息(hide Statistics)" >
178
+ <a-form-item >
179
+ <slot ><span class =" form-item-label" >{{ t('options.hideStatistics') }}</span > </slot >
157
180
<a-switch v-model:checked =" formState.hideStat" />
158
181
</a-form-item >
159
182
</a-col >
@@ -193,4 +216,20 @@ function printEvent(e) {
193
216
font-size : 16px ;
194
217
color : #666 ;
195
218
}
219
+
220
+ .form-item-label {
221
+ display : inline-block ;
222
+ flex-grow : 0 ;
223
+ overflow : hidden ;
224
+ white-space : nowrap ;
225
+ text-align : right ;
226
+ vertical-align : middle ;
227
+ }
228
+
229
+ .form-item-label :after {
230
+ content : " :" ;
231
+ position : relative ;
232
+ top : -0.5px ;
233
+ margin : 0 8px 0 2px ;
234
+ }
196
235
</style >
0 commit comments