- Introduced a new extension for localization in Flutter with `LocalizationExtension` in `l10n.dart`.
- Added a Python script `translate.py` for translating ARB/JSON localization files using a local Ollama model, preserving keys and placeholders, and handling ICU format rules.
description:'Sets the advertisement map latitude. (decimal degrees)',
description:l10n.repeater_cliHelpSetLat,
),
const_CommandHelpEntry(
_CommandHelpEntry(
command:'set lon {longitude}',
description:'Sets the advertisement map longitude. (decimal degrees)',
description:l10n.repeater_cliHelpSetLon,
),
const_CommandHelpEntry(
_CommandHelpEntry(
command:'set radio {freq},{bw},{sf},{cr}',
description:
'Sets completely new radio params, and saves to preferences. Requires a "reboot" command to apply.',
description:l10n.repeater_cliHelpSetRadio,
),
const_CommandHelpEntry(
_CommandHelpEntry(
command:'set rxdelay {base}',
description:
'Sets (experimental) base (must be > 1 for effect) for applying slight delay to received packets, based on signal strength/score. Set to 0 to disable.',
description:l10n.repeater_cliHelpSetRxDelay,
),
const_CommandHelpEntry(
_CommandHelpEntry(
command:'set txdelay {factor}',
description:
'Sets a factor multiplied with time-on-air for a flood-mode packet and with a randomized slot system, to delay its forwarding. (to decrease likelihood of collisions)',
description:l10n.repeater_cliHelpSetTxDelay,
),
const_CommandHelpEntry(
_CommandHelpEntry(
command:'set direct.txdelay {factor}',
description:
'Same as txdelay, but for applying a random delay to the forwarding of direct-mode packets.',
'Sets temporary radio params for the given number of {minutes}, reverting to original radio params afterward. (does NOT save to preferences).',
description:l10n.repeater_cliHelpTempRadio,
),
const_CommandHelpEntry(
_CommandHelpEntry(
command:'setperm {pubkey-hex} {permissions}',
description:
'Modifies the ACL. Removes matching entry (by pubkey prefix) if "permissions" is zero. Adds new entry if pubkey-hex is full length and is not currently in ACL. Updates entry by matching pubkey prefix. Permission bits vary per firmware role, but low 2 bits are: 0 (Guest), 1 (Read only), 2 (Read write), 3 (Admin)',
description:l10n.repeater_cliHelpSetPerm,
),
];
finalbridgeCommands=[
const_CommandHelpEntry(
_CommandHelpEntry(
command:'get bridge.type',
description:'Gets bridge type none, rs232, espnow',
description:l10n.repeater_cliHelpGetBridgeType,
),
];
finalloggingCommands=[
const_CommandHelpEntry(
_CommandHelpEntry(
command:'log start',
description:'Starts packet logging to file system.',
description:l10n.repeater_cliHelpLogStart,
),
const_CommandHelpEntry(
_CommandHelpEntry(
command:'log stop',
description:'Stops packet logging to file system.',
description:l10n.repeater_cliHelpLogStop,
),
const_CommandHelpEntry(
_CommandHelpEntry(
command:'log erase',
description:'Erases the packet logs from file system.',
description:l10n.repeater_cliHelpLogErase,
),
];
finalneighborCommands=[
const_CommandHelpEntry(
_CommandHelpEntry(
command:'neighbors',
description:
'Shows a list of other repeater nodes heard via zero-hop adverts. Each line is {id-prefix-hex}:{timestamp}:{snr-times-4}',
description:l10n.repeater_cliHelpNeighbors,
),
const_CommandHelpEntry(
_CommandHelpEntry(
command:'neighbor.remove {pubkey-prefix}',
description:
'Removes first matching entry (by pubkey prefix (hex)), from neighbors list.',
description:l10n.repeater_cliHelpNeighborRemove,
),
];
finalregionCommands=[
const_CommandHelpEntry(
_CommandHelpEntry(
command:'region',
description:
'(serial only) Lists all defined regions and current flood permissions.',
description:l10n.repeater_cliHelpRegion,
),
const_CommandHelpEntry(
_CommandHelpEntry(
command:'region load',
description:
'NOTE: this is a special multi-command invocation. Each subsequent command is a region name (indented with spaces to indicate parent hierarchy, with one space at minimum). Terminated by sending a blank line/command.',
description:l10n.repeater_cliHelpRegionLoad,
),
const_CommandHelpEntry(
_CommandHelpEntry(
command:'region get {* | name-prefix}',
description:
'Searches for region with given name prefix (or "*" for the global scope). Replies with "-> {region-name} ({parent-name}) {\'F\'}"',
description:l10n.repeater_cliHelpRegionGet,
),
const_CommandHelpEntry(
_CommandHelpEntry(
command:'region put {name} {* | parent-name-prefix}',
description:'Adds or updates a region definition with given name.',
description:l10n.repeater_cliHelpRegionPut,
),
const_CommandHelpEntry(
_CommandHelpEntry(
command:'region remove {name}',
description:
'Removes a region definition with given name. (must match exactly, and have no child regions)',
description:l10n.repeater_cliHelpRegionRemove,
),
const_CommandHelpEntry(
_CommandHelpEntry(
command:'region allowf {* | name-prefix}',
description:
"Sets the 'F'lood permission for the given region. ('*' for the global/legacy scope)",
description:l10n.repeater_cliHelpRegionAllowf,
),
const_CommandHelpEntry(
_CommandHelpEntry(
command:'region denyf {* | name-prefix}',
description:
"Removes the 'F'lood permission for the given region. (NOTE: at this stage NOT advised to use this on the global/legacy scope!!)",
description:l10n.repeater_cliHelpRegionDenyf,
),
const_CommandHelpEntry(
_CommandHelpEntry(
command:'region home',
description:
"Replies with the current 'home' region. (Note applied anywhere yet, reserved for future)",
description:l10n.repeater_cliHelpRegionHome,
),
const_CommandHelpEntry(
_CommandHelpEntry(
command:'region home {* | name-prefix}',
description:"Sets the 'home' region.",
description:l10n.repeater_cliHelpRegionHomeSet,
),
const_CommandHelpEntry(
_CommandHelpEntry(
command:'region save',
description:'Persists the region list/map to storage.',
description:l10n.repeater_cliHelpRegionSave,
),
];
finalgpsCommands=[
const_CommandHelpEntry(
_CommandHelpEntry(
command:'gps',
description:
'Gives status of gps. When gps is off, it replies only off, if on it replies with on, {status}, {fix}, {sat count}',
description:l10n.repeater_cliHelpGps,
),
const_CommandHelpEntry(
_CommandHelpEntry(
command:'gps {on|off}',
description:'Toggles gps power state.',
description:l10n.repeater_cliHelpGpsOnOff,
),
const_CommandHelpEntry(
_CommandHelpEntry(
command:'gps sync',
description:'Syncs node time with gps clock.',
description:l10n.repeater_cliHelpGpsSync,
),
const_CommandHelpEntry(
_CommandHelpEntry(
command:'gps setloc',
description:"Sets node's position to gps coordinates and save preferences.",
description:l10n.repeater_cliHelpGpsSetLoc,
),
const_CommandHelpEntry(
_CommandHelpEntry(
command:'gps advert',
description:
"Gives location advert configuration of the node:\n- none: don't include location in adverts\n- share: share gps location (from SensorManager)\n- prefs: advert the location stored in preferences",