|
12 | 12 | <div class="offcanvas-body pt-0 m-2"> |
13 | 13 | <div class="preferences-tip">{{ t('nav.preferences.preferenceTips') }}</div> |
14 | 14 |
|
| 15 | + <!-- 语言设置 --> |
| 16 | + |
| 17 | + <div id="Pref_language"> |
| 18 | + <div class="form-label col-12 preferences-title"><i class="bi bi-translate"></i> {{ |
| 19 | + t('nav.preferences.language') }}</div> |
| 20 | + <div class="btn-group-vertical col-auto w-50 mb-2" role="group" aria-label="Color Scheme"> |
| 21 | + <template v-for="lang in ['auto','zh', 'en', 'fr']"> |
| 22 | + <input type="radio" class="btn-check" :name="'language' + lang" :id="'language' + lang" |
| 23 | + autocomplete="off" :value="lang" v-model="userPreferences.lang" |
| 24 | + @change="prefLanguage(lang)"> |
| 25 | + <label class="btn jn-number text-start" :class="{ |
| 26 | + 'btn-outline-dark': !isDarkMode, |
| 27 | + 'btn-outline-light': isDarkMode, |
| 28 | + 'active fw-bold': userPreferences.lang === lang |
| 29 | + }" :for="'language' + lang"> |
| 30 | + <span v-if="lang === 'zh'"><i class="fi fi-cn"></i> 中文 </span> |
| 31 | + <span v-else-if="lang === 'en'"><i class="fi fi-us"></i> English </span> |
| 32 | + <span v-else-if="lang === 'fr'"><i class="fi fi-fr"></i> Français </span> |
| 33 | + <span v-else>{{ t('nav.preferences.systemAuto') }} </span> |
| 34 | + <i class="bi bi-check2-circle" v-if="userPreferences.lang === lang"></i> |
| 35 | + </label> |
| 36 | + </template> |
| 37 | + </div> |
| 38 | + <div class="preferences-tip">{{ t('nav.preferences.languageTips') }}</div> |
| 39 | + </div> |
| 40 | + |
15 | 41 | <!-- 主题方案 --> |
16 | 42 |
|
17 | 43 | <div id="Pref_colorScheme"> |
|
31 | 57 | t('nav.preferences.colorLight') }}</span> |
32 | 58 | <span v-else-if="theme === 'dark'"><i class="bi bi-moon-stars"></i> {{ |
33 | 59 | t('nav.preferences.colorDark') }}</span> |
34 | | - <span v-else>{{ t('nav.preferences.colorAuto') }}</span> |
| 60 | + <span v-else>{{ t('nav.preferences.systemAuto') }}</span> |
35 | 61 | </label> |
36 | 62 | </template> |
37 | 63 | </div> |
|
94 | 120 | :class="[isDarkMode ? 'border-light' : 'border-dark']"> |
95 | 121 | <div class="me-auto"> |
96 | 122 | <div class="fw-bold"><label class="form-check-label" for="autoStart">{{ |
97 | | - t('nav.preferences.autoRun') |
| 123 | + t('nav.preferences.autoRun') |
98 | 124 | }}</label> |
99 | 125 | </div> |
100 | 126 | <div class="preferences-tip">{{ t('nav.preferences.autoRunTips') }}</div> |
|
110 | 136 | :class="[isDarkMode ? 'border-light' : 'border-dark']" v-if="userPreferences.autoStart"> |
111 | 137 | <div class="me-auto"> |
112 | 138 | <div class="fw-bold"><label class="form-check-label" for="ConnectivityRefresh">{{ |
113 | | - t('nav.preferences.connectivityAutoRefresh') }}</label></div> |
| 139 | + t('nav.preferences.connectivityAutoRefresh') }}</label></div> |
114 | 140 | <div class="preferences-tip">{{ t('nav.preferences.connectivityAutoRefreshTips') }}</div> |
115 | 141 | </div> |
116 | 142 | <div class="form-check form-switch col-auto "> |
|
125 | 151 | :class="[isDarkMode ? 'border-light' : 'border-dark']" v-if="configs.bingMap"> |
126 | 152 | <div class="me-auto"> |
127 | 153 | <div class="fw-bold"><label class="form-check-label" for="showMap">{{ |
128 | | - t('nav.preferences.showMap') |
| 154 | + t('nav.preferences.showMap') |
129 | 155 | }}</label> |
130 | 156 | </div> |
131 | 157 | <div class="preferences-tip">{{ t('nav.preferences.showMapTips') }}</div> |
|
141 | 167 | :class="[isDarkMode ? 'border-light' : 'border-dark']" v-if="isMobile"> |
142 | 168 | <div class="me-auto"> |
143 | 169 | <div class="fw-bold"><label class="form-check-label" for="simpleMode">{{ |
144 | | - t('nav.preferences.simpleMode') |
| 170 | + t('nav.preferences.simpleMode') |
145 | 171 | }}</label></div> |
146 | 172 | <div class="preferences-tip">{{ t('nav.preferences.simpleModeTips') }}</div> |
147 | 173 | </div> |
|
156 | 182 | :class="[isDarkMode ? 'border-light' : 'border-dark']"> |
157 | 183 | <div class="me-auto"> |
158 | 184 | <div class="fw-bold"><label class="form-check-label" for="ConnectivityNotifications">{{ |
159 | | - t('nav.preferences.popupConnectivityNotifications') }}</label> |
| 185 | + t('nav.preferences.popupConnectivityNotifications') }}</label> |
160 | 186 | </div> |
161 | 187 | <div class="preferences-tip">{{ t('nav.preferences.popupConnectivityNotificationsTips') }} |
162 | 188 | </div> |
@@ -186,7 +212,7 @@ import { useMainStore } from '@/store'; |
186 | 212 | import { useI18n } from 'vue-i18n'; |
187 | 213 | import { trackEvent } from '@/utils/use-analytics'; |
188 | 214 |
|
189 | | -const {t} = useI18n(); |
| 215 | +const { t } = useI18n(); |
190 | 216 |
|
191 | 217 | const store = useMainStore(); |
192 | 218 | const isDarkMode = computed(() => store.isDarkMode); |
@@ -252,7 +278,10 @@ const prefTheme = (value) => { |
252 | 278 | trackEvent('Nav', 'PreferenceClick', 'Theme'); |
253 | 279 | }; |
254 | 280 |
|
255 | | -
|
| 281 | +const prefLanguage = (value) => { |
| 282 | + store.updatePreference('lang', value); |
| 283 | + trackEvent('Nav', 'PrefereceClick', 'LanguageChange'); |
| 284 | +}; |
256 | 285 |
|
257 | 286 | const prefConnectivityRefresh = (value) => { |
258 | 287 | store.updatePreference('connectivityAutoRefresh', value); |
|
0 commit comments