diff --git a/src/api/system/user.ts b/src/api/system/user.ts index e69de29..05e815c 100644 --- a/src/api/system/user.ts +++ b/src/api/system/user.ts @@ -0,0 +1,29 @@ +import { http } from '@/utils/http/axios'; + + + + + +const baseUrl = '/api' + +/** + * @description: getLoansInfo + */ +export function getDefaultLocal() { + // zh_CN 中文 + // gu_IN 印度 + const language = localStorage.getItem('lang') + let lang = 'zh_CN' + if (language === 'zh') { + lang = 'zh_CN' + } else if (language === 'id') { + lang = 'gu_IN' + } + return http.request({ + url: `${baseUrl}/app/home/loans/defaultLocal`, + method: 'GET', + params: { + lang + } + }); +} \ No newline at end of file diff --git a/src/lang/en_us.js b/src/lang/en_us.js deleted file mode 100644 index 02fbf8f..0000000 --- a/src/lang/en_us.js +++ /dev/null @@ -1,7 +0,0 @@ - -// en_us.js文件 -export default { - app: { - hello: 'Hello,World!' - } -} \ No newline at end of file diff --git a/src/lang/id_ID.ts b/src/lang/id_ID.ts new file mode 100644 index 0000000..cdfbcab --- /dev/null +++ b/src/lang/id_ID.ts @@ -0,0 +1,140 @@ +// id_ID.ts文件 +export default { + app: { + home: 'Beranda', + serveList: 'Dompet', + message: 'Customer Service', + my: 'Ku', + yuan: 'Yuan', + second: 'Detik', + month: 'Bulan', + prompt: 'Prompt', + tips: 'Catatan Hangat', + enterLogout: 'Anda Yakin Ingin Keluar Dari Login?', + enterWithdrawal: 'Anda Yakin Ingin Meng withdraw?', + withdrawal: 'Penarikan', + info: 'Informasi', + success: 'Sukses', + withdrawalAmount: 'Jumlah Penarikan', + pleaseWithdrawalAmount: 'Jumlah Penarikan', + submit: 'Kirim', + submittedSuccessfully: 'Berhasil Dikirim', + submitApplication: 'Kirim Permohonan', + bankCardAbnormality: 'Gangguan Kartu Bank', + receivedSuccessfully: 'Berhasil Diterima', + phoneNumber: 'Nomor Telepon', + verificationCode: 'Kode Verifikasi', + confirm: 'Konfirmasi', + enter: 'Silahkan Masukkan', + select: 'Silahkan Pilih', + send: 'Kirim', + login: 'Masuk', + account: 'Akun', + logout: 'Keluar', + register: 'Daftar', + password: 'Kata Sandi', + forgotPassword: 'Lupa Kata Sandi', + passwordPlaceholder: 'Silahkan Tetapkan Kata Sandi 6-16 Digit', + passwordPlaceholder1: 'Silahkan Masukkan Ulang Kata Sandi', + next: 'Lanjut', + update: 'Perbarui', + noData: 'Tidak Ada Data', + none: 'Tidak Ada', + contract: 'Kontrak', + loan: 'Pinjaman', + totalLoan: 'Jumlah Pinjaman', + complete: 'Lengkap', + noComplete: 'Tidak Lengkap', + signature: 'Tanda Tangan', + identityInformation: 'Informasi Identitas', + information: 'Informasi', + signatureInformation: 'Informasi Tanda Tangan', + receivingBank: 'Bank Penerima', + rwmljndzlxx: 'Jangan Lupakan Informasi Anda', + upPNGorJPG: 'Silahkan Unggah Gambar JPG Atau PNG', + }, + home: { + productDetails: 'Detail Produk', + minimumDailyInterestRate: 'Suku Bunga Harian Terendah', + borrowingLimit: 'Limit Pinjaman', + installmentPeriod: 'Periode Bayar', + optional: 'Opsional', + applicationAmount: 'Jumlah Permintaan', + loanTerm: 'Tenor Pinjaman', + repaymentPerInstallment: 'Pembayaran Setiap Installment', + dailyInterestRate: 'Suku Bunga Harian', + totalInterest: 'Suku Bunga Total', + successfulBorrowing: 'Pinjaman Berhasil', + enterAgreement: 'Saya Sudah Membaca Dan Setuju', + authAgreement: 'Perjanjian Otorisasi', + serviceAgreement: 'Ketentuan Layanan Platform', + lawAgreement: 'Ketentuan Hukum', + loansAgreement: 'Perjanjian Pinjaman', + immediateBorrowing: 'Pinjaman Segera', + pleaseFillInYourPersonalInformationFirst: 'Silahkan Isi Informasi Pribadi Anda Dulu', + pleaseEnterAgreement: 'Silahkan Baca Dan Setujui Perjanjian Yang Berkaitan', + }, + my: { + userInfo: 'Informasi Saya', + loan: 'Pinjaman Saya', + repayment: 'Pembayaran Saya', + legalLiability: 'Kewajiban Hukum', + uploadPassword: 'Ubah Kata Sandi', + logout: 'Logout', + language: 'tukar bahasa', + }, + serveList: { + loan: 'Pinjaman Saya', + balance: 'Saldo Akun', + amountToBeRepaid: 'Jumlah Yang Harus Dibayar', + immediateWithdrawal: 'Pinjaman Segera', + financialSecurity: 'Keamanan Dana Dilindungi Oleh Bank', + }, + borrowInfo: { + applicationTime: 'Waktu Permohonan', + loanDetails: 'Detail Pinjaman', + loanInfo: 'Informasi Pinjaman', + loanNo: 'Nomor Pinjaman', + loanAmount: 'Jumlah Pinjaman', + loanCycle: 'Sikl Pinjaman', + withdrawalBank: 'Bank Penarikan', + repaymentPerInstallment: 'Pembayaran Setiap Installment', + describe: 'Deskripsi', + receivingAccount: 'Akun Penerima', + usageOfLoan: 'Manfaatkan Pinjaman', + }, + loans: { + enterSubmitApplication: 'Anda Yakin Ingin Mengajukan Pinjaman?', + }, + userInfo: { + realPrompt: 'Isi informasi yang valid dan asli, persetujuan akan dilanjutkan.', + idCardPrompt: 'Dibutuhkan ID pribadi sendiri dan isinya harus jelas bisa dibaca', + photographPrompt: 'Silahkan pastikan ijin fotografi sudah diaktifkan', + name: 'Nama', + idCard: 'Nomor ID', + idCardUp1: 'Klik Unggah Sisi Wajah ID', + idCardUp2: 'Klik Unggah Sisi Militer ID', + idCardUp3: 'Klik Unggah Foto tangan Ditekan ID', + shootingRequirements: 'Persyaratan Fotografi', + standardShooting: 'Fotografi Standard', + missingBorder: 'Kuas Erat Hilang', + outOfFocus: 'Foto Gragil', + flashStrongly: 'Cahaya Cepat Gemetar Kuat', + unitName: 'Nama Unit', + position: 'Jabatan', + workTelephone: 'Telepon Unit', + workingAge: 'Usia Bekerja', + monthlyPay: 'Gaji Bulanan', + unitAddress: 'Alamat Unit', + addressInfo: 'Informasi Alamat', + currentResidentialAddress: 'Alamat Tinggal Saat Ini', + directFamilyContactPerson: 'Kontak Dari Keluarga Dekat', + relationship: 'Hubungan', + parents: 'Ortu', + spouse: 'Suami/Istri', + children: 'Anak-anak', + grandparents: 'Dari Orang Tua Kandung', + bankOfDeposit: 'Bank Penyedia Rekening', + bankCard: 'Nomor Kartu Bank', + } +} \ No newline at end of file diff --git a/src/lang/index.js b/src/lang/index.js deleted file mode 100644 index 1b3a203..0000000 --- a/src/lang/index.js +++ /dev/null @@ -1,36 +0,0 @@ -import Vue from 'vue' -import VueI18n from 'vue-i18n' -import {Locale} from 'vant' -import enUS from 'vant/lib/locale/lang/en-US' -import zhCN from 'vant/lib/locale/lang/zh-CN' -import enLocale from './en_us' -import zhLocale from './zh_cn' - -Vue.use(VueI18n) - -const messages = { - en: { - ...enUS, - ...enLocale - }, - zh: { - ...zhCN, - ...zhLocale - } -} - -const i18n = new VueI18n({ - locale: 'zh', // 设置默认语言 - messages: messages // 设置资源文件对象 -}) - -// 更新vant组件库本身的语言变化,支持国际化 -function vantLocales (lang) { - if (lang === 'en') { - Locale.use(lang, enUS) - } else if (lang === 'zh') { - Locale.use(lang, zhCN) - } -} - -export {i18n, vantLocales} \ No newline at end of file diff --git a/src/lang/index.ts b/src/lang/index.ts new file mode 100644 index 0000000..e8cb626 --- /dev/null +++ b/src/lang/index.ts @@ -0,0 +1,40 @@ +import { createI18n } from 'vue-i18n'; +import {Locale} from 'vant' +import zhCN from 'vant/lib/locale/lang/zh-CN' +import idId from 'vant/lib/locale/lang/id-ID' +import zhLocale from './zh_cn' +import idLocale from './id_ID' +import type { App } from 'vue'; + + +const messages = { + zh: { + ...zhCN, + ...zhLocale + }, + id: { + ...idId, + ...idLocale + } +} + +const language = (navigator.language || 'zh').toLocaleLowerCase(); // 这是获取浏览器的语言 + +console.log('当前的环境语言是:', language) +console.log('当前的后台语言是:', localStorage.getItem('lang')) +const i18n = createI18n({ + allowComposition: true, + locale: localStorage.getItem('lang') || language.split('-')[0] || 'zh', // 设置默认语言 + fallbackLocale: 'zh', // 设置备用语言 + messages: messages // 设置资源文件对象 +}) + +// 更新vant组件库本身的语言变化,支持国际化 +export function vantLocales (app: App) { + app.use(i18n) + if (language === 'zh') { + Locale.use(language, zhCN) + } else if (language === 'id') { + Locale.use(language, idId) + } +} diff --git a/src/lang/zh_cn.js b/src/lang/zh_cn.js deleted file mode 100644 index a6490fb..0000000 --- a/src/lang/zh_cn.js +++ /dev/null @@ -1,6 +0,0 @@ -// zh_cn.js文件 -export default { - app: { - hello: '你好,世界!' - } -} diff --git a/src/lang/zh_cn.ts b/src/lang/zh_cn.ts new file mode 100644 index 0000000..977e8cd --- /dev/null +++ b/src/lang/zh_cn.ts @@ -0,0 +1,153 @@ +// zh_cn.js文件 +export default { + app: { + home: '首页', + serveList: '钱包', + message: '客服', + my: '我的', + yuan: '元', + second: '秒', + month: '个月', + prompt: '提示', + tips: '温馨提示', + enterLogout: '您确定要退出登录吗', + enterWithdrawal: '您确定要提现吗', + withdrawal: '提现', + info: '信息', + success: '成功', + withdrawalAmount: '提现金额', + pleaseWithdrawalAmount: '提现金额', + submit: '提交', + submittedSuccessfully: '提交成功', + submitApplication: '提交申请', + bankCardAbnormality: '银行卡异常', + receivedSuccessfully: '到账成功', + phoneNumber: '手机号码', + verificationCode: '验证码', + confirm: '确认', + enter: '请输入', + select: '请选择', + send: '发送', + login: '登录', + account: '账号', + logout: '登出', + register: '注册', + password: '密码', + forgotPassword: '忘记密码', + passwordPlaceholder: '请设置6-16位密码', + passwordPlaceholder1: '请再次输入密码', + next: '下一步', + update: '修改', + noData: '暂无数据', + none: '暂无', + contract: '合同', + loan: '贷款', + totalLoan: '贷款总额', + complete: '完整', + noComplete: '不完整', + signature: '签名', + identityInformation: '身份信息', + information: '资料信息', + signatureInformation: '签名信息', + receivingBank: '收款银行卡', + rwmljndzlxx: '让我们了解您的资料信息', + upPNGOrJPG: '请上传 jpg 或者 png 格式图片', + }, + home: { + productDetails: '产品详情', + minimumDailyInterestRate: '最低日息', + borrowingLimit: '借款额度', + installmentPeriod: '分期期限', + optional: '可选', + applicationAmount: '申请金额', + loanTerm: '借款期限', + repaymentPerInstallment: '每期还款', + dailyInterestRate: '日利率', + totalInterest: '总利息', + successfulBorrowing: '成功借款', + enterAgreement: '我已阅读并同意', + authAgreement: '委托授权协议', + serviceAgreement: '平台服务协议', + lawAgreement: '法律协议', + loansAgreement: '借款协议', + immediateBorrowing: '立即借款', + pleaseFillInYourPersonalInformationFirst: '请先填写个人资料', + pleaseEnterAgreement: '请阅读并同意相关协议', + }, + my: { + userInfo: '我的资料', + loan: '我的借款', + repayment: '我的还款', + legalLiability: '法律责任', + uploadPassword: '修改密码', + logout: '退出登录', + language: '切换语言', + }, + serveList: { + loan: '我的贷款', + balance: '账户余额', + amountToBeRepaid: '待还款金额', + immediateWithdrawal: '立即借款', + financialSecurity: '账户资金安全由银行保障', + }, + borrowInfo: { + applicationTime: '申请时间', + loanDetails: '贷款详情', + loanInfo: '借款信息', + loanNo: '贷款编号', + loanAmount: '借款金额', + loanCycle: '贷款周期', + withdrawalBank: '提现银行', + repaymentPerInstallment: '每期还款', + describe: '描述', + receivingAccount: '收款帐户', + usageOfLoan: '借款用途', + }, + loans: { + enterSubmitApplication: '您确定要申请贷款吗' + }, + userInfo: { + realPrompt: '填写真实有效的信息,审核才会通过哦', + idCardPrompt: '需本人身份证,且内容清晰可辨', + photographPrompt: '请您确认拍照权限已开启', + name: '姓名', + idCard: '身份证号', + idCardUp1: '点击上传身份证人像面', + idCardUp2: '点击上传身份证国徽面', + idCardUp3: '点击上传手持身份证照', + shootingRequirements: '拍摄要求', + standardShooting: '标准拍摄', + missingBorder: '边框缺失', + outOfFocus: '照片模糊', + flashStrongly: '闪光强烈', + unitName: '单位名称', + position: '职位', + workTelephone: '单位电话', + workingAge: '工作年龄', + monthlyPay: '月薪', + unitAddress: '单位地址', + addressInfo: '详细地址', + currentResidentialAddress: '现居住地址', + directFamilyContactPerson: '直系亲属联系人', + relationship: '关系', + parents: '父母', + spouse: '配偶', + children: '子女', + grandparents: '祖父母', + bankOfDeposit: '开户银行', + bankCard: '银行卡号', + } +} + + + + + + + + + + + + + diff --git a/src/main.ts b/src/main.ts index d20af67..d2d5e16 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,20 +1,29 @@ import './array.prototype.d.ts'; import './date.prototype.d.ts'; import './string.prototype.d.ts'; +// 导入资源文件 import { createApp } from 'vue' import App from './App.vue' import router from "./router"; import {setupStore} from "@/store"; import {setupCustomComponents} from "@/plugins/customComponents"; +import {vantLocales} from './lang' // 2. 引入组件样式 import 'vant/lib/index.css'; import 'vant/es/toast/style' const app = createApp(App) + +// app.use(i18n) + + app.use(router) app.mount('#app') setupStore(app) +// vant-ui组件国际化 +vantLocales(app) + setupCustomComponents(app) diff --git a/src/views/agreement/agreement.vue b/src/views/agreement/agreement.vue index cc3dafc..b32165c 100644 --- a/src/views/agreement/agreement.vue +++ b/src/views/agreement/agreement.vue @@ -11,8 +11,10 @@ import {getAgreement} from "@/api"; import {onMounted, ref} from "vue"; import {useRoute} from "vue-router"; import {px2vw} from "@/utils"; +import { useI18n } from 'vue-i18n'; const route = useRoute() +const { t } = useI18n() const agreement = ref('') const _getSystemConfigOne = (key) => { @@ -21,10 +23,10 @@ const _getSystemConfigOne = (key) => { }) } const tittleMap = { - loansAgreement: '借款协议', - serviceAgreement: '平台服务协议', - authAgreement: '委托授权协议', - lawAgreement: '法律协议', + loansAgreement: t('home.loansAgreement'), + serviceAgreement: t('home.serviceAgreement'), + authAgreement: t('home.authAgreement'), + lawAgreement: t('home.lawAgreement'), } onMounted(() => { diff --git a/src/views/borrowInfo/index.vue b/src/views/borrowInfo/index.vue index ad564eb..4c4ac2e 100644 --- a/src/views/borrowInfo/index.vue +++ b/src/views/borrowInfo/index.vue @@ -3,7 +3,7 @@
- 申请时间 {{ new Date(borrowInfo.createTime).format('yyyy-MM-dd hh:mm:ss') }} + {{ $t('borrowInfo.applicationTime') }} {{ new Date(borrowInfo.createTime).format('yyyy-MM-dd hh:mm:ss') }} @@ -13,7 +13,7 @@ - 温馨提示 + {{ $t('app.tips') }} {{ stepBorrow.borrowRemark }} @@ -23,15 +23,15 @@
- 贷款详情 + {{ $t('borrowInfo.loanDetails') }} - - + + - - - - + + + + @@ -46,16 +46,18 @@ import {getBorrowInfo, getUserInfo} from "@/api"; import {resetData} from "@/utils/dataUtil"; import {useRoute} from "vue-router"; import {toRoundMark} from "@/utils"; +import { useI18n } from 'vue-i18n'; const route = useRoute() const active = ref(0); +const { t } = useI18n() const stepBorrow = reactive({ "borrowNameStyle": "", "borrowRemark": "", "borrowStep": [ { - "name": "提交成功", + "name": t('app.submittedSuccessfully'), "over": true }, { @@ -63,7 +65,7 @@ const stepBorrow = reactive({ "over": true }, { - "name": "到账成功", + "name": t('app.receivedSuccessfully'), "over": false } ] diff --git a/src/views/forget/index.vue b/src/views/forget/index.vue index 8999b6b..7eaec6a 100644 --- a/src/views/forget/index.vue +++ b/src/views/forget/index.vue @@ -8,8 +8,8 @@ v-model="loginData.phoneNumber" v-if="flag === '1'" class="login-btn" - label="手机号码" - placeholder="请输入手机号码" + :label="$t('app.phoneNumber')" + :placeholder="$t('app.enter') + $t('app.phoneNumber')" label-align="top" style="background: #12332100" type="tel" @@ -19,8 +19,8 @@ v-model="loginData.code" class="login-btn" v-if="flag === '1'" - label="验证码" - placeholder="请输入验证码" + :label="$t('app.verificationCode')" + :placeholder="$t('app.enter') + $t('app.verificationCode')" label-align="top" style="background: #12332100" type="number" @@ -29,10 +29,10 @@
-
发送验证码
+
{{ $t('app.send') }}{{ $t('app.verificationCode') }}
@@ -41,9 +41,9 @@ v-model="loginData.password" class="login-btn" v-if="flag === '2'" - label="登录密码" + :label="$t('app.login') + $t('app.password')" label-align="top" - placeholder="请设置6-16位密码" + :placeholder="$t('app.passwordPlaceholder')" style="background: #12332100" type="password" /> @@ -52,9 +52,9 @@ v-model="loginData.confirmPassword" class="login-btn" v-if="flag === '2'" - label="确认密码" + :label="$t('app.confirm') + $t('app.password')" label-align="top" - placeholder="请再次输入密码" + :placeholder="$t('app.passwordPlaceholder1')" style="background: #12332100" type="password" /> @@ -67,7 +67,7 @@ v-if="flag === '1'" @click.stop="next" > - 下一步 + {{ $t('app.next') }} - 确认修改 + {{ $t('app.confirm') }}{{ $t('app.update') }} @@ -89,6 +89,7 @@ import {reactive, ref} from "vue"; import {sendSmsForget, updatePwd} from "@/api/login"; import {showToast} from "vant"; +import { useI18n } from 'vue-i18n'; const loginData = reactive({ phone: null, @@ -100,6 +101,7 @@ const loginData = reactive({ }) const flag = ref('1') +const { t } = useI18n() const time = ref(60 * 1000); @@ -118,7 +120,7 @@ const start = () => { onFinish() }) } else { - showToast('请输入手机号') + showToast(t('app.enter') + t('app.phoneNumber')) } }; diff --git a/src/views/index/home/index.vue b/src/views/index/home/index.vue index 878ed10..17a7992 100644 --- a/src/views/index/home/index.vue +++ b/src/views/index/home/index.vue @@ -12,20 +12,20 @@
-
产品详情
+
{{$t('home.productDetails')}}
@@ -33,7 +33,7 @@
-
申请金额(元)
+
{{$t('home.applicationAmount')}}({{$t('app.yuan')}})
{{ strip }}
@@ -52,10 +52,10 @@
-
借款期限
+
{{$t('home.loanTerm')}}
- {{ lm }}个月 + {{ lm }}{{$t('app.month')}}
@@ -63,9 +63,9 @@
-
每期还款
+
{{ $t('home.repaymentPerInstallment') }}
¥{{ calLoan.avgRepayment }}
-
(日利率{{ calLoan.loanRate }}% 总利息¥{{ calLoan.totalInterest }})
+
({{ $t('home.dailyInterestRate') }}{{ calLoan.loanRate }}% {{ $t('home.totalInterest') }}¥{{ calLoan.totalInterest }})
@@ -75,17 +75,17 @@
{{ loansUser.time }}
{{ loansUser.phone }}
-
成功借款
+
{{ $t('home.successfulBorrowing') }}
¥{{ loansUser.amount }}
- 我已阅读并同意 - 《委托授权协议》 - 《平台服务协议》 - 《借款协议》 + {{ $t('home.enterAgreement') }} + 《{{ $t('home.authAgreement') }}》 + 《{{ $t('home.serviceAgreement') }}》 + 《{{ $t('home.loansAgreement') }}》
@@ -97,7 +97,7 @@ style="width: 100%; " @click.stop="immediateBorrowing" > - 立即借款 + {{ $t('home.immediateBorrowing') }}
@@ -115,10 +115,11 @@ import {resetData} from "@/utils/dataUtil"; import {watch} from "vue-demi"; import {showToast} from "vant"; import JGap from "@/components/JGap/JGap.vue"; +import { useI18n } from 'vue-i18n'; const user = useUserStore() const router = useRouter() - +const { t } = useI18n() const bannerList = [ { bannerUrl: getAssetsImages('home/banner_home.png') @@ -159,14 +160,14 @@ const immediateBorrowing = () => { } }) } else { - showToast('请先填写个人资料') + showToast(t('home.pleaseFillInYourPersonalInformationFirst')) router.push({ path: '/userInfo' }) } return } - showToast('请阅读并同意相关协议') + showToast(t('home.pleaseEnterAgreement')) } const loans = reactive({ diff --git a/src/views/index/index.vue b/src/views/index/index.vue index f096f26..4e9bc66 100644 --- a/src/views/index/index.vue +++ b/src/views/index/index.vue @@ -6,7 +6,7 @@ - {{ tabBar.text }} + {{ $t(tabBar.text) }} @@ -16,16 +16,16 @@ diff --git a/src/views/index/my/index.vue b/src/views/index/my/index.vue index f3be211..660eee3 100644 --- a/src/views/index/my/index.vue +++ b/src/views/index/my/index.vue @@ -9,21 +9,21 @@
- + - + - + diff --git a/src/views/my/userInfo/index.vue b/src/views/my/userInfo/index.vue index ccf6480..7aed190 100644 --- a/src/views/my/userInfo/index.vue +++ b/src/views/my/userInfo/index.vue @@ -3,10 +3,10 @@
- + - + - + - + @@ -41,8 +41,8 @@
@@ -71,9 +71,12 @@ import {showToast} from "vant"; import {useRouter} from "vue-router"; import {register, sendSmsRegister} from "@/api/login"; import {useUserStore} from "@/store/modules/user"; +import { useI18n } from 'vue-i18n'; const router = useRouter() const userStore = useUserStore() +const { t } = useI18n() + const loginData = reactive({ phone: null, @@ -100,7 +103,7 @@ const start = () => { onFinish() }) } else { - showToast('请输入手机号') + showToast(t('app.enter') + t('app.phoneNumber')) } }; diff --git a/src/views/uploadPassword/index.vue b/src/views/uploadPassword/index.vue index 0c2d779..43891f3 100644 --- a/src/views/uploadPassword/index.vue +++ b/src/views/uploadPassword/index.vue @@ -10,8 +10,8 @@ v-model="loginData.phoneNumber" disabled class="login-btn" - label="手机号码" - placeholder="请输入手机号码" + :label="$t('app.phoneNumber')" + :placeholder="$t('app.enter') + $t('app.phoneNumber')" label-align="top" style="background: #12332100" type="tel" @@ -20,8 +20,8 @@
@@ -41,9 +41,9 @@