【微信小程序】实现中英文切换

1、组织语言资源

创建两个文件夹,分别用于存放中文和英文的语言资源。例如,可以在 utils 文件夹下创建 lang 文件夹,然后在其中创建 zh.js 和 en.js 文件,分别存放中文和英文的文本内容。

zh.js:

javascript 复制代码
const zh = {
  home: {
    title: '这里是首页',
  },
};

module.exports = zh;

en.js:

javascript 复制代码
const en = {
  home: {
    title: 'Here is the home page',
  },
};

module.exports = en;
2、创建语言切换逻辑

在 app.js 文件中,设置默认语言并提供切换语言的功能。

javascript 复制代码
// app.js
App({
  globalData: {
    language: 'zh', // 默认语言
    translations: require('./utils/lang/zh') // 默认加载中文语言包
  },

  onLaunch: function () {
    // 从缓存中获取用户选择的语言
    const language = wx.getStorageSync('language') || 'zh';
    this.setLanguage(language);
  },

  setLanguage: function (lang) {
    this.globalData.language = lang;
    if (lang === 'en') {
      this.globalData.translations = require('./utils/lang/en');
    } else {
      this.globalData.translations = require('./utils/lang/zh');
    }
    wx.setStorageSync('language', lang);
  }
});
3、使用语言资源
① 在页面中使用
javascript 复制代码
Page({
  data: {
    translations: {}
  },

  onShow: function () {
    const app = getApp();
    this.setData({
      translations: app.globalData.translations
    });
  },

  switchLanguage: function () {
    const app = getApp();
    const newLang = app.globalData.language === 'zh' ? 'en' : 'zh';
    app.setLanguage(newLang);
    this.setData({
      translations: app.globalData.translations
    });
  }
});
html 复制代码
<view>
  <text>{{translations.home.title}}</text>
  <button bindtap="switchLanguage">切换语言</button>
</view>
② 导航栏修改

把页面导航栏信息放到语言文件中:

javascript 复制代码
// zh.js
nav: {
    home: '首页',
    myInfo: '我的',
    func: '功能'
},
// en.js
nav: {
  home: 'home',
  myInfo: 'myInfo',
  func: 'function'
},
javascript 复制代码
 onShow: function () {
    const app = getApp();
    wx.setNavigationBarTitle({
      title: translations.nav.home
    });
 }
③ 底部栏修改

使用自定义 tabbar

可参考 微信小程序自定义tabbar

custom-tab-bar文件中:

index.js:

javascript 复制代码
Component({
  /**
   * 组件的属性列表
   */
  properties: {

  },

  /**
   * 组件的初始数据
   */
  data: {
    selected: 0,
    list: [
      {
        pagePath: "/pages/index/index",
        text: "首页",
        iconPath: "/public/image/icon_home2.png",
        selectedIconPath: "/public/image/icon_home1.png"
      },
      {
        pagePath: "/pages/apply/apply",
        text: "功能",
        iconPath: "/public/image/icon_app2.png",
        selectedIconPath: "/public/image/icon_app1.png"
      },
      {
        pagePath: "/pages/myInfo/myInfo",
        text: "我的",
        iconPath: "/public/image/icon_set2.png",
        selectedIconPath: "/public/image/icon_set1.png"
      }
    ]
  },

  /**
   * 组件的方法列表
   */
  methods: {
    switchTab(e) {
      const data = e.currentTarget.dataset
      const url = data.path
      wx.switchTab({ url })
    },
  }
})

index.json:

json 复制代码
{
  "component": true,
  "usingComponents": {}
}

index.wxml:

html 复制代码
<view class="tabBar">
  <view class="cont">
    <view wx:for="{{list}}" wx:key="index" data-path="{{item.pagePath}}" data-index="{{item.pagePath}}" bindtap="switchTab" class="item {{selected === index ? 'on' : 'off'}}">
      <image class="cont_img" src="{{selected === index  ? item.selectedIconPath : item.iconPath}}"></image>
      <view>{{item.text}}</view>
    </view>
  </view>
</view>

index.wxss:

css 复制代码
.tabBar {
  z-index: 100;
  width: 100%;
  position: fixed;
  bottom: 0;
  font-size: 28rpx;
  border-radius: 50rpx 50rpx 0 0;
  color: #636363;
  box-sizing: border-box;
  overflow: hidden;
}
.bgcW {
  background-color: #fff;
}
.bgcNone {
  background-color: #fff0;
}

.cont {
  height: 150rpx;
  margin: 0 auto;
  border-radius: 40rpx 0;
  overflow: hidden;
  display: flex;
  background-color: #fff;
  padding-bottom: 40rpx;
}

.cont .item {
  font-size: 24rpx;
  position: relative;
  flex: 1;
  text-align: center;
  padding: 0;
  display: block;
  height: 100%;
}
.cont .cont_img {
  width: 40rpx;
  height: 40rpx;
  margin: 40rpx 0 0;
}

.off {
  color: #a0a0a0;
}
.on {
  color: #363636;
}

做中英文切换时,需要把 tabbar 的信息放到语言文件中:

javascript 复制代码
// zh.js
list: [{
      pagePath: "/pages/index/index",
      text: "首页",
      iconPath: "/public/image/icon_home2.png",
      selectedIconPath: "/public/image/icon_home1.png"
    },
    {
      pagePath: "/pages/apply/apply",
      text: "功能",
      iconPath: "/public/image/icon_app2.png",
      selectedIconPath: "/public/image/icon_app1.png"
    },
    {
      pagePath: "/pages/myInfo/myInfo",
      text: "我的",
      iconPath: "/public/image/icon_set2.png",
      selectedIconPath: "/public/image/icon_set1.png"
    }
  ]
// en.js
list: [{
      pagePath: "/pages/index/index",
      text: "Index",
      iconPath: "/public/image/icon_home2.png",
      selectedIconPath: "/public/image/icon_home1.png"
    },
    {
      pagePath: "/pages/apply/apply",
      text: "Function",
      iconPath: "/public/image/icon_app2.png",
      selectedIconPath: "/public/image/icon_app1.png"
    },
    {
      pagePath: "/pages/myInfo/myInfo",
      text: "MyInfo",
      iconPath: "/public/image/icon_set2.png",
      selectedIconPath: "/public/image/icon_set1.png"
    }
  ]

在 tabbar 有关的页面中:

javascript 复制代码
onShow() {
  const app = getApp();
  const translations = app.globalData.translations;
   if (typeof this.getTabBar === 'function' && this.getTabBar()) {
     this.getTabBar().setData({
       list: translations.list
     });
  }
}
相关推荐
stormjun1 小时前
Java基于微信小程序的私家车位共享系统(附源码,文档)
java·微信小程序·共享停车位·私家车共享停车位小程序·停车位共享
paopaokaka_luck1 小时前
基于Spring Boot+Vue的助农销售平台(协同过滤算法、限流算法、支付宝沙盒支付、实时聊天、图形化分析)
java·spring boot·小程序·毕业设计·mybatis·1024程序员节
Bessie2343 小时前
微信小程序eval无法使用的替代方案
微信小程序·小程序·uni-app
shenweihong4 小时前
javascript实现md5算法(支持微信小程序),可分多次计算
javascript·算法·微信小程序
蜕变菜鸟4 小时前
小程序跳转另一个小程序
小程序
7 小时前
躺平成长-代码开发,利用kimi开发小程序(09)
小程序
10 小时前
微信小程序运营日记(第四天)
微信小程序·小程序
guanpinkeji10 小时前
旧衣回收小程序:提高回收效率,扩大服务范围
大数据·小程序·团队开发·软件开发·小程序开发·旧衣回收·旧衣回收小程序
说私域12 小时前
完美日记营销模式对开源 AI 智能名片 2 + 1 链动模式 S2B2C 商城小程序的启示
人工智能·小程序
qq229511650212 小时前
小程序Android系统 校园二手物品交换平台APP
微信小程序·uni-app