mirror of
https://github.com/MetaCubeX/metacubexd.git
synced 2024-11-24 09:45:35 +08:00
feat(i18n): new language switcher in config page
This commit is contained in:
parent
81bab5d0ab
commit
21d479a1df
@ -3,7 +3,6 @@ import {
|
||||
IconFileStack,
|
||||
IconGlobe,
|
||||
IconHome,
|
||||
IconLanguage,
|
||||
IconMenu,
|
||||
IconNetwork,
|
||||
IconPalette,
|
||||
@ -11,9 +10,9 @@ import {
|
||||
IconSettings,
|
||||
} from '@tabler/icons-solidjs'
|
||||
import { For, ParentComponent, Show, createSignal } from 'solid-js'
|
||||
import { Button, LogoText } from '~/components'
|
||||
import { LANG, ROUTES, themes } from '~/constants'
|
||||
import { setLocale, useI18n } from '~/i18n'
|
||||
import { LogoText } from '~/components'
|
||||
import { ROUTES, themes } from '~/constants'
|
||||
import { useI18n } from '~/i18n'
|
||||
import { setCurTheme } from '~/signals'
|
||||
|
||||
const Nav: ParentComponent<{ href: string; tooltip: string }> = ({
|
||||
@ -152,14 +151,6 @@ export const Header = () => {
|
||||
|
||||
<div class="navbar-end">
|
||||
<div class="flex items-center gap-2">
|
||||
<Button
|
||||
class="btn-circle btn-secondary btn-sm"
|
||||
onClick={() =>
|
||||
setLocale((locale) => (locale === LANG.EN ? LANG.ZH : LANG.EN))
|
||||
}
|
||||
icon={<IconLanguage />}
|
||||
/>
|
||||
|
||||
<ThemeSwitcher />
|
||||
</div>
|
||||
</div>
|
||||
|
@ -101,4 +101,6 @@ export default {
|
||||
tunModeStack: 'TUN Mode Stack',
|
||||
tunDeviceName: 'TUN Device Name',
|
||||
interfaceName: 'Interface Name',
|
||||
en: 'English',
|
||||
zh: 'Chinese',
|
||||
}
|
||||
|
@ -103,4 +103,6 @@ export default {
|
||||
tunModeStack: 'TUN 模式堆栈',
|
||||
tunDeviceName: 'TUN 设备名称',
|
||||
interfaceName: '接口名称',
|
||||
en: '英文',
|
||||
zh: '中文',
|
||||
} satisfies Dict
|
||||
|
@ -26,8 +26,8 @@ import {
|
||||
upgradingBackend,
|
||||
} from '~/apis'
|
||||
import { Button, ConfigTitle } from '~/components'
|
||||
import { MODE_OPTIONS, ROUTES, themes } from '~/constants'
|
||||
import { useI18n } from '~/i18n'
|
||||
import { LANG, MODE_OPTIONS, ROUTES, themes } from '~/constants'
|
||||
import { locale, setLocale, useI18n } from '~/i18n'
|
||||
import {
|
||||
autoSwitchTheme,
|
||||
favDayTheme,
|
||||
@ -354,6 +354,17 @@ const ConfigForm = () => {
|
||||
const ConfigForXd = () => {
|
||||
const [t] = useI18n()
|
||||
|
||||
const languages = [
|
||||
{
|
||||
label: () => t('en'),
|
||||
value: LANG.EN,
|
||||
},
|
||||
{
|
||||
label: () => t('zh'),
|
||||
value: LANG.ZH,
|
||||
},
|
||||
]
|
||||
|
||||
return (
|
||||
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2">
|
||||
<div class="flex flex-col gap-2">
|
||||
@ -375,14 +386,11 @@ const ConfigForXd = () => {
|
||||
|
||||
<select
|
||||
class="select select-bordered"
|
||||
value={favDayTheme()}
|
||||
onChange={(e) => setFavDayTheme(e.target.value)}
|
||||
>
|
||||
<For each={themes}>
|
||||
{(theme) => (
|
||||
<option selected={favDayTheme() === theme} value={theme}>
|
||||
{theme}
|
||||
</option>
|
||||
)}
|
||||
{(theme) => <option value={theme}>{theme}</option>}
|
||||
</For>
|
||||
</select>
|
||||
</div>
|
||||
@ -392,14 +400,11 @@ const ConfigForXd = () => {
|
||||
|
||||
<select
|
||||
class="select select-bordered"
|
||||
value={favNightTheme()}
|
||||
onChange={(e) => setFavNightTheme(e.target.value)}
|
||||
>
|
||||
<For each={themes}>
|
||||
{(theme) => (
|
||||
<option selected={favNightTheme() === theme} value={theme}>
|
||||
{theme}
|
||||
</option>
|
||||
)}
|
||||
{(theme) => <option value={theme}>{theme}</option>}
|
||||
</For>
|
||||
</select>
|
||||
</div>
|
||||
@ -407,15 +412,34 @@ const ConfigForXd = () => {
|
||||
</Show>
|
||||
</div>
|
||||
|
||||
<div class="flex flex-col items-center">
|
||||
<ConfigTitle>{t('useTwemoji')}</ConfigTitle>
|
||||
<div class="flex flex-col gap-2">
|
||||
<div class="flex flex-col items-center">
|
||||
<ConfigTitle>{t('useTwemoji')}</ConfigTitle>
|
||||
|
||||
<input
|
||||
type="checkbox"
|
||||
class="toggle"
|
||||
checked={useTwemoji()}
|
||||
onChange={(e) => setUseTwemoji(e.target.checked)}
|
||||
/>
|
||||
<input
|
||||
type="checkbox"
|
||||
class="toggle"
|
||||
checked={useTwemoji()}
|
||||
onChange={(e) => setUseTwemoji(e.target.checked)}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="flex flex-col">
|
||||
<ConfigTitle>{t('switchLanguage')}</ConfigTitle>
|
||||
|
||||
<select
|
||||
class="select select-bordered"
|
||||
onChange={(e) => setLocale(e.target.value as LANG)}
|
||||
>
|
||||
<For each={languages}>
|
||||
{(lang) => (
|
||||
<option selected={locale() === lang.value} value={lang.value}>
|
||||
{lang.label()}
|
||||
</option>
|
||||
)}
|
||||
</For>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user