SSkilltecabyclaudinhocode
Enviar skill
← Voltar para o catálogo

elvish-translation-tools

Escrita e Conteúdo

Use when translating, reviewing, or maintaining UI / document translations into Sindarin or Quenya (Tolkien's Elvish languages). Triggers include: working with a Sindarin / sjn / Quenya / qya locale file; asked to translate an English string into Elvish; reviewing existing Elvish translations for correctness; adding new strings to an existing Elvish translation. Uses the bundled Eldamo lexicon and

2estrelas
Ver no GitHub ↗Autor: joeyparrishLicença: Apache-2.0

Elvish Translation Tools

Core principle

Every word in an Elvish translation must be traceable to a source: Tolkien's writings, a Neo-Sindarin reconstruction in Eldamo, or a deliberate coinage that you explicitly flag. Hallucinated vocabulary is the failure mode this skill exists to prevent.

Sindarin and Quenya have small attested corpora and large reconstructed vocabularies. Models often "know" plausible-looking words that don't actually exist, or mix Quenya words into Sindarin text. Always check.

When to use

  • A translation source file uses Sindarin (sjn) or Quenya (qya).
  • The user asks to translate an English string into Elvish.
  • The user asks to review or critique an Elvish translation.
  • The user asks to add or revise entries in an Elvish translation file.
  • You encounter a Tolkien / Middle-earth language question in code context.

When NOT to use

  • Translation to natural languages (use a normal translation skill).
  • Lore / worldbuilding questions unrelated to language work.
  • Tolkien-flavoured naming that explicitly wants made-up words and doesn't need linguistic grounding.

Modes

Mode 1: Review

Use when an entry (or a whole file) already exists and you're checking it.

  1. For each Elvish word in the entry, run:
    python3 ${CLAUDE_SKILL_DIR}/scripts/lookup.py check <word>
    
    This reports: where the word is attested, in what language, and any warnings (Quenya-as-Sindarin, deprecated, Gnomish revival, etc.).
  2. Apply the review checklist below.
  3. If the entry uses the project's translation schema (see Schema section), verify the elements[] provenance matches what lookup.py check reports.
  4. Surface findings: keep / revise / replace, with reasoning. Don't silently rewrite.

Mode 2: Translate

Use when adding new entries (drift from upstream source) or producing a translation from scratch.

  1. Search the lexicon for relevant words:
    python3 ${CLAUDE_SKILL_DIR}/scripts/lookup.py search <english-substring>
    
    For false-friend awareness across languages, add --any-lang.
  2. Check existing project vocabulary for recurring lexemes (e.g. if the project consistently uses northo for "play", reuse it; don't invent a new word).
  3. Propose candidates ranked: attested > Neo-Sindarin > defensible reconstruction > coinage. Present alternatives, not single answers, when more than one is plausible.
  4. Verify each component:
    python3 ${CLAUDE_SKILL_DIR}/scripts/lookup.py check <proposed-word>
    
  5. Apply mutation rules at element boundaries (see Mutations section).
  6. Fill out the project's schema fields if the file uses one. At minimum: sjn.roman, sjn.literal, and elements[] with attestation and source per element.
  7. Defer to the user on any coinage. Never invent vocabulary and present it as established.

The lookup tool (essential)

Path: ${CLAUDE_SKILL_DIR}/scripts/lookup.py. Reads compact TSVs extracted from Paul Strack's Eldamo lexicon. Default scope: Sindarin family (s, n, ns). Add --any-lang to include Quenya / Gnomish.

SubcommandUse for
lookup <lemma>Exact dictionary lookup. Returns the headword entry.
search <gloss>Find Sindarin words whose English gloss contains a substring.
check <form>Workhorse. Reports attestation status + warnings for any form. Use before accepting or proposing any word.
cognates <lemma>Show related forms across Sindarin / Noldorin / Quenya. False-friend detection.
forms <pattern>Search attested inflected / compound surface forms.

Run python3 ${CLAUDE_SKILL_DIR}/scripts/lookup.py --help for full options.

Languages and how the tool labels them

CodeLanguageUse for
sSindarin (post-LotR conception)Primary target language.
nNoldorin (1930s precursor to Sindarin)Fallback when Sindarin lacks a word; flag explicitly.
nsNeo-SindarinModern reconstructions in Eldamo; flag with creator.
qQuenya (post-LotR conception)False-friend check only. Do not mix into Sindarin text.
nqNeo-QuenyaSame caution as Quenya.
gGnomish (1910s, ancestor of Sindarin)Rare revival material; flag explicitly.
enEarly Noldorin (1920s)Rare revival material; flag explicitly.

False friends and common mistakes

The most frequent error is reaching for a Quenya word that looks like the right meaning. Some recurring traps:

WrongCorrect SindarinNote
lambë "language"lam (no attested plural; Neo-Sindarin reconstruction: laim)lambë is Quenya.
la "not"ú- (prefix, with mutation) or law / bawla is Quenya.
panta "open"pantpanta is Quenya.
lintië "speed"lint "swift" (adj.; no direct attested noun)lintië is Quenya.
enquet- "repeat"No attested Sindarin verb; use ad- prefix on a verb of doing/sayingenquet- is Quenya AND deprecated in Eldamo.

When in doubt, check the candidate.

Mutations (essential reference)

Sindarin requires consonant mutations at certain word boundaries. Get these wrong and the text looks foreign even when the vocabulary is right.

Soft mutation (lenition)

Triggered by: prepositions ab, adel, am, be, di, na, nu, trî, u-; adjectives after their noun; direct objects of verbs; compound second elements.

BasicMutated
b → vc → g
g → (silent)gw → w
hw → chwm → v
s → ht → d

Nasal mutation

Triggered by: plural article in; preposition / prefix an "for, to"; preposition dan "against".

BasicMutated
b → md → n
p → pht → th

Hard mutation

Triggered by: prepositions ed "out of", ned "in", o / od "from".

BasicMutated
p → pht → th
b → pd → t

For the full table including speculative mixed / liquid mutations, see ${CLAUDE_SKILL_DIR}/references/mutations.md.

Grammar quick reference

  • Imperative: ending -o for all persons. dar- "halt" → daro!.
  • Gerund / infinitive: -ed or -ad. teitha- "write" → teithad "writing / to write".
  • Past participle: -en (sg) / -in (pl). teitha-teithen / teithin.
  • Causative: Quenya -ta- extended into Neo-Sindarin (nor- "run" → northa- "make run"). Defensible but flag as reconstructed.
  • Article: i (sg, lenites) / in (pl, nasal-mutates).
  • Adjective: follows its noun, undergoes lenition. aran "king" + pant "open" → aran bant.
  • "in": mi (no mutation) or lenited vi. Not bir (unattested).

For verb paradigms, pluralization rules, pronouns, and prepositions, see ${CLAUDE_SKILL_DIR}/references/grammar.md.

Translation source-file schema

Many translation projects benefit from a structured YAML that records per-word provenance. The recommended v1 schema lives at ${CLAUDE_SKILL_DIR}/references/translation-schema.md. Read it when:

  • The project's translation file already uses elements[] or similar.
  • You're proposing to introduce structure to an unstructured file.
  • The user asks "how should we document this choice?"

Key enums to know:

  • Attestation: attested / noldorin / gnomish / neo-sindarin / quenya / coined / deprecated.
  • Status: attested / attested-components / defensible-neo-sindarin / coinage / needs-revision / placeholder.

When filling out elements[], the source citation should be whatever lookup.py check reports (e.g. Ety/NOR, PE17/174, LotR/0339).

Script encoding (Tengwar)

The sjn.tengwar field uses CSUR (ConScript Unicode Registry) Tengwar at U+E000–U+E07F, the encoding supported by the Tengwar Telcontar font and the Tecendil transliterator. Do not hand-edit these characters; they render as boxes without

Como adicionar

/plugin marketplace add joeyparrish/elvish-translation-tools

O comando exato pode variar conforme o repositório. Confira o README no GitHub.

Comentários · Nenhum comentário

Entre para comentar. Entrar

  • Ainda não há comentários. Seja o primeiro.