From b9e9ae37f7b4b4deafce227d2beddfd60531dbf7 Mon Sep 17 00:00:00 2001 From: cjand <1747143535@qq.com> Date: Wed, 15 May 2024 11:10:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=9B=BD=E9=99=85=E5=8C=96?= =?UTF-8?q?=E8=AF=AD=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: cjand <1747143535@qq.com> --- .../engine/systemchannels/LocalizationChannel.ets | 10 +++++++++- .../main/ets/embedding/ohos/FlutterAbility.ets | 2 ++ .../plugin/localization/LocalizationPlugin.ets | 15 +++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/engine/systemchannels/LocalizationChannel.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/engine/systemchannels/LocalizationChannel.ets index 4834b04653..abcc00b251 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/engine/systemchannels/LocalizationChannel.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/engine/systemchannels/LocalizationChannel.ets @@ -62,7 +62,15 @@ export default class LocalizationChannel implements MethodCallHandler{ } sendLocales(locales: Array): void { - this.channel.invokeMethod("setLocale", locales); + let data: Array = []; + for (let i = 0 ; i < locales.length ; i++) { + let locale = new intl.Locale(locales[i]); + data.push(locale.language); + data.push(locale.region); + data.push(locale.script); + data.push(locale.script); + } + this.channel.invokeMethod("setLocale", data); } } diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterAbility.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterAbility.ets index 41cec5eb1f..b48a4ce3ba 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterAbility.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterAbility.ets @@ -361,6 +361,8 @@ export class FlutterAbility extends UIAbility implements Host { .setAlwaysUse24HourFormat(I18n.System.is24HourClock()) .setPlatformBrightness(config.colorMode != ConfigurationConstant.ColorMode.COLOR_MODE_DARK ? PlatformBrightness.LIGHT : PlatformBrightness.DARK); + + this.getFlutterEngine()?.getLocalizationPlugin()?.sendLocaleToFlutter(); } getFlutterEngine(): FlutterEngine | null { diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/localization/LocalizationPlugin.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/localization/LocalizationPlugin.ets index 78ed1c7297..145b6d5f66 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/localization/LocalizationPlugin.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/localization/LocalizationPlugin.ets @@ -23,6 +23,7 @@ const TAG = "LocalizationPlugin"; export default class LocalizationPlugin { private localizationChannel:LocalizationChannel; private context: common.Context; + private preLocale: string = ''; localeFromString(localeString: string): intl.Locale { localeString = localeString.replace('_','-'); @@ -55,7 +56,21 @@ export default class LocalizationPlugin { } sendLocaleToFlutter(): void { + let currentLanguage = i18n.System.getSystemLanguage() let systemLanguages = i18n.System.getSystemLanguages(); + + if (this.preLocale != currentLanguage) { + this.preLocale = currentLanguage; + } else { + return; + } + let index = systemLanguages.indexOf(currentLanguage); + + if (index != 0 && index != -1) { + let languages = systemLanguages[0]; + systemLanguages[0] = systemLanguages[index]; + systemLanguages[index] = languages; + } this.localizationChannel.sendLocales(systemLanguages); } } -- Gitee