我正在研究的项目在GUI中使用某些术语,例如“目标”或“目标”。但是,并非软件的每个实例都使用相同的术语,例如,“目标”可能被称为“计划”,而“目标”可能(令人困惑)被称为“目标”。
替换数目成倍增加,因为它需要允许小写和复数形式,而且不仅有两个,而且可能有三十个这样的替换。
我需要最好的方法来实现这一点(最好的含义是最容易放入HTML和代码中,而又不会给渲染速度带来不必要的负担。)我正在使用两种方法。
对于HTML,我创建如下样式表:
span.txt-goal::before { content: "Goal"; }
span.txt-goals::before { content: "Goals"; }
span.txt-plan::before { content: "Plan"; }
span.txt-plans::before { content: "Plans"; }
然后在HTML中执行以下操作:
<div>
Here is the <span class="txt-goal"></span> for user ABC.
</div>
我可以通过更改样式表(将从数据库生成的样式表)来更改标签。请注意,尽管这会立即更改呈现,但是并不需要这样做。这是一个配置步骤,基本上只需设置一次,因此无需动态设置。
对于代码生成的HTML,我应用了这样的函数(显然是打字稿,但您知道了):
class Util {
...
private label(str: string): string {
return str
.replace("##Goal##", "Goal")
.replace("##Target##", "Target")
.replace("##Goals##", "Goals")
.replace("##Targets##", "Targets")
.replace("##goal##", "goal")
.replace("##target##", "target")
.replace("##goals##", "goals")
.replace("##targets##", "targets");
}
}
然后我像这样使用它:
$("#info-label").html(
Util.cleanStr(Util.label("There is the ##Goall## for user ABC")));
很明显,将参数更改为replace调用可以更改名称。最终,上面的样式表和.replace行都将来自数据库。
但是,随着替换次数的增加,我觉得这不是解决此问题的最佳方法。似乎与本地化和翻译有关,但是,这些名称是根据从数据库中提取的每个组织进行配置的。
我想知道像有限状态自动化之类的方法是否会是更好的替代方法,也许使用正则表达式进行一些花哨的步法可能会有所帮助?
有人对这个问题有更好的方法吗?