【关于使用国际化的注意事项】部分页面或者部分内容没有重新渲染最新语言的问题及其解决方案

问题

在我完善国际化的过程中,发现了一个问题,那就是部分页面或者部分内容没有完全渲染上最新的语言。

分析

  1. 通过uni.getlocale()方法获取当前页面是否已更新语言包

解决方案

问题一

如果你通过分析发现当前页面的语言包已经是你更新上去的语言包,但是页面部分内容并没有重新更新最新的语言包,说明该页面并没有触发重新渲染

1、将你设置的语言存入缓存中(这个的主要作用是为了用户重新打开应用,重新进入语言设置页面,发现设置的选项内容丢失了的情况)
2、在当前页面的onshow生命周期函数中通过uni.setlocale(缓存中的语言)重新触发渲染

  uni.setLocale(uni.getLocale())
  this._i18n.locale = uni.getLocale()

问题二

tabbar的文字并没有重新渲染成最新的语言包

记住:Tabbar在app端是默认使用原生的,层级是最高的

必须在每一个tabbar页面的onshow函数中使用以下方法

      uni.setTabBarItem({
    
    
        index: 1,
        text: this.$t('tabbar.market')
      })

记住是必须,否则不生效,作者尝试在app.vue文件中使用,并没有生效!
或者通过uni.$emit的方式,也没有生效!

问题三

进入某个页面之后,重新返回并没有触发语言更新

uniapp开发app,其实本质还是web,并不完全是原生应用,因此你进入A页面——B页面,在B页面更新了语言设置,返回A页面,A页面之前就已经打开过了,自然没办法重新触发语言更新,因此作者一不做二不休,在A页面进入B页面的时候,直接关闭A页面,然后B页面返回的时候做判定直接返回A页面,这样A页面就相当于重新打开,自然就重新设置了语言了

因此,使用redirectTo代替navigateTo,如果是返回tabbar页面,就使用switchTab

猜你喜欢

转载自blog.csdn.net/m0_46983722/article/details/130422507