В этой статье рассказывается о выпуске createT новой служебной функции, которая делает создание шаблонов строк для использования на рабочих веб-сайтах удобным и простым.

Введение

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

Применение

Функция createT возвращает каррированную функцию, которую вы можете использовать в любом месте вашего кода, где вы хотите использовать строковый шаблон.

По умолчанию шаблоны могут иметь переменные, определенные с помощью двойных фигурных скобок. Обратите внимание, что это поведение настраивается.

import createT from '@swiftmind/create-t'

const t = createT({
  home: {
    welcome: 'Welcome {{name}}, to SwiftMind Institute'
  }
} as const)

const welcome = t('home.welcome', { name: 'Hans' } as const)

Вам может быть любопытно, почему используется as const. Это делается для того, чтобы компилятор TypeScript знал о значении строк в шаблонах, а также любых переменных, переданных в шаблон. Это означает, что вы можете проверить значение строки перед компиляцией. Не верите мне? Не стесняйтесь пересматривать гифку в верхней части этой страницы. Посмотрите, что произойдет, когда я наведу указатель мыши на имя переменной welcome.

Расширенное использование

Вы можете настроить способ, которым createT представляет переменные, определив группу захвата.

import createT from '@swiftmind/create-t'

const t = createT(
  {
    comparison: 'I like %this$ better than %that$'
  } as const,
  { start: '%', end: '$' } as const,
)

const likes = t('comparison', { this: 'foie gras', that: 'beets' } as const)

Обратите внимание на объявления as const

Организация файлов

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

Как только вы разместите свою копию в централизованном месте, вы можете создать функцию t и экспортировать ее. Что здорово, так это то, что это может быть постепенным сдвигом, когда вы работаете с разными страницами своего веб-сайта или приложения.

import createT from '@swiftmind/create-t'
import * as home from './home'
import * as aboutUs from './about-us'
import * as mission from './mission'

export const t = createT({
  home,
  aboutUs,
  mission,
} as const)

Заключение

Этот пакет стал кульминацией многомесячных исследований парсинга строк в TypeScript с использованием только типов. Я надеюсь, что это полезно для кого-то там. До следующего раза, удачного кодирования!