应用小部件描述和名称本地化

Posted

技术标签:

【中文标题】应用小部件描述和名称本地化【英文标题】:App widget description and name localization 【发布时间】:2020-10-21 10:17:09 【问题描述】:

我想知道是否可以在本地化时使用应用语言,而不是手机语言?

我说的是:

.configurationDisplayName("widget.name".localized())

.description("widget.description".localized())

【问题讨论】:

***.com/questions/23977816/… 【参考方案1】:

是的,您可以为configurationDisplayNamedescription 提供本地化字符串,因为它们也接受LocalizedStringKey 参数:

/// Sets the localized name shown for a widget when a user adds or edits
/// the widget.
///
/// - Parameter displayName: The key for the localized name to display.
/// - Returns: A widget configuration that includes a descriptive name for
///   the widget.
public func configurationDisplayName(_ displayNameKey: LocalizedStringKey) -> some WidgetConfiguration
/// Sets the localized description shown for a widget when a user adds or
/// edits the widget.
///
/// - Parameters:
///   - descriptionKey: The key for the localized description to display.
/// - Returns: A widget configuration with a description of the widget.
public func description(_ descriptionKey: LocalizedStringKey) -> some WidgetConfiguration

欲了解更多信息,请参阅:

Localization in SwiftUI How to implement localization in Swift UI

【讨论】:

我说的是描述和名称。使用这些时,正在对设备语言进行本地化,我需要使用应用程序语言。我的意思是它有效 - 本地化有效,但本地化基于设备,而不是应用语言:) 哦,我现在明白了——我认为我们还没有这种可能性。您可以将语言环境注入到视图环境中,但对于小部件是不可能的。类似的线程在这里:Localize ios 14 dynamic widget configuration【参考方案2】:
    初始化语言设置后,即可获得所需的正确翻译。
var disName: String 
    LoadLocalizeSettings()
    return "disName.key".localize()

    像这样执行: .configurationDisplayName(disName)

    如果它不起作用?你也可以 pod 'Localize'

func LoadLocalizeSettings() 
        Localize.shared.update(provider: .strings)
        Localize.shared.update(bundle: bundle)
        Localize.shared.update(fileName: filename)
        if let language = youWantThis 
            update(language)
        
        else 
            update(.english)
        


【讨论】:

以上是关于应用小部件描述和名称本地化的主要内容,如果未能解决你的问题,请参考以下文章

如何本地化 iOS 14 小部件的名称 (CFBundleDisplayName)

OnUpdate() 未调用小部件服务

Buildfire 本地小部件失败

Android:将位图从本地存储加载到应用小部件(RemoteViews)

英特尔 Xdk 使用 Crosswalk Cordova 混合平台构建,但本地小部件无法正常工作

Flutter RTL(本地化)不适用于网格视图小部件 - 阿拉伯语言