Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.3.0] - 2026-04-21
Added
- Translation API (Pro): Local HTTP server for LLM and external tool integration. Exposes REST endpoints for StringTable CRUD operations at
http://127.0.0.1:{port}/api/v1/. Start viaTools > KitStack > Lexis > Translation API. Ships an OpenAPI schema for tool definitions at/api/v1/openapi.json - Editor Auto-Initialization: Added
LexisEditorBootstrapwith[InitializeOnLoad]to automatically initialize Lexis in editor mode and re-initialize after play mode exit - Lazy Auto-Initialization:
LocalizationService.Get()and related methods now attempt auto-initialization on first access whenLocalizationSettingsexists, eliminating[MISSING]prefixes before explicitInitialize()calls - FontFallback.Reset(): New method to restore all locale-to-category mappings to defaults, clearing custom mappings added via
RegisterLocaleCategory - LLM Discovery: Ships
AGENTS.mdandCLAUDE.mdin-package so AI coding tools automatically discover the Lexis API
Changed
- Unified Assembly Names: Pro edition now uses the same assembly names as Free (
Lexis.Core,Lexis.Core.Editor) instead of the previousLexis.Pro/Lexis.Pro.Editor. This enables seamless Free ↔ Pro switching without breaking assembly references. Migration: If upgrading from a previous Pro version, update any asmdef references fromLexis.ProtoLexis.Coreand fromLexis.Pro.EditortoLexis.Core.Editor - Editor Menu Reorganization: Decluttered the
Tools > KitStack > Lexismenu. Setup, Refresh Assembly References, and Migrate Asset GUIDs moved toAdvanced >submenu. Translation Window renamed to Auto-Translate. Duplicate Validation menu items consolidated - 3-Way GUID Migration: Automatic asset migration now handles upgrades from any previous version or edition (published Pro, source Pro, Free DLL). All StringTable and AssetTable data preserved automatically
Fixed
- UXML Namespace: Corrected sample UXML and doc comments from
lingua:prefix tolexis:with correctLexis.UIToolkitnamespace - Unused Key Detector Path: Fixed
UnusedKeyDetectorchecking for obsolete package namecom.lingua.coreinstead ofcom.kitstack.lexis - Test Cleanup:
ImporterTestsnow cleans up theTestAssetsdirectory after test runs, preventing empty folder artifacts
1.2.0 - 2026-04-21
Added
- Automatic Service Initialization: Localization system now auto-initializes before scene load via
RuntimeInitializeOnLoadMethod, eliminating the need for manualInitialize()calls in most cases - Lazy Auto-Initialization on Access:
LocalizationService.GetandHasmethods now attempt automatic initialization when called before explicit setup, picking up newly-createdLocalizationSettingson subsequent calls - KitStack Editor Core Integration: All editor windows now use
KitStackEditorColorsandKitStackIconsfor consistent theming across KitStack tools (Auto-Translate, Language Switcher, String Table Browser, Overwrite Consent Dialog, all property drawers) - Comment Field in Entry Editor: Editable comment field now displays inline when editing a String Table entry
Changed
- Entry Creation Validation: String Table Browser now requires a default locale to be configured before allowing new entry creation, showing a warning if missing
- Import Asset Marking: CSV, Google Sheets, JSON, and PO importers now explicitly call
EditorUtility.SetDirty()on both the imported table and settings asset after import, preventing data loss
Fixed
- Build Compilation Errors: Moved
SetDirty()calls inside#if UNITY_EDITORguards inAssetTable,LocalizationSettings, andStringTablepublic setter methods, preventing "UnityEditor.dll referenced by user code" errors in runtime builds - Unused Key Detector Path: Fixed
UnusedKeyDetectorchecking for obsolete package namecom.lingua.coreinstead ofcom.kitstack.lexiswhen skipping internal code - UI Toolkit Namespace: Corrected UXML example code in
LocalizedImage,LocalizedLabel, andRtlContainerto use the correctlexis:namespace prefix instead oflingua:
1.1.3 - 2026-04-08
Fixed
- Fixed ZString compilation errors (
CS1503) whencom.cysharp.zstringis installed:Utf16ValueStringBuilder.AppendFormatdoes not supportIFormatProvider, so culture-aware formatting paths now correctly fall back tostring.Format(Lexis PRO only; Lexis FREE was unaffected as its DLL excludes ZString code paths)
1.1.2 - 2026-04-04
Fixed
- Fixed Android/iOS/WebGL build failure: "UnityEditor.dll assembly is referenced by user code" caused by editor API references baked into pre-compiled runtime DLLs (Lexis Free only)
- Critical: Fixed StringTable and AssetTable data loss on package update or Free-to-Pro upgrade. Assets no longer show "missing script" after updating. All existing entries and translations are preserved automatically via GUID migration
- Fixed Free edition assembly name mismatch (
Lexis.Runtime→Lexis.Core) that prevented type resolution across editions - Fixed Free edition sample assets referencing incorrect script GUIDs (source GUIDs instead of DLL GUIDs)
Added
- Automatic GUID Migration: Editor script that detects and repairs mismatched script references on import — works for version updates, Free↔Pro switches, and any historical GUID variant. Manual trigger available via KitStack > Lexis > Advanced > Migrate Asset GUIDs
- JSON Exporter: Export StringTable data to JSON files for backup before updates (Tools > KitStack > Lexis > Export > JSON File). Produces the same format consumed by the JSON Importer for full round-trip compatibility. Supports single table or all tables, with optional comments and default values
1.1.1 - 2026-03-31
Fixed
- String Table Browser: locale dropdown no longer resets to the default language on window resize or refocus (affected both String Tables and Asset Tables)
- String Table Browser: single-table view now sorts entries A-Z consistently (previously used unsorted serialization order)
- String Table Browser: in-progress translation edits are no longer lost when pressing CTRL+S (pending edits are now auto-committed before asset save)
Added
- String Table Browser: clickable Key column header to toggle sort direction (A-Z / Z-A) for both String Tables and Asset Tables
1.1.0 - 2026-03-29
Added
- Template Caching: Pre-parsed template segments cached for repeat calls, eliminating regex overhead after first parse
- Escaped Characters: Support for
\|,\=, and\\in format specs for literal pipe, equals, and backslash - Select Formatter:
{0:select:key=text|other=fallback}with exact match, numeric range match (1-10=Low), andotherfallback - Ordinal Plurals:
{0:ordinal:one=#st|two=#nd|few=#rd|other=#th}with CLDR ordinal rules for English, French, Italian, and all other supported locales - List Formatter:
{0:list:, |, and }joins IEnumerable values with configurable separators - Custom Formatter Hook (Pro):
ISmartFormatterinterface andRegisterFormatter()/UnregisterFormatter()API for custom format prefixes - SmartFormatterConfig (Pro): ScriptableObject for configuring custom formatters in the Inspector, auto-registered on initialization
- Data-Driven Locale Rules (Pro):
PluralRules.RegisterCardinalRule()andRegisterOrdinalRule()for adding plural rules for unsupported locales - Smart String Validator (Pro): Editor window (KitStack > Lexis > Validation > Run Validation) for compile-time validation of smart string templates
- ZString Integration: Zero-allocation evaluation path when
LEXIS_ZSTRINGis defined - TryParse API:
SmartStringParser.TryParse()for zero-allocation parsing intoSpan<char>buffers (requires ZString) - ClearCache API:
SmartStringParser.ClearCache()for manual cache invalidation - Updated LLM translation prompt with select, ordinal, and escape syntax
1.0.1 - 2026-03-26
Fixed
- Fixed locale switching not updating localized components
- Improved edit-mode preview for all localized components
Added
- Configurable fallback assets and missing translation prefix in Settings
- Quick-create button for Pseudo-Localization Settings
1.0.0 - 2026-01-18
Added
Core Localization System
Localizationstatic facade for convenient access to the localization systemLocalizationServicepure C# implementation with DI supportILocalizationServiceinterface for testing and dependency injectionLocalizedStringserializable struct for Inspector-friendly localization referencesLocaleclass representing language/region with metadata (display name, native name, RTL support)StringTableScriptableObject for storing translations with O(1) lookup performanceLocalizationSettingsScriptableObject for project-wide configuration
Provider System
ILocalizationProviderinterface for implementing custom data providersJsonProviderfor file-based JSON storage with caching and compression supportCsvProviderfor CSV import/export with configurable delimiter and layout optionsPOProviderfor GNU Gettext PO file support with:- Standard
msgid/msgstrpairs - Context support (
msgctxt) - Plural forms (
msgid_plural,msgstr[n]) - Translator and extracted comments
- Multiline strings and escape sequences
- Standard
ProviderRegistryfor automatic provider discovery and registrationLocaleDataandTranslationEntrydata transfer objects
Smart String System
SmartStringParserwith support for:- Positional arguments (
{0},{1}) - Named arguments (
{player},{score}) - Pluralization with CLDR rules (
{0:plural:one=# item|other=# items}) - Gender agreement (
{0:male=He|female=She|other=They}) - Boolean conditionals (
{0:true=Yes|false=No}) - Number formatting (
{0:N0},{0:N2}) - Currency formatting (
{0:C}) - Date formatting (
{0:d},{0:D})
- Positional arguments (
PluralRulesimplementing CLDR plural categories for 15+ languages- Template validation and variable extraction utilities
UI Components
LocalizedTMPcomponent for TextMeshPro with automatic locale updatesLocalizedTextcomponent for legacy Unity UI TextLocalizedImagecomponent for locale-specific spritesLocalizedAudioComponentfor localized audio clips with playback controlLocalizedTextureComponentfor localized textures on RawImage
Asset Localization
AssetTableScriptableObject for localizing non-text assetsILocalizedAsset<T>interface for typed asset referencesLocalizedTextureandLocalizedAudioClipstructs
UI Toolkit Integration
LocalizedLabelelement with UXML supportLocalizedStringConverterfor UXML attribute binding
Editor Tools
- Setup Panel (Lexis > Advanced > Setup)
- Initial setup wizard
- Settings validation
- Package detection status
- String Table Browser (Lexis > String Table Browser)
- Inline translation editing
- Search and filter
- Add/remove entries
- Create new string tables
- Language Switcher (Lexis > Language Switcher)
- Property drawers for
LocalizedString,LocalizedTexture,LocalizedAudioClip - CSV, JSON, and PO file importers
Validation
MissingTranslationValidatorfor finding missing translations across locales
Internal Utilities
LocaleDetectorfor system language detectionStringFormatterwith ZString integration for zero-allocation formattingIServiceFactoryandDefaultServiceFactoryfor DI support
Samples
- Basic Setup sample with minimal configuration example
- Smart Strings sample demonstrating pluralization and formatting
- UI Toolkit sample showing LocalizedLabel in UXML
Documentation
- Comprehensive README with quick start guide
- XML documentation for all public APIs with examples
- This CHANGELOG
Platform Support
- Unity 2020.3 LTS through Unity 6
- All build targets (Windows, macOS, Linux, Android, iOS, WebGL, consoles)
- All render pipelines (Built-in, URP, HDRP)
