我正在创建一个 iMessage 贴纸包扩展,其中包含包含文本的贴纸。我在 Xcode 中没有看到任何用于本地化贴纸的选项?可以本地化贴纸吗?
问问题
644 次
2 回答
2
如果您想根据设备的语言显示不同的贴纸资产,您需要创建 iMessage 应用程序而不是贴纸包应用程序。而且您需要编写一些代码,因为在简单的贴纸包应用程序中不可能有这种行为。
然而,这很简单。首先,请遵循本教程: http ://blog.qbits.eu/ios-10-stickers-application/
那里的一些代码语法已经过时,但 XCode 将帮助您轻松修复它。
您可以将本地化资源放在不同的文件夹中,然后将它们拖放到您的 XCode 项目中(确保选中“创建文件夹引用”): 项目结构的屏幕截图
然后你可以在你的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
}
于 2017-02-24T10:17:21.203 回答
2
也许这很明显,但是您可以在扩展程序中对其进行管理。如果您创建的不是包,而是扩展,您可以获取准确的贴纸以进行本地化
于 2016-12-07T14:39:59.853 回答