mirror of
https://github.com/agessaman/meshcore-bot.git
synced 2026-10-05 22:07:17 +00:00
The local translation path defaulted to a bare `local/translations/`, resolved against the process cwd and unrelated to `[Bot] local_dir_path`. Since `local_dir_path` already selects where an operator's commands, service plugins and config overlay live, the catalog belongs in that same tree. It now defaults to `<local_dir_path>/translations`, resolved absolute against the bot root, so relocating `local_dir_path` moves the catalog with it and the lookup no longer depends on the working directory. An explicit `local_translation_path` still wins. Only the constructor at startup was passing the local path. `get_translator()` builds and caches a translator per detected language, and `reload_config()` builds a fresh one, and both were still constructing `Translator` with the distributed path alone. So local overrides silently vanished from any reply that used the sender's language, and did not survive a config reload. Both now pass it, `reload_config()` republishes it alongside `translation_path`, and it is snapshotted and restored on rollback. The DummyTranslator fallback sets it too, since `get_translator()` would otherwise raise AttributeError there. Collapsed `_deep_merge_translations` into the existing `_merge_translations`, which already merged deeply with the primary winning. Rewrote that one to stop mutating its input: it shallow-copied `fallback` and then recursed into the shared sub-dicts, so merging a base language over English corrupted the cached English catalog at every level below the first. Also replaced the two `print()` calls on the error paths with logger calls. Registered `local_translation_path` in the config schema next to `translation_path`, and reverted a trailing-whitespace reflow that touched 84 lines of config.ini.example for a one-key addition. Tests: local overlay (single-string override, added keys, local-only catalog, missing directory), the merge no longer mutating its fallback, the default following `local_dir_path`, an explicit setting overriding it, the overlay reaching `bot.translator` end to end, and a reload picking up a moved path.