在JavaScript字符串中替换多个名称的最佳方法

时间:2018-10-27 18:50:12

标签: javascript algorithm typescript language-translation

我正在研究的项目在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行都将来自数据库。

但是,随着替换次数的增加,我觉得这不是解决此问题的最佳方法。似乎与本地化和翻译有关,但是,这些名称是根据从数据库中提取的每个组织进行配置的。

我想知道像有限状态自动化之类的方法是否会是更好的替代方法,也许使用正则表达式进行一些花哨的步法可能会有所帮助?

有人对这个问题有更好的方法吗?

0 个答案:

没有答案