中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

wordpress本地網(wǎng)站搭建整套課程關(guān)鍵詞熱度查詢

wordpress本地網(wǎng)站搭建整套課程,關(guān)鍵詞熱度查詢,美國(guó)哪個(gè)網(wǎng)站做diy電腦,虛擬主機(jī)可建站1個(gè)是不是只能放一個(gè)網(wǎng)站痛點(diǎn) 在i18n多語(yǔ)言模塊使用過(guò)程中,發(fā)現(xiàn)下面幾個(gè)問(wèn)題,需要解決 1)uni-best框架下,$t功能函數(shù)無(wú)法實(shí)時(shí)的切換語(yǔ)言,可能跟使用有關(guān) 2)uni-best建議的translate方式在vue塊外使用太繁瑣,希望不用…

痛點(diǎn)

在i18n多語(yǔ)言模塊使用過(guò)程中,發(fā)現(xiàn)下面幾個(gè)問(wèn)題,需要解決

1)uni-best框架下,$t功能函數(shù)無(wú)法實(shí)時(shí)的切換語(yǔ)言,可能跟使用有關(guān)

2)uni-best建議的translate方式在vue塊外使用太繁瑣,希望不用導(dǎo)入,直接書(shū)寫(xiě)$t使用。統(tǒng)一邏輯,減少?gòu)?fù)雜度

目標(biāo)

需要完成的目標(biāo)如下

1)將多語(yǔ)言模塊放到公共區(qū)域,可能會(huì)導(dǎo)致原生標(biāo)題無(wú)法正常切換語(yǔ)音。這個(gè)無(wú)所謂,因?yàn)闃?biāo)題欄已經(jīng)custom定制并組件化了

2)修復(fù)無(wú)法正常實(shí)時(shí)切換語(yǔ)言的$t,這個(gè)可能跟使用方式有關(guān),anyway,讓它能按原模式正常工作

3)在任何地方都可以使用$t功能,無(wú)論是template還是script部分

實(shí)現(xiàn)

uni-best的translate方法代碼實(shí)現(xiàn)了一個(gè)很好的思路,只是無(wú)法支持占位符的功能。讓我們改進(jìn)它

/*** 任意文件使用$t翻譯方法,需要在app里全局導(dǎo)入* @param { string } localeKey 多語(yǔ)言的key,eg: "app.name"*/
export const translate = (localeKey: string, opt: Record<string, any> = {}) => {if (!localeKey) {console.error(`[i18n] Function translate(), localeKey param is required`)return ''}const locale = uni.getLocale()const message = messages[locale]if (Object.keys(message).includes(localeKey)) {const template = message[localeKey]// 使用 Object.keys 遍歷 params 對(duì)象,替換模板中的大括號(hào)占位符return Object.keys(opt).reduce((acc, key) => acc.replace(new RegExp(`{${key}}`, 'g'), opt[key]),template)}return localeKey // 轉(zhuǎn)換不了則原樣輸出
}

然后在main.ts里把它掛載到全局

import { message, alert, confirm, translate } from '@/utils'...export function createApp() {const app = createSSRApp(App)...app.use(i18n)app.config.globalProperties.$t = translate // 覆蓋不能正常工作的$t函數(shù)// #ifdef MP-WEIXIN// 由于微信小程序的運(yùn)行機(jī)制問(wèn)題,需聲明如下一行,H5和APP非必填app.config.globalProperties._i18n = i18n// #endifreturn {app}
}

至于在任意位置使用,讓我們把translate掛載到代碼部分的全局

// 安裝到全局,覆蓋不能正常工作的$t
;(function (global) {console.log('install');(global as any).$t = translate
})(this || window || globalThis)

下面是最終完成的i18n.ts模塊,添加了語(yǔ)言切換功能的導(dǎo)出。

API.tools.locale.request是后端的語(yǔ)言切換代碼,實(shí)現(xiàn)前后端語(yǔ)言統(tǒng)一切換,目前只導(dǎo)入了3種語(yǔ)言,需要其它語(yǔ)言可以自行增加

/*** ccframe i18n模塊* 注意:由于某種未知的原因,uni-best的$t()翻譯方法有無(wú)法切換語(yǔ)音以及安卓出錯(cuò)的問(wèn)題,因此使用導(dǎo)出的translate方法進(jìn)行動(dòng)態(tài)翻譯* @Jim 24/09/20*/import { createI18n } from 'vue-i18n'import en from '@/datas/en.json'
import zhHans from '@/datas/zh-Hans.json'
import zhHant from '@/datas/zh-Hant.json'const messages = {en,'zh-Hant': zhHant,'zh-Hans': zhHans // key 不能亂寫(xiě),查看截圖 screenshots/i18n.png
}const i18n = createI18n({legacy: false, // 解決空白報(bào)錯(cuò)問(wèn)題locale: uni.getLocale(), // 獲取已設(shè)置的語(yǔ)言,fallback 語(yǔ)言需要再 manifest.config.ts 中設(shè)置messages
})type LocaleType = 'en' | 'zh-Hant' | 'zh-Hans'i18n.global.locale.value = import.meta.env.VITE_FALLBACK_LOCALE/*** 任意文件使用$t翻譯方法,需要在app里全局導(dǎo)入* @param { string } localeKey 多語(yǔ)言的key,eg: "app.name"*/
export const translate = (localeKey: string, opt: Record<string, any> = {}) => {if (!localeKey) {console.error(`[i18n] Function translate(), localeKey param is required`)return ''}const locale = uni.getLocale()const message = messages[locale]if (Object.keys(message).includes(localeKey)) {const template = message[localeKey]// 使用 Object.keys 遍歷 params 對(duì)象,替換模板中的大括號(hào)占位符return Object.keys(opt).reduce((acc, key) => acc.replace(new RegExp(`{${key}}`, 'g'), opt[key]),template)}return localeKey // 轉(zhuǎn)換不了則原樣輸出
}const langMapper: Record<string, string> = {'zh-Hans': 'zh-CN','zh-Hant': 'zh-TW',en: 'en-US'
}export const setLocale = async (locale: LocaleType) => {await API.tools.locale.request({ lang: langMapper[locale] })// #ifdef APP-PLUSsetTimeout(() => {// 如果是APP,需要等待重新啟動(dòng)頁(yè)面i18n.global.locale.value = localeuni.setLocale(locale)}, 300)// #endif// #ifndef APP-PLUSi18n.global.locale.value = localeuni.setLocale(locale)// #endif// currentLang.value = locale
}// 安裝到全局,覆蓋不能正常工作的$t
;(function (global) {console.log('install');(global as any).$t = translate
})(this || window || globalThis)export default i18n/** 非vue 文件使用 i18n
export const testI18n = () => {console.log(t('app.name'))// 下面同樣生效uni.showModal({title: 'i18n 測(cè)試',content: t('app.name')})
} */

然后就可以簡(jiǎn)單愉快的使用多語(yǔ)言功能了。

頁(yè)面上$t('login.enterPhone')根據(jù)語(yǔ)言顯示“輸入手機(jī)號(hào)碼”:

? ? ? ? ? <up-input

? ? ? ? ? ? fontSize="32rpx"

? ? ? ? ? ? :placeholder="$t('login.enterPhone')"

? ? ? ? ? ? border="surround"

? ? ? ? ? ? v-model="data.userMobile"

? ? ? ? ? ? style="letter-spacing: 2rpx"

? ? ? ? ? ? @change="data.mobileErr = ''"

? ? ? ? ? ? type="number"

? ? ? ? ? ? maxlength="11"

? ? ? ? ? />
代碼片段,這個(gè)是form表單驗(yàn)證公共庫(kù)里的使用:
?

? required(error?: string): Validator {

? ? this.push({

? ? ? required: true,

? ? ? validator: (rule: any, val: any, callback: (error?: Error) => void) => {

? ? ? ? // 補(bǔ)充驗(yàn)證模式

? ? ? ? return val !== undefined && val !== null && val !== ''

? ? ? },

? ? ? message:

? ? ? ? error ??

? ? ? ? (this.labelText

? ? ? ? ? ? $t('utils.validator.required') + this.labelText

? ? ? ? ? : $t('utils.validator.notEmpty')),

? ? ? trigger: ['change', 'blur']

? ? })

? ? return this

? }

$t('utils.validator.required')根據(jù)語(yǔ)言輸出:請(qǐng)輸入
$t('utils.validator.notEmpty')根據(jù)語(yǔ)言輸出:內(nèi)容不能為空

完善Typescript類型定義

這樣使用起來(lái),還有那么一點(diǎn)不舒服,就是在script中使用$t時(shí),會(huì)報(bào)錯(cuò)類型找不到紅紅的一片(實(shí)際編譯沒(méi)問(wèn)題)。對(duì)于代碼強(qiáng)迫癥人會(huì)有點(diǎn)一點(diǎn)受不了,那么讓這個(gè)錯(cuò)誤的爆紅消失掉:

unibest里原本帶了i18n.d.ts文件,把我們掛載到script全局的定義添加進(jìn)去:
?

/* eslint-disable no-unused-vars */
export {}declare module 'vue' {interface ComponentCustomProperties {$t: (key: string, opt?: Record<string, any>) => string// $tm: (key: string, opt?: Record<string, any>) => [] | { [p: string]: any }}
}declare global {function $t(localeKey: string, opt?: Record<string, any>): string
}

刷新一下vscode,不爆紅了,完美~

http://www.risenshineclean.com/news/2580.html

相關(guān)文章:

  • 百分百營(yíng)銷軟件官網(wǎng)seo是啥軟件
  • 重慶網(wǎng)站制作長(zhǎng)沙鄭州品牌網(wǎng)站建設(shè)
  • 網(wǎng)站業(yè)務(wù)建設(shè)是什么意思策劃網(wǎng)絡(luò)營(yíng)銷方案
  • 金華網(wǎng)站建設(shè)南京seo排名優(yōu)化公司
  • 網(wǎng)站視頻做背景百度賬戶代運(yùn)營(yíng)
  • 濟(jì)寧網(wǎng)站建設(shè)專家seo入門基礎(chǔ)教程
  • 做設(shè)計(jì)那些網(wǎng)站可以賣設(shè)計(jì)怎么做小說(shuō)推廣掙錢
  • wordpress添加用戶關(guān)閉郵箱網(wǎng)絡(luò)關(guān)鍵詞優(yōu)化方法
  • 便宜的vps租用網(wǎng)站專業(yè)seo優(yōu)化推廣
  • 深圳做微信網(wǎng)站制作企業(yè)如何開(kāi)展網(wǎng)絡(luò)營(yíng)銷
  • 做網(wǎng)站填素材關(guān)鍵詞優(yōu)化方法有什么步驟
  • 溫州市建設(shè)質(zhì)量監(jiān)督站網(wǎng)站福建seo排名培訓(xùn)
  • 一人開(kāi)公司做網(wǎng)站創(chuàng)業(yè)百度指數(shù)人群畫(huà)像哪里查詢
  • 變更股東怎樣在工商網(wǎng)站做公示關(guān)鍵詞挖掘工具網(wǎng)站
  • 企業(yè)安全文化實(shí)現(xiàn)的途徑網(wǎng)站推廣優(yōu)化流程
  • 廣州市市場(chǎng)監(jiān)督管理局手機(jī)優(yōu)化大師下載安裝
  • 金華哪里做網(wǎng)站怎么做百度推廣平臺(tái)
  • wordpress文章中文版愛(ài)站seo查詢軟件
  • 海北高端網(wǎng)站建設(shè)價(jià)格龍華百度快速排名
  • 做棋牌網(wǎng)站合法嗎網(wǎng)站排名seo
  • 官網(wǎng)網(wǎng)站設(shè)計(jì)費(fèi)用網(wǎng)絡(luò)優(yōu)化seo薪酬
  • 云南企業(yè)建站企業(yè)網(wǎng)絡(luò)營(yíng)銷顧問(wèn)
  • 你的網(wǎng)站正在建設(shè)中新聞稿件代發(fā)平臺(tái)
  • 坑梓網(wǎng)站建設(shè)流程網(wǎng)絡(luò)seo是什么意思
  • 文件網(wǎng)站建設(shè)百中搜優(yōu)化軟件靠譜嗎
  • wordpress 按鈕美化網(wǎng)站seo推廣
  • 微網(wǎng)站站點(diǎn)名稱網(wǎng)絡(luò)營(yíng)銷策劃內(nèi)容
  • b2c網(wǎng)站開(kāi)發(fā)公司福州seo推廣外包
  • 網(wǎng)站和公眾號(hào)的區(qū)別是什么意思互聯(lián)網(wǎng)營(yíng)銷方式
  • 天河區(qū)做網(wǎng)站公司產(chǎn)品推廣的目的和意義