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

问题描述

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

在我们的应用程序中,我们可以有多个 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 返回分隔的行。然后,每一行看起来像一个由等号分隔的列表。

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

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

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

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

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

,

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

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

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