vernacular
v0.1.0
Published
Industry-specific vocabulary customization for JS/TS apps — i18n, but for industry verticals.
Maintainers
Readme
vernacular
Industry-specific vocabulary customization for JS/TS apps. Like i18n, but the dimension is industry (CRM "leads" → education "students", healthcare "patients") rather than language.
Install
npm install vernacularIf you'll use the React adapter, you also need React 18+:
npm install vernacular reactCore usage
import { createVernacular } from 'vernacular';
const packs = {
education: {
lead: { one: 'student', other: 'students' },
deal: { one: 'enrollment', other: 'enrollments' },
},
healthcare: {
lead: { one: 'patient', other: 'patients' },
},
};
const { v, setIndustry } = createVernacular({ packs, industry: 'education' });
v('lead'); // "students"
v('lead', { count: 1 }); // "student"
v('company'); // "company" (no override; key is the default)
setIndustry('healthcare');
v('lead', { count: 1 }); // "patient"React
import { VernacularProvider, Term, useVernacular } from 'vernacular/react';
<VernacularProvider packs={packs} industry="education">
<App />
</VernacularProvider>
// In a component:
<h1>Your <Term name="lead" count={2} /></h1>
// Or via hook:
const v = useVernacular();
return <h1>Your {v('lead', { count: 2 })}</h1>;Casing helpers
v() returns a plain string — use native methods (.toUpperCase(), .toLowerCase()) directly. For title/sentence case:
import { titleCase, sentenceCase } from 'vernacular';
titleCase('your ' + v('lead')); // "Your Students"
sentenceCase('your ' + v('lead')); // "Your students"TypeScript
Untyped works out of the box. For typed keys, augment the module:
// vernacular.d.ts
import 'vernacular';
declare module 'vernacular' {
interface VernacularVocab {
vocab: 'lead' | 'deal' | 'company';
}
}Now v(), <Term name>, and useVernacular() all autocomplete and reject typos.
License
MIT
