【问题标题】:Internationalisation issue with Sirikit Custom Intents & iOS 13.4.1Sirikit 自定义意图和 iOS 13.4.1 的国际化问题
【发布时间】:2020-04-19 11:53:34
【问题描述】:

我在我的 iOS 应用中使用 Sirikit 实现了两个自定义 Intent。当我开发它们时,我在我的 iphone 中安装了 iOS 13.3,我的一个意图有一个 Siri 对话框提示,要求输入一个参数的值。所有应用程序都被翻译成英语和西班牙语,并且自定义意图在两种语言中都能很好地工作。

当我将我的 iphone 更新到 iOS 13.4.1 时,我的自定义意图开始出现以下问题(我看到这两个问题取决于安装/测试/设备):

  • Siri 要求参数值,就好像我不会使用标准短语“你想要 param 的值是多少?”的任何自定义对话框一样。 (或多或少)
  • 即使 Intent 和应用程序的其余部分的短语和 Siri 响应正确翻译成西班牙语,Siri 也会用英语而不是西班牙语询问 Siri 对话提示。唯一不起作用的翻译是 Siri 对话提示。

我觉得这个问题非常奇怪和烦人。我尝试重新创建Intent.intentdefinition 的翻译文件:Intent.strings (Base)Intent.strings (English)Intent.strings (Spanish),我什至尝试重新创建整个自定义意图定义,但我仍然遇到问题。

我还尝试更改手机上的 iOS 语言和 Siri 语言,重启、重新安装应用、intent 等...

这是我的 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 集成对于我正在开发的应用程序非常重要,这对我来说是一个障碍。

提前致谢!

【问题讨论】:

  • 我也有同样的问题。你解决了吗?

标签: ios swift iphone siri sirikit


【解决方案1】:

根据我自己的经验,此问题已在 iOS 13.5 beta 4 中得到解决。我刚刚在带有 Xcode 11.5 beta 2 (11N605f) 的 iPhone 6s Plus 中对其进行了测试。

但是,还有其他问题。例如,在 Shortcuts 中,我的测试项目中的所有操作字符串都以英文显示,而不是本地化语言。

另外,INStringResolutionResult.confirmationRequired(with:) 无法按预期工作。

我有一个函数可以获取用户所说的单词并在数据库中查找它们,然后使用 INStringResolutionResult.confirmationRequired(with:) 与用户核对。 SiriKit 目前只使用用户说的话,而不是我与用户核对的结果,这会导致最终的代码崩溃。

更新

我刚收到 Apple 错误报告团队的回复。以下是我现在得出的结论。

  1. 在切换语言时,Siri 有时会出现使用默认句子替换开发人员提供的句子的问题。
  2. 安装 Siri 配置文件并重新启动可能会修复当前设置的 Siri 上的上述问题。但是,如果您更改 Siri 的语言,问题仍然存在。
  3. INStringResolutionResult 的 API 存在回归。对于单个结果,open class func disambiguation(with stringsToDisambiguate: [String]) -> Self 和 open class func ConfirmationRequired(with stringToConfirm: String?) -> Self 在 iOS 13.3 之后的 iOS 上都不起作用。 Siri 使用了一个名为“名称”的占位符,而不是实际值。

【讨论】:

  • 我联系了 Apple 开发人员技术支持,并在一个单独的项目中重新创建了该错误,他们告诉我使用反馈助手提交错误报告。我无法测试 iOS 13.5 beta 4,因为我使用我的主手机来测试我的应用程序,并且我不想重新安装所有内容并在日常使用中使用 beta iOS。这显然是一个错误,我想我必须等到 iOS 13.5 可用,这真的很遗憾,因为这会阻止我的应用程序发布。
  • 已确认。 iOS 13.5 修复了 Siri 对话框询问参数的问题,尽管在尝试添加 Siri 快捷方式时某些字符串未完全翻译。
  • 根据我自己的测试,iOS 13.5 中的 SiriKit 根本无法在真实设备上运行。真实设备中的 Siri 仅使用默认单词,而不是程序员提供的单词,即使是英文也是如此。 13.5 模拟器中的 Siri 根本不起作用。 13.3 模拟器中的 Siri 工作正常。我的 iPhone 是最新的 iOS 13.5 的 iPhone 6s Plus。
  • 就我而言,它适用于 iPhone 11 Pro (iOS 13.5)。我不知道您的问题或用例是否与我的相同。我认为我们必须耐心等待,因为他们需要在以后的版本中修复它。顺便说一句,检查您在 .intentdefinition 文件中运行的意图类别。我也遇到了一些问题,category="Run" 对我有用,但“搜索”或“查找”失败
  • 谢谢。我的在“查找”中。这是我的示例项目,如果您愿意,可以进行测试。 dropbox.com/sh/a55svrip3myb8rd/AADE2nFpvTNR9lkzLC4hT5uNa?dl=0
【解决方案2】:

iOS 14 更新

我在 iOS 14 中仍然看到以下行为(由 Owen Zhao 报告):

  • 在切换语言时,Siri 有时会出现使用默认句子替换开发人员提供的句子的问题。

我观察到更改语言后重新启动 iOS 设备(仍然)可以解决问题。

【讨论】:

    【解决方案3】:
    1. 将您的意图定义文件本地化为您的应用支持的所有语言
    2. 确保您的 Xcode 项目通过 ISO 639-1 语言标识符方案识别本地化(有关方案的附加信息)。较旧的 Xcode 项目可能使用不同的语言标识方案,应进行更新。
    3. 如果您的应用尚未本地化,请确保 Settings 中选择的 Siri 语言与您的 Xcode 项目的 CFBundleDevelopmentRegion 匹配,并且该键的值采用 ISO 639-1 格式

    希望这对你有用

    【讨论】:

    • 它已经被翻译成所有支持的语言,并且 Xcode 项目只有几个月的时间,最新的 Xcode 版本(现在是 11.4.1)。在 iOS 13.4.1 之前,所有本地化都可以正常工作。它适用于与 iOS 13.3 完全相同的项目和代码
    • 您是否检查过 #3,因为我遇到了同样的问题,但设置中选择的 Siri 语言与 CFBundleDevelopmentRegion 不匹配
    • 我不明白#3。这是否意味着我只能使用一种语言?我的开发语言是英语。我有基本、英语和西班牙语的翻译。我手机上的 Siri 语言是西班牙语。
    • 英文翻译很好,问题在于西班牙语。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 2018-12-24
    • 2019-07-18
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多