如何本地化 iMessage 贴纸?

Posted

技术标签:

【中文标题】如何本地化 iMessage 贴纸?【英文标题】:How to localize iMessage stickers? 【发布时间】:2016-12-07 14:31:43 【问题描述】:

我正在创建一个 iMessage 贴纸包扩展,其中包含包含文本的贴纸。我在 Xcode 中没有看到任何用于本地化贴纸的选项?可以本地化贴纸吗?

【问题讨论】:

【参考方案1】:

也许这很明显,但您可以在扩展程序中对其进行管理。如果您创建的不是包,而是扩展,则可以为您的本地化获取准确的贴纸

【讨论】:

【参考方案2】:

如果您想显示不同的贴纸资产,例如取决于您的设备语言,您需要创建 iMessage 应用程序而不是贴纸包应用程序。 而且您需要编写一些代码,因为在简单的贴纸包应用程序中不可能有这种行为。

不过,这很简单。首先,请遵循本教程: http://blog.qbits.eu/ios-10-stickers-application/

那里的一些代码语法已经过时,但 XCode 将帮助您轻松修复它。

您可以将本地化资源放在不同的文件夹中,然后将它们拖放到您的 XCode 项目中(确保选中“创建文件夹引用”): Screenshot of project structure

然后您可以在您的viewDidLoad() 中执行类似的操作:

//-- get current language set
    var imageSetPath = "/EN";   //-- default to english

    let languageCode = NSLocale.preferredLanguages[0]
    if      languageCode.hasPrefix("zh-Hans")  imageSetPath = "/CNS"   
    else if languageCode.hasPrefix("zh-Hans")  imageSetPath = "/CNT"   
    else if languageCode.hasPrefix("ko")       imageSetPath = "/KR"    
    else if languageCode.hasPrefix("ja")       imageSetPath = "/JP"    

    //-- load localized stickers
    imageUrls = recursivePathsForResources(path: Bundle.main.bundlePath + imageSetPath, type: "png")
    loadStickers(urls: imageUrls)

在哪里

func recursivePathsForResources(path: String, type: String) -> [URL] 
    // Enumerators are recursive
    let enumerator = FileManager.default.enumerator(atPath: path)
    var filePaths = [URL]()

    while let filePath = enumerator?.nextObject() as? String 
        if NSURL(fileURLWithPath: filePath).pathExtension == type 
            let url = URL(fileURLWithPath: path).appendingPathComponent(filePath)
            filePaths.append(url)
        
    
    return filePaths

(由https://***.com/a/5860015/6649403更改)

【讨论】:

以上是关于如何本地化 iMessage 贴纸?的主要内容,如果未能解决你的问题,请参考以下文章

禁止用户从 iMessage 扩展程序/应用程序下载贴纸

iMessage 贴纸分析

为 iMessage 动态加载贴纸

iOS 10 iMessage 贴纸应用中 MSSticker Peels 的回调

如何像在 iOS 中为 iMessage 一样为 Android 创建贴纸包?

R语言使用hexSticker包将本地图片(image file)转换为六角图(六角贴六角形贴纸local image to hex sticker)