如何本地化iMessage贴纸?

时间:2016-12-07 14:31:43

标签: ios imessage-extension

我正在创建一个包含文本贴纸的iMessage Sticker Pack Extension。我没有在Xcode中看到任何选项来定位贴纸?是否可以定位贴纸?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

如果您想显示不同的贴纸资产,例如依赖于您的设备的语言,您需要创建一个iMessage应用程序而不是Sticker Pack应用程序。 而且你需要编写一些代码,因为它不可能在一个简单的Sticker Pack应用程序中出现这种行为。

然而,这很简单。首先,请按照本教程操作: 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://stackoverflow.com/a/5860015/6649403