11<script lang="ts" setup>
22import { version } from ' vue-demi'
33import { reactive , ref , watch } from ' vue'
4+ import { useI18n } from ' vue-i18n'
45import { newShortText } from ' ./text/new-short-text'
56import { oldShortText } from ' ./text/old-short-text'
67
@@ -34,12 +35,14 @@ function resetText() {
3435 oldString .value = oldShortText .value
3536 newString .value = newShortText .value
3637}
38+
3739function clearText() {
3840 localStorage .removeItem (' oldString' )
3941 localStorage .removeItem (' newString' )
4042 oldString .value = ' '
4143 newString .value = ' '
4244}
45+
4346watch (oldString , () => localStorage .setItem (' oldString' , oldString .value ))
4447watch (newString , () => localStorage .setItem (' newString' , newString .value ))
4548
@@ -49,18 +52,27 @@ function printEvent(e) {
4952 // eslint-disable-next-line no-console
5053 console .log (e )
5154}
55+
56+ const { locale, t } = useI18n ()
57+
58+ function toggleLang() {
59+ locale .value = locale .value === ' en' ? ' cn' : ' en'
60+ }
5261 </script >
5362
5463<template >
5564 <div style =" padding :10px 35px " >
5665 <div class =" banner" >
5766 <h1 >v-code-diff</h1 >
58- <p >A code diff display plugin, available for Vue2 / Vue3. </p >
67+ <p >{{ t('desc') }} </p >
5968 <p align =" center" >
60- Vue version : {{ version }}. CodeDiff version : {{ appVersion }}
69+ Vue ver : {{ version }}. CodeDiff ver : {{ appVersion }}
6170 </p >
6271 <a-button type =" primary" >
63- <a href =" https://github.com/Shimada666/v-code-diff" >View on Github</a >
72+ <a href =" https://github.com/Shimada666/v-code-diff" >GitHub</a >
73+ </a-button >
74+ <a-button v-model =" locale" style =" margin-left : 5px ; width : 100px " @click =" toggleLang" >
75+ {{ t('tools.lang') }}
6476 </a-button >
6577 </div >
6678 <div style =" display : flex ; justify-content : space-between ;" >
@@ -75,17 +87,18 @@ function printEvent(e) {
7587 </div >
7688 <div style =" margin-top : 10px ;" >
7789 <a-button style =" margin-right : 5px ;" @click =" resetText" >
78- 重置文本(reset text)
90+ {{ t('tools.resetText') }}
7991 </a-button >
8092 <a-button type =" default" @click =" clearText" >
81- 清空文本(clear text)
93+ {{ t('tools.clearText') }}
8294 </a-button >
8395 </div >
84- <a-card style =" margin-top :15px " title =" Options " >
96+ <a-card style =" margin-top :15px " : title =" t('options.title') " >
8597 <a-form layout =" inline" :model =" formState" >
8698 <a-row :gutter =" 16" >
8799 <a-col :md =" 8" :sm =" 24" >
88- <a-form-item label =" 语言(langauge)" >
100+ <a-form-item >
101+ <slot ><span class =" form-item-label" >{{ t('options.language') }}</span > </slot >
89102 <a-select v-model:value =" formState.language" style =" width : 12vw ;" >
90103 <a-select-option
91104 v-for =" item in ['plaintext', 'json', 'yaml', 'javascript', 'java', 'python', 'sql', 'xml', 'bash']"
@@ -97,63 +110,71 @@ function printEvent(e) {
97110 </a-form-item >
98111 </a-col >
99112 <a-col :md =" 8" :sm =" 24" >
100- <a-form-item label =" 主题模式(theme)" >
113+ <a-form-item >
114+ <slot ><span class =" form-item-label" >{{ t('options.theme') }}</span > </slot >
101115 <a-radio-group v-model:value =" formState.theme" >
102116 <a-radio value =" light" >
103- 日间模式(light)
117+ {{ t('options.dayMode') }}
104118 </a-radio >
105119 <a-radio value =" dark" >
106- 夜间模式(dark)
120+ {{ t('options.nightMode') }}
107121 </a-radio >
108122 </a-radio-group >
109123 </a-form-item >
110124 </a-col >
111125 <a-col :md =" 8" :sm =" 24" >
112- <a-form-item label =" 差异化范围(context)" >
126+ <a-form-item >
127+ <slot ><span class =" form-item-label" >{{ t('options.contextRange') }}</span > </slot >
113128 <a-input-number v-model:value =" formState.context" :min =" 0" style =" width : 12vw ;" />
114129 </a-form-item >
115130 </a-col >
116131 <a-col :md =" 8" :sm =" 24" >
117- <a-form-item label =" 显示方式(outputFormat)" >
132+ <a-form-item >
133+ <slot ><span class =" form-item-label" >{{ t('options.outputFormat') }}</span > </slot >
118134 <a-radio-group v-model:value =" formState.outputFormat" >
119135 <a-radio value =" line-by-line" >
120- line-by-line
136+ {{ t('options.lineByLine') }}
121137 </a-radio >
122138 <a-radio value =" side-by-side" >
123- side-by-side
139+ {{ t('options.sideBySide') }}
124140 </a-radio >
125141 </a-radio-group >
126142 </a-form-item >
127143 </a-col >
128144 <a-col :md =" 8" :sm =" 24" >
129- <a-form-item label =" 差异级别(diffStyle)" >
145+ <a-form-item >
146+ <slot ><span class =" form-item-label" >{{ t('options.diffStyle') }}</span > </slot >
130147 <a-radio-group v-model:value =" formState.diffStyle" >
131148 <a-radio value =" word" >
132- word
149+ {{ t('options. word') }}
133150 </a-radio >
134151 <a-radio value =" char" >
135- char
152+ {{ t('options. char') }}
136153 </a-radio >
137154 </a-radio-group >
138155 </a-form-item >
139156 </a-col >
140157 <a-col :md =" 8" :sm =" 24" >
141- <a-form-item label =" 移除字符串前后空白字符(trim)" >
158+ <a-form-item >
159+ <slot ><span class =" form-item-label" >{{ t('options.trim') }}</span > </slot >
142160 <a-switch v-model:checked =" formState.trim" />
143161 </a-form-item >
144162 </a-col >
145163 <a-col :md =" 8" :sm =" 24" >
146- <a-form-item label =" 不 diff 换行符(noDiffLineFeed)" >
164+ <a-form-item >
165+ <slot ><span class =" form-item-label" >{{ t('options.noDiffLineFeed') }}</span > </slot >
147166 <a-switch v-model:checked =" formState.noDiffLineFeed" />
148167 </a-form-item >
149168 </a-col >
150169 <a-col :md =" 8" :sm =" 24" >
151- <a-form-item label =" 隐藏首部(hide Header)" >
170+ <a-form-item >
171+ <slot ><span class =" form-item-label" >{{ t('options.hideHeader') }}</span > </slot >
152172 <a-switch v-model:checked =" formState.hideHeader" />
153173 </a-form-item >
154174 </a-col >
155175 <a-col :md =" 8" :sm =" 24" >
156- <a-form-item label =" 隐藏统计信息(hide Statistics)" >
176+ <a-form-item >
177+ <slot ><span class =" form-item-label" >{{ t('options.hideStatistics') }}</span > </slot >
157178 <a-switch v-model:checked =" formState.hideStat" />
158179 </a-form-item >
159180 </a-col >
@@ -193,4 +214,20 @@ function printEvent(e) {
193214 font-size : 16px ;
194215 color : #666 ;
195216}
217+
218+ .form-item-label {
219+ display : inline-block ;
220+ flex-grow : 0 ;
221+ overflow : hidden ;
222+ white-space : nowrap ;
223+ text-align : right ;
224+ vertical-align : middle ;
225+ }
226+
227+ .form-item-label :after {
228+ content : " :" ;
229+ position : relative ;
230+ top : -0.5px ;
231+ margin : 0 8px 0 2px ;
232+ }
196233 </style >
0 commit comments