最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • webpack ——自定义Loader,将i18n英文单词首字母转大写

    正文概述 掘金(起再好的名字也中不了奖)   2021-01-08   479

    问题

    在客户要求下要将项目中中英文切换,英文要以英文单词首字母大写为准。可是前期开发人员并没有规范。 多以这种:

     "headerFontColor":"top font MAV Mac /MAC(V)",
    

    存在,可是emmmmm...一个一个修改,必si。

    方法 1

    去看了vue-i18n 官网,找到formatter可实现。 实践:

    // 实现自定义格式
    class CustomFormatter {
        constructor (options) {
    
        }
       //  英文处理
        upperCase(text) {
            return text.replace(/\b([\w|']+)\b/g, function(result) {
                let lowText = result.toLowerCase()
                return lowText.replace(lowText.charAt(0), lowText.charAt(0).toUpperCase());
            });
        }
        interpolate (message, values) {
            // 返回插值数组
            return [ this.upperCase(message)]
        }
    }
    const i18n = new VueI18n({
        locale:utils.getCookie('language')?utils.getCookie('language'):'zh',
        formatter: new CustomFormatter(),
        messages:messages,
    });
    

    方法 2

    使用loader。

    1. 创建文件夹rules 管理自定义的loader
    2. 在rules创建文件夹diy-loader,并在diy-loader文件夹创建index.js(编写处理文件代码)
    // 获取loader 中Options 配置
    let loaderUtil = require('loader-utils')
    
    function upperCase(text) {
      return text.replace(/\b([\w|']+)\b/g, function(result) {
                let lowText = result.toLowerCase()
          return lowText.replace(lowText.charAt(0), lowText.charAt(0).toUpperCase());
      });
    }
    
    function upperCaseByJson(jsonData) {
        let keys = Object.keys(jsonData)
        for (let item in jsonData) {
            if (jsonData[item] instanceof  Object) {
                upperCaseByJson(jsonData[item])
            } else  {
                jsonData[item] =  upperCase(jsonData[item])
            }
        }
    }
    
    module.exports = function (source) {
        const  options = loaderUtil.getOptions(this) || {}
        let  sourceJson, startVal,startTime = new Date().getTime()
        console.log('自定义loader source', startTime)
    	// loader 中test 校验的文件 数据(source)
        if (source && source.split('=').length >= 2 ) {
            startVal =  source.split('=')[0]
            sourceJson = JSON.parse(source.split('=')[1])
            upperCaseByJson(sourceJson)
        }
        console.log('自定义loader source',new Date().getTime() - startTime )
        source =  startVal + '=' + JSON.stringify(sourceJson)
        return   source
    }
    
    
    

    3.在 webpack.config.js 加载自定义loader

    
    resolveLoader: {
            modules: [
                path.resolve(__dirname,'./rules'),
                'node_modules' // npm 加载的loader
            ]
        },
        module: { // 处理对应模块
            rules: [
                // 处理自定义
                {
                     test: /\.en\.json$/,
                     loader:'diy-loader',
                     include: [path.resolve(__dirname,'./src/assets/i18n')]
                 }
                ]
        
    

    测试。


    下载网 » webpack ——自定义Loader,将i18n英文单词首字母转大写

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元