创建独立的 coldfusion 文件 (cfml) 来比较文件并获取缺失的标签

Create standalone coldfusion file (cfml) that compares files and get missing labels

我正在使用 Preside,它有一些 .properties 用于标记和翻译 Web 内容的扩展文件。

在我们的应用程序中,我们可以有多个 xxx.properties 和其他 xxx_yy.properties,其中 xxx 是 属性 的名称,yy 是语言翻译。不带yy的为默认语言

这里是默认 属性 文件的示例,其中包含他的西班牙语和法语翻译文件以及 标签 add_usser, edit_user, delete_user:

user.properties

    add_user    = Add website user
    edit_user   = Edit website user
    delete_user = Delete website user

user_sp.properties

    add_user    = Agregar usuario web
    edit_user   = Editar usuario web
    delete_user = Eliminar usuario web

user_fr.properties

    add_user    = Ajouter un utilisateur du site Web
    edit_user   = Modifier l utilisateur du site Web
    delete_user = Supprimer l utilisateur du site Web

我需要做的是创建一个独立的 cfml 文件来检索应用程序上的所有 .properties 文件,并将每个默认的 .properties 文件与他的其他翻译文件进行比较,并显示比较文件的缺失标签, 如果它们存在的话。

到目前为止,我能做的是使用 directoryList 检索名称和路径查询中的所有 属性 文件,并打印每个文件。

propertiesFiles = directoryList("/application/i18n/", true, "query", "*.properties", "Directory", "all");

<cfoutput query="propertiesFiles">
   #propertiesFiles.name &" "& propertiesFiles.Directory#
</cfoutput>

有人可以告诉我如何使用 coldfusion 执行循环逻辑并将默认文件的标签与他的翻译进行比较吗?或者告诉我一个简单的方法?也许嵌入 javascript?

提前致谢

将每个文件加载到一个结构中,以便所有名称值对都是已知的。

因此,对于每个文件,遍历一个结构上的所有键,看看第二个结构中是否缺少它们。

另外,考虑将所有这些数据加载到数据库中。数据库更擅长处理数据集。

循环函数是一种选择。有问题的文件看起来像一堆由 cairraige returns 分隔的行。然后,每一行看起来像一个用等号分隔的列表。

此外,还有一个用户定义函数的在线库可供使用。它包含一个名为 ListCompare 的函数,可以应用于这种情况。

我的方法的第一步是编写一个名为 getLabels 的函数,该函数 return 是每个文件的标签列表。会

  1. 阅读文件。
  2. 创建一个名为 labels 的变量,值为空字符串。
  3. 将结果变量视为 chr(10) 分隔列表。遍历此列表并在每次迭代中使用 ListFirst(delimiter = "=") to get each label, and append that to the labels` 变量。
  4. return labels 变量

下一步是使用此函数从文件 user.properties 中获取标签。调用此变量 AllLabels.

然后开始循环通过您的 directoryList 命令创建的查询。使用 getLabels 函数从每个文件中获取标签,并使用 listCompare 函数识别缺失的标签。