无法从应用扩展访问本地化资源

Posted

技术标签:

【中文标题】无法从应用扩展访问本地化资源【英文标题】:Cannot access localized resource from app extension 【发布时间】:2020-09-15 02:11:11 【问题描述】:

我在从 Intents 扩展程序访问本地化资源时遇到问题。 在我的应用程序和扩展程序之间共享的框架中,我有几个本地化为不同语言的 JSON 文件。当我通过我的应用程序通过path(forResource:ofType) 访问它们时,它会访问正确的本地化版本,但如果我从快捷方式应用程序中的扩展程序调用它,它会返回英文,即使应用程序本身和快捷方式应用程序都是设置为另一种语言。

我可以让正确的语言显示的唯一方法是如果我更改设备语言 - 仅为应用程序或快捷方式更改它没有效果。

我正在使用 ios 14 SDK 进行构建,但在 iOS 13 和 14 上都会发生相同的行为。

【问题讨论】:

【参考方案1】:

首先,请检查 Localizable 文件的 Target Membership,确保它已检查您的扩展。

其次,将您的应用语言保存在具有 AppGroups 的 UserDefaults 中。

static func setLanguageExtension(_ language: String, forKey: String) 
        if let userDefault = UserDefaults(suiteName: "APP_LANGUAGE") 
            userDefault.setValue(language, forKey: forKey)
        
    
    
    static func getLanguageExtension(key: String) -> String? 
        if let userDefault = UserDefaults(suiteName: "APP_LANGUAGE") 
            return userDefault.string(forKey: key)
         else 
            return "en-US"
        
    

【讨论】:

以上是关于无法从应用扩展访问本地化资源的主要内容,如果未能解决你的问题,请参考以下文章

无法访问本地主机上的 API 资源管理器

无法从 Blazor WebAssembly 应用本地访问 Azure Function Api

VNET 上的 Azure Functions 无法与本地资源通信

使用springboot访问本地电脑资源,并解决中文路径无法访问的问题

WCF 服务端点无法从本地访问

Cordova 10 和 Android SDK 30:无法访问本地文件(“不允许加载本地资源:file:///storage/emulated/0/Android/data...”)