Rumah hujung hadapan web uni-app penukaran bahasa uniapp hanya berkuat kuasa sekali

penukaran bahasa uniapp hanya berkuat kuasa sekali

May 22, 2023 pm 03:10 PM

Dengan perkembangan pesat globalisasi, semakin banyak aplikasi perlu menyokong berbilang bahasa. Sebagai rangka kerja merentas platform, uniapp juga telah mendapat perhatian meluas apabila melaksanakan penukaran berbilang bahasa. Walau bagaimanapun, sesetengah pembangun melaporkan bahawa apabila menggunakan rangka kerja uniapp untuk penukaran berbilang bahasa, mereka mendapati penukaran bahasa hanya berkuat kuasa sekali, iaitu selepas bertukar kepada bahasa lain dan kemudian bertukar kembali kepada bahasa asal, antara muka tidak dipulihkan sepenuhnya. Ini menyebabkan ramai pembangun bimbang dan menjalankan penerokaan mendalam tentang rangka kerja uniapp. Artikel ini akan membincangkan masalah bahawa penukaran bahasa uniapp hanya berkuat kuasa sekali dan memberikan penyelesaian.

1. Penerangan Masalah

Dalam pembangunan uniapp, kami akan menggunakan pemalam uni-i18n untuk mencapai penukaran berbilang bahasa. Pemalam ini sangat mudah dan hanya perlu diperkenalkan dalam fail entri utama. Kodnya adalah seperti berikut:

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;
Salin selepas log masuk

Kemudian dalam setiap komponen, gunakan kaedah $t() untuk mendapatkan terjemahan bahasa yang sepadan. Contohnya:

<template>
  <view>{{ $t('home.title') }}</view>
</template>
<script>
  export default {
    mounted() {
      console.log(this.$t('home.title')); // 打印出对应语言的翻译
    }
  }
</script>
Salin selepas log masuk

Dengan cara ini kita boleh bertukar antara berbilang bahasa dengan mudah. Walau bagaimanapun, sesetengah pembangun telah melaporkan bahawa dalam penggunaan sebenar, penukaran bahasa hanya berkuat kuasa sekali. Dalam erti kata lain, selepas menukar bahasa, apabila menukar kembali ke bahasa asal semula, ia tidak dipulihkan sepenuhnya kepada keadaan asal. Dalam kes ini, kita perlu mencari punca dan membetulkannya.

2. Analisis sebab

Dengan mengkaji kod sumber pemalam uni-i18n, kita boleh mendapati bahawa penukaran bahasa dicapai dengan mengubah suai atribut setempat. Atribut locale disimpan dalam objek app.globalData. Oleh itu, masalah menukar bahasa hanya berkuat kuasa sekali boleh dikaitkan dengan atribut lokal yang tidak dikemas kini dengan betul.

Semasa penukaran berbilang bahasa, kami akan menyimpan atribut locale baharu dalam storan Setiap kali aplikasi dibuka, atribut locale pertama kali dibaca daripada storan Jika tiada atribut locale dalam storan, bahasa lalai digunakan. Apabila menukar bahasa, kami akan mengemas kini atribut locale dahulu dan kemudian menyimpan atribut locale baharu dalam storan. Mengikut proses ini, kami dapati bahawa sebab penukaran bahasa hanya berkuat kuasa sekali ialah kami tidak mengemas kini atribut tempat dalam objek app.globalData dalam masa. Oleh itu, apabila kita bertukar kembali kepada bahasa asal sekali lagi, atribut locale lama masih dibaca, menyebabkan antara muka tidak dipulihkan sepenuhnya.

3. Penyelesaian

Sebenarnya, menyelesaikan masalah ini agak mudah. Dengan mengubah suai atribut locale, kami hanya perlu mengubah suainya dalam objek app.globalData. Kod khusus adalah seperti berikut:

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;
Salin selepas log masuk

Perkara utama di sini ialah menambah kaedah vm.$watch Apabila atribut locale berubah, atribut locale dalam objek app.globalData akan dikemas kini secara automatik, sekali gus menyelesaikannya. masalah bahawa menukar bahasa hanya berlaku sekali.

Ringkasan

Dalam pembangunan uniapp, penukaran berbilang bahasa adalah keperluan yang sangat biasa. Walau bagaimanapun, jika kami tidak memberi perhatian kepada butiran, kami mungkin menghadapi masalah bahawa penukaran bahasa hanya berkuat kuasa sekali. Melalui penyelidikan dan analisis pemalam uni-i18n, kami mendapati bahawa punca masalah terletak pada kegagalan untuk mengemas kini atribut tempat dalam objek app.globalData tepat pada masanya. Oleh itu, anda hanya perlu mengemas kini atribut locale dalam objek app.globalData sambil mengubah suai atribut locale. Penyelesaian kepada masalah ini adalah sangat mudah, tetapi ia juga mengingatkan kita untuk memberi perhatian kepada butiran semasa proses pembangunan untuk mengelakkan aplikasi tidak berjalan dengan baik kerana beberapa ralat kecil.

Atas ialah kandungan terperinci penukaran bahasa uniapp hanya berkuat kuasa sekali. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimanakah saya menggunakan preprocessors (sass, kurang) dengan uni-app? Bagaimanakah saya menggunakan preprocessors (sass, kurang) dengan uni-app? Mar 18, 2025 pm 12:20 PM

Artikel membincangkan menggunakan SASS dan kurang preprocessors dalam UNI-APP, memperincikan persediaan, faedah, dan penggunaan dwi. Fokus utama adalah pada konfigurasi dan kelebihan. [159 aksara]

Bagaimana saya menggunakan API Animasi Uni-App? Bagaimana saya menggunakan API Animasi Uni-App? Mar 18, 2025 pm 12:21 PM

Artikel ini menerangkan cara menggunakan API Animasi Uni-App, memperincikan langkah-langkah untuk membuat dan menggunakan animasi, fungsi utama, dan kaedah untuk menggabungkan dan mengawal masa animasi.

Apakah jenis ujian yang boleh anda lakukan dalam aplikasi UNIAPP? Apakah jenis ujian yang boleh anda lakukan dalam aplikasi UNIAPP? Mar 27, 2025 pm 04:59 PM

Artikel ini membincangkan pelbagai jenis ujian untuk aplikasi UNIAPP, termasuk unit, integrasi, fungsional, UI/UX, prestasi, silang platform, dan ujian keselamatan. Ia juga meliputi memastikan keserasian silang platform dan mengesyorkan alat seperti JES

Apakah alat penyahpepijatan yang tersedia untuk pembangunan Uniapp? Apakah alat penyahpepijatan yang tersedia untuk pembangunan Uniapp? Mar 27, 2025 pm 05:05 PM

Artikel ini membincangkan alat penyahpepijatan dan amalan terbaik untuk pembangunan UNIPP, yang memberi tumpuan kepada alat seperti HBuildex, WeChat Developer Tools, dan Chrome Devtools.

Bagaimanakah anda dapat mengurangkan saiz pakej aplikasi UNIAPP anda? Bagaimanakah anda dapat mengurangkan saiz pakej aplikasi UNIAPP anda? Mar 27, 2025 pm 04:45 PM

Artikel ini membincangkan strategi untuk mengurangkan saiz pakej UNIAPP, memberi tumpuan kepada pengoptimuman kod, pengurusan sumber, dan teknik seperti pemisahan kod dan pemuatan malas.

Bagaimana saya menggunakan API Penyimpanan Uni-App (uni.setstorage, uni.getstorage)? Bagaimana saya menggunakan API Penyimpanan Uni-App (uni.setstorage, uni.getstorage)? Mar 18, 2025 pm 12:22 PM

Artikel ini menerangkan cara menggunakan API penyimpanan Uni-App (uni.setstorage, uni.getstorage) untuk pengurusan data tempatan, membincangkan amalan terbaik, penyelesaian masalah, dan menyoroti batasan dan pertimbangan untuk kegunaan yang berkesan.

Bagaimanakah saya menggunakan API Uni-App untuk mengakses ciri peranti (kamera, geolokasi, dll)? Bagaimanakah saya menggunakan API Uni-App untuk mengakses ciri peranti (kamera, geolokasi, dll)? Mar 18, 2025 pm 12:06 PM

Artikel ini membincangkan menggunakan API UNI-APP untuk mengakses ciri peranti seperti kamera dan geolokasi, termasuk tetapan kebenaran dan pengendalian ralat.

Bagaimana saya mengesahkan input pengguna di uni-app? Bagaimana saya mengesahkan input pengguna di uni-app? Mar 18, 2025 pm 12:17 PM

Artikel ini membincangkan mengesahkan input pengguna dalam UNI-APP menggunakan JavaScript dan mengikat data, menekankan kedua-dua klien dan pengesahan sisi pelayan untuk integriti data. Plugin seperti Uni-Validate disyorkan untuk pengesahan borang.

See all articles