创建独立的 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 是每个文件的标签列表。会
- 阅读文件。
- 创建一个名为
labels
的变量,值为空字符串。
- 将结果变量视为 chr(10) 分隔列表。遍历此列表并在每次迭代中使用
ListFirst(delimiter = "=") to get each label, and append that to the
labels` 变量。
- return
labels
变量
下一步是使用此函数从文件 user.properties
中获取标签。调用此变量 AllLabels
.
然后开始循环通过您的 directoryList
命令创建的查询。使用 getLabels
函数从每个文件中获取标签,并使用 listCompare
函数识别缺失的标签。
我正在使用 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 是每个文件的标签列表。会
- 阅读文件。
- 创建一个名为
labels
的变量,值为空字符串。 - 将结果变量视为 chr(10) 分隔列表。遍历此列表并在每次迭代中使用
ListFirst(delimiter = "=") to get each label, and append that to the
labels` 变量。 - return
labels
变量
下一步是使用此函数从文件 user.properties
中获取标签。调用此变量 AllLabels
.
然后开始循环通过您的 directoryList
命令创建的查询。使用 getLabels
函数从每个文件中获取标签,并使用 listCompare
函数识别缺失的标签。