API Reference
For the complete hyperscript command reference (59 commands,
expressions, compilation API), see the
hyperfixi API docs.
This page documents the LokaScript multilingual-specific APIs.
@lokascript/i18n
Per-language vocabulary for hyperscript: keyword dictionaries, locale
detection, and the grammar profiles that describe each language's word order
and role markers.
This package no longer translates. It used to export
translate(),
toLocale(),toEnglish()and aGrammarTransformerclass. That
transformer was retired once every row of the translation corpus was won by
the semantic engine, and those four exports were deleted with it. Use
@lokascript/semantic'stranslate()— it parses to
a semantic node and renders from it, so the output re-parses in the target
language. What follows is what@lokascript/i18nstill provides.
getSupportedLocales()
Returns the list of supported language codes.
import { getSupportedLocales } from '@lokascript/i18n';
getSupportedLocales();
// ['en', 'ja', 'ko', 'zh', 'ar', 'tr', 'es', 'de', 'fr', 'pt',
// 'id', 'ms', 'qu', 'sw', 'bn', 'it', 'ru', 'uk', 'vi', 'hi',
// 'tl', 'th', 'pl', 'he']
getProfile(lang)
Returns a language's grammar profile — word order, adposition type, text
direction, and the role markers used during transformation.
import { getProfile } from '@lokascript/i18n';
const ja = getProfile('ja');
ja.wordOrder; // 'SOV'
ja.adpositionType; // 'postposition'
ja.direction; // 'ltr'
ja.markers; // [{ form: 'を', role: 'patient', ... }, ...]
getProfile('en').wordOrder; // 'SVO'
getProfile('ar').wordOrder; // 'VSO'
@lokascript/semantic
Semantic multilingual parser for hyperscript.
parse(code, language)
Parse hyperscript code into a SemanticNode. The language is a positional
ISO 639-1 code, not an options object. Throws if parsing fails.
import { parse } from '@lokascript/semantic';
const node = parse('on click toggle .active on me', 'en');
node.kind; // 'event-handler'
node.metadata.confidence; // 1
node.metadata.sourceLanguage; // 'en'
node.metadata.patternId; // 'event-en-standard'
Confidence lives on metadata, and the node is not itself a runtime AST —
use buildAST() for that.
canParse(code, language)
Like parse(), but returns false instead of throwing. Use it to test a
candidate language without a try/catch.
import { canParse, getSupportedLanguages } from '@lokascript/semantic';
canParse('クリック で 私 の .active を 切り替え', 'ja'); // true
canParse('クリック で 私 の .active を 切り替え', 'en'); // false
// There is no built-in language detector. When the language is unknown,
// score the candidates you actually support:
const code = 'クリック で 私 の .active を 切り替え';
const detected = getSupportedLanguages().find((lang) => canParse(code, lang));
// → 'ja'
buildAST(node)
Convert a SemanticNode into a runtime-executable AST.
import { parse, buildAST } from '@lokascript/semantic';
const { ast, warnings } = buildAST(parse('toggle .active', 'en'));
if (warnings.length) console.warn(warnings);
translate(code, fromLang, toLang)
Parse in one language and render in another. This round-trips: the output
re-parses in the target language. It is the only translation API in
LokaScript — @lokascript/i18n's transformer, which substituted keywords
without parsing, was retired.
import { translate } from '@lokascript/semantic';
translate('.active を 切り替え', 'ja', 'en'); // → 'toggle .active'
translate('toggle .active', 'en', 'ja'); // → '.active を 切り替え'
getAllTranslations(code, fromLang)
Translate once into every supported language.
import { getAllTranslations } from '@lokascript/semantic';
getAllTranslations('toggle .active', 'en');
// { en: 'toggle .active', ja: '.active を 切り替え',
// es: 'alternar .active', ar: 'بدّل .active', ... }
render(node, language) / renderExplicit(node)
Render a parsed node back to hyperscript, or to the language-agnostic
explicit syntax used for debugging role assignment.
import { parse, render, renderExplicit } from '@lokascript/semantic';
const node = parse('on click add .highlight to #box', 'en');
render(parse('toggle .active', 'en'), 'ja');
// → '.active を 切り替え'
renderExplicit(node);
// → '[on event:click body:[add patient:.highlight destination:#box]]'
DEFAULT_CONFIDENCE_THRESHOLD / HIGH_CONFIDENCE_THRESHOLD
0.5 and 0.8. Compare against node.metadata.confidence when deciding
whether to trust a semantic parse.
@lokascript/hyperscript-adapter
Drop-in multilingual plugin for original _hyperscript.
See the adapter plugin page for
quick start, live demos, and bundle options.
hyperscriptI18n(options?)
Create a plugin for _hyperscript.use(). Returns a function that patches runtime.getScript() to translate non-English _="..." attributes before parsing.
import { hyperscriptI18n } from '@lokascript/hyperscript-adapter';
// Basic — uses defaults
_hyperscript.use(hyperscriptI18n());
// With options
_hyperscript.use(
hyperscriptI18n({
defaultLanguage: 'es',
confidenceThreshold: { ja: 0.1, '*': 0.5 },
debug: true,
})
);
PluginOptions
| Option | Type | Default | Description |
|---|---|---|---|
defaultLanguage |
string |
— | Fallback language when no data-lang or data-hyperscript-lang is found |
languageAttribute |
string |
"data-lang" |
Custom attribute name for per-element language |
confidenceThreshold |
number | Record<string, number> |
0.5 |
Min confidence (0–1). Per-language map supported — use '*' key for default. |
strategy |
'semantic' | 'i18n' | 'auto' |
'semantic' |
Translation strategy. 'auto' tries semantic first, then i18n fallback. |
debug |
boolean |
false |
Log translations to console as [hyperscript-i18n] lang: "input" → "output" |
i18nToEnglish |
function |
— | Optional caller-supplied (code, lang) => english fallback translator (used with 'auto' or 'i18n' strategy). Bring your own — @lokascript/i18n no longer exports one. |
preprocess(src, lang, config?)
Standalone preprocessing for programmatic _hyperscript("code") or _hyperscript.evaluate() calls. The plugin only intercepts DOM attributes — use this for code strings.
import { preprocess } from '@lokascript/hyperscript-adapter';
const english = preprocess('alternar .active', 'es');
// → 'toggle .active'
_hyperscript(english);
Parameters:
src(string) — hyperscript code in the source languagelang(string) — ISO 639-1 language code (e.g.'es','ja')config(Partial<PreprocessorConfig>) — optional overrides
Returns string — English hyperscript. Returns original text if lang is 'en' or translation fails.
preprocessToEnglish(src, lang, config?)
Lower-level preprocessing function. Unlike preprocess(), does not short-circuit for English input. Most users should use preprocess() instead.
PreprocessorConfig
| Option | Type | Default | Description |
|---|---|---|---|
confidenceThreshold |
number | Record<string, number> |
0.5 |
Min confidence for semantic parsing |
strategy |
'semantic' | 'i18n' | 'auto' |
'semantic' |
Translation strategy |
fallbackToOriginal |
boolean |
true |
Return original text when translation fails |
i18nToEnglish |
function |
— | Optional i18n fallback function |
resolveLanguage(elt)
Resolve the language for an element using the cascading strategy:
data-langattribute on the elementdata-hyperscript-langon the element or closest ancestor<html lang="...">on the document- Returns
null(English assumed)
import { resolveLanguage } from '@lokascript/hyperscript-adapter';
// Useful for debugging language detection
const lang = resolveLanguage(document.querySelector('#myButton'));
console.log(lang); // 'es', 'ja', or null
BCP-47 tags are normalized to ISO 639-1 codes (e.g. "ja-JP" → "ja").
Core API
For the core hyperscript runtime API (compileSync,
compileAsync, eval, validate, etc.), see the
hyperfixi API reference.