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

uniapp国际化不立即生效(带解决方案)

如果只是在app.vue那里使用

	if(res.language==="zh-Hans-CN"){
  		uni.setStorageSync('language','ch')
  		
  	}else{
  		uni.setStorageSync('language','en')
  	}
  	
    },
    fail: (err) => {
      console.error('获取系统信息失败:', err);
    },
  });

就会出现奇怪的问题:app刚安装的时候不是默认中文,可是我设置默认的是中文,得把app杀掉重启才是中文。
这通常是因为语言设置的初始化时机和应用组件的渲染时机不一致导致的。
uni.getSystemInfo 的异步性: uni.getSystemInfo 是一个异步操作,这意味着在 success 回调函数执行之前,你的应用可能已经开始渲染页面了。
组件渲染时机: 应用的首页组件可能在 uni.setStorageSync(‘language’, ‘ch’) 执行 之前 就已经根据之前的(或默认的)语言设置渲染了。

要解决这个问题,就要确保在应用的所有组件渲染 之前 就完成语言的初始化。

      <script>
      export default {
        globalData: {
          isLanguageInitialized: false, // 全局标志
        },
        onLaunch: function() {
          // ... 其他初始化逻辑 ...
        },
        onShow: function() {
          if (!this.globalData.isLanguageInitialized) {
            this.initializeLanguage();
            this.globalData.isLanguageInitialized = true;
          }
        },
        methods: {
          initializeLanguage() {
            uni.getSystemInfo({
              success: (res) => {
                console.log('系统语言:', res.language);
                let lang = 'en'; // 默认英文
                if (res.language.startsWith('zh')) { // 更可靠的判断
                  lang = 'ch';
                }
                uni.setStorageSync('language', lang);

                // 重要:如果你的国际化库依赖于响应式数据,
                // 确保在这里也设置一下,例如:
                // this.$i18n.locale = lang;
                if (this.$i18n) {
                   this.$i18n.locale = lang
                }
              },
              fail: (err) => {
                console.error('获取系统信息失败:', err);
              },
            });
          }
        }
      }
      </script>

经测试可以解决以上问题。


http://www.kler.cn/a/543066.html

相关文章:

  • 【云安全】云原生-K8S- kubeconfig 文件泄露
  • 使用 Apifox、Postman 测试 Dubbo 服务,Apache Dubbo OpenAPI 即将发布
  • [学习笔记] Kotlin Compose-Multiplatform
  • 查询语句来提取 detail 字段中包含 xxx 的 URL 里的 commodity/ 后面的数字串
  • 2025web寒假作业二
  • DeepSeek在FPGA/IC开发中的创新应用与未来潜力
  • ffmpeg学习:ubuntu下编译Android版ffmpeg-kit
  • 元宵节快乐
  • 力扣刷题(数组篇)
  • 全面理解-命名修饰规则(命名倾轧Name Mangling)
  • Redis 常见面试题汇总(持续更新)
  • 2.2 神经网络语言模型:从词向量到上下文感知的进化革命
  • 第三届通信网络与机器学习国际学术会议(CNML 2025)
  • 光耦隔离的作用及其原理 光耦隔离输入输出能共地
  • 从零到一学习c++(基础篇--筑基期六-string)
  • 【iSAID:用于航空影像实例分割的大规模数据集】
  • 嵌入式之详解:startup.S文件
  • Cherry Studio 连接私域deepseek-r1模型搭建私域知识库和智能体(也可使用第三方模型)
  • 图像处理之图像亮度/对比度调整
  • 【AI知识点】Adversarial Validation(对抗验证)
  • Redis核心技术知识点全集
  • 从工匠故事读懂开源软件的特点与价值
  • 物理引擎Box2D
  • 《图解设计模式》笔记(八)管理状态
  • 异位妊娠唯一相关的是年龄(U型曲线)
  • SWIFT (Scalable lightWeight Infrastructure for Fine-Tuning)