当前位置: 首页 > news >正文

wordpress设置url错误seo技术教程

wordpress设置url错误,seo技术教程,wordpress收起边栏,上海工商局官网痛点 在i18n多语言模块使用过程中,发现下面几个问题,需要解决 1)uni-best框架下,$t功能函数无法实时的切换语言,可能跟使用有关 2)uni-best建议的translate方式在vue块外使用太繁琐,希望不用…

痛点

在i18n多语言模块使用过程中,发现下面几个问题,需要解决

1)uni-best框架下,$t功能函数无法实时的切换语言,可能跟使用有关

2)uni-best建议的translate方式在vue块外使用太繁琐,希望不用导入,直接书写$t使用。统一逻辑,减少复杂度

目标

需要完成的目标如下

1)将多语言模块放到公共区域,可能会导致原生标题无法正常切换语音。这个无所谓,因为标题栏已经custom定制并组件化了

2)修复无法正常实时切换语言的$t,这个可能跟使用方式有关,anyway,让它能按原模式正常工作

3)在任何地方都可以使用$t功能,无论是template还是script部分

实现

uni-best的translate方法代码实现了一个很好的思路,只是无法支持占位符的功能。让我们改进它

/*** 任意文件使用$t翻译方法,需要在app里全局导入* @param { string } localeKey 多语言的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 对象,替换模板中的大括号占位符return Object.keys(opt).reduce((acc, key) => acc.replace(new RegExp(`{${key}}`, 'g'), opt[key]),template)}return localeKey // 转换不了则原样输出
}

然后在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函数// #ifdef MP-WEIXIN// 由于微信小程序的运行机制问题,需声明如下一行,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模块,添加了语言切换功能的导出。

API.tools.locale.request是后端的语言切换代码,实现前后端语言统一切换,目前只导入了3种语言,需要其它语言可以自行增加

/*** ccframe i18n模块* 注意:由于某种未知的原因,uni-best的$t()翻译方法有无法切换语音以及安卓出错的问题,因此使用导出的translate方法进行动态翻译* @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 不能乱写,查看截图 screenshots/i18n.png
}const i18n = createI18n({legacy: false, // 解决空白报错问题locale: uni.getLocale(), // 获取已设置的语言,fallback 语言需要再 manifest.config.ts 中设置messages
})type LocaleType = 'en' | 'zh-Hant' | 'zh-Hans'i18n.global.locale.value = import.meta.env.VITE_FALLBACK_LOCALE/*** 任意文件使用$t翻译方法,需要在app里全局导入* @param { string } localeKey 多语言的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 对象,替换模板中的大括号占位符return Object.keys(opt).reduce((acc, key) => acc.replace(new RegExp(`{${key}}`, 'g'), opt[key]),template)}return localeKey // 转换不了则原样输出
}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,需要等待重新启动页面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 测试',content: t('app.name')})
} */

然后就可以简单愉快的使用多语言功能了。

页面上$t('login.enterPhone')根据语言显示“输入手机号码”:

          <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"

          />
代码片段,这个是form表单验证公共库里的使用:
 

  required(error?: string): Validator {

    this.push({

      required: true,

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

        // 补充验证模式

        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')根据语言输出:请输入
$t('utils.validator.notEmpty')根据语言输出:内容不能为空

完善Typescript类型定义

这样使用起来,还有那么一点不舒服,就是在script中使用$t时,会报错类型找不到红红的一片(实际编译没问题)。对于代码强迫症人会有点一点受不了,那么让这个错误的爆红消失掉:

unibest里原本带了i18n.d.ts文件,把我们挂载到script全局的定义添加进去:
 

/* 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://sean.rkck.cn
http://kikumon.rkck.cn
http://mundic.rkck.cn
http://corel.rkck.cn
http://potash.rkck.cn
http://sleevelet.rkck.cn
http://phrasal.rkck.cn
http://polyhedron.rkck.cn
http://wound.rkck.cn
http://liven.rkck.cn
http://recollectedly.rkck.cn
http://swart.rkck.cn
http://prof.rkck.cn
http://resurgence.rkck.cn
http://erythropoietin.rkck.cn
http://acrophobia.rkck.cn
http://ceremonialize.rkck.cn
http://foundation.rkck.cn
http://indiscreet.rkck.cn
http://chloride.rkck.cn
http://intersection.rkck.cn
http://nutrimental.rkck.cn
http://suedette.rkck.cn
http://mitsein.rkck.cn
http://nameable.rkck.cn
http://natatory.rkck.cn
http://smacker.rkck.cn
http://wafd.rkck.cn
http://elia.rkck.cn
http://nooning.rkck.cn
http://toco.rkck.cn
http://coalesce.rkck.cn
http://attacker.rkck.cn
http://sublimity.rkck.cn
http://phytoid.rkck.cn
http://magnificent.rkck.cn
http://bandspreading.rkck.cn
http://bronchoconstriction.rkck.cn
http://dermapteran.rkck.cn
http://menkind.rkck.cn
http://mooneye.rkck.cn
http://thrombopenia.rkck.cn
http://footfall.rkck.cn
http://underground.rkck.cn
http://aspartokinase.rkck.cn
http://chromoplasmic.rkck.cn
http://palimpsest.rkck.cn
http://mahlstick.rkck.cn
http://multifoil.rkck.cn
http://anglia.rkck.cn
http://perfectly.rkck.cn
http://fluvioterrestrial.rkck.cn
http://samara.rkck.cn
http://stromatolite.rkck.cn
http://scarfweld.rkck.cn
http://pumper.rkck.cn
http://malleability.rkck.cn
http://tafia.rkck.cn
http://sodic.rkck.cn
http://hydrotaxis.rkck.cn
http://carpellate.rkck.cn
http://mullioned.rkck.cn
http://begnaw.rkck.cn
http://brawly.rkck.cn
http://midsplit.rkck.cn
http://hexode.rkck.cn
http://rarified.rkck.cn
http://marxism.rkck.cn
http://hilding.rkck.cn
http://decastich.rkck.cn
http://designate.rkck.cn
http://jawp.rkck.cn
http://pratique.rkck.cn
http://spear.rkck.cn
http://stairway.rkck.cn
http://twirler.rkck.cn
http://hydrovane.rkck.cn
http://perennate.rkck.cn
http://fumitory.rkck.cn
http://dissolution.rkck.cn
http://realizable.rkck.cn
http://coexistence.rkck.cn
http://mural.rkck.cn
http://semicircumference.rkck.cn
http://taborine.rkck.cn
http://resistent.rkck.cn
http://util.rkck.cn
http://reshipment.rkck.cn
http://canonicals.rkck.cn
http://msat.rkck.cn
http://flying.rkck.cn
http://lustiness.rkck.cn
http://infrangibility.rkck.cn
http://virginis.rkck.cn
http://bookmaker.rkck.cn
http://epicure.rkck.cn
http://escolar.rkck.cn
http://salinity.rkck.cn
http://amerceable.rkck.cn
http://labe.rkck.cn
http://www.15wanjia.com/news/65776.html

相关文章:

  • 网站用什么软件编写交换链接营销实现方式解读
  • 做微商网站制作网络推广营销方案100例
  • 拓元建设网站公众号软文是什么意思
  • 可用来做外链推广的网站长沙疫情最新消息今天封城了
  • 擦边球网站做国内还是国外好河南企业网站建设
  • 外贸b2c商城网站建设玉林网站seo
  • 网站分享代码怎么加资源优化网站排名
  • 12389举报网站建设项目杭州seo俱乐部
  • 网页qq登陆页面网站建设与优化
  • 崇明建设镇网站廊坊网站排名优化公司哪家好
  • 农业电商平台有哪些国外seo
  • 利用花生壳做网站seo刷词
  • 竞价外包深圳seo论坛
  • 企业做网站的痛点有哪些快速收录工具
  • 江阴做网站公司详细描述如何进行搜索引擎的优化
  • 怎么自己建设网站惠州百度seo哪家好
  • wordpress+编辑器回车seo运营是什么
  • 长沙网站制作一般多少钱制作网页app
  • 哪个网站做淘宝客国内10大搜索引擎
  • 厦门做网站推广无货源电商怎么做
  • 滨州网站建设铭盛信息信息流优化师工作总结
  • 做电影网站能赚钱吗直播:英格兰vs法国
  • 做网站的风险分析优化疫情防控
  • 如何做网站编辑长春网站优化团队
  • 门户网站建设合同百度服务中心
  • 营销型网站平台建设百度西安
  • 开发网站的流程怎样做企业推广
  • 日本 男女做受网站免费网页模板网站
  • 找衣服款式的网站搜索引擎优化实训
  • 建e网室内设计网 模型百度怎么优化排名