Sirikit Custom Intents & iOS 13.4.1 的国际化问题
Internationalisation issue with Sirikit Custom Intents & iOS 13.4.1
我在 iOS 应用程序中使用 Sirikit 实现了两个自定义 Intents。当我开发它们时,我在我的 iphone 中安装了 iOS 13.3,我的一个意图有一个 Siri 对话框提示,询问一个参数的值。所有的应用程序都被翻译成英语和西班牙语,并且自定义意图在这两种语言中都能很好地工作。
当我将 iphone 更新为 iOS 13.4.1 时,我的自定义意图开始出现以下问题(我看到这两个问题取决于 installation/test/device):
- Siri 询问参数值,就好像我不会用标准短语 "What value do you want for
param
?"(或多或少)放置任何自定义对话框
- Siri 以英语而不是西班牙语询问 Siri 对话框提示,即使其余 Intent 和应用程序的其余短语和 Siri 响应已正确翻译成西班牙语。唯一不起作用的翻译是 Siri 对话提示。
我觉得这个问题很奇怪也很烦人。我尝试重新创建 Intent.intentdefinition
的翻译文件:Intent.strings (Base)
、Intent.strings (English)
、Intent.strings (Spanish)
我什至尝试重新创建整个 Custom Intent 定义,但我仍然遇到问题.
我还尝试更改 phone 上的 iOS 语言和 Siri 语言、重新启动、重新安装应用程序、intents 等...
这是我的 Sirikit 扩展的 Info.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>InventorySearchIntent</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>IntentsRestrictedWhileLocked</key>
<array/>
<key>IntentsRestrictedWhileProtectedDataUnavailable</key>
<array/>
<key>IntentsSupported</key>
<array>
<string>NumTotalItemsIntent</string>
<string>SearchItemIntent</string>
</array>
</dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.intents-service</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).IntentHandler</string>
</dict>
</dict>
</plist>
有什么解决办法吗?这是 iOS 13.4 的错误吗? Siri 集成对于我正在开发的应用程序非常重要,这对我来说是一个障碍。
提前致谢!
- 将您的意图定义文件本地化为您的应用支持的所有语言
- 确保您的 Xcode 项目通过 ISO 639-1 语言标识符方案(有关方案的其他信息)识别本地化。较早的 Xcode 项目可能使用不同的语言识别方案,应该更新。
- 如果您的应用尚未本地化,请确保在设置中选择的 Siri 语言与您的 Xcode 项目的 CFBundleDevelopmentRegion 相匹配,并且此键的值是 ISO 639-1 格式
希望这对你有用
根据我自己的经验,此问题已在 iOS 13.5 beta 4 中修复。我刚刚在 iPhone 6s Plus 和 Xcode 11.5 beta 2 (11N605f) 中对其进行了测试。
但是,还有其他问题。例如,在快捷方式中,我的测试项目中的所有操作字符串都以英文显示,而不是本地化语言。
此外,INStringResolutionResult.confirmationRequired(with:) 未按预期工作。
我有一个函数获取用户所说的话并在数据库中查找它们,然后使用 INStringResolutionResult.confirmationRequired(with:) 与用户核对。 SiriKit目前只使用用户说的话,而不是我与用户核对的结果,导致最终代码崩溃。
更新
我刚刚收到 Apple 错误报告团队的回复。这是我目前得出的结论。
- 当切换语言时,Siri 有时(如果不是所有时候)会出现使用默认句子替换开发人员提供的句子的问题。
- 安装 Siri 配置文件并重新启动可能会解决当前设置的 Siri 的上述问题。但是如果你改变Siri的语言,问题依然存在
- INStringResolutionResult 的 API 出现了回归。对于单个结果,同时打开 class func disambiguation(with stringsToDisambiguate: [String]) -> Self 和打开 class func confirmationRequired(with stringToConfirm: String?) -> Self wouldn't work on iOS 晚于 iOS 13.3。 Siri 使用了一个名为“名称”的占位符而不是实际值。
iOS 14 次更新
我仍然看到 iOS 14 出现以下行为(如 Owen Zhao 所报告):
- 切换语言时,Siri 有时(如果不是所有时候)会出现使用默认句子替换开发人员提供的句子的问题。
我观察到在更改语言后重新启动 iOS 设备(仍然)可以解决问题。
我在 iOS 应用程序中使用 Sirikit 实现了两个自定义 Intents。当我开发它们时,我在我的 iphone 中安装了 iOS 13.3,我的一个意图有一个 Siri 对话框提示,询问一个参数的值。所有的应用程序都被翻译成英语和西班牙语,并且自定义意图在这两种语言中都能很好地工作。
当我将 iphone 更新为 iOS 13.4.1 时,我的自定义意图开始出现以下问题(我看到这两个问题取决于 installation/test/device):
- Siri 询问参数值,就好像我不会用标准短语 "What value do you want for
param
?"(或多或少)放置任何自定义对话框 - Siri 以英语而不是西班牙语询问 Siri 对话框提示,即使其余 Intent 和应用程序的其余短语和 Siri 响应已正确翻译成西班牙语。唯一不起作用的翻译是 Siri 对话提示。
我觉得这个问题很奇怪也很烦人。我尝试重新创建 Intent.intentdefinition
的翻译文件:Intent.strings (Base)
、Intent.strings (English)
、Intent.strings (Spanish)
我什至尝试重新创建整个 Custom Intent 定义,但我仍然遇到问题.
我还尝试更改 phone 上的 iOS 语言和 Siri 语言、重新启动、重新安装应用程序、intents 等...
这是我的 Sirikit 扩展的 Info.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>InventorySearchIntent</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>IntentsRestrictedWhileLocked</key>
<array/>
<key>IntentsRestrictedWhileProtectedDataUnavailable</key>
<array/>
<key>IntentsSupported</key>
<array>
<string>NumTotalItemsIntent</string>
<string>SearchItemIntent</string>
</array>
</dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.intents-service</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).IntentHandler</string>
</dict>
</dict>
</plist>
有什么解决办法吗?这是 iOS 13.4 的错误吗? Siri 集成对于我正在开发的应用程序非常重要,这对我来说是一个障碍。
提前致谢!
- 将您的意图定义文件本地化为您的应用支持的所有语言
- 确保您的 Xcode 项目通过 ISO 639-1 语言标识符方案(有关方案的其他信息)识别本地化。较早的 Xcode 项目可能使用不同的语言识别方案,应该更新。
- 如果您的应用尚未本地化,请确保在设置中选择的 Siri 语言与您的 Xcode 项目的 CFBundleDevelopmentRegion 相匹配,并且此键的值是 ISO 639-1 格式
希望这对你有用
根据我自己的经验,此问题已在 iOS 13.5 beta 4 中修复。我刚刚在 iPhone 6s Plus 和 Xcode 11.5 beta 2 (11N605f) 中对其进行了测试。
但是,还有其他问题。例如,在快捷方式中,我的测试项目中的所有操作字符串都以英文显示,而不是本地化语言。
此外,INStringResolutionResult.confirmationRequired(with:) 未按预期工作。
我有一个函数获取用户所说的话并在数据库中查找它们,然后使用 INStringResolutionResult.confirmationRequired(with:) 与用户核对。 SiriKit目前只使用用户说的话,而不是我与用户核对的结果,导致最终代码崩溃。
更新
我刚刚收到 Apple 错误报告团队的回复。这是我目前得出的结论。
- 当切换语言时,Siri 有时(如果不是所有时候)会出现使用默认句子替换开发人员提供的句子的问题。
- 安装 Siri 配置文件并重新启动可能会解决当前设置的 Siri 的上述问题。但是如果你改变Siri的语言,问题依然存在
- INStringResolutionResult 的 API 出现了回归。对于单个结果,同时打开 class func disambiguation(with stringsToDisambiguate: [String]) -> Self 和打开 class func confirmationRequired(with stringToConfirm: String?) -> Self wouldn't work on iOS 晚于 iOS 13.3。 Siri 使用了一个名为“名称”的占位符而不是实际值。
iOS 14 次更新
我仍然看到 iOS 14 出现以下行为(如 Owen Zhao 所报告):
- 切换语言时,Siri 有时(如果不是所有时候)会出现使用默认句子替换开发人员提供的句子的问题。
我观察到在更改语言后重新启动 iOS 设备(仍然)可以解决问题。