uniapp 언어 전환은 한 번만 적용됩니다.

WBOY
풀어 주다: 2023-05-22 15:10:08
원래의
815명이 탐색했습니다.

세계화의 급속한 발전으로 인해 점점 더 많은 응용 프로그램이 여러 언어를 지원해야 합니다. 크로스 플랫폼 프레임워크인 uniapp은 다중 언어 전환 구현 시에도 폭넓은 주목을 받았습니다. 그러나 일부 개발자들은 다국어 전환을 위해 uniapp 프레임워크를 사용할 때 언어 전환이 한 번만 적용된다는 것을 발견했다고 보고했습니다. 즉, 다른 언어로 전환한 후 원래 언어로 다시 전환한 후 인터페이스가 작동하지 않는다는 것입니다. 완전히 복원되지 않았습니다. 이로 인해 많은 개발자가 uniapp 프레임워크에 대해 고민하고 심층적인 탐색을 수행하게 되었습니다. 이 글에서는 uniapp 언어 전환이 한 번만 적용되는 문제에 대해 논의하고 해결책을 제시합니다.

1. 문제 설명

uniapp 개발에서는 uni-i18n 플러그인을 사용하여 다국어 전환을 구현하겠습니다. 이 플러그인은 매우 편리하며 기본 항목 파일에만 도입하면 됩니다. 코드는 다음과 같습니다:

import VueI18n from 'vue-i18n';
import messages from '@/common/lang'; // 引入语言文件
Vue.use(VueI18n);

const i18n = new VueI18n({
    locale: uni.getStorageSync('lang') || 'zh',
    messages
});

export default i18n;
로그인 후 복사

그런 다음 각 구성 요소 내에서 $t() 메서드를 사용하여 해당 언어의 번역을 가져옵니다. 예:

<template>
  <view>{{ $t('home.title') }}</view>
</template>
<script>
  export default {
    mounted() {
      console.log(this.$t('home.title')); // 打印出对应语言的翻译
    }
  }
</script>
로그인 후 복사

이렇게 하면 여러 언어 간에 쉽게 전환할 수 있습니다. 그러나 일부 개발자들은 실제 사용 시 언어 전환이 한 번만 적용된다고 보고했습니다. 즉, 언어를 전환한 후, 다시 원래 언어로 다시 전환하면 원래 상태로 완전히 복원되지는 않습니다. 이런 경우에는 원인을 찾아 해결해야 합니다.

2. 원인 분석

uni-i18n 플러그인의 소스 코드를 살펴보면 locale 속성을 수정하여 언어 전환이 이루어지는 것을 알 수 있습니다. 로케일 속성은 app.globalData 객체에 저장됩니다. 따라서 언어 전환이 한 번만 적용되는 문제는 로케일 속성이 올바르게 업데이트되지 않았기 때문일 수 있습니다.

여러 언어 간 전환 시 애플리케이션이 열릴 때마다 저장소에 로케일 속성이 저장되지 않으면 기본 언어가 사용됩니다. 언어를 전환할 때 먼저 로캘 속성을 업데이트한 다음 새 로캘 속성을 저장소에 저장합니다. 이 과정에 따르면 언어 전환이 한 번만 적용되는 이유는 app.globalData 객체의 locale 속성을 제때 업데이트하지 않았기 때문임을 알 수 있습니다. 따라서 원래 언어로 다시 전환하면 이전 로케일 속성이 계속 읽혀져 인터페이스가 완전히 복원되지 않습니다.

3. Solution

사실 이 문제를 해결하는 방법은 비교적 간단합니다. locale 속성을 수정하면 app.globalData 객체에서만 수정하면 됩니다. 구체적인 코드는 다음과 같습니다.

import VueI18n from 'vue-i18n';
import messages from '@/common/lang'; // 引入语言文件
Vue.use(VueI18n);

const i18n = new VueI18n({
    locale: uni.getStorageSync('lang') || 'zh',
    messages
});

// 加入以下代码
i18n.vm.$watch('locale', function(val) {
    console.log('i18n.vm.locale:', val);
    uni.setStorageSync('lang', val);
    uni.$emit('localeChange', val);
    uni.getStorage({
        key: 'lang',
        success: function(res) {
            if (res.data !== val) {
                uni.setStorageSync('lang', val);
            }
        }
    });
    app.globalData.locale = val;
});

export default i18n;
로그인 후 복사

여기서 주요 목적은 vm.$watch 메소드를 추가하는 것입니다. 로케일 속성이 변경되면 app.globalData 객체의 로케일 속성이 자동으로 업데이트되어 전환 문제가 해결됩니다. 언어는 한 번만 적용됩니다.

요약

uniapp 개발에서 다국어 전환은 매우 일반적인 요구 사항입니다. 그러나 세부 사항에 주의를 기울이지 않으면 언어 전환이 한 번만 적용되는 문제에 직면할 수 있습니다. uni-i18n 플러그인에 대한 연구 및 분석을 통해 우리는 문제의 근본 원인이 app.globalData 객체의 로케일 속성을 적시에 업데이트하지 못한 데 있음을 발견했습니다. 따라서 로케일 속성을 수정하는 동안 app.globalData 객체의 로케일 속성만 업데이트하면 됩니다. 이 문제에 대한 해결책은 매우 간단하지만, 작은 오류로 인해 애플리케이션이 제대로 실행되지 않는 것을 방지하기 위해 개발 과정에서 세부 사항에 주의를 기울여야 함을 상기시켜 줍니다.

위 내용은 uniapp 언어 전환은 한 번만 적용됩니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿