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 4834b04653d84ccdb9a84076c4bd2e1fcba96752..abcc00b251d1f0afe30932ab0b26fd6f6542b1f6 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 41cec5eb1f0d9d5963824878a2e47a878be16086..b48a4ce3ba28a3bb7c487d5d3d4fbb05f8479d0d 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 78ed1c729717344a6e387d3d3dbe62fb4e4df86c..145b6d5f66c0de6b2f2a053f6d3d6449223e915e 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); } }