Лучший способ заменить несколько имен в строке JavaScript - PullRequest
0 голосов
/ 27 октября 2018

В проекте, над которым я работаю, используется определенная терминология в графическом интерфейсе, например, "Цель" или "Цель".Однако не в каждом экземпляре программного обеспечения используется одна и та же терминология, например, «Цель» может называться «План» или «Цель» (смутно) может называться «Цель».

Количество замен увеличивается, потому чтоон должен учитывать нижний регистр и множественное число, и таких замен не просто два, а, вероятно, тридцать.

Мне нужен лучший способ реализовать это (наилучший, который проще всего вставить в 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 будут взяты из базы данных.

Однако, по мере увеличения числа замен, я чувствую, что это не лучший подход к этой проблеме.Кажется, это связано с локализацией и переводом, однако имена настраиваются для каждой организации, извлеченной из базы данных.

Интересно, будет ли что-то вроде автоматизации конечного состояния лучше для замены, может быть, некоторыеможет помочь необычная работа ног с регулярным выражением?

У кого-нибудь есть превосходный подход к этой проблеме?

...