filter.xml | cq5 | vault

filter.xml | cq5 | vault,filter,aem,Filter,Aem,我有一个要求,我必须确保安装的软件包只覆盖英语翻译(即en.xml)的内容,而不覆盖其他翻译 我有下面的过滤器 <workspaceFilter version="1.0"> <filter root="/apps/project"> <exclude pattern="/apps/project/i18n/(.*)?" /> <include pattern="/apps/project/i18n/*en(.?

我有一个要求,我必须确保安装的软件包只覆盖英语翻译(即en.xml)的内容,而不覆盖其他翻译

我有下面的过滤器

<workspaceFilter version="1.0">
    <filter root="/apps/project">
        <exclude pattern="/apps/project/i18n/(.*)?" />
        <include pattern="/apps/project/i18n/*en(.?xml)" />
    </filter>
</workspaceFilter>

我建议避免在单个筛选器中混合使用包含和排除规则。您可以将其分解为多个过滤器:

<workspaceFilter version="1.0">
    <filter root="/apps/project/components" />
    <filter root="/apps/project/core" />
    <filter root="/apps/project/i18n/en/(.*)" />
</workspaceFilter>

或者尝试仅使用排除模式写入:

<workspaceFilter version="1.0">
  <filter root="/apps/project">
    <exclude pattern="/apps/project/i18n/es(.*)?" />
    <exclude pattern="/apps/project/i18n/en_gb(.*)?" />
  </filter>
</workspaceFilter>

或者编写多个include模式(我留给您的练习)


但是
include
exclude
两种模式的组合在互相争斗,无法确定哪种模式优先。

我认为这里的问题是广泛的过滤器“/apps/project”。它试图做的是,在安装软件包时,只需添加一个名为“apps”的节点,然后添加一个名为“apps/project”的节点,然后替换“/apps/project”下的所有内容。因此,您需要使过滤器更具体。例如,以下内容适用于您的情况:
<workspaceFilter version="1.0">
    <filter root="/apps/project/i18n">
        <exclude pattern="/apps/project/i18n(/.*)?"/>
        <include pattern="/apps/project/i18n/en(/.*)?"/>
    </filter>
</workspaceFilter>


也许我遗漏了什么,但是为什么您不能将过滤器设置为仅
en
节点,并排除其他英语节点

<workspaceFilter version="1.0">
    <filter root="/apps/project/i18n/en">
        <exclude pattern="/apps/project/i18n/en_.*"/>
    </filter>
</workspaceFilter>


如果您需要除
en_gb
之外的所有其他语言,您可以明确地排除它。

no#spock,这不会是一个问题,您可以在过滤器中看到排除和包括模式“/apps/project/i18n”已经被删除used@Rupesh,我指的是根目录中的宽筛选器。已更改的包括筛选器
/apps/project/i18n/en(/.*)?
这对我很有效。我没有更改排除筛选器。
<workspaceFilter version="1.0">
    <filter root="/apps/project/i18n/en">
        <exclude pattern="/apps/project/i18n/en_.*"/>
    </filter>
</workspaceFilter>