Skip to content

Releases: FoxsterDev/DevAccelerationSystem

Loqui 4.2.0: single self-contained catalog, key dropdown, usage scanner

Choose a tag to compare

@FoxsterDev FoxsterDev released this 25 Jun 14:43

Loqui up [0.3.0] - 2026-06-25

Changed (breaking — SchemaVersion 1 → 2)

  • A catalog is now a single self-contained asset. LocalizationCatalog holds all data inline: Languages (List<LocalizationLocaleProfile>), Texts (List<LocalizationEntry>), and Bools (List<LocalizationBoolEntry>).
  • Removed the LocalizationLocaleSet, LocalizationTextTable, and LocalizationConfigTable ScriptableObject wrappers — they were data-only and forced a catalog to span several sibling .asset files. The per-table grouping layer is dropped; each LocalizationEntry keeps its own Group.
  • LocalizationBoolEntry moved to Runtime/Model. Existing catalog assets must be re-authored (e.g. re-run your catalog builder) — there is no automatic migration.

Added

  • [Tooltip]s on LocalizationEntry (Key, EnglishFallback, MaxLength, Context) and LocalizationBoolEntry, and a LocalizationCatalog inspector 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 (including LocalizedText.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/GetBool call sites (literal and const-key) plus LocalizedText bindings, 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-facing Context field.

Notes

  • Runtime resolution, validation, the Loc API, LocalizedText, and remote overrides are unchanged: callers go through LocalizationCatalog's methods, which kept their signatures.

Loqui up [0.2.0] - 2026-06-24

Added

  • Per-platform bool configuration: LocalizationConfigTable (+ LocalizationBoolEntry / LocalizationBoolValues with Default / iOS / Android overrides) on LocalizationCatalog.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

Choose a tag to compare

@FoxsterDev FoxsterDev released this 24 Jun 18:28

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 LocalizedText component, a LanguageDropdown, 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 via Loc.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 an ILoquiLog (pass null to stay silent). If com.foxsterdev.thebestlogger is present, the gated Loqui.Integrations.TheBestLogger adapter compiles automatically — wrap with new TheBestLoggerLoquiLog(logger). Loqui no longer hard-depends on TheBestLogger.
  • Minimum Unity raised to 2022.3.
  • LocalizationService is constructed only through Loc (constructor is now internal).
  • Loc.Ready is level-triggered — subscribing after init fires immediately.

Fixed / Hardened

  • LocalizationEvent.Raise is re-entrancy-safe (a LanguageChanged handler may switch language without corrupting dispatch).
  • Main-thread contract documented and asserted in editor/development builds.
  • FormatCurrency caches its NumberFormatInfo (no per-call clone) and groups by the currency's country for USD/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.
  • LanguageDropdown lifecycle is null-safe; SetLanguage no-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.xml so IL2CPP managed stripping preserves Loqui types.
  • Author prompts moved to Documentation~ (excluded from the imported package payload).

Validation

  • ✅ EditMode Loqui.Tests 96/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

3.0.1 Pre-release
Pre-release

Choose a tag to compare

@FoxsterDev FoxsterDev released this 04 May 11:09

Full Changelog: 3.0.0...3.0.1

3.0.0

3.0.0 Pre-release
Pre-release

Choose a tag to compare

@FoxsterDev FoxsterDev released this 04 May 00:42

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.md as a human-readable upgrade guide for existing project integrations.
  • Added a package-owned AI prompt for upgrading project integrations to 3.0.0 and reviewing log usage against package best practices.
  • Updated README.md with 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 IMGUIRuntimeLogTargetConfiguration numeric inputs and IMGUIRuntimeLogTarget fallback 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 Pre-release
Pre-release

Choose a tag to compare

@FoxsterDev FoxsterDev released this 04 May 00:40

[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, OpenSearch config compatibility, delivery behavior, and StabilityHub.
  • 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.SessionDebugRolloutPercentage for per-target session-random debug activation.
  • Added LogTargetCategory.SessionRolloutPercentage for per-category rollout-gated target overrides, including DebugMode.OverrideCategories.
  • Replaced Unity global-random rollout usage with deterministic rollout sampling so logger rollout decisions no longer advance shared UnityEngine.Random state.
  • Made DebugMode rollout sticky for the current logger session and explicit debugId activation target-specific.
  • Added runtime configuration startup-cache overlay support for target patches across launches.
  • Updated remote-config behavior so partial nested DebugMode patches preserve absent fields, partial target patches keep absent values intact, and DebugMode.Enabled = false turns target debug off immediately.
  • Expanded logger README guidance with concrete partial OpenSearchLogTargetConfiguration remote-patch scenarios, rollout examples, and category-rollout partial-patch cases.
  • Fixed generic LogFormat forwarding 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 AppleSystemLogTarget payload decoration so default empty LogAttributes no longer change plain batch/runtime messages.
  • Fixed async-disposal deadlock risk in FileBackgroundAsyncWriter.
  • Fixed TaskExtensions.HandleExceptions(...) fallback scheduling so missing or unusable SynchronizationContext no longer emits an internal exception log before falling back.
  • Fixed UnityDebugLogSource handler replacement to be instance-safe under repeated test or runtime setup.
  • Fixed repeated pre-initialization usage so LogManager warns only once before a valid initialize.

2.2.14

2.2.14 Pre-release
Pre-release

Choose a tag to compare

@FoxsterDev FoxsterDev released this 19 Nov 11:31
  • Adding [HideInCallstack] to LogTrace extension method to fix the click in Unity console

Full Changelog: 2.2.12...2.2.14

2.2.13

2.2.13 Pre-release
Pre-release

Choose a tag to compare

@FoxsterDev FoxsterDev released this 02 Sep 09:59

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

2.2.11 Pre-release
Pre-release

Choose a tag to compare

@FoxsterDev FoxsterDev released this 09 Jul 15:43

What's Changed

  1. Added android log target
  2. Added display logattributes in unity editor console
  3. 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

2.2.10 Pre-release
Pre-release

Choose a tag to compare

@FoxsterDev FoxsterDev released this 13 Jun 16:01

Full Changelog: 2.2.9...2.2.10

2.2.9

2.2.9 Pre-release
Pre-release

Choose a tag to compare

@FoxsterDev FoxsterDev released this 22 May 11:05

What's Changed

  • hide api key in examples opensearch log target by @FoxsterDev in #3

Full Changelog: 2.2.8...2.2.9