UNPKG

i18ntk

Version:

i18n Tool Kit - Zero-dependency internationalization toolkit for setup, scanning, analysis, validation, auto translation, fixing, reporting, and runtime translation loading.

81 lines (51 loc) 4.21 kB
# Reliability and extraction APIs ## Release verification Run the complete suite and then verify the exact npm artifact: ```bash npm test npm run verify:packed-install npm run package:public ``` The packed-install verifier creates a randomized temporary consumer project, runs `npm pack`, installs only the resulting tarball, loads the package and public runtime/report entry points, and verifies every declared CLI target. The temporary project and tarball are removed on completion. The publish-integrity test walks static relative `require()` calls under `main`, `settings`, `utils`, and `runtime`. Any production module absent from the package's `files` coverage fails the test. `npm run package:public` stages the public manifest and verifies it can be packed without including private release material, tests, scripts, secrets, or user configuration. User-facing docs listed in the manifest remain intentionally included. ## Language registry `utils/language-registry.js` is the canonical metadata source for the 23 interface languages. Each record provides `code`, `name`, `nativeName`, `englishName`, `direction`, and `aliases`. Returned records are copies. Arabic and Hebrew have `direction: "rtl"`. Regional and underscore-separated locale identifiers resolve automatically: ```js const { getLanguage, normalizeLanguageCode } = require('./utils/language-registry'); getLanguage('pt-BR'); // Portuguese metadata normalizeLanguageCode('zh_CN'); // "zh" normalizeLanguageCode('iw-IL'); // "he" (legacy Hebrew code) ``` ## Framework detection and extraction The original `detectProjectFramework()` API remains available. Mixed-stack projects can use `detectProjectFrameworks()`, which returns `{ primary, detected, evidence }` and distinguishes application platforms from i18n libraries. `extractFrameworkMessages(source, framework, options)` returns normalized matches containing `value`, `kind`, `framework`, `start`, `end`, `confidence`, and `pattern`. `maxMatches` is bounded, and `includeGeneric: false` restricts matching to framework-specific patterns. ## Translation QA and RTL safety `validateTranslation(source, target, locale)` reports placeholder drift, tag drift, likely untranslated values, and unsafe Unicode bidirectional controls. `isolateForTerminal(value, locale)` removes supplied bidi controls and wraps RTL text in directional isolation marks. Use `validateTranslationEntries(entries, locale)` to check a group and receive totals plus key-aware issues: ```js const { validateTranslationEntries } = require('./utils/translation-quality'); const quality = validateTranslationEntries([ { key: 'welcome', source: 'Hi {{name}}', target: 'Hallo {{name}}' }, { key: 'save', source: '<b>Save</b>', target: 'Speichern' } ], 'de-DE'); console.log(quality.valid, quality.errors, quality.warnings); ``` ## Incremental scanner telemetry `I18nTextScanner` caches by file metadata, language, limits, and active patterns. Disable it with `{ cache: false }`. `getScanTelemetry()` returns `{ filesScanned, cacheHits, filesSkipped, durationMs, cacheEntries }`; `clearScanCache()` invalidates it. The cache is in-memory and never writes project data. ## Public license verification markers Generate the manifest and HTML tag assigned to a licensed public deployment: ```bash npx i18ntk-license generate \ --license-id LIC-CUSTOMER-ID \ --domains example.com,www.example.com \ --output ./public/i18ntk-license.json ``` Add the printed meta tag to the site's HTML and deploy the JSON file at `/i18ntk-license.json`. Validate a deployment manifest locally: ```bash npx i18ntk-license verify --file ./public/i18ntk-license.json --domain example.com npx i18ntk-license queries --license-id LIC-CUSTOMER-ID ``` The `queries` command prints exact search phrases that can locate indexed public markers. It does not perform a web search or transmit data. The marker API is also available through `require('i18ntk/license-marker')`. Markers are public identifiers, not secrets or cryptographic proof of entitlement. Confirm validity against the licensor's commercial records. Never place personal, billing, or secret license material in a marker.