簡體   English   中英

Flutter 和本地化:本地化在 iOS 平台上不起作用

[英]Flutter & Localization : Localization doesn't on work on iOS platform

我可以在 iOS 中翻譯我的應用程序語言。 我不明白為什么,但它在 Android 平台上工作得很好。 我做錯了什么嗎? 還是我應該添加某物來完成這項工作? 請給我一些指點。

本地化文件內容

import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

Locale userLanguage;
//Locale userLanguage = Locale('ko', 'KR');

class AppLocalizations {
  final Locale locale;
  //
  AppLocalizations(this.locale);

  static AppLocalizations of(BuildContext context) {
    return Localizations.of(context, AppLocalizations);
  }

  static const LocalizationsDelegate<AppLocalizations> delegate =
      _AppLocalizationsDelegate();

  Map<String, String> _localizedStrings;

  Future<bool> load(Locale localeInput) async {
    print('inside load ' + localeInput.languageCode);

    String jsonString =
        await rootBundle.loadString('i18n/${localeInput.languageCode}.json');
    print('After load ' + localeInput.languageCode);
    Map<String, dynamic> jsonMap = json.decode(jsonString);

    _localizedStrings = jsonMap.map(
      (key, value) {
        return MapEntry(key, value.toString());
      },
    );
    return true;
  }

  String translate(String key) {
    return _localizedStrings[key];
  }

  // String language() {
  //   if (true) {
  //     return 'en';
  //   }

  //   return 'ko';
  // }
}

class _AppLocalizationsDelegate
    extends LocalizationsDelegate<AppLocalizations> {
  const _AppLocalizationsDelegate();

  @override
  bool isSupported(Locale locale) {
    return ['en', 'ko'].contains(locale.languageCode);
  }

  @override
  Future<AppLocalizations> load(Locale locale) async {
    if (userLanguage != null) {
      locale = userLanguage;
    }
    AppLocalizations localizations = new AppLocalizations(locale);
    await localizations.load(locale);
    return localizations;
  }

  @override
  bool shouldReload(_AppLocalizationsDelegate old) => false;
}

在主文件中

      supportedLocales: [
        Locale('en', 'US'),
        Locale('ko', 'KR'),
      ],
      localizationsDelegates: [
        AppLocalizations.delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      localeResolutionCallback: (deviceLocale, supportedLocales) {
        if (userLocale != null) {
          print('User preferred language is ' + userLocale.languageCode);
          return userLocale;
        } else {
          for (var locale in supportedLocales) {
            print(locale.languageCode + deviceLocale.languageCode);
            if (locale.languageCode == deviceLocale.languageCode &&
                locale.countryCode == deviceLocale.countryCode) {
              print(deviceLocale.languageCode + ' is supported');
              return deviceLocale;
            }
          }
          print('>>>>> ' +
              deviceLocale.languageCode +
              ' <<<<<< is not supported');
          return supportedLocales.first;
        }
      },

信息表

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>$(DEVELOPMENT_LANGUAGE)</string>
    <key>CFBundleExecutable</key>
    <string>$(EXECUTABLE_NAME)</string>
    <key>CFBundleIdentifier</key>
    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>RecycleX</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>$(MARKETING_VERSION)</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>fb30109**********5293</string>
            </array>
        </dict>
    </array>
    <key>CFBundleVersion</key>
    <string>$(CURRENT_PROJECT_VERSION)</string>
    <key>FacebookAppID</key>
    <string>30108******93</string>
    <key>FacebookDisplayName</key>
    <string>PhotoEarn</string>
    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>fbapi</string>
        <string>fb-messenger-share-api</string>
        <string>fbauth2</string>
        <string>fbshareextension</string>
        <string>f860ce37***********8b7d1</string>
        <string>kakaokompassauth</string>
        <string>storykompassauth</string>
        <string>kakaolink</string>
        <string>kakaotalk-5.9.7</string>
    </array>
    <key>LSRequiresIPhoneOS</key>
    <true/>
    <key>NSCameraUsageDescription</key>
    <string>NSMicrophoneUsageDescription</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>This app doesn&apos;t need access to location when in the background.</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>This app needs access to location when open.</string>
    <key>NSPhotoLibraryUsageDescription</key>
    <string>NSPhotoLibraryAddUsageDescription</string>
    <key>UIBackgroundModes</key>
    <array>
        <string>remote-notification</string>
    </array>
    <key>UILaunchStoryboardName</key>
    <string>LaunchScreen</string>
    <key>UIMainStoryboardFile</key>
    <string>Main</string>
    <key>UIStatusBarStyle</key>
    <string>UIStatusBarStyleDarkContent</string>
    <key>UISupportedInterfaceOrientations</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
    </array>
    <key>UISupportedInterfaceOrientations~ipad</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
        <string>UIInterfaceOrientationPortraitUpsideDown</string>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
    <key>UIUserInterfaceStyle</key>
    <string>Light</string>
    <key>UIViewControllerBasedStatusBarAppearance</key>
    <false/>
</dict>
</plist>

我期待着收到你們所有人的來信。 謝謝你。

您缺少將CFBundleLocalizations添加到您的ios/Runner/Info.plist文件

<key>CFBundleLocalizations</key>
<array>
   <string>en</string>
   <string>ko</string>
</array>

添加文件后,請考慮運行flutter clean並再次運行項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM