UNPKG

armenian-transliteration

Version:

Multi-standard Armenian transliteration (BGN/PCGN, ISO 9985, Hübschmann-Meillet, ALA-LC, Russian geographic profiles, Russian proper names, IPA)

136 lines (99 loc) 8.45 kB
# Armenian Transliteration Multi-standard Armenian transliteration library with IPA phonemic transcription. Supports 10 canonical transliteration profiles with full type safety and 1200+ tests. ## Installation ```bash npm install armenian-transliteration ``` ## Usage ```typescript import { transliterate, createTransliterator } from "armenian-transliteration"; import { profiles } from "armenian-transliteration/profiles"; // Default: BGN/PCGN romanization transliterate("Երևան"); // "Yerevan" transliterate("Հայաստան"); // "Hayastan" // ISO 9985 (reversible, with diacritics) transliterate("Երևան", { standard: "iso-9985" }); // "Erewan" // Hübschmann-Meillet (academic) transliterate("Երևան", { standard: "hubschmann-meillet" }); // ALA-LC (Library of Congress, 2022) transliterate("Երևան", { standard: "ala-lc" }); // "Erevan" (no Ye prefix) transliterate("պատսպարան", { standard: "ala-lc" }); // "patʹsparan" (soft sign) // Russian geographic names (Kuzmina-Tumanyan 1974) transliterate("Երևան", { standard: "ru-geo-kt-1974" }); // "Ереван" transliterate("Հաղպատ", { standard: "ru-geo-kt-1974" }); // "Ахпат" // Russian geographic names (Republic of Armenia 2011) transliterate("Գեղարքունիք", { standard: "ru-geo-ra-2011" }); // "Гехаркуник" // Russian proper names (Vartapetyan) transliterate("Հակոբ", { standard: "ru-proper-vartapetyan-1961" }); // "Акоб" // Russian Cyrillic transcription for common Eastern Armenian vocabulary transliterate("համար", { standard: "ru-phonetic-eastern" }); // "хамар" // IPA phonemic transcription (Eastern Armenian) transliterate("Երևան", { standard: "ipa-eastern" }); // "Jeɾevɑn" transliterate("Տիգրան", { standard: "ipa-eastern" }); // "Tiɡɾɑn" // IPA phonemic transcription (Standard Western Armenian) — W1 voicing collapse transliterate("Երևան", { standard: "ipa-western" }); // "Jeɾevɑn" transliterate("Տիգրան", { standard: "ipa-western" }); // "Dikʰɾɑn" // Factory for repeated use const toRussian = createTransliterator({ standard: "ru-geo-kt-1974" }); toRussian("Հայաստան"); // "Аястан" toRussian("Երևան"); // "Ереван" profiles["ru-geo-kt-1974"].targetLanguage; // "ru" profiles["ru-proper-vartapetyan-1961"].domain; // "proper-names" ``` ## Supported Standards | Standard | ID | Target | Reversible | Description | | ------------------ | -------------------- | -------- | ---------- | ----------------------------------------- | | BGN/PCGN | `bgn-pcgn` | Latin | No | US/UK geographic names (default) | | ISO 9985 | `iso-9985` | Latin | Yes | International standard with diacritics | | Hübschmann-Meillet | `hubschmann-meillet` | Latin | Yes | Classical academic system | | ALA-LC | `ala-lc` | Latin | No | Library of Congress | | Russian Geographic KT 1974 | `ru-geo-kt-1974` | Cyrillic | No | Geographic names (Kuzmina-Tumanyan 1974) | | Russian Geographic RA 2011 | `ru-geo-ra-2011` | Cyrillic | No | Geographic names (Republic of Armenia 2011) | | Russian Proper Names Vartapetyan 1961 | `ru-proper-vartapetyan-1961` | Cyrillic | No | Proper names: given names, surnames, geographic names | | Russian Phonetic Eastern | `ru-phonetic-eastern` | Cyrillic | No | Common-vocabulary Cyrillic transcription | | IPA Western | `ipa-western` | IPA | No | Broad phonemic (Standard Western Armenian) | | IPA Eastern | `ipa-eastern` | IPA | No | Broad phonemic (Standard Eastern Armenian) | ## Source Notes - **BGN/PCGN** is checked against the UK/PCGN 2022 validation PDF and Thomas T. Pedersen's EKI cross-table. - **ALA-LC** follows the 2022 Library of Congress Armenian Romanization Table. Key rules encoded: word-initial `ե y` only when followed by a vowel (Classical, note 2); word-initial `յ ḥ` (note 4); soft-sign `ʹ` (U+02B9) for the bigrams `Գհ Դզ Կհ Սհ Տս` (note 3); `եւ ew` Classical (note 5) vs `և ev` modern ligature (note 6). The word-start `եվ eʹv` soft-sign exception (note 6) has two lexical exceptions (`ևեթ`, `ևս`) and is not implemented; `եվ` always maps to `ev`. West Armenian bracketed alternates (note 1) are not emitted. - **ISO 9985** uses U+02BF (modifier letter left half ring) for aspirates, per ISO 9985:1996. - **Hübschmann-Meillet** follows Pedersen's EKI cross-table (column H-M); `ու u` as a digraph; aspirates use U+02BF; `ը ə` (U+0259 schwa). - `ru-geo-kt-1974` follows Kuzmina-Tumanyan's 1974 instruction for Armenian SSR geographic names. - `ru-geo-ra-2011` follows the Republic of Armenia Government decision N 220-N for RA geographic names. - `ru-proper-vartapetyan-1961` follows Vartapetyan's 1961 reference for Armenian given names, surnames, and geographic names; Kazumyan 1990, Toshyan 1962, and the Armenian-Russian practical transcription article are useful secondary cross-checks, but not treated as original standard sources. - `ru-phonetic-eastern` is a package profile for learner-facing common vocabulary, not an official name-transfer standard. - **IPA** (`ipa-eastern`, `ipa-western`) profiles target **Tier 1 broad phonemic** — strict orthography phoneme mapping. Every rule is attested in Dum-Tragut (2009) and JIPA 2024 (Seyfarth, Dolatian, Guekguezian, Kelly & Toparlak), cross-checked against Dolatian 2022 and Vaux 1998. Standard Western retains aspiration on թ ք փ ց չ (unlike Wiktionary's algorithm, which strips it — incorrectly per JIPA 2024: 447448). Lexicalized and allophonic detail (stress placement, schwa epenthesis, regressive ղ/վ devoicing, word-final devoicing, post-nasal aspiration, suffix palatalization, Western progressive devoicing, յու → /ʏ/ glide fronting) is deferred to future narrow-phonetic profiles. See [`docs/LINGUISTIC_RATIONALE.md`](docs/LINGUISTIC_RATIONALE.md) for the rule-by-rule citation table and [`tools/ipa-conformance/`](tools/ipa-conformance/) for the Wiktionary conformance harness with annotated divergences (run via `pnpm run ipa-conformance`). ## Profiles Profile metadata is available from the main package and from the lighter `armenian-transliteration/profiles` subpath: ```typescript import { getProfile, getProfilesByTargetLanguage, profiles, } from "armenian-transliteration/profiles"; getProfile("ru-proper-vartapetyan-1961").authority; getProfilesByTargetLanguage("ru").map((profile) => profile.id); ``` Use language-first IDs for language-specific transfer systems. `ru-geo-kt-1974` is preferred over `cyr-geo-kt-1974` because Russian, Ukrainian, and Belarusian profiles would all use Cyrillic but would not share identical transfer rules. ## API ### `transliterate(text, options?)` Transliterate Armenian text. - `text: string` — input text (Armenian characters are transliterated, everything else passes through) - `options.standard` — transliteration standard (default: `"bgn-pcgn"`) - `options.direction` — only `"from-armenian"` (default) is supported in 3.x; reverse transliteration is out of scope ### `createTransliterator(options)` Create a reusable transliterator function with fixed options. More efficient for repeated use. ### `listStandards()` Returns an array of all supported canonical standard IDs. ## Features - **10 canonical transliteration profiles**BGN/PCGN, ISO 9985, Hübschmann-Meillet, ALA-LC, Russian geographic KT 1974, Russian geographic RA 2011, Russian proper names Vartapetyan 1961, Russian phonetic Eastern, IPA (Western & Eastern Armenian) - **Declarative standard definitions**each standard is a data object, not imperative code - **Proper tokenizer** — no temporary Unicode symbol hacks - **Case preservation** — uppercase, lowercase, and title case handled correctly - **Full Unicode support**Armenian ligatures (U+FB13-FB17), punctuation, mixed scripts - **Type-safe** — strict TypeScript and no `any` in the public implementation - **1200+ tests** — unit, per-standard, integration, edge cases, and formal model verification - **Tree-shakeable**ESM, CJS, and browser IIFE builds