Releases: FoxsterDev/DevAccelerationSystem
Loqui 4.2.0: single self-contained catalog, key dropdown, usage scanner
Loqui up [0.3.0] - 2026-06-25
Changed (breaking — SchemaVersion 1 → 2)
- A catalog is now a single self-contained asset.
LocalizationCatalogholds all data inline:Languages(List<LocalizationLocaleProfile>),Texts(List<LocalizationEntry>), andBools(List<LocalizationBoolEntry>). - Removed the
LocalizationLocaleSet,LocalizationTextTable, andLocalizationConfigTableScriptableObject wrappers — they were data-only and forced a catalog to span several sibling.assetfiles. The per-table grouping layer is dropped; eachLocalizationEntrykeeps its ownGroup. LocalizationBoolEntrymoved toRuntime/Model. Existing catalog assets must be re-authored (e.g. re-run your catalog builder) — there is no automatic migration.
Added
[Tooltip]s onLocalizationEntry(Key,EnglishFallback,MaxLength,Context) andLocalizationBoolEntry, and aLocalizationCataloginspector that shows a live validity / counts summary.- Top world languages in
LocalizationLanguageCodes(English, Chinese Simplified/Traditional, Hindi, Spanish, Arabic, French, Russian, Portuguese + Brazil, Indonesian, German, Japanese, Korean, Turkish, Italian, Vietnamese) with display names; the language-code dropdown now shows friendly labels. [LocalizationKey]attribute + drawer: any string key field (includingLocalizedText.Key) renders as a searchable dropdown of the keys available across the project's catalogs, with a raw-text toggle for not-yet-authored keys.- Advanced Usage scanner in the catalog inspector — an on-demand, non-blocking project scan that resolves
Loc.Get/GetBoolcall sites (literal andconst-key) plusLocalizedTextbindings, then reports per-key call counts, used/unused, owning modules (asmdef), files, generic (dynamic-key) calls, and per-platform overrides, with By Key / By Module / By Group / Generic API views and filters. - Prompt
06_migrate_catalog_schema_v1_to_v2.md: a no-data-loss v1→v2 migration guide (with the ApperfunHub builder fast-path as the worked example).
Removed
LocalizationEntry.Notes— merged into the single author-facingContextfield.
Notes
- Runtime resolution, validation, the
LocAPI,LocalizedText, and remote overrides are unchanged: callers go throughLocalizationCatalog's methods, which kept their signatures.
Loqui up [0.2.0] - 2026-06-24
Added
- Per-platform bool configuration:
LocalizationConfigTable(+LocalizationBoolEntry/LocalizationBoolValueswithDefault/iOS/Androidoverrides) onLocalizationCatalog.ConfigTables, resolved at init for the active platform. Loc.GetBool(key, fallback)/Loc.TryGetBool(key, out value)— fallback-first non-text config lookup.
4.0.0
Loqui localization package
Introduces Loqui, a fallback-first localization package for Unity (com.foxsterdev.loqui), shipped hardened after a full-SDK review. EditMode Loqui.Tests 96/96 green on Unity 2022.3.62f3.
✨ Highlights
- New Loqui localization system — keep your code literal as the default, override only per language and per platform.
- No hard logging dependency; optional TheBestLogger adapter.
- Clean UPM import, IL2CPP-safe stripping, deterministic editor tooling.
Added — Loqui
- Fallback-first API:
Loc.Get(key, literal)returns the literal when no override exists and never throws on a missing key. - ScriptableObject catalog with per-language and per-platform (
iOS/Android) values + build-time validation. - TMP integration via the
LocalizedTextcomponent, aLanguageDropdown, and runtime font swap per language. - Locale-aware
FormatNumber/FormatCurrency/FormatPercent/FormatShortDate/FormatDateTime. - Opt-in remote overrides: parse + validate a sparse
JsonUtility-compatible payload, then apply at runtime viaLoc.ApplyOverrides(...)/Loc.ClearOverrides()(per-language, per-platform, survives language switches). - Editor scanner with deterministic, collision-free key generation.
⚠️ Changed / Breaking (for integrators)
- Logging is now optional.
Loc.Initialize(...)takes anILoquiLog(passnullto stay silent). Ifcom.foxsterdev.thebestloggeris present, the gatedLoqui.Integrations.TheBestLoggeradapter compiles automatically — wrap withnew TheBestLoggerLoquiLog(logger). Loqui no longer hard-depends on TheBestLogger. - Minimum Unity raised to
2022.3. LocalizationServiceis constructed only throughLoc(constructor is nowinternal).Loc.Readyis level-triggered — subscribing after init fires immediately.
Fixed / Hardened
LocalizationEvent.Raiseis re-entrancy-safe (aLanguageChangedhandler may switch language without corrupting dispatch).- Main-thread contract documented and asserted in editor/development builds.
FormatCurrencycaches itsNumberFormatInfo(no per-call clone) and groups by the currency's country forUSD/BRL/GBP/JPY.- Non-ASCII source text (CJK / Cyrillic / Arabic) no longer collapses to colliding keys.
- C# scanner ignores commented-out code (string/verbatim-aware); scan order and key disambiguation are deterministic.
LanguageDropdownlifecycle is null-safe;SetLanguageno-ops on the already-active language.
Packaging
- Declares
com.unity.ugui+com.unity.textmeshpro(clean import into a fresh project). - Ships a Unity-recognized
link.xmlso IL2CPP managed stripping preserves Loqui types. - Author prompts moved to
Documentation~(excluded from the imported package payload).
Validation
- ✅ EditMode
Loqui.Tests96/96 passing on Unity 2022.3.62f3 (compile clean). - ⏳ Pending: PlayMode lane (
LoquiSample.PlayModeTests) and an IL2CPP + managed-stripping device build.
Install (UPM, git)
"com.foxsterdev.loqui": "https://github.com/FoxsterDev/DevAccelerationSystem.git?path=DevAccelerationSystem/Assets/Loqui#4.0.0"3.0.1
Full Changelog: 3.0.0...3.0.1
3.0.0
TheBestLogger [3.0.0] - 2026-05-03
- Breaking change: removed the public GetCurrentLogTargetConfigurations() API.
- Breaking change: removed the public typed runtime-update APIs based on LogTargetConfiguration objects.
- Added
TryApplyRemoteConfigurationPatch(string targetName, string rawJsonPatch, out string error)as the single-target public remote-config entrypoint. - Added
TryApplyRemoteConfigurationDocument(IReadOnlyDictionary<string, string> rawJsonPatches, out string error)as the batch public remote-config entrypoint. - Added explicit client-facing error reporting for remote-config application through
bool+out string error. - Made batch remote-config document application atomic so mixed valid/invalid batches are rejected without partial apply.
- Added package-owned generic integration examples for:
- app-level logger facade
- remote-config normalization into
targetName -> rawJsonPatch
- Added
MIGRATION_3_0_0.mdas a human-readable upgrade guide for existing project integrations. - Added a package-owned AI prompt for upgrading project integrations to
3.0.0and reviewing log usage against package best practices. - Updated
README.mdwith generic integration wiring examples and references to both the human migration guide and the package-owned AI migration/review prompt. - Hardened remote-config application so malformed or rejected public patches are not persisted into startup cache.
- Hardened target apply flow so one bad applied config restores the previous target state or falls back to a muted quarantine configuration instead of poisoning logger runtime state.
- Hardened
IMGUIRuntimeLogTargetConfigurationnumeric inputs andIMGUIRuntimeLogTargetfallback behavior against semantically invalid external config values. - Added regression coverage for public-API hardening, cache behavior, snapshot isolation, and invalid remote-config inputs.
2.2.15
[2.2.15] - 2026-05-03
- Added broad hardening coverage across editor, playmode, performance, and tracked consumer-validation surfaces.
- Added production-oriented regression coverage for logger lifecycle, concurrency, batching, main-thread dispatch, target fault isolation,
OpenSearchconfig compatibility, delivery behavior, andStabilityHub. - Added performance measurements through Unity Performance Testing.
- Added repository-level logger integration and audit docs for public use.
- Added direct scripted bootstrap paths and sample-scene support for switching between resource-driven, QA, and production logger initialization flows.
- Added
DebugMode.SessionDebugRolloutPercentagefor per-target session-random debug activation. - Added
LogTargetCategory.SessionRolloutPercentagefor per-category rollout-gated target overrides, includingDebugMode.OverrideCategories. - Replaced Unity global-random rollout usage with deterministic rollout sampling so logger rollout decisions no longer advance shared
UnityEngine.Randomstate. - Made
DebugModerollout sticky for the current logger session and explicitdebugIdactivation target-specific. - Added runtime configuration startup-cache overlay support for target patches across launches.
- Updated remote-config behavior so partial nested
DebugModepatches preserve absent fields, partial target patches keep absent values intact, andDebugMode.Enabled = falseturns target debug off immediately. - Expanded logger README guidance with concrete partial
OpenSearchLogTargetConfigurationremote-patch scenarios, rollout examples, and category-rollout partial-patch cases. - Fixed generic
LogFormatforwarding for multi-argument overloads. - Fixed batch snapshot and duplicate-delivery risks in concurrent batch-drain paths.
- Fixed Apple exception-message handling and safer crash-path intake behavior.
- Fixed
AppleSystemLogTargetpayload decoration so default emptyLogAttributesno longer change plain batch/runtime messages. - Fixed async-disposal deadlock risk in
FileBackgroundAsyncWriter. - Fixed
TaskExtensions.HandleExceptions(...)fallback scheduling so missing or unusableSynchronizationContextno longer emits an internal exception log before falling back. - Fixed
UnityDebugLogSourcehandler replacement to be instance-safe under repeated test or runtime setup. - Fixed repeated pre-initialization usage so
LogManagerwarns only once before a valid initialize.
2.2.14
- Adding [HideInCallstack] to LogTrace extension method to fix the click in Unity console
Full Changelog: 2.2.12...2.2.14
2.2.13
Full Changelog: 2.2.11...2.2.12
Deprecated void LogFormat(LogLevel logLevel, string message, LogAttributes logAttributes = null, params object[] args) use void LogFormat instead
Added LogTrace extension method to be cut during compilation for non-Unity Editor and non-Unity development builds
Format message improvements
To migrate from LogTrace interface method usage to extension LogTrace, you have to reference TheBestLogger.Core and add using TheBestLogger;
2.2.11
What's Changed
- Added android log target
- Added display logattributes in unity editor console
- Notify directly into unity editor console when network issues with open search log targetby @FoxsterDev in #4
Full Changelog: 2.2.10...2.2.11
2.2.10
Full Changelog: 2.2.9...2.2.10
2.2.9
What's Changed
- hide api key in examples opensearch log target by @FoxsterDev in #3
Full Changelog: 2.2.8...2.2.9