本地化自定义SiriKit意向

时间:2018-09-18 10:39:44

标签: ios xcode localization sirikit

我的Xcode是v10,我正在针对iOS 12开发SiriKit的自定义意图。

在Xcode 10中,自定义意图是在.intentdefinition文件中设计的,您可以在其中定义意图短语的参数以及意图的标题和该意图的Siri快捷方式。使用.intentdefinition文件构建项目后,Xcode会自动为此意图生成INIntent派生类。

我的问题是,当用户能够操纵自定义意图的快捷方式时,为了支持除英语以外的其他语言,以使意图的标题以系统语言显示在“常规”>“ Siri&Search”中,我需要提供本地化的意图我的.intentdefinition文件的标题。

当我尝试在File Inspector中为.intentdefinition文件添加另一种语言,然后构建项目时,我得到:

duplicate output file '/Users/.../IntentDefinitionGenerated/Intents/MyCustomIntent.swift' on task: IntentDefinitionCodegen /Users/.../ru.lproj/Intents.intentdefinition

之所以可能发生这种情况,是因为Xcode在.lproj文件夹中看到了多个.intentdefinition文件,并试图为每个文件生成相同的命名类。

如何为iOS 12本地化.intentdefinition文件?

4 个答案:

答案 0 :(得分:10)

转到intentdefinition文件-> File Inspector-> Select Localize->现在,为intentdefinition文件选择当前语言。 这会将您现有的intentdefinition文件转换为当前语言。

现在再次选择相同的intentdefinition文件,添加其他语言->它将创建一个新的Intents.strings文件,您可以在其中自定义其他语言环境的文本。

Localized Intents.intentdefinition file

Intents.intentdefinition file after localization

答案 1 :(得分:2)

似乎您已经本地化了Intent Definition文件(因为Xcode已将其放入ru.lproj文件夹中),所以问题可能出在“ Compile Sources”中有该文件的两个副本构建阶段。

转到此处:

Project -> App target -> Build Phases -> Compile Sources

,然后查找重复的条目。如果发现重复,请删除其中一个副本

您还可以尝试Editor > Validate Settings…查找重复项

您也可以尝试清理内部版本

答案 2 :(得分:1)

我遇到了与@ desmond-hume相同的问题。就我而言,我有一个旧的xcode项目,在“ Base”可用之前,该项目已经包含一些本地化版本。初始.intentdefinition文件必须添加为基本本地化。从那里,可以添加进一步的本地化,并且Xcode将为每个本地化仅添加一个.strings文件。

在没有基本本地化的情况下,Xcode为每个本地化添加一个新的.intentdefinition,这会导致“产生多个命令...”错误。

您可以通过复选框在主要项目设置下添加基本本地化。 一些旧项目(例如我的项目)也可能会遇到此问题: iOS - Using Base localization pane is always empty

答案 3 :(得分:0)

我最近已经对我的应用程序的意图进行了本地化,但是在最初的本地化之后,我添加了另一个意图。

至少在我检查过的Xcode 10.2.1中,选择项目的顶层时会有一个“导出为本地化”选项。 它将要求您保存输出。 在调查输出时,应该会看到一个.xcloc文件夹,用于所支持的每种语言。 挖掘到“本地化内容”下的.xliff,然后将其打开。

enter image description here

您将在其中找到这些物品的宝库,并且正在寻找并且正在寻找没有“目标”的物品

enter image description here

dub dub的Apple工程师向我展示了此过程,但是我个人对此过程并不满意,因为您必须对其进行编辑,然后重新导入(假设您将文件发送给翻译人员并获得了.xliff后面。

使用Intents的烦恼在于它使用了任意ID,而不是易读的

我还没有找到一种更简便的方法来查找丢失的翻译。 希望这会有所帮助!