Changelog
@eloqnt/sdk
Historic reference of all changes to @eloqnt/sdk.
0.6.13
studio.eloqnt.devwas renamed toengine.eloqnt.dev, with CLI docs remaining atcli.eloqnt.dev.inconsistent-exact-pluralsnow compares a message's repeated plural blocks on one variable with the source's block in the same position, instead of always the first.
0.6.12
eloqnt lintnow flags a translation that breaks the ICU syntax of its source message (inconsistent-args).
0.6.11
- Improve
eloqnt crowdinerrors - Support
destincrowdin.yml. - Validate Xcode workflow states in String Catalogs: a target value marked
neworneeds_reviewnow counts as a missing translation (reported bymissing-translationand resolved byeloqnt translate), and entries Xcode marked stale are reported byorphan-message.
0.6.10
- Allow a
messages.codesvalue that reads as a locale tag (english,german) whenmessages.localeslists the locales — the mapping is only refused now when it collides with another locale you've listed. - Update the next-intl message extractor.
- Support arrays, booleans, numbers and
nullin messages files instead of refusing the run. - Read
.pocatalogs that wrap long strings across multiple lines, which previously failed to parse.
0.6.9
- Message keys named
prototype,constructoror__proto__are now treated as regular messages instead of failing the run. - Pin
@swc/coreminor range to avoid incompatibility with latest@swc/coreversion (a full upgrade will ship later).
0.6.8
- Added the
lintconfig: set a rule's severity or turn it off vialint.rules('error','warn','off'), and scope settings to matching message keys vialint.overrides.
0.6.7
- Support
languages_mappingandcontent_segmentationincrowdin.yml. - Translating a project that has no target locale now fails with a clear error, instead of reporting success after translating nothing.
Promise.allis now supported forgetExtractedandgetTranslations(e.g. for theorphan-messagelint rule).- A
translaterun now runs in local batches and reports how far along it is while it works.
0.6.6
- Rename the
cwdoption torootDiracross the SDK (translate,reviewSource,lint,updateMessages,prepareCrowdinSync), since it names the project root rather than the invocation directory. - Resolve relative
srcPathentries against therootDiroption instead of the process working directory. - Add a
styleguidesconfig option that sets the directory styleguides are loaded from, e.g. to share one set across multiple projects.
0.6.5
messages.formatcan now reference a codec from an installed package by its name (e.g.'@eloqnt/format-apple-xcstrings').defineCodecnow accepts a shared-file variant for formats that keep every locale in one file.messages.pathentries can now split into{source, targets}for when source and target files need a different path structure.
0.6.4
- Explain what to do when a messages file holds a value that can't be translated. An array now says so and points at giving each item its own key or configuring a custom codec, instead of asking you to fix a file that already parses.
0.6.3
- Strip unsupported plural forms deterministically.
0.6.2
- Add a
missing-other-caselint rule for aplural,selectordinal, orselectstatement without anothercase, which throws where the message is formatted. Messages like these were previously skipped by every rule, so their ICU arguments now get checked too. - A translation no longer has to spell out every plural category its locale can select on (ref). The rule is replaced by two, since its halves answer to different authorities:
unreachable-plural-casefor a case the target locale never selects, andinconsistent-exact-pluralsfor=0-style cases that don't match the source.
0.6.1
- Fix typo in
inconsistent-pluralslint message.
0.6.0
- Add an
inconsistent-pluralslint rule that reports plural cases which don't match the target locale's CLDR categories. - Locales that aren't recognised now fail loudly instead of being silently treated as the default locale. A new
invalid-localelint rule reports them, andeloqnt translatestops before spending inference on one. eloqnt translatenow reads CLDR data sopluralandselectordinalstatements are guaranteed to be adjusted for target locales.
0.5.2
- Add
eloqnt crowdincommands for syncing messages with a Crowdin project viacrowdin.yml:upload sources,upload translations, anddownload translations.
0.5.1
- Improve prompt caching.
0.5.0
eloqnt lintnow distinguishes errors from warnings. Missing translations are warnings and no longer fail the run, so lint can gate CI without requiring translations on every commit. Pass--strictto treat warnings as errors.
0.4.0
- Added
eloqnt review source: Reviews source strings for typos and grammatical errors and fixes them in place.
0.3.1
- Support path templates for
messages.pathto support non-next-intl consumers (e.g. i18next)
0.3.0
- Drop internal exports from
@eloqnt/sdk's public entry. The main entry now surfaces only what's intended for external use (lint,defineConfig,defineCodec,translate, and their return types); everything else moved to@eloqnt/sdk/_internalfor workspace-only consumption.
- Drop the engine API's backward-compat fields for pre-split CLIs. The older clients weren't actually picking them up in practice, so the fallback wasn't doing anything anyway.
- Merge
@eloqnt/inferenceinto@eloqnt/sdk. - Add support for messages extracted by experimental
useExtractedinnext-intl@<4.13. - When config discovery fails, check for common misspellings of
.eloqnt(.eloquent,.eloqunt,.eloqent) and point the user at the rename. - Load
.eloqnt/config.{ts,mts,js,mjs}and custom codec files through jiti instead of Node's native loader. The host project no longer needs"type": "module"to use TypeScript, and TypeScript files now work on older Node versions.
0.2.0
- Upgrade to AI SDK 7.
0.1.0
- Split plans into "Hosted model" and "Bring your own model"
0.0.8
- Run static post-translation checks (ICU placeholder parity) on every received translation, with up to two automatic re-translations on failure.
0.0.7
- Consume AST context for
.jsonformats, output file reference forundefined-keyrule
0.0.6
- Speed up linting on large projects by scanning source files for message usage concurrently.
0.0.5
- Drop a redundant prompt fetch in engine-mode translation. A run with nothing to translate now makes no request, so it no longer fails up front when signed out or unsubscribed.
0.0.4
- Remove
toJSONStringfrom the custom codec interface. Catalogs are loaded viadecode, so codecs no longer define it. - Handle messages split across several
messages.pathfolders correctly, including a newduplicate-idlint rule for ids repeated across folders.
0.0.3
- The
inconsistent-argslint rule now catches rich tags (<b>…</b>) a translation drops or invents, not just{argument}placeholders. Placeholders are compared by their literal token, so a<name>tag never stands in for a{name}argument, and the reporter underlines the stray tag in the value.
0.0.2
- Make CLI errors friendlier.
0.0.1
- Exercise the automated release pipeline. No functional changes since the initial 0.0.0 publish.