ホームページ ウェブフロントエンド uni-app uniapp の言語切り替えは 1 回だけ有効になります

uniapp の言語切り替えは 1 回だけ有効になります

May 22, 2023 pm 03:10 PM

グローバリゼーションの急速な発展に伴い、複数の言語をサポートする必要があるアプリケーションがますます増えています。クロスプラットフォーム フレームワークとして、uniapp は多言語切り替えを実装する際にも広く注目されています。ただし、一部の開発者は、多言語切り替えに uniapp フレームワークを使用すると、言語の切り替えが 1 回しか有効にならないことがわかったと報告しています。つまり、別の言語に切り替えてから元の言語に戻すと、インターフェイスが有効になりません。完全には復旧していませんでした。これにより、多くの開発者が心配し、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>
ログイン後にコピー

これにより、複数の言語を簡単に切り替えることができます。ただし、一部の開発者は、実際の使用では言語の切り替えは 1 回しか有効にならないと報告しています。つまり、言語を切り替えた後、再度元の言語に戻すと、完全には元の状態に戻りません。この場合、原因を突き止めて修正する必要があります。

2. 原因分析

uni-i18n プラグインのソース コードを調べると、ロケール属性を変更することで言語の切り替えが行われることがわかります。 locale 属性は app.globalData オブジェクトに保存されます。したがって、言語の切り替えが一度しか有効にならないという問題は、ロケール属性が正しく更新されていないことが原因である可能性があります。

複数の言語を切り替える場合、新しいロケール属性をストレージに保存します。アプリケーションを開くたびに、ロケール属性が最初にストレージから読み取られます。ストレージにロケール属性がない場合は、デフォルトの言語が使用されます。使用されている。言語を切り替えるときは、まずロケール属性を更新し、次に新しいロケール属性をストレージに保存します。このプロセスによれば、言語の切り替えが 1 回しか有効にならない理由は、app.globalData オブジェクトの locale 属性の更新が間に合わなかったためであることがわかります。したがって、再び元の言語に戻すと、古いロケール属性が引き続き読み取られるため、インターフェイスが完全には復元されません。

3. 解決策

実際、この問題を解決するのは比較的簡単です。 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 オブジェクトのロケール属性が自動的に更新され、これにより問題が解決されます。言語の切り替えが一度しか有効にならないという問題。

概要

ユニアプリ開発では、多言語切り替えを実現することが非常に一般的な要件です。ただし、細かい点に注意しないと、言語の切り替えが一度しか有効にならないという問題が発生する可能性があります。 uni-i18n プラグインの調査と分析を通じて、問題の根本原因は、app.globalData オブジェクトの locale 属性を適時に更新できないことにあることがわかりました。したがって、ロケール属性を変更する際には、app.globalData オブジェクトのロケール属性を更新するだけで済みます。この問題の解決策は非常に簡単ですが、小さなエラーが原因でアプリケーションが正しく機能しないことを避けるために、開発プロセス中に細部に注意を払う必要があることも思い出させます。

以上がuniapp の言語切り替えは 1 回だけ有効になりますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Uni-APPでプレ前セッサー(SASS、LESS)を使用するにはどうすればよいですか? Uni-APPでプレ前セッサー(SASS、LESS)を使用するにはどうすればよいですか? Mar 18, 2025 pm 12:20 PM

記事では、UNI-APPでSASSおよびPREPROCESSORSを使用して、セットアップ、利点、および二重使用法を詳細に使用することについて説明します。主な焦点は構成と利点にあります。[159文字]

Uni-AppのアニメーションAPIを使用するにはどうすればよいですか? Uni-AppのアニメーションAPIを使用するにはどうすればよいですか? Mar 18, 2025 pm 12:21 PM

この記事では、Uni-AppのアニメーションAPIの使用方法、アニメーション、キー関数、およびアニメーションのタイミングを結合および制御する方法を作成および適用する手順を詳細に説明します。

UNIAPPアプリケーションで実行できるさまざまなタイプのテストは何ですか? UNIAPPアプリケーションで実行できるさまざまなタイプのテストは何ですか? Mar 27, 2025 pm 04:59 PM

この記事では、ユニット、統合、機能、UI/UX、パフォーマンス、クロスプラットフォーム、セキュリティテストなど、UNIAPPアプリケーションのさまざまなテストタイプについて説明します。また、クロスプラットフォームの互換性を確保し、JESのようなツールを推奨しています

UNIAPP開発に利用できるデバッグツールは何ですか? UNIAPP開発に利用できるデバッグツールは何ですか? Mar 27, 2025 pm 05:05 PM

この記事では、Hbuilderx、Wechat開発者ツール、Chrome Devtoolsなどのツールに焦点を当てたUniapp開発のためのデバッグツールとベストプラクティスについて説明します。

Uniappアプリケーションパッケージのサイズをどのように削減できますか? Uniappアプリケーションパッケージのサイズをどのように削減できますか? Mar 27, 2025 pm 04:45 PM

この記事では、コードの最適化、リソース管理、コード分割や怠zyなロードなどの手法に焦点を当てたUniappパッケージサイズを削減する戦略について説明します。

uni-appのストレージAPI(uni.setstorage、uni.getStorage)を使用するにはどうすればよいですか? uni-appのストレージAPI(uni.setstorage、uni.getStorage)を使用するにはどうすればよいですか? Mar 18, 2025 pm 12:22 PM

この記事では、ローカルデータ管理のためにUni-AppのストレージAPI(uni.setstorage、uni.getStorage)を使用する方法について説明し、ベストプラクティス、トラブルシューティング、および効果的な使用のための制限と考慮事項について説明します。

デバイス機能(カメラ、ジオロケーションなど)にアクセスするためにUni-AppのAPIを使用するにはどうすればよいですか? デバイス機能(カメラ、ジオロケーションなど)にアクセスするためにUni-AppのAPIを使用するにはどうすればよいですか? Mar 18, 2025 pm 12:06 PM

この記事では、UNI-APPのAPIを使用して、許可設定やエラー処理など、カメラやジオロケーションなどのデバイス機能にアクセスします。

UNI-APPでユーザー入力を検証するにはどうすればよいですか? UNI-APPでユーザー入力を検証するにはどうすればよいですか? Mar 18, 2025 pm 12:17 PM

この記事では、JavaScriptとデータバインディングを使用してUNI-APPのユーザー入力の検証を説明し、データの整合性のためのクライアントとサーバー側の両方の検証を強調します。 uni-validateのようなプラグインは、フォーム検証に推奨されます。

See all articles