feat:登录界面UI国际化

This commit is contained in:
PZ688 2025-02-27 10:48:50 +08:00
parent 249c9f0f61
commit 8edd1fb6b8
18 changed files with 105 additions and 20 deletions

View File

@ -98,9 +98,9 @@ public class AggregationBuilder
return fields
.Where(f => !string.IsNullOrWhiteSpace(f))
.Select(f => f.Trim())
.Where(f => targetType.GetProperty(
targetType == typeof(UsagetokenOutput) ?
$"{f}Sum" : f) != null)
// .Where(f => targetType.GetProperty(
// targetType == typeof(UsagetokenOutput) ?
// $"{f}Sum" : f) != null)
.ToList();
}
}

View File

@ -19,6 +19,9 @@ export default {
codeNeed: 'Bitte geben Sie den Verifizierungscode ein',
splitslive: 'Bitte halten Sie den Schieberegler fest',
success: 'Überprüfung erfolgreich',
loginfail: 'Anmeldung fehlgeschlagen, bitte überprüfen Sie Ihre Anmeldeinformationen',
notprivilege: 'Entschuldigung, Sie haben keine Anmeldeberechtigung',
captchaExpired: 'Code abgelaufen',
},
mobile: {
placeholder1: 'Bitte Mobiltelefonnummer eingeben',
@ -27,6 +30,8 @@ export default {
btnText: 'Anmelden',
msgText:
'Wichtiger Hinweis: Es wird empfohlen, Google, Microsoft Edge Version 79.0.1072.62 oder höher und den 360-Browser im Schnellmodus zu verwenden',
loginfail: 'Anmeldung fehlgeschlagen, bitte überprüfen Sie Ihre Anmeldeinformationen',
retry: '{duration} Sekunden nachdem der Code erneut angefordert wird',
},
scan: {
text: 'Öffnen Sie Ihr Mobiltelefon zum Scannen und melden Sie sich schnell an / registrieren Sie sich',

View File

@ -19,12 +19,17 @@ export default {
codeNeed: 'Please enter the verification code',
splitslive: 'Please hold down the slider to drag',
success: 'Verification passed',
loginfail: 'Login failed, please check your account password!',
notprivilege: 'Sorry, you do not have login permission',
captchaExpired: 'code expired',
},
mobile: {
placeholder1: 'Please input mobile phone number',
placeholder2: 'Please enter the verification code',
codeText: 'Get code',
btnText: 'Sign in',
loginfail: 'Login failed, please check your account!',
retry: '{duration} seconds after the code is requested again',
msgText:
'Warm tip: it is recommended to use Google, Microsoft edge, version 79.0.1072.62 and above browsers, and 360 browser, please use speed mode',
},

View File

@ -19,12 +19,17 @@ export default {
codeNeed: 'Por favor, introduce el código de verificación',
splitslive: 'Por favor, mantén el deslizador',
success: 'Verificación superada',
loginfail: 'Inicio de sesión fallido, por favor, verifica tus credenciales',
notprivilege: 'Lo siento, no tienes permiso para iniciar sesión',
captchaExpired: 'código expirado',
},
mobile: {
placeholder1: 'Por favor, introduce el número de teléfono móvil',
placeholder2: 'Por favor, introduce el código de verificación',
codeText: 'Obtener código',
btnText: 'Iniciar sesión',
loginfail: 'Inicio de sesión fallido, por favor, verifica tus credenciales',
retry: '{duration} segundos después de que se solicite el código nuevamente',
msgText:
'Consejo importante: se recomienda usar Google, Microsoft Edge versión 79.0.1072.62 o superior y el navegador 360 en modo rápido',
},

View File

@ -19,12 +19,17 @@ export default {
codeNeed: 'Syötä vahvistuskoodi',
splitslive: 'Sulje liukusäädin',
success: 'Vahvistus onnistui',
loginfail: 'Kirjautuminen epäonnistui, tarkista käyttäjätunnus ja salasana',
notprivilege: 'Anteeksi, sinulla ei ole kirjautumisluottoa',
captchaExpired: 'koodi vanhentunut',
},
mobile: {
placeholder1: 'Syötä matkapuhelinnumero',
placeholder2: 'Syötä vahvistuskoodi',
codeText: 'Hanki koodi',
btnText: 'Kirjaudu sisään',
loginfail: 'Kirjautuminen epäonnistui, tarkista käyttäjätunnus',
retry: '{duration} sekunnin kuluttua koodi pyydetään uudestaan',
msgText:
'Tärkeä huomautus: on suositeltavaa käyttää Google-, Microsoft Edge -versiota 79.0.1072.62 tai uudempaa ja 360-selainta nopeustilassa',
},

View File

@ -19,12 +19,17 @@ export default {
codeNeed: 'Veuillez saisir le code de vérification',
splitslive: 'Veuillez maintenir le curseur',
success: 'Vérification réussie',
loginfail: 'Connexion échouée, veuillez vérifier vos informations de connexion',
notprivilege: 'Désolé, vous n\'avez pas de permission de connexion',
captchaExpired: 'code expiré',
},
mobile: {
placeholder1: 'Veuillez saisir le numéro de téléphone mobile',
placeholder2: 'Veuillez saisir le code de vérification',
codeText: 'Obtenir le code',
btnText: 'Se connecter',
loginfail: 'Connexion échouée, veuillez vérifier votre compte',
retry: '{duration} secondes après que le code soit demandé à nouveau',
msgText:
'Conseil important : il est recommandé d\'utiliser Google, Microsoft Edge version 79.0.1072.62 ou supérieure et le navigateur 360 en mode rapide',
},

View File

@ -19,12 +19,17 @@ export default {
codeNeed: 'Inserisci il codice di verifica',
splitslive: 'Tieni premuto lo scorrimento',
success: 'Verifica superata',
loginfail: 'Accesso fallito, per favore controlla le tue credenziali',
notprivilege: 'Scusa, non hai permesso di accesso',
captchaExpired: 'codice scaduto',
},
mobile: {
placeholder1: 'Inserisci il numero di cellulare',
placeholder2: 'Inserisci il codice di verifica',
codeText: 'Ottieni codice',
btnText: 'Accedi',
loginfail: 'Accesso fallito, per favore controlla le tue credenziali',
retry: '{duration} secondi dopo che il codice viene richiesto di nuovo',
msgText:
'Suggerimento importante: si consiglia di utilizzare Google, Microsoft Edge versione 79.0.1072.62 o superiore e il browser 360 in modalità veloce',
},

View File

@ -19,12 +19,17 @@ export default {
codeNeed: '認証コードを入力してください',
splitslive: 'スライダーを押してください',
success: '認証成功',
loginfail: 'ログインに失敗しました。アカウント名とパスワードを確認してください',
notprivilege: '申し訳ありません。ログイン権限がありません',
captchaExpired: 'コードが期限切れ',
},
mobile: {
placeholder1: '携帯電話番号を入力してください',
placeholder2: '認証コードを入力してください',
codeText: 'コードを取得',
btnText: 'ログイン',
loginfail: 'ログインに失敗しました。アカウント名を確認してください',
retry: '{duration}秒後にコードを再要求します',
msgText:
'重要なお知らせGoogle、Microsoft Edge バージョン79.0.1072.62以上、および360ブラウザの高速モードの使用を推奨します',
},

View File

@ -19,12 +19,17 @@ export default {
codeNeed: '인증 코드를 입력해 주세요',
splitslive: '슬라이더를 누르세요',
success: '인증 성공',
loginfail: '로그인에 실패했습니다. 계정 이름과 비밀번호를 확인해 주세요',
notprivilege: '죄송합니다. 로그인 권한이 없습니다',
captchaExpired: '코드가 만료됨',
},
mobile: {
placeholder1: '휴대폰 번호를 입력해 주세요',
placeholder2: '인증 코드를 입력해 주세요',
codeText: '코드 받기',
btnText: '로그인',
loginfail: '로그인에 실패했습니다. 계정 이름을 확인해 주세요',
retry: '{duration}초 후 코드를 다시 요청합니다',
msgText:
'중요 안내: Google, Microsoft Edge 버전 79.0.1072.62 이상 및 360 브라우저의 고속 모드 사용을 권장합니다',
},

View File

@ -19,12 +19,17 @@ export default {
codeNeed: 'Vennligst skriv inn bekreftelseskoden',
splitslive: 'Vennligst trykk på skjermen',
success: 'Bekreftelse vellykket',
loginfail: 'Innlogging feilet, vennligst sjekk ditt brukernavn og passord',
notprivilege: 'Beklager, du har ikke tilgang til å logge inn',
captchaExpired: 'koden utløpt',
},
mobile: {
placeholder1: 'Vennligst skriv inn mobilnummer',
placeholder2: 'Vennligst skriv inn bekreftelseskoden',
codeText: 'Få kode',
btnText: 'Logg inn',
loginfail: 'Innlogging feilet, vennligst sjekk ditt brukernavn',
retry: '{duration} sekunder etter at koden blir bedt om igjen',
msgText:
'Viktig merknad: det anbefales å bruke Google, Microsoft Edge versjon 79.0.1072.62 eller nyere, og 360-nettleseren i hurtigmodus',
},

View File

@ -19,12 +19,17 @@ export default {
codeNeed: 'Proszę wprowadzić kod weryfikacyjny',
splitslive: 'Proszę nacisnąć ekran',
success: 'Weryfikacja przeszła pomyślnie',
loginfail: 'Logowanie nie powiodło się, sprawdź swoje poświadczenia',
notprivilege: 'Przepraszamy, nie masz uprawnień do logowania',
captchaExpired: 'kod wygasł',
},
mobile: {
placeholder1: 'Proszę wprowadzić numer telefonu komórkowego',
placeholder2: 'Proszę wprowadzić kod weryfikacyjny',
codeText: 'Otrzymaj kod',
btnText: 'Zaloguj się',
loginfail: 'Logowanie nie powiodło się, sprawdź swoje poświadczenia',
retry: '{duration} sekund po ponownym żądaniu kodu',
msgText:
'Ważna informacja: zaleca się korzystanie z przeglądarki Google, Microsoft Edge w wersji 79.0.1072.62 lub nowszej oraz przeglądarki 360 w trybie szybkim',
},

View File

@ -19,12 +19,17 @@ export default {
codeNeed: 'Por favor, insira o código de verificação',
splitslive: 'Por favor, mantenha o deslizador',
success: 'Verificação superada',
loginfail: 'Login falhou, por favor, verifique suas credenciais',
notprivilege: 'Desculpe, você não tem permissão para fazer login',
captchaExpired: 'código expirado',
},
mobile: {
placeholder1: 'Por favor, insira o número do celular',
placeholder2: 'Por favor, insira o código de verificação',
codeText: 'Obter código',
btnText: 'Entrar',
loginfail: 'Login falhou, por favor, verifique suas credenciais',
retry: '{duration} segundos após o código ser solicitado novamente',
msgText:
'Aviso importante: recomenda-se usar o Google, Microsoft Edge versão 79.0.1072.62 ou superior e o navegador 360 no modo rápido',
},

View File

@ -19,12 +19,17 @@ export default {
codeNeed: 'Пожалуйста, введите код подтверждения',
splitslive: 'Пожалуйста, нажмите на экран',
success: 'Версия прошла успешно',
loginfail: 'Вход не выполнен, пожалуйста, проверьте свои учетные данные',
notprivilege: 'Извините, у вас нет прав для входа',
captchaExpired: 'код истек',
},
mobile: {
placeholder1: 'Пожалуйста, введите номер мобильного телефона',
placeholder2: 'Пожалуйста, введите код подтверждения',
codeText: 'Получить код',
btnText: 'Войти',
loginfail: 'Вход не выполнен, пожалуйста, проверьте свои учетные данные',
retry: '{duration} секунд после повторного запроса кода',
msgText:
'Важное примечание: рекомендуется использовать Google, Microsoft Edge версии 79.0.1072.62 или выше и браузер 360 в скоростном режиме',
},

View File

@ -19,12 +19,17 @@ export default {
codeNeed: '請輸入驗證碼',
splitslive: '請按住滑塊拖動',
success: '驗證通過',
loginfail: '登入失敗,請檢查帳號密碼!',
notprivilege: '抱歉,您沒有登入權限',
captchaExpired: '驗證碼已過期',
},
mobile: {
placeholder1: '請輸入手機號碼',
placeholder2: '請輸入驗證碼',
codeText: '獲取驗證碼',
btnText: '登入',
loginfail: '登入失敗,請檢查帳號!',
retry: '{duration}秒後重新獲取',
msgText:
'溫馨提示:建議使用 Google、Microsoft Edge 79.0.1072.62 或以上版本,以及 360 瀏覽器的極速模式',
},

View File

@ -18,7 +18,10 @@ export default {
passwordneed: '请输入密码',
codeNeed: '请输入验证码',
splitslive: '请按住滑块拖动',
loginfail: '登录失败,请检查账号密码!',
notprivilege: '抱歉,您没有登录权限',
success: '验证通过',
captchaExpired: '验证码已过期',
},
mobile: {
placeholder1: '请输入手机号',
@ -26,6 +29,8 @@ export default {
codeText: '获取验证码',
btnText: '登 录',
msgText: '* 温馨提示建议使用谷歌、Microsoft Edge版本 79.0.1072.62 及以上浏览器360浏览器请使用极速模式',
loginfail: '登录失败,请检查账号!',
retry: '{duration}秒后重新获取',
},
scan: {
text: '打开手机扫一扫,快速登录/注册',

View File

@ -19,12 +19,17 @@ export default {
codeNeed: '請輸入驗證碼',
splitslive: '請按住滑塊拖動',
success: '驗證通過',
loginfail: '登入失敗,請檢查帳號密碼!',
notprivilege: '抱歉,您沒有登入權限',
captchaExpired: '驗證碼已過期',
},
mobile: {
placeholder1: '請輸入手機號',
placeholder2: '請輸入驗證碼',
codeText: '獲取驗證碼',
btnText: '登入',
loginfail: '登入失敗,請檢查帳號!',
retry: '{duration}秒後重新獲取',
msgText: '* 溫馨提示建議使用穀歌、Microsoft Edge版本79.0.1072.62及以上瀏覽器360瀏覽器請使用極速模式',
},
scan: {

View File

@ -1,8 +1,8 @@
<template>
<el-tooltip :visible="state.capsLockVisible" effect="light" content="大写锁定已打开" placement="top">
<el-tooltip :visible="state.capsLockVisible" effect="light" :content="t('message.account.lockTag')" placement="top">
<el-form ref="ruleFormRef" :model="state.ruleForm" size="large" :rules="state.rules" class="login-content-form">
<el-form-item class="login-animation1" prop="account">
<el-input ref="accountRef" text placeholder="请输入账号" v-model="state.ruleForm.account" clearable autocomplete="off" @keyup.enter.native="handleSignIn">
<el-input ref="accountRef" text :placeholder="t('message.account.accountneed')" v-model="state.ruleForm.account" clearable autocomplete="off" @keyup.enter.native="handleSignIn">
<template #prefix>
<el-icon>
<ele-User />
@ -11,7 +11,7 @@
</el-input>
</el-form-item>
<el-form-item class="login-animation2" prop="password">
<el-input ref="passwordRef" :type="state.isShowPassword ? 'text' : 'password'" placeholder="请输入密码" v-model="state.ruleForm.password" autocomplete="off" @keyup.enter.native="handleSignIn">
<el-input ref="passwordRef" :type="state.isShowPassword ? 'text' : 'password'" :placeholder="t('message.account.passwordneed')" v-model="state.ruleForm.password" autocomplete="off" @keyup.enter.native="handleSignIn">
<template #prefix>
<el-icon>
<ele-Unlock />
@ -69,8 +69,8 @@
ref="dragRef"
:imgsrc="state.rotateVerifyImg"
v-model:isPassing="state.isPassRotate"
text="请按住滑块拖动"
successText="验证通过"
:text="t('message.account.splitslive')"
:successText="t('message.account.success')"
handlerIcon="fa fa-angle-double-right"
successIcon="fa fa-hand-peace-o"
@passcallback="passRotateVerify"
@ -111,6 +111,11 @@ const ruleFormRef = ref();
const accountRef = ref<InputInstance>();
const passwordRef = ref<InputInstance>();
const codeRef = ref<InputInstance>();
const accountNeed = t('message.account.accountneed');
const passwordNeed = t('message.account.passwordneed');
const codeNeed = t('message.account.codeNeed');
const loginFail = t('message.account.loginfail');
const notPrivilege = t('message.account.notprivilege');
const dragRef: any = ref(null);
const state = reactive({
@ -122,9 +127,9 @@ const state = reactive({
codeId: 0 as any,
},
rules: {
account: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
password: [{ required: true, message: '请输入密码', trigger: 'blur' }],
// code: [{ required: true, message: '', trigger: 'blur' }],
account: [{ required: true, message: accountNeed, trigger: 'blur' }],
password: [{ required: true, message: passwordNeed, trigger: 'blur' }],
code: [{ required: true, message: codeNeed, trigger: 'blur' }],
},
loading: {
signIn: false,
@ -225,7 +230,7 @@ const onSignIn = async () => {
}
if (res.data.result?.accessToken == undefined) {
getCaptcha(); //
ElMessage.error('登录失败,请检查账号!');
ElMessage.error(loginFail);
return;
}
await saveTokenAndInitRoutes(res.data.result?.accessToken);
@ -250,7 +255,7 @@ const saveTokenAndInitRoutes = async (accessToken: string | any) => {
//
const signInSuccess = (isNoPower: boolean | undefined) => {
if (isNoPower) {
ElMessage.warning('抱歉,您没有登录权限');
ElMessage.warning(notPrivilege);
clearTokens(); // Token
} else {
//
@ -394,7 +399,7 @@ defineExpose({ saveTokenAndInitRoutes });
.login-content-code-expired {
@extend .login-content-code;
&::before {
content: '验证码已过期';
content: t('message.account.captchaExpired');
position: absolute;
top: 0;
left: 0;

View File

@ -51,13 +51,18 @@ import { SysSmsApi, SysAuthApi } from '/@/api-services/api';
const route = useRoute();
const router = useRouter();
const { t } = useI18n();
const btnText = t('message.mobile.codeText');
const phoneText = t('message.mobile.placeholder1');
const codeText = t('message.mobile.codeText');
const loginFail = t('message.mobile.loginfail');
const notPrivilege = t('message.account.notprivilege');
const state = reactive({
ruleForm: {
phone: '',
code: '',
},
btnText: '获取验证码',
btnText: btnText,
loading: false,
disabled: false,
timer: null as any,
@ -67,7 +72,7 @@ const state = reactive({
const getSmsCode = async () => {
state.ruleForm.code = '';
if (!verifyPhone(state.ruleForm.phone)) {
ElMessage.error('请正确输入手机号码!');
ElMessage.error(phoneText);
return;
}
@ -83,9 +88,9 @@ const getSmsCode = async () => {
var duration = 60;
state.timer = setInterval(() => {
duration--;
state.btnText = `${duration} 秒后重新获取`;
state.btnText = t('message.mobile.retry', { duration });
if (duration <= 0) {
state.btnText = '获取验证码';
state.btnText = codeText;
state.disabled = false; //
clearInterval(state.timer); //
}
@ -97,7 +102,7 @@ const onSignIn = async () => {
const host = route.query.host ?? location.host;
var res = await getAPI(SysAuthApi).apiSysAuthLoginPhonePost({ ...state.ruleForm, host: host });
if (res.data.result?.accessToken == undefined) {
ElMessage.error('登录失败,请检查账号!');
ElMessage.error(loginFail);
return;
}
@ -120,7 +125,7 @@ const saveTokenAndInitRoutes = async (accessToken: string | any) => {
//
const signInSuccess = (isNoPower: boolean | undefined) => {
if (isNoPower) {
ElMessage.warning('抱歉,您没有登录权限');
ElMessage.warning(notPrivilege);
clearTokens(); // Token
} else {
//