refactor: switch to using Bun (#718)

This commit is contained in:
Dan Ditomaso
2025-07-16 22:30:10 -04:00
committed by GitHub
parent acfd7ebd2d
commit 704d06cfe7
401 changed files with 35294 additions and 39107 deletions

View File

@@ -9,4 +9,4 @@ if [ -f "$SIMPLE_GIT_HOOKS_RC" ]; then
. "$SIMPLE_GIT_HOOKS_RC"
fi
cd packages/web && deno task lint:fix && deno task format
# cd packages/web && bun run lint && bun run format

View File

@@ -16,29 +16,29 @@ jobs:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Deno
uses: denoland/setup-deno@v2
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
deno-version: v2.x
bun-version: latest
- name: Install Dependencies
run: deno install
run: bun install
- name: Cache Deno dependencies
- name: Cache Bun dependencies
uses: actions/cache@v4
with:
path: |
~/.cache/deno
packages/web/deno.lock
key: ${{ runner.os }}-deno-${{ hashFiles('packages/web/deno.lock') }}
~/.bun/install/cache
packages/web/node_modules
key: ${{ runner.os }}-bun-${{ hashFiles('packages/web/bun.lockb') }}
restore-keys: |
${{ runner.os }}-deno-
${{ runner.os }}-bun-
- name: Run linter
run: deno lint
# - name: Run linter
# run: bun run lint
- name: Check formatter
run: deno fmt --check
# - name: Check formatter
# run: bun run check
- name: Build Package
run: deno task --filter web build
run: bun run build

View File

@@ -15,18 +15,20 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Deno
uses: denoland/setup-deno@v2
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
deno-version: v2.x
bun-version: latest
- name: Cache Deno dependencies
- name: Cache Bun dependencies
uses: actions/cache@v4
with:
path: ${{ steps.setup-deno.outputs.deno-cache-path }}
key: deno-cache-${{ runner.os }}-${{ hashFiles('**/deno.lock') }}
path: |
~/.bun/install/cache
packages/web/node_modules
key: ${{ runner.os }}-bun-${{ hashFiles('packages/web/bun.lockb') }}
restore-keys: |
deno-cache-${{ runner.os }}-*
${{ runner.os }}-bun-
# - name: Run tests
# working-directory: packages/web
@@ -34,15 +36,15 @@ jobs:
- name: Install Dependencies
working-directory: packages/web
run: deno install
run: bun install
- name: Build Package
working-directory: packages/web
run: deno task build
run: bun run build
- name: Package Output
working-directory: packages/web
run: deno task package
run: bun run package
- name: Archive compressed build
uses: actions/upload-artifact@v4

View File

@@ -13,34 +13,34 @@ jobs:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Deno
uses: denoland/setup-deno@v2
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
deno-version: v2.x
bun-version: latest
- name: Install Dependencies
# Commands will run from 'packages/web'
working-directory: packages/web
run: deno install
run: bun install
- name: Cache Deno dependencies
- name: Cache Bun dependencies
uses: actions/cache@v4
with:
path: |
~/.cache/deno
packages/web/deno.lock
key: ${{ runner.os }}-deno-${{ hashFiles('packages/web/deno.lock') }}
~/.bun/install/cache
packages/web/node_modules
key: ${{ runner.os }}-bun-${{ hashFiles('packages/web/bun.lockb') }}
restore-keys: |
${{ runner.os }}-deno-
${{ runner.os }}-bun-
- name: Run linter
working-directory: packages/web
run: deno lint
# - name: Run linter
# working-directory: packages/web
# run: bun run lint
- name: Check formatter
working-directory: packages/web
run: deno fmt --check
# - name: Check formatter
# working-directory: packages/web
# run: bun run check
- name: Build Package
working-directory: packages/web
run: deno task --filter web build
run: bun run build

View File

@@ -19,19 +19,27 @@ jobs:
with:
fetch-depth: 0
# --- Setup Deno ---
# --- Setup Bun ---
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
# --- Setup Deno (for NPM package building) ---
- name: Setup Deno
uses: denoland/setup-deno@v2
with:
deno-version: v2.x
- name: Cache Deno Dependencies
- name: Cache Bun Dependencies
uses: actions/cache@v4
with:
path: ~/.cache/deno
key: ${{ runner.os }}-deno-${{ hashFiles('**/deno.lock') }}
path: |
~/.bun/install/cache
packages/web/node_modules
key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lockb') }}
restore-keys: |
${{ runner.os }}-deno-
${{ runner.os }}-bun-
# --- Determine Changed Packages ---
- name: Get Changed Package Directories
@@ -98,12 +106,12 @@ jobs:
- name: Run Web App Tests
if: steps.web_changes.outputs.web_changed == 'true'
working-directory: packages/web
run: deno task test
run: bun run test
- name: Create Web App Release Archive
if: steps.web_changes.outputs.web_changed == 'true'
working-directory: packages/web
run: deno task package # Generates dist/build.tar
run: bun run package # Generates dist/build.tar
- name: Upload Web App Archive
if: steps.web_changes.outputs.web_changed == 'true'

View File

@@ -1,3 +1,3 @@
{
"recommendations": ["bradlc.vscode-tailwindcss", "denoland.vscode-deno"]
"recommendations": ["bradlc.vscode-tailwindcss", "denoland.vscode-deno"]
}

View File

@@ -1,9 +1,6 @@
{
"deno.enable": true,
"deno.suggest.imports.autoDiscover": true,
"editor.formatOnSave": true,
"editor.defaultFormatter": "denoland.vscode-deno",
"[typescript]": {
"editor.defaultFormatter": "denoland.vscode-deno"
"editor.codeActionsOnSave": {
"source.fixAll.biome": "explicit",
}
}

View File

@@ -43,7 +43,7 @@ All `Meshtastic JS` packages (core and transports) are published both to
This monorepo leverages the following technologies:
- **Runtime:** Deno
- **Runtime:** Bun
- **Web Client:** React.js
- **Styling:** Tailwind CSS
- **Bundling:** Vite
@@ -56,7 +56,7 @@ This monorepo leverages the following technologies:
### Prerequisites
You'll need to have [Deno](https://deno.com/) installed to work with this
You'll need to have [Bun](https://bun.sh/) installed to work with this
monorepo. Follow the installation instructions on their home page.
### Development Setup
@@ -68,7 +68,7 @@ monorepo. Follow the installation instructions on their home page.
```
2. **Install dependencies for all packages:**
```bash
deno task install:all
bun install
```
This command installs all necessary dependencies for all packages within the
monorepo.
@@ -80,7 +80,7 @@ monorepo. Follow the installation instructions on their home page.
To start the development server for the web client:
```bash
deno task --filter web dev
bun run --filter web dev
```
This will typically run the web client on http://localhost:3000 and requires a
@@ -89,11 +89,11 @@ Chromium browser
## Meshtastic JS Packages
While the js packages are primarily libraries, you can run their tests or
specific development scripts if defined within their deno.json files. For
specific development scripts if defined within their package.json files. For
example, to run tests for a specific package:
```bash
deno task --filter core test
bun run --filter core test
```
### Feedback
@@ -102,24 +102,24 @@ If you encounter any issues with nightly builds, please report them in our
[issues tracker](https://github.com/meshtastic/web/issues). Your feedback helps
improve the stability of future releases
### Why Deno?
### Why Bun?
Meshtastic Web uses Deno as its development platform for several compelling
Meshtastic Web uses Bun as its development platform for several compelling
reasons:
- **Built-in Security**: Deno's security-first approach requires explicit
permissions for file, network, and environment access, reducing vulnerability
risks.
- **Fast Performance**: Bun is built from the ground up for speed, offering
significantly faster package installation and bundling compared to other
JavaScript runtimes.
- **TypeScript Support**: Native TypeScript support without additional
configuration, enhancing code quality and developer experience.
- **Modern JavaScript**: First-class support for ESM imports, top-level await,
and other modern JavaScript features.
- **Simplified Tooling**: Built-in formatter, linter, test runner, and bundler
eliminate the need for multiple third-party tools.
- **All-in-One Tooling**: Built-in package manager, bundler, test runner, and
transpiler eliminate the need for multiple third-party tools.
- **Node.js Compatibility**: Drop-in replacement for Node.js with better
performance and built-in tooling.
- **Reproducible Builds**: Lockfile ensures consistent builds across all
environments.
- **Web Standard APIs**: Uses browser-compatible APIs, making code more portable
between server and client environments.
### Contributing

1716
bun.lock Normal file
View File

File diff suppressed because it is too large Load Diff

View File

@@ -1,50 +0,0 @@
{
"workspace": [
"./packages/web",
"./packages/core",
"./packages/transport-deno",
"./packages/transport-node",
"./packages/transport-http",
"./packages/transport-web-bluetooth",
"./packages/transport-web-serial"
],
"tasks": {
"build:npm": "deno run -A scripts/build_npm_package.ts"
},
"imports": {
"@bufbuild/protobuf": "npm:@bufbuild/protobuf@^2.2.3",
"@deno/dnt": "jsr:@deno/dnt@^0.42.1",
"@meshtastic/protobufs": "jsr:@meshtastic/protobufs@^2.7.0",
"@types/node": "npm:@types/node@^22.13.10",
"ste-simple-events": "npm:ste-simple-events@^3.0.11",
"tslog": "npm:tslog@^4.9.3"
},
"nodeModulesDir": "auto",
"lint": {
"exclude": [
"*routeTree.gen.ts",
"*.test.ts",
"*.test.tsx"
],
"report": "pretty"
},
"fmt": {
"exclude": [
"*routeTree.gen.ts",
"*.test.ts",
"*.test.tsx"
]
},
"unstable": [
"sloppy-imports"
],
"exclude": [
"node_modules",
"dist",
"npm",
"build",
"coverage",
"out",
".vscode-test"
]
}

5419
deno.lock generated
View File

File diff suppressed because it is too large Load Diff

24
package.json Normal file
View File

@@ -0,0 +1,24 @@
{
"name": "meshtastic-web",
"version": "2.7.0-0",
"type": "module",
"description": "Meshtastic web client monorepo",
"license": "GPL-3.0-only",
"repository": {
"type": "git",
"url": "git+https://github.com/meshtastic/web.git"
},
"bugs": {
"url": "https://github.com/meshtastic/web/issues"
},
"homepage": "https://meshtastic.org",
"workspaces": ["packages/web"],
"scripts": {
"build:npm": "deno run -A scripts/build_npm_package.ts"
},
"devDependencies": {
"@biomejs/biome": "^1.8.3",
"bun": "^1.1.18",
"typescript": "^5.8.3"
}
}

View File

@@ -1,11 +1,11 @@
{
"name": "@meshtastic/core",
"version": "2.6.4",
"description": "Core functionalities for Meshtastic web applications.",
"exports": {
".": "./mod.ts"
},
"imports": {
"crc": "npm:crc@^4.3.2"
}
"name": "@meshtastic/core",
"version": "2.6.4",
"description": "Core functionalities for Meshtastic web applications.",
"exports": {
".": "./mod.ts"
},
"imports": {
"crc": "npm:crc@^4.3.2"
}
}

View File

@@ -5,6 +5,6 @@ const broadcastNum = 0xffffffff;
const minFwVer = 2.2;
export const Constants = {
broadcastNum,
minFwVer,
broadcastNum,
minFwVer,
};

View File

File diff suppressed because it is too large Load Diff

View File

@@ -1,45 +1,45 @@
import type * as Protobuf from "@meshtastic/protobufs";
interface Packet {
type: "packet";
data: Uint8Array;
type: "packet";
data: Uint8Array;
}
interface DebugLog {
type: "debug";
data: string;
type: "debug";
data: string;
}
export type DeviceOutput = Packet | DebugLog;
export interface Transport {
toDevice: WritableStream<Uint8Array>;
fromDevice: ReadableStream<DeviceOutput>;
toDevice: WritableStream<Uint8Array>;
fromDevice: ReadableStream<DeviceOutput>;
}
export interface QueueItem {
id: number;
data: Uint8Array;
sent: boolean;
added: Date;
promise: Promise<number>;
id: number;
data: Uint8Array;
sent: boolean;
added: Date;
promise: Promise<number>;
}
export interface HttpRetryConfig {
maxRetries: number;
initialDelayMs: number;
maxDelayMs: number;
backoffFactor: number;
maxRetries: number;
initialDelayMs: number;
maxDelayMs: number;
backoffFactor: number;
}
export enum DeviceStatusEnum {
DeviceRestarting = 1,
DeviceDisconnected = 2,
DeviceConnecting = 3,
DeviceReconnecting = 4,
DeviceConnected = 5,
DeviceConfiguring = 6,
DeviceConfigured = 7,
DeviceRestarting = 1,
DeviceDisconnected = 2,
DeviceConnecting = 3,
DeviceReconnecting = 4,
DeviceConnected = 5,
DeviceConfiguring = 6,
DeviceConfigured = 7,
}
export type LogEventPacket = LogEvent & { date: Date };
@@ -47,83 +47,83 @@ export type LogEventPacket = LogEvent & { date: Date };
export type PacketDestination = "broadcast" | "direct";
export interface PacketMetadata<T> {
id: number;
rxTime: Date;
type: PacketDestination;
from: number;
to: number;
channel: ChannelNumber;
data: T;
id: number;
rxTime: Date;
type: PacketDestination;
from: number;
to: number;
channel: ChannelNumber;
data: T;
}
export enum EmitterScope {
MeshDevice = 1,
SerialConnection = 2,
NodeSerialConnection = 3,
BleConnection = 4,
HttpConnection = 5,
MeshDevice = 1,
SerialConnection = 2,
NodeSerialConnection = 3,
BleConnection = 4,
HttpConnection = 5,
}
export enum Emitter {
Constructor = 0,
SendText = 1,
SendWaypoint = 2,
SendPacket = 3,
SendRaw = 4,
SetConfig = 5,
SetModuleConfig = 6,
ConfirmSetConfig = 7,
SetOwner = 8,
SetChannel = 9,
ConfirmSetChannel = 10,
ClearChannel = 11,
GetChannel = 12,
GetAllChannels = 13,
GetConfig = 14,
GetModuleConfig = 15,
GetOwner = 16,
Configure = 17,
HandleFromRadio = 18,
HandleMeshPacket = 19,
Connect = 20,
Ping = 21,
ReadFromRadio = 22,
WriteToRadio = 23,
SetDebugMode = 24,
GetMetadata = 25,
ResetNodes = 26,
Shutdown = 27,
Reboot = 28,
RebootOta = 29,
FactoryReset = 30,
EnterDfuMode = 31,
RemoveNodeByNum = 32,
SetCannedMessages = 33,
Disconnect = 34,
Constructor = 0,
SendText = 1,
SendWaypoint = 2,
SendPacket = 3,
SendRaw = 4,
SetConfig = 5,
SetModuleConfig = 6,
ConfirmSetConfig = 7,
SetOwner = 8,
SetChannel = 9,
ConfirmSetChannel = 10,
ClearChannel = 11,
GetChannel = 12,
GetAllChannels = 13,
GetConfig = 14,
GetModuleConfig = 15,
GetOwner = 16,
Configure = 17,
HandleFromRadio = 18,
HandleMeshPacket = 19,
Connect = 20,
Ping = 21,
ReadFromRadio = 22,
WriteToRadio = 23,
SetDebugMode = 24,
GetMetadata = 25,
ResetNodes = 26,
Shutdown = 27,
Reboot = 28,
RebootOta = 29,
FactoryReset = 30,
EnterDfuMode = 31,
RemoveNodeByNum = 32,
SetCannedMessages = 33,
Disconnect = 34,
}
export interface LogEvent {
scope: EmitterScope;
emitter: Emitter;
message: string;
level: Protobuf.Mesh.LogRecord_Level;
packet?: Uint8Array;
scope: EmitterScope;
emitter: Emitter;
message: string;
level: Protobuf.Mesh.LogRecord_Level;
packet?: Uint8Array;
}
export enum ChannelNumber {
Primary = 0,
Channel1 = 1,
Channel2 = 2,
Channel3 = 3,
Channel4 = 4,
Channel5 = 5,
Channel6 = 6,
Admin = 7,
Primary = 0,
Channel1 = 1,
Channel2 = 2,
Channel3 = 3,
Channel4 = 4,
Channel5 = 5,
Channel6 = 6,
Admin = 7,
}
export type Destination = number | "self" | "broadcast";
export interface PacketError {
id: number;
error: Protobuf.Mesh.Routing_Error;
id: number;
error: Protobuf.Mesh.Routing_Error;
}

View File

@@ -1,467 +1,381 @@
import { SimpleEventDispatcher } from "ste-simple-events";
import type * as Protobuf from "@meshtastic/protobufs";
import { SimpleEventDispatcher } from "ste-simple-events";
import type { PacketMetadata } from "../types.ts";
import type * as Types from "../types.ts";
export class EventSystem {
/**
* Fires when a new FromRadio message has been received from the device
*
* @event onLogEvent
*/
public readonly onLogEvent: SimpleEventDispatcher<
Types.LogEventPacket
> = new SimpleEventDispatcher<
Types.LogEventPacket
>();
/**
* Fires when a new FromRadio message has been received from the device
*
* @event onLogEvent
*/
public readonly onLogEvent: SimpleEventDispatcher<Types.LogEventPacket> =
new SimpleEventDispatcher<Types.LogEventPacket>();
/**
* Fires when a new FromRadio message has been received from the device
*
* @event onFromRadio
*/
public readonly onFromRadio: SimpleEventDispatcher<
Protobuf.Mesh.FromRadio
> = new SimpleEventDispatcher<
Protobuf.Mesh.FromRadio
>();
/**
* Fires when a new FromRadio message has been received from the device
*
* @event onFromRadio
*/
public readonly onFromRadio: SimpleEventDispatcher<Protobuf.Mesh.FromRadio> =
new SimpleEventDispatcher<Protobuf.Mesh.FromRadio>();
/**
* Fires when a new FromRadio message containing a Data packet has been
* received from the device
*
* @event onMeshPacket
*/
public readonly onMeshPacket: SimpleEventDispatcher<
Protobuf.Mesh.MeshPacket
> = new SimpleEventDispatcher<
Protobuf.Mesh.MeshPacket
>();
/**
* Fires when a new FromRadio message containing a Data packet has been
* received from the device
*
* @event onMeshPacket
*/
public readonly onMeshPacket: SimpleEventDispatcher<Protobuf.Mesh.MeshPacket> =
new SimpleEventDispatcher<Protobuf.Mesh.MeshPacket>();
/**
* Fires when a new MyNodeInfo message has been received from the device
*
* @event onMyNodeInfo
*/
public readonly onMyNodeInfo: SimpleEventDispatcher<
Protobuf.Mesh.MyNodeInfo
> = new SimpleEventDispatcher<
Protobuf.Mesh.MyNodeInfo
>();
/**
* Fires when a new MyNodeInfo message has been received from the device
*
* @event onMyNodeInfo
*/
public readonly onMyNodeInfo: SimpleEventDispatcher<Protobuf.Mesh.MyNodeInfo> =
new SimpleEventDispatcher<Protobuf.Mesh.MyNodeInfo>();
/**
* Fires when a new MeshPacket message containing a NodeInfo packet has been
* received from device
*
* @event onNodeInfoPacket
*/
public readonly onNodeInfoPacket: SimpleEventDispatcher<
Protobuf.Mesh.NodeInfo
> = new SimpleEventDispatcher<
Protobuf.Mesh.NodeInfo
>();
/**
* Fires when a new MeshPacket message containing a NodeInfo packet has been
* received from device
*
* @event onNodeInfoPacket
*/
public readonly onNodeInfoPacket: SimpleEventDispatcher<Protobuf.Mesh.NodeInfo> =
new SimpleEventDispatcher<Protobuf.Mesh.NodeInfo>();
/**
* Fires when a new Channel message is received
*
* @event onChannelPacket
*/
public readonly onChannelPacket: SimpleEventDispatcher<
Protobuf.Channel.Channel
> = new SimpleEventDispatcher<
Protobuf.Channel.Channel
>();
/**
* Fires when a new Channel message is received
*
* @event onChannelPacket
*/
public readonly onChannelPacket: SimpleEventDispatcher<Protobuf.Channel.Channel> =
new SimpleEventDispatcher<Protobuf.Channel.Channel>();
/**
* Fires when a new Config message is received
*
* @event onConfigPacket
*/
public readonly onConfigPacket: SimpleEventDispatcher<
Protobuf.Config.Config
> = new SimpleEventDispatcher<
Protobuf.Config.Config
>();
/**
* Fires when a new Config message is received
*
* @event onConfigPacket
*/
public readonly onConfigPacket: SimpleEventDispatcher<Protobuf.Config.Config> =
new SimpleEventDispatcher<Protobuf.Config.Config>();
/**
* Fires when a new ModuleConfig message is received
*
* @event onModuleConfigPacket
*/
public readonly onModuleConfigPacket: SimpleEventDispatcher<
Protobuf.ModuleConfig.ModuleConfig
> = new SimpleEventDispatcher<
Protobuf.ModuleConfig.ModuleConfig
>();
/**
* Fires when a new ModuleConfig message is received
*
* @event onModuleConfigPacket
*/
public readonly onModuleConfigPacket: SimpleEventDispatcher<Protobuf.ModuleConfig.ModuleConfig> =
new SimpleEventDispatcher<Protobuf.ModuleConfig.ModuleConfig>();
/**
* Fires when a new MeshPacket message containing a ATAK packet has been
* received from device
*
* @event onAtakPacket
*/
public readonly onAtakPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<
PacketMetadata<Uint8Array>
>();
/**
* Fires when a new MeshPacket message containing a ATAK packet has been
* received from device
*
* @event onAtakPacket
*/
public readonly onAtakPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
/**
* Fires when a new MeshPacket message containing a Text packet has been
* received from device
*
* @event onMessagePacket
*/
public readonly onMessagePacket: SimpleEventDispatcher<
PacketMetadata<string>
> = new SimpleEventDispatcher<
PacketMetadata<string>
>();
/**
* Fires when a new MeshPacket message containing a Text packet has been
* received from device
*
* @event onMessagePacket
*/
public readonly onMessagePacket: SimpleEventDispatcher<
PacketMetadata<string>
> = new SimpleEventDispatcher<PacketMetadata<string>>();
/**
* Fires when a new MeshPacket message containing a Remote Hardware packet has
* been received from device
*
* @event onRemoteHardwarePacket
*/
public readonly onRemoteHardwarePacket: SimpleEventDispatcher<
PacketMetadata<Protobuf.RemoteHardware.HardwareMessage>
> = new SimpleEventDispatcher<
PacketMetadata<Protobuf.RemoteHardware.HardwareMessage>
>();
/**
* Fires when a new MeshPacket message containing a Remote Hardware packet has
* been received from device
*
* @event onRemoteHardwarePacket
*/
public readonly onRemoteHardwarePacket: SimpleEventDispatcher<
PacketMetadata<Protobuf.RemoteHardware.HardwareMessage>
> = new SimpleEventDispatcher<
PacketMetadata<Protobuf.RemoteHardware.HardwareMessage>
>();
/**
* Fires when a new MeshPacket message containing a Position packet has been
* received from device
*
* @event onPositionPacket
*/
public readonly onPositionPacket: SimpleEventDispatcher<
PacketMetadata<Protobuf.Mesh.Position>
> = new SimpleEventDispatcher<
PacketMetadata<Protobuf.Mesh.Position>
>();
/**
* Fires when a new MeshPacket message containing a Position packet has been
* received from device
*
* @event onPositionPacket
*/
public readonly onPositionPacket: SimpleEventDispatcher<
PacketMetadata<Protobuf.Mesh.Position>
> = new SimpleEventDispatcher<PacketMetadata<Protobuf.Mesh.Position>>();
/**
* Fires when a new MeshPacket message containing a User packet has been
* received from device
*
* @event onUserPacket
*/
public readonly onUserPacket: SimpleEventDispatcher<
PacketMetadata<Protobuf.Mesh.User>
> = new SimpleEventDispatcher<
PacketMetadata<Protobuf.Mesh.User>
>();
/**
* Fires when a new MeshPacket message containing a User packet has been
* received from device
*
* @event onUserPacket
*/
public readonly onUserPacket: SimpleEventDispatcher<
PacketMetadata<Protobuf.Mesh.User>
> = new SimpleEventDispatcher<PacketMetadata<Protobuf.Mesh.User>>();
/**
* Fires when a new MeshPacket message containing a Routing packet has been
* received from device
*
* @event onRoutingPacket
*/
public readonly onRoutingPacket: SimpleEventDispatcher<
PacketMetadata<Protobuf.Mesh.Routing>
> = new SimpleEventDispatcher<
PacketMetadata<Protobuf.Mesh.Routing>
>();
/**
* Fires when a new MeshPacket message containing a Routing packet has been
* received from device
*
* @event onRoutingPacket
*/
public readonly onRoutingPacket: SimpleEventDispatcher<
PacketMetadata<Protobuf.Mesh.Routing>
> = new SimpleEventDispatcher<PacketMetadata<Protobuf.Mesh.Routing>>();
/**
* Fires when the device receives a Metadata packet
*
* @event onDeviceMetadataPacket
*/
public readonly onDeviceMetadataPacket: SimpleEventDispatcher<
PacketMetadata<Protobuf.Mesh.DeviceMetadata>
> = new SimpleEventDispatcher<
PacketMetadata<Protobuf.Mesh.DeviceMetadata>
>();
/**
* Fires when the device receives a Metadata packet
*
* @event onDeviceMetadataPacket
*/
public readonly onDeviceMetadataPacket: SimpleEventDispatcher<
PacketMetadata<Protobuf.Mesh.DeviceMetadata>
> = new SimpleEventDispatcher<PacketMetadata<Protobuf.Mesh.DeviceMetadata>>();
/**
* Fires when the device receives a Canned Message Module message packet
*
* @event onCannedMessageModulePacket
*/
public readonly onCannedMessageModulePacket: SimpleEventDispatcher<
PacketMetadata<string>
> = new SimpleEventDispatcher<
PacketMetadata<string>
>();
/**
* Fires when the device receives a Canned Message Module message packet
*
* @event onCannedMessageModulePacket
*/
public readonly onCannedMessageModulePacket: SimpleEventDispatcher<
PacketMetadata<string>
> = new SimpleEventDispatcher<PacketMetadata<string>>();
/**
* Fires when a new MeshPacket message containing a Waypoint packet has been
* received from device
*
* @event onWaypointPacket
*/
public readonly onWaypointPacket: SimpleEventDispatcher<
PacketMetadata<Protobuf.Mesh.Waypoint>
> = new SimpleEventDispatcher<
PacketMetadata<Protobuf.Mesh.Waypoint>
>();
/**
* Fires when a new MeshPacket message containing a Waypoint packet has been
* received from device
*
* @event onWaypointPacket
*/
public readonly onWaypointPacket: SimpleEventDispatcher<
PacketMetadata<Protobuf.Mesh.Waypoint>
> = new SimpleEventDispatcher<PacketMetadata<Protobuf.Mesh.Waypoint>>();
/**
* Fires when a new MeshPacket message containing an Audio packet has been
* received from device
*
* @event onAudioPacket
*/
public readonly onAudioPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<
PacketMetadata<Uint8Array>
>();
/**
* Fires when a new MeshPacket message containing an Audio packet has been
* received from device
*
* @event onAudioPacket
*/
public readonly onAudioPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
/**
* Fires when a new MeshPacket message containing a Detection Sensor packet has been
* received from device
*
* @event onDetectionSensorPacket
*/
public readonly onDetectionSensorPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<
PacketMetadata<Uint8Array>
>();
/**
* Fires when a new MeshPacket message containing a Detection Sensor packet has been
* received from device
*
* @event onDetectionSensorPacket
*/
public readonly onDetectionSensorPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
/**
* Fires when a new MeshPacket message containing a Ping packet has been
* received from device
*
* @event onPingPacket
*/
public readonly onPingPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<
PacketMetadata<Uint8Array>
>();
/**
* Fires when a new MeshPacket message containing a Ping packet has been
* received from device
*
* @event onPingPacket
*/
public readonly onPingPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
/**
* Fires when a new MeshPacket message containing a IP Tunnel packet has been
* received from device
*
* @event onIpTunnelPacket
*/
public readonly onIpTunnelPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<
PacketMetadata<Uint8Array>
>();
/**
* Fires when a new MeshPacket message containing a IP Tunnel packet has been
* received from device
*
* @event onIpTunnelPacket
*/
public readonly onIpTunnelPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
/**
* Fires when a new MeshPacket message containing a Paxcounter packet has been
* received from device
*
* @event onPaxcounterPacket
*/
public readonly onPaxcounterPacket: SimpleEventDispatcher<
PacketMetadata<Protobuf.PaxCount.Paxcount>
> = new SimpleEventDispatcher<
PacketMetadata<Protobuf.PaxCount.Paxcount>
>();
/**
* Fires when a new MeshPacket message containing a Paxcounter packet has been
* received from device
*
* @event onPaxcounterPacket
*/
public readonly onPaxcounterPacket: SimpleEventDispatcher<
PacketMetadata<Protobuf.PaxCount.Paxcount>
> = new SimpleEventDispatcher<PacketMetadata<Protobuf.PaxCount.Paxcount>>();
/**
* Fires when a new MeshPacket message containing a Serial packet has been
* received from device
*
* @event onSerialPacket
*/
public readonly onSerialPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<
PacketMetadata<Uint8Array>
>();
/**
* Fires when a new MeshPacket message containing a Serial packet has been
* received from device
*
* @event onSerialPacket
*/
public readonly onSerialPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
/**
* Fires when a new MeshPacket message containing a Store and Forward packet
* has been received from device
*
* @event onStoreForwardPacket
*/
public readonly onStoreForwardPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<
PacketMetadata<Uint8Array>
>();
/**
* Fires when a new MeshPacket message containing a Store and Forward packet
* has been received from device
*
* @event onStoreForwardPacket
*/
public readonly onStoreForwardPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
/**
* Fires when a new MeshPacket message containing a Store and Forward packet
* has been received from device
*
* @event onRangeTestPacket
*/
public readonly onRangeTestPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<
PacketMetadata<Uint8Array>
>();
/**
* Fires when a new MeshPacket message containing a Store and Forward packet
* has been received from device
*
* @event onRangeTestPacket
*/
public readonly onRangeTestPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
/**
* Fires when a new MeshPacket message containing a Telemetry packet has been
* received from device
*
* @event onTelemetryPacket
*/
public readonly onTelemetryPacket: SimpleEventDispatcher<
PacketMetadata<Protobuf.Telemetry.Telemetry>
> = new SimpleEventDispatcher<
PacketMetadata<Protobuf.Telemetry.Telemetry>
>();
/**
* Fires when a new MeshPacket message containing a Telemetry packet has been
* received from device
*
* @event onTelemetryPacket
*/
public readonly onTelemetryPacket: SimpleEventDispatcher<
PacketMetadata<Protobuf.Telemetry.Telemetry>
> = new SimpleEventDispatcher<PacketMetadata<Protobuf.Telemetry.Telemetry>>();
/**
* Fires when a new MeshPacket message containing a ZPS packet has been
* received from device
*
* @event onZPSPacket
*/
public readonly onZpsPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<
PacketMetadata<Uint8Array>
>();
/**
* Fires when a new MeshPacket message containing a ZPS packet has been
* received from device
*
* @event onZPSPacket
*/
public readonly onZpsPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
/**
* Fires when a new MeshPacket message containing a Simulator packet has been
* received from device
*
* @event onSimulatorPacket
*/
public readonly onSimulatorPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<
PacketMetadata<Uint8Array>
>();
/**
* Fires when a new MeshPacket message containing a Simulator packet has been
* received from device
*
* @event onSimulatorPacket
*/
public readonly onSimulatorPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
/**
* Fires when a new MeshPacket message containing a Trace Route packet has been
* received from device
*
* @event onTraceRoutePacket
*/
public readonly onTraceRoutePacket: SimpleEventDispatcher<
PacketMetadata<Protobuf.Mesh.RouteDiscovery>
> = new SimpleEventDispatcher<
PacketMetadata<Protobuf.Mesh.RouteDiscovery>
>();
/**
* Fires when a new MeshPacket message containing a Trace Route packet has been
* received from device
*
* @event onTraceRoutePacket
*/
public readonly onTraceRoutePacket: SimpleEventDispatcher<
PacketMetadata<Protobuf.Mesh.RouteDiscovery>
> = new SimpleEventDispatcher<PacketMetadata<Protobuf.Mesh.RouteDiscovery>>();
/**
* Fires when a new MeshPacket message containing a Neighbor Info packet has been
* received from device
*
* @event onNeighborInfoPacket
*/
public readonly onNeighborInfoPacket: SimpleEventDispatcher<
PacketMetadata<Protobuf.Mesh.NeighborInfo>
> = new SimpleEventDispatcher<
PacketMetadata<Protobuf.Mesh.NeighborInfo>
>();
/**
* Fires when a new MeshPacket message containing a Neighbor Info packet has been
* received from device
*
* @event onNeighborInfoPacket
*/
public readonly onNeighborInfoPacket: SimpleEventDispatcher<
PacketMetadata<Protobuf.Mesh.NeighborInfo>
> = new SimpleEventDispatcher<PacketMetadata<Protobuf.Mesh.NeighborInfo>>();
/**
* Fires when a new MeshPacket message containing an ATAK packet has been
* received from device
*
* @event onAtakPluginPacket
*/
public readonly onAtakPluginPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<
PacketMetadata<Uint8Array>
>();
/**
* Fires when a new MeshPacket message containing an ATAK packet has been
* received from device
*
* @event onAtakPluginPacket
*/
public readonly onAtakPluginPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
/**
* Fires when a new MeshPacket message containing a Map Report packet has been
* received from device
*
* @event onMapReportPacket
*/
public readonly onMapReportPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<
PacketMetadata<Uint8Array>
>();
/**
* Fires when a new MeshPacket message containing a Map Report packet has been
* received from device
*
* @event onMapReportPacket
*/
public readonly onMapReportPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
/**
* Fires when a new MeshPacket message containing a Private packet has been
* received from device
*
* @event onPrivatePacket
*/
public readonly onPrivatePacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<
PacketMetadata<Uint8Array>
>();
/**
* Fires when a new MeshPacket message containing a Private packet has been
* received from device
*
* @event onPrivatePacket
*/
public readonly onPrivatePacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
/**
* Fires when a new MeshPacket message containing an ATAK Forwarder packet has been
* received from device
*
* @event onAtakForwarderPacket
*/
public readonly onAtakForwarderPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<
PacketMetadata<Uint8Array>
>();
/**
* Fires when a new MeshPacket message containing an ATAK Forwarder packet has been
* received from device
*
* @event onAtakForwarderPacket
*/
public readonly onAtakForwarderPacket: SimpleEventDispatcher<
PacketMetadata<Uint8Array>
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
/**
* Fires when the devices connection or configuration status changes
*
* @event onDeviceStatus
*/
public readonly onDeviceStatus: SimpleEventDispatcher<
Types.DeviceStatusEnum
> = new SimpleEventDispatcher<
Types.DeviceStatusEnum
>();
/**
* Fires when the devices connection or configuration status changes
*
* @event onDeviceStatus
*/
public readonly onDeviceStatus: SimpleEventDispatcher<Types.DeviceStatusEnum> =
new SimpleEventDispatcher<Types.DeviceStatusEnum>();
/**
* Fires when a new FromRadio message containing a LogRecord packet has been
* received from device
*
* @event onLogRecord
*/
public readonly onLogRecord: SimpleEventDispatcher<
Protobuf.Mesh.LogRecord
> = new SimpleEventDispatcher<
Protobuf.Mesh.LogRecord
>();
/**
* Fires when a new FromRadio message containing a LogRecord packet has been
* received from device
*
* @event onLogRecord
*/
public readonly onLogRecord: SimpleEventDispatcher<Protobuf.Mesh.LogRecord> =
new SimpleEventDispatcher<Protobuf.Mesh.LogRecord>();
/**
* Fires when the device receives a meshPacket, returns a timestamp
*
* @event onMeshHeartbeat
*/
public readonly onMeshHeartbeat: SimpleEventDispatcher<Date> =
new SimpleEventDispatcher<Date>();
/**
* Fires when the device receives a meshPacket, returns a timestamp
*
* @event onMeshHeartbeat
*/
public readonly onMeshHeartbeat: SimpleEventDispatcher<Date> =
new SimpleEventDispatcher<Date>();
/**
* Outputs any debug log data (currently serial connections only)
*
* @event onDeviceDebugLog
*/
public readonly onDeviceDebugLog: SimpleEventDispatcher<Uint8Array> =
new SimpleEventDispatcher<Uint8Array>();
/**
* Outputs any debug log data (currently serial connections only)
*
* @event onDeviceDebugLog
*/
public readonly onDeviceDebugLog: SimpleEventDispatcher<Uint8Array> =
new SimpleEventDispatcher<Uint8Array>();
/**
* Outputs status of pending settings changes
*
* @event onpendingSettingsChange
*/
public readonly onPendingSettingsChange: SimpleEventDispatcher<
boolean
> = new SimpleEventDispatcher<
boolean
>();
/**
* Outputs status of pending settings changes
*
* @event onpendingSettingsChange
*/
public readonly onPendingSettingsChange: SimpleEventDispatcher<boolean> =
new SimpleEventDispatcher<boolean>();
/**
* Fires when a QueueStatus message is generated
*
* @event onQueueStatus
*/
public readonly onQueueStatus: SimpleEventDispatcher<
Protobuf.Mesh.QueueStatus
> = new SimpleEventDispatcher<
Protobuf.Mesh.QueueStatus
>();
/**
* Fires when a QueueStatus message is generated
*
* @event onQueueStatus
*/
public readonly onQueueStatus: SimpleEventDispatcher<Protobuf.Mesh.QueueStatus> =
new SimpleEventDispatcher<Protobuf.Mesh.QueueStatus>();
}

View File

@@ -1,119 +1,119 @@
import { SimpleEventDispatcher } from "ste-simple-events";
import { fromBinary } from "@bufbuild/protobuf";
import * as Protobuf from "@meshtastic/protobufs";
import { SimpleEventDispatcher } from "ste-simple-events";
import type { PacketError, QueueItem } from "../types.ts";
export class Queue {
private queue: QueueItem[] = [];
private lock = false;
private ackNotifier = new SimpleEventDispatcher<number>();
private errorNotifier = new SimpleEventDispatcher<PacketError>();
private timeout: number;
private queue: QueueItem[] = [];
private lock = false;
private ackNotifier = new SimpleEventDispatcher<number>();
private errorNotifier = new SimpleEventDispatcher<PacketError>();
private timeout: number;
constructor() {
this.timeout = 60000;
}
constructor() {
this.timeout = 60000;
}
public getState(): QueueItem[] {
return this.queue;
}
public getState(): QueueItem[] {
return this.queue;
}
public clear(): void {
this.queue = [];
}
public clear(): void {
this.queue = [];
}
public push(item: Omit<QueueItem, "promise" | "sent" | "added">): void {
const queueItem: QueueItem = {
...item,
sent: false,
added: new Date(),
promise: new Promise<number>((resolve, reject) => {
this.ackNotifier.subscribe((id) => {
if (item.id === id) {
this.remove(item.id);
resolve(id);
}
});
this.errorNotifier.subscribe((e) => {
if (item.id === e.id) {
this.remove(item.id);
reject(e);
}
});
setTimeout(() => {
if (this.queue.findIndex((qi) => qi.id === item.id) !== -1) {
this.remove(item.id);
const decoded = fromBinary(Protobuf.Mesh.ToRadioSchema, item.data);
console.warn(
`Packet ${item.id} of type ${decoded.payloadVariant.case} timed out`,
);
public push(item: Omit<QueueItem, "promise" | "sent" | "added">): void {
const queueItem: QueueItem = {
...item,
sent: false,
added: new Date(),
promise: new Promise<number>((resolve, reject) => {
this.ackNotifier.subscribe((id) => {
if (item.id === id) {
this.remove(item.id);
resolve(id);
}
});
this.errorNotifier.subscribe((e) => {
if (item.id === e.id) {
this.remove(item.id);
reject(e);
}
});
setTimeout(() => {
if (this.queue.findIndex((qi) => qi.id === item.id) !== -1) {
this.remove(item.id);
const decoded = fromBinary(Protobuf.Mesh.ToRadioSchema, item.data);
console.warn(
`Packet ${item.id} of type ${decoded.payloadVariant.case} timed out`,
);
reject({
id: item.id,
error: Protobuf.Mesh.Routing_Error.TIMEOUT,
});
}
}, this.timeout);
}),
};
this.queue.push(queueItem);
}
reject({
id: item.id,
error: Protobuf.Mesh.Routing_Error.TIMEOUT,
});
}
}, this.timeout);
}),
};
this.queue.push(queueItem);
}
public remove(id: number): void {
if (this.lock) {
setTimeout(() => this.remove(id), 100);
return;
}
this.queue = this.queue.filter((item) => item.id !== id);
}
public remove(id: number): void {
if (this.lock) {
setTimeout(() => this.remove(id), 100);
return;
}
this.queue = this.queue.filter((item) => item.id !== id);
}
public processAck(id: number): void {
this.ackNotifier.dispatch(id);
}
public processAck(id: number): void {
this.ackNotifier.dispatch(id);
}
public processError(e: PacketError): void {
console.error(
`Error received for packet ${e.id}: ${
Protobuf.Mesh.Routing_Error[e.error]
}`,
);
this.errorNotifier.dispatch(e);
}
public processError(e: PacketError): void {
console.error(
`Error received for packet ${e.id}: ${
Protobuf.Mesh.Routing_Error[e.error]
}`,
);
this.errorNotifier.dispatch(e);
}
public wait(id: number): Promise<number> {
const queueItem = this.queue.find((qi) => qi.id === id);
if (!queueItem) {
throw new Error("Packet does not exist");
}
return queueItem.promise;
}
public wait(id: number): Promise<number> {
const queueItem = this.queue.find((qi) => qi.id === id);
if (!queueItem) {
throw new Error("Packet does not exist");
}
return queueItem.promise;
}
public async processQueue(
outputStream: WritableStream<Uint8Array>,
): Promise<void> {
if (this.lock) {
return;
}
public async processQueue(
outputStream: WritableStream<Uint8Array>,
): Promise<void> {
if (this.lock) {
return;
}
this.lock = true;
const writer = outputStream.getWriter();
this.lock = true;
const writer = outputStream.getWriter();
try {
while (this.queue.filter((p) => !p.sent).length > 0) {
const item = this.queue.filter((p) => !p.sent)[0];
if (item) {
await new Promise((resolve) => setTimeout(resolve, 200));
try {
await writer.write(item.data);
item.sent = true;
} catch (error) {
console.error(`Error sending packet ${item.id}`, error);
}
}
}
} finally {
writer.releaseLock();
this.lock = false;
}
}
try {
while (this.queue.filter((p) => !p.sent).length > 0) {
const item = this.queue.filter((p) => !p.sent)[0];
if (item) {
await new Promise((resolve) => setTimeout(resolve, 200));
try {
await writer.write(item.data);
item.sent = true;
} catch (error) {
console.error(`Error sending packet ${item.id}`, error);
}
}
}
} finally {
writer.releaseLock();
this.lock = false;
}
}
}

View File

@@ -1,222 +1,222 @@
import { fromBinary } from "@bufbuild/protobuf";
import type { DeviceOutput } from "../../types.ts";
import { Constants, Protobuf, Types } from "../../../mod.ts";
import type { MeshDevice } from "../../../mod.ts";
import type { DeviceOutput } from "../../types.ts";
export const decodePacket = (device: MeshDevice) =>
new WritableStream<DeviceOutput>({
write(chunk) {
switch (chunk.type) {
case "debug": {
break;
}
case "packet": {
const decodedMessage = fromBinary(
Protobuf.Mesh.FromRadioSchema,
chunk.data,
);
device.events.onFromRadio.dispatch(decodedMessage);
new WritableStream<DeviceOutput>({
write(chunk) {
switch (chunk.type) {
case "debug": {
break;
}
case "packet": {
const decodedMessage = fromBinary(
Protobuf.Mesh.FromRadioSchema,
chunk.data,
);
device.events.onFromRadio.dispatch(decodedMessage);
/** @todo Add map here when `all=true` gets fixed. */
switch (decodedMessage.payloadVariant.case) {
case "packet": {
device.handleMeshPacket(decodedMessage.payloadVariant.value);
break;
}
/** @todo Add map here when `all=true` gets fixed. */
switch (decodedMessage.payloadVariant.case) {
case "packet": {
device.handleMeshPacket(decodedMessage.payloadVariant.value);
break;
}
case "myInfo": {
device.events.onMyNodeInfo.dispatch(
decodedMessage.payloadVariant.value,
);
device.log.info(
Types.Emitter[Types.Emitter.HandleFromRadio],
"📱 Received Node info for this device",
);
break;
}
case "myInfo": {
device.events.onMyNodeInfo.dispatch(
decodedMessage.payloadVariant.value,
);
device.log.info(
Types.Emitter[Types.Emitter.HandleFromRadio],
"📱 Received Node info for this device",
);
break;
}
case "nodeInfo": {
device.log.info(
Types.Emitter[Types.Emitter.HandleFromRadio],
`📱 Received Node Info packet for node: ${decodedMessage.payloadVariant.value.num}`,
);
case "nodeInfo": {
device.log.info(
Types.Emitter[Types.Emitter.HandleFromRadio],
`📱 Received Node Info packet for node: ${decodedMessage.payloadVariant.value.num}`,
);
device.events.onNodeInfoPacket.dispatch(
decodedMessage.payloadVariant.value,
);
device.events.onNodeInfoPacket.dispatch(
decodedMessage.payloadVariant.value,
);
//TODO: HERE
if (decodedMessage.payloadVariant.value.position) {
device.events.onPositionPacket.dispatch({
id: decodedMessage.id,
rxTime: new Date(),
from: decodedMessage.payloadVariant.value.num,
to: decodedMessage.payloadVariant.value.num,
type: "direct",
channel: Types.ChannelNumber.Primary,
data: decodedMessage.payloadVariant.value.position,
});
}
//TODO: HERE
if (decodedMessage.payloadVariant.value.position) {
device.events.onPositionPacket.dispatch({
id: decodedMessage.id,
rxTime: new Date(),
from: decodedMessage.payloadVariant.value.num,
to: decodedMessage.payloadVariant.value.num,
type: "direct",
channel: Types.ChannelNumber.Primary,
data: decodedMessage.payloadVariant.value.position,
});
}
//TODO: HERE
if (decodedMessage.payloadVariant.value.user) {
device.events.onUserPacket.dispatch({
id: decodedMessage.id,
rxTime: new Date(),
from: decodedMessage.payloadVariant.value.num,
to: decodedMessage.payloadVariant.value.num,
type: "direct",
channel: Types.ChannelNumber.Primary,
data: decodedMessage.payloadVariant.value.user,
});
}
break;
}
//TODO: HERE
if (decodedMessage.payloadVariant.value.user) {
device.events.onUserPacket.dispatch({
id: decodedMessage.id,
rxTime: new Date(),
from: decodedMessage.payloadVariant.value.num,
to: decodedMessage.payloadVariant.value.num,
type: "direct",
channel: Types.ChannelNumber.Primary,
data: decodedMessage.payloadVariant.value.user,
});
}
break;
}
case "config": {
if (decodedMessage.payloadVariant.value.payloadVariant.case) {
device.log.trace(
Types.Emitter[Types.Emitter.HandleFromRadio],
`💾 Received Config packet of variant: ${decodedMessage.payloadVariant.value.payloadVariant.case}`,
);
} else {
device.log.warn(
Types.Emitter[Types.Emitter.HandleFromRadio],
`⚠️ Received Config packet of variant: ${"UNK"}`,
);
}
case "config": {
if (decodedMessage.payloadVariant.value.payloadVariant.case) {
device.log.trace(
Types.Emitter[Types.Emitter.HandleFromRadio],
`💾 Received Config packet of variant: ${decodedMessage.payloadVariant.value.payloadVariant.case}`,
);
} else {
device.log.warn(
Types.Emitter[Types.Emitter.HandleFromRadio],
`⚠️ Received Config packet of variant: ${"UNK"}`,
);
}
device.events.onConfigPacket.dispatch(
decodedMessage.payloadVariant.value,
);
break;
}
device.events.onConfigPacket.dispatch(
decodedMessage.payloadVariant.value,
);
break;
}
case "logRecord": {
device.log.trace(
Types.Emitter[Types.Emitter.HandleFromRadio],
"Received onLogRecord",
);
device.events.onLogRecord.dispatch(
decodedMessage.payloadVariant.value,
);
break;
}
case "logRecord": {
device.log.trace(
Types.Emitter[Types.Emitter.HandleFromRadio],
"Received onLogRecord",
);
device.events.onLogRecord.dispatch(
decodedMessage.payloadVariant.value,
);
break;
}
case "configCompleteId": {
if (decodedMessage.payloadVariant.value !== device.configId) {
device.log.error(
Types.Emitter[Types.Emitter.HandleFromRadio],
`❌ Invalid config id received from device, expected ${device.configId} but received ${decodedMessage.payloadVariant.value}`,
);
}
case "configCompleteId": {
if (decodedMessage.payloadVariant.value !== device.configId) {
device.log.error(
Types.Emitter[Types.Emitter.HandleFromRadio],
`❌ Invalid config id received from device, expected ${device.configId} but received ${decodedMessage.payloadVariant.value}`,
);
}
device.log.info(
Types.Emitter[Types.Emitter.HandleFromRadio],
`⚙️ Valid config id received from device: ${device.configId}`,
);
device.log.info(
Types.Emitter[Types.Emitter.HandleFromRadio],
`⚙️ Valid config id received from device: ${device.configId}`,
);
device.updateDeviceStatus(
Types.DeviceStatusEnum.DeviceConfigured,
);
break;
}
device.updateDeviceStatus(
Types.DeviceStatusEnum.DeviceConfigured,
);
break;
}
case "rebooted": {
device.configure().catch(() => {
// TODO: FIX, workaround for `wantConfigId` not getting acks.
});
break;
}
case "rebooted": {
device.configure().catch(() => {
// TODO: FIX, workaround for `wantConfigId` not getting acks.
});
break;
}
case "moduleConfig": {
if (decodedMessage.payloadVariant.value.payloadVariant.case) {
device.log.trace(
Types.Emitter[Types.Emitter.HandleFromRadio],
`💾 Received Module Config packet of variant: ${decodedMessage.payloadVariant.value.payloadVariant.case}`,
);
} else {
device.log.warn(
Types.Emitter[Types.Emitter.HandleFromRadio],
"⚠️ Received Module Config packet of variant: UNK",
);
}
case "moduleConfig": {
if (decodedMessage.payloadVariant.value.payloadVariant.case) {
device.log.trace(
Types.Emitter[Types.Emitter.HandleFromRadio],
`💾 Received Module Config packet of variant: ${decodedMessage.payloadVariant.value.payloadVariant.case}`,
);
} else {
device.log.warn(
Types.Emitter[Types.Emitter.HandleFromRadio],
"⚠️ Received Module Config packet of variant: UNK",
);
}
device.events.onModuleConfigPacket.dispatch(
decodedMessage.payloadVariant.value,
);
break;
}
device.events.onModuleConfigPacket.dispatch(
decodedMessage.payloadVariant.value,
);
break;
}
case "channel": {
device.log.trace(
Types.Emitter[Types.Emitter.HandleFromRadio],
`🔐 Received Channel: ${decodedMessage.payloadVariant.value.index}`,
);
case "channel": {
device.log.trace(
Types.Emitter[Types.Emitter.HandleFromRadio],
`🔐 Received Channel: ${decodedMessage.payloadVariant.value.index}`,
);
device.events.onChannelPacket.dispatch(
decodedMessage.payloadVariant.value,
);
break;
}
device.events.onChannelPacket.dispatch(
decodedMessage.payloadVariant.value,
);
break;
}
case "queueStatus": {
device.log.trace(
Types.Emitter[Types.Emitter.HandleFromRadio],
`🚧 Received Queue Status: ${decodedMessage.payloadVariant.value}`,
);
case "queueStatus": {
device.log.trace(
Types.Emitter[Types.Emitter.HandleFromRadio],
`🚧 Received Queue Status: ${decodedMessage.payloadVariant.value}`,
);
device.events.onQueueStatus.dispatch(
decodedMessage.payloadVariant.value,
);
break;
}
device.events.onQueueStatus.dispatch(
decodedMessage.payloadVariant.value,
);
break;
}
case "xmodemPacket": {
device.xModem.handlePacket(decodedMessage.payloadVariant.value);
break;
}
case "xmodemPacket": {
device.xModem.handlePacket(decodedMessage.payloadVariant.value);
break;
}
case "metadata": {
if (
Number.parseFloat(
decodedMessage.payloadVariant.value.firmwareVersion,
) < Constants.minFwVer
) {
device.log.fatal(
Types.Emitter[Types.Emitter.HandleFromRadio],
`Device firmware outdated. Min supported: ${Constants.minFwVer} got : ${decodedMessage.payloadVariant.value.firmwareVersion}`,
);
}
device.log.debug(
Types.Emitter[Types.Emitter.GetMetadata],
"🏷️ Received metadata packet",
);
case "metadata": {
if (
Number.parseFloat(
decodedMessage.payloadVariant.value.firmwareVersion,
) < Constants.minFwVer
) {
device.log.fatal(
Types.Emitter[Types.Emitter.HandleFromRadio],
`Device firmware outdated. Min supported: ${Constants.minFwVer} got : ${decodedMessage.payloadVariant.value.firmwareVersion}`,
);
}
device.log.debug(
Types.Emitter[Types.Emitter.GetMetadata],
"🏷️ Received metadata packet",
);
device.events.onDeviceMetadataPacket.dispatch({
id: decodedMessage.id,
rxTime: new Date(),
from: 0,
to: 0,
type: "direct",
channel: Types.ChannelNumber.Primary,
data: decodedMessage.payloadVariant.value,
});
break;
}
device.events.onDeviceMetadataPacket.dispatch({
id: decodedMessage.id,
rxTime: new Date(),
from: 0,
to: 0,
type: "direct",
channel: Types.ChannelNumber.Primary,
data: decodedMessage.payloadVariant.value,
});
break;
}
case "mqttClientProxyMessage": {
break;
}
case "mqttClientProxyMessage": {
break;
}
default: {
device.log.warn(
Types.Emitter[Types.Emitter.HandleFromRadio],
`⚠️ Unhandled payload variant: ${decodedMessage.payloadVariant.case}`,
);
}
}
}
}
},
});
default: {
device.log.warn(
Types.Emitter[Types.Emitter.HandleFromRadio],
`⚠️ Unhandled payload variant: ${decodedMessage.payloadVariant.case}`,
);
}
}
}
}
},
});

View File

@@ -1,73 +1,71 @@
import type { DeviceOutput } from "../../types.ts";
export const fromDeviceStream: () => TransformStream<Uint8Array, DeviceOutput> =
(
// onReleaseEvent: SimpleEventDispatcher<boolean>,
) => {
let byteBuffer = new Uint8Array([]);
const textDecoder = new TextDecoder();
return new TransformStream<Uint8Array, DeviceOutput>({
transform(chunk: Uint8Array, controller): void {
// onReleaseEvent.subscribe(() => {
// controller.terminate();
// });
byteBuffer = new Uint8Array([...byteBuffer, ...chunk]);
let processingExhausted = false;
while (byteBuffer.length !== 0 && !processingExhausted) {
const framingIndex = byteBuffer.findIndex((byte) => byte === 0x94);
const framingByte2 = byteBuffer[framingIndex + 1];
if (framingByte2 === 0xc3) {
if (byteBuffer.subarray(0, framingIndex).length) {
controller.enqueue({
type: "debug",
data: textDecoder.decode(byteBuffer.subarray(0, framingIndex)),
});
byteBuffer = byteBuffer.subarray(framingIndex);
}
(
// onReleaseEvent: SimpleEventDispatcher<boolean>,
) => {
let byteBuffer = new Uint8Array([]);
const textDecoder = new TextDecoder();
return new TransformStream<Uint8Array, DeviceOutput>({
transform(chunk: Uint8Array, controller): void {
// onReleaseEvent.subscribe(() => {
// controller.terminate();
// });
byteBuffer = new Uint8Array([...byteBuffer, ...chunk]);
let processingExhausted = false;
while (byteBuffer.length !== 0 && !processingExhausted) {
const framingIndex = byteBuffer.findIndex((byte) => byte === 0x94);
const framingByte2 = byteBuffer[framingIndex + 1];
if (framingByte2 === 0xc3) {
if (byteBuffer.subarray(0, framingIndex).length) {
controller.enqueue({
type: "debug",
data: textDecoder.decode(byteBuffer.subarray(0, framingIndex)),
});
byteBuffer = byteBuffer.subarray(framingIndex);
}
const msb = byteBuffer[2];
const lsb = byteBuffer[3];
const msb = byteBuffer[2];
const lsb = byteBuffer[3];
if (
msb !== undefined &&
lsb !== undefined &&
byteBuffer.length >= 4 + (msb << 8) + lsb
) {
const packet = byteBuffer.subarray(4, 4 + (msb << 8) + lsb);
if (
msb !== undefined &&
lsb !== undefined &&
byteBuffer.length >= 4 + (msb << 8) + lsb
) {
const packet = byteBuffer.subarray(4, 4 + (msb << 8) + lsb);
const malformedDetectorIndex = packet.findIndex(
(byte) => byte === 0x94,
);
if (
malformedDetectorIndex !== -1 &&
packet[malformedDetectorIndex + 1] === 0xc3
) {
console.warn(
`⚠️ Malformed packet found, discarding: ${
byteBuffer
.subarray(0, malformedDetectorIndex - 1)
.toString()
}`,
);
const malformedDetectorIndex = packet.findIndex(
(byte) => byte === 0x94,
);
if (
malformedDetectorIndex !== -1 &&
packet[malformedDetectorIndex + 1] === 0xc3
) {
console.warn(
`⚠️ Malformed packet found, discarding: ${byteBuffer
.subarray(0, malformedDetectorIndex - 1)
.toString()}`,
);
byteBuffer = byteBuffer.subarray(malformedDetectorIndex);
} else {
byteBuffer = byteBuffer.subarray(3 + (msb << 8) + lsb + 1);
byteBuffer = byteBuffer.subarray(malformedDetectorIndex);
} else {
byteBuffer = byteBuffer.subarray(3 + (msb << 8) + lsb + 1);
controller.enqueue({
type: "packet",
data: packet,
});
}
} else {
/** Only partioal message in buffer, wait for the rest */
processingExhausted = true;
}
} else {
/** Message not complete, only 1 byte in buffer */
processingExhausted = true;
}
}
},
});
};
controller.enqueue({
type: "packet",
data: packet,
});
}
} else {
/** Only partioal message in buffer, wait for the rest */
processingExhausted = true;
}
} else {
/** Message not complete, only 1 byte in buffer */
processingExhausted = true;
}
}
},
});
};

View File

@@ -2,15 +2,15 @@
* Pads packets with appropriate framing information before writing to the output stream.
*/
export const toDeviceStream: TransformStream<Uint8Array, Uint8Array> =
new TransformStream<Uint8Array, Uint8Array>({
transform(chunk: Uint8Array, controller): void {
const bufLen = chunk.length;
const header = new Uint8Array([
0x94,
0xC3,
(bufLen >> 8) & 0xFF,
bufLen & 0xFF,
]);
controller.enqueue(new Uint8Array([...header, ...chunk]));
},
});
new TransformStream<Uint8Array, Uint8Array>({
transform(chunk: Uint8Array, controller): void {
const bufLen = chunk.length;
const header = new Uint8Array([
0x94,
0xc3,
(bufLen >> 8) & 0xff,
bufLen & 0xff,
]);
controller.enqueue(new Uint8Array([...header, ...chunk]));
},
});

View File

@@ -1,135 +1,135 @@
import crc16ccitt from "crc/calculators/crc16ccitt";
import { create, toBinary } from "@bufbuild/protobuf";
import * as Protobuf from "@meshtastic/protobufs";
import crc16ccitt from "crc/calculators/crc16ccitt";
//if counter > 35 then reset counter/clear/error/reject promise
type XmodemProps = (toRadio: Uint8Array, id?: number) => Promise<number>;
export class Xmodem {
private sendRaw: XmodemProps;
private rxBuffer: Uint8Array[];
private txBuffer: Uint8Array[];
private textEncoder: TextEncoder;
private counter: number;
private sendRaw: XmodemProps;
private rxBuffer: Uint8Array[];
private txBuffer: Uint8Array[];
private textEncoder: TextEncoder;
private counter: number;
constructor(sendRaw: XmodemProps) {
this.sendRaw = sendRaw;
this.rxBuffer = [];
this.txBuffer = [];
this.textEncoder = new TextEncoder();
this.counter = 0;
}
constructor(sendRaw: XmodemProps) {
this.sendRaw = sendRaw;
this.rxBuffer = [];
this.txBuffer = [];
this.textEncoder = new TextEncoder();
this.counter = 0;
}
async downloadFile(filename: string): Promise<number> {
return await this.sendCommand(
Protobuf.Xmodem.XModem_Control.STX,
this.textEncoder.encode(filename),
0,
);
}
async downloadFile(filename: string): Promise<number> {
return await this.sendCommand(
Protobuf.Xmodem.XModem_Control.STX,
this.textEncoder.encode(filename),
0,
);
}
async uploadFile(filename: string, data: Uint8Array): Promise<number> {
for (let i = 0; i < data.length; i += 128) {
this.txBuffer.push(data.slice(i, i + 128));
}
async uploadFile(filename: string, data: Uint8Array): Promise<number> {
for (let i = 0; i < data.length; i += 128) {
this.txBuffer.push(data.slice(i, i + 128));
}
return await this.sendCommand(
Protobuf.Xmodem.XModem_Control.SOH,
this.textEncoder.encode(filename),
0,
);
}
return await this.sendCommand(
Protobuf.Xmodem.XModem_Control.SOH,
this.textEncoder.encode(filename),
0,
);
}
async sendCommand(
command: Protobuf.Xmodem.XModem_Control,
buffer?: Uint8Array,
sequence?: number,
crc16?: number,
): Promise<number> {
const toRadio = create(Protobuf.Mesh.ToRadioSchema, {
payloadVariant: {
case: "xmodemPacket",
value: {
buffer,
control: command,
seq: sequence,
crc16: crc16,
},
},
});
return await this.sendRaw(toBinary(Protobuf.Mesh.ToRadioSchema, toRadio));
}
async sendCommand(
command: Protobuf.Xmodem.XModem_Control,
buffer?: Uint8Array,
sequence?: number,
crc16?: number,
): Promise<number> {
const toRadio = create(Protobuf.Mesh.ToRadioSchema, {
payloadVariant: {
case: "xmodemPacket",
value: {
buffer,
control: command,
seq: sequence,
crc16: crc16,
},
},
});
return await this.sendRaw(toBinary(Protobuf.Mesh.ToRadioSchema, toRadio));
}
async handlePacket(packet: Protobuf.Xmodem.XModem): Promise<number> {
await new Promise((resolve) => setTimeout(resolve, 100));
async handlePacket(packet: Protobuf.Xmodem.XModem): Promise<number> {
await new Promise((resolve) => setTimeout(resolve, 100));
switch (packet.control) {
case Protobuf.Xmodem.XModem_Control.NUL: {
// nothing
break;
}
case Protobuf.Xmodem.XModem_Control.SOH: {
this.counter = packet.seq;
if (this.validateCrc16(packet)) {
this.rxBuffer[this.counter] = packet.buffer;
return this.sendCommand(Protobuf.Xmodem.XModem_Control.ACK);
}
return await this.sendCommand(
Protobuf.Xmodem.XModem_Control.NAK,
undefined,
packet.seq,
);
}
case Protobuf.Xmodem.XModem_Control.STX: {
break;
}
case Protobuf.Xmodem.XModem_Control.EOT: {
// end of transmission
break;
}
case Protobuf.Xmodem.XModem_Control.ACK: {
this.counter++;
if (this.txBuffer[this.counter - 1]) {
return this.sendCommand(
Protobuf.Xmodem.XModem_Control.SOH,
this.txBuffer[this.counter - 1],
this.counter,
crc16ccitt(this.txBuffer[this.counter - 1] ?? new Uint8Array()),
);
}
if (this.counter === this.txBuffer.length + 1) {
return this.sendCommand(Protobuf.Xmodem.XModem_Control.EOT);
}
this.clear();
break;
}
case Protobuf.Xmodem.XModem_Control.NAK: {
return this.sendCommand(
Protobuf.Xmodem.XModem_Control.SOH,
this.txBuffer[this.counter],
this.counter,
crc16ccitt(this.txBuffer[this.counter - 1] ?? new Uint8Array()),
);
}
case Protobuf.Xmodem.XModem_Control.CAN: {
this.clear();
break;
}
case Protobuf.Xmodem.XModem_Control.CTRLZ: {
break;
}
}
switch (packet.control) {
case Protobuf.Xmodem.XModem_Control.NUL: {
// nothing
break;
}
case Protobuf.Xmodem.XModem_Control.SOH: {
this.counter = packet.seq;
if (this.validateCrc16(packet)) {
this.rxBuffer[this.counter] = packet.buffer;
return this.sendCommand(Protobuf.Xmodem.XModem_Control.ACK);
}
return await this.sendCommand(
Protobuf.Xmodem.XModem_Control.NAK,
undefined,
packet.seq,
);
}
case Protobuf.Xmodem.XModem_Control.STX: {
break;
}
case Protobuf.Xmodem.XModem_Control.EOT: {
// end of transmission
break;
}
case Protobuf.Xmodem.XModem_Control.ACK: {
this.counter++;
if (this.txBuffer[this.counter - 1]) {
return this.sendCommand(
Protobuf.Xmodem.XModem_Control.SOH,
this.txBuffer[this.counter - 1],
this.counter,
crc16ccitt(this.txBuffer[this.counter - 1] ?? new Uint8Array()),
);
}
if (this.counter === this.txBuffer.length + 1) {
return this.sendCommand(Protobuf.Xmodem.XModem_Control.EOT);
}
this.clear();
break;
}
case Protobuf.Xmodem.XModem_Control.NAK: {
return this.sendCommand(
Protobuf.Xmodem.XModem_Control.SOH,
this.txBuffer[this.counter],
this.counter,
crc16ccitt(this.txBuffer[this.counter - 1] ?? new Uint8Array()),
);
}
case Protobuf.Xmodem.XModem_Control.CAN: {
this.clear();
break;
}
case Protobuf.Xmodem.XModem_Control.CTRLZ: {
break;
}
}
return Promise.resolve(0);
}
return Promise.resolve(0);
}
validateCrc16(packet: Protobuf.Xmodem.XModem): boolean {
return crc16ccitt(packet.buffer) === packet.crc16;
}
validateCrc16(packet: Protobuf.Xmodem.XModem): boolean {
return crc16ccitt(packet.buffer) === packet.crc16;
}
clear() {
this.counter = 0;
this.rxBuffer = [];
this.txBuffer = [];
}
clear() {
this.counter = 0;
this.rxBuffer = [];
this.txBuffer = [];
}
}

View File

@@ -1,8 +1,8 @@
{
"name": "@meshtastic/transport-deno",
"version": "0.1.1",
"description": "Deno-specific transport layer for Meshtastic web applications.",
"exports": {
".": "./mod.ts"
}
"name": "@meshtastic/transport-deno",
"version": "0.1.1",
"description": "Deno-specific transport layer for Meshtastic web applications.",
"exports": {
".": "./mod.ts"
}
}

View File

@@ -2,31 +2,31 @@ import { Utils } from "@meshtastic/core";
import type { Types } from "@meshtastic/core";
export class TransportDeno implements Types.Transport {
private _toDevice: WritableStream<Uint8Array>;
private _fromDevice: ReadableStream<Types.DeviceOutput>;
private _toDevice: WritableStream<Uint8Array>;
private _fromDevice: ReadableStream<Types.DeviceOutput>;
public static async create(hostname: string): Promise<TransportDeno> {
const connection = await Deno.connect({
hostname,
port: 4403,
});
return new TransportDeno(connection);
}
public static async create(hostname: string): Promise<TransportDeno> {
const connection = await Deno.connect({
hostname,
port: 4403,
});
return new TransportDeno(connection);
}
constructor(connection: Deno.Conn) {
Utils.toDeviceStream.readable.pipeTo(connection.writable);
constructor(connection: Deno.Conn) {
Utils.toDeviceStream.readable.pipeTo(connection.writable);
this._toDevice = Utils.toDeviceStream.writable;
this._fromDevice = connection.readable.pipeThrough(
Utils.fromDeviceStream(),
);
}
this._toDevice = Utils.toDeviceStream.writable;
this._fromDevice = connection.readable.pipeThrough(
Utils.fromDeviceStream(),
);
}
get toDevice(): WritableStream<Uint8Array> {
return this._toDevice;
}
get toDevice(): WritableStream<Uint8Array> {
return this._toDevice;
}
get fromDevice(): ReadableStream<Types.DeviceOutput> {
return this._fromDevice;
}
get fromDevice(): ReadableStream<Types.DeviceOutput> {
return this._fromDevice;
}
}

View File

@@ -1,8 +1,8 @@
{
"name": "@meshtastic/transport-http",
"version": "0.2.1",
"description": "A transport layer for Meshtastic applications using HTTP.",
"exports": {
".": "./mod.ts"
}
"name": "@meshtastic/transport-http",
"version": "0.2.1",
"description": "A transport layer for Meshtastic applications using HTTP.",
"exports": {
".": "./mod.ts"
}
}

View File

@@ -1,89 +1,89 @@
import type { Types } from "@meshtastic/core";
export class TransportHTTP implements Types.Transport {
private _toDevice: WritableStream<Uint8Array>;
private _fromDevice: ReadableStream<Types.DeviceOutput>;
private url: string;
private receiveBatchRequests: boolean;
private fetchInterval: number;
private _toDevice: WritableStream<Uint8Array>;
private _fromDevice: ReadableStream<Types.DeviceOutput>;
private url: string;
private receiveBatchRequests: boolean;
private fetchInterval: number;
public static async create(
address: string,
tls?: boolean,
): Promise<TransportHTTP> {
const connectionUrl = `${tls ? "https" : "http"}://${address}`;
await fetch(`${connectionUrl}/json/report`);
await Promise.resolve();
return new TransportHTTP(connectionUrl);
}
public static async create(
address: string,
tls?: boolean,
): Promise<TransportHTTP> {
const connectionUrl = `${tls ? "https" : "http"}://${address}`;
await fetch(`${connectionUrl}/json/report`);
await Promise.resolve();
return new TransportHTTP(connectionUrl);
}
constructor(url: string) {
this.url = url;
this.receiveBatchRequests = false;
this.fetchInterval = 3000;
constructor(url: string) {
this.url = url;
this.receiveBatchRequests = false;
this.fetchInterval = 3000;
this._toDevice = new WritableStream<Uint8Array>({
write: async (chunk) => {
await this.writeToRadio(chunk);
},
});
this._toDevice = new WritableStream<Uint8Array>({
write: async (chunk) => {
await this.writeToRadio(chunk);
},
});
let controller: ReadableStreamDefaultController<Types.DeviceOutput>;
let controller: ReadableStreamDefaultController<Types.DeviceOutput>;
this._fromDevice = new ReadableStream<Types.DeviceOutput>({
start: (ctrl) => {
controller = ctrl;
},
});
this._fromDevice = new ReadableStream<Types.DeviceOutput>({
start: (ctrl) => {
controller = ctrl;
},
});
setInterval(async () => {
await this.readFromRadio(controller);
}, this.fetchInterval);
}
setInterval(async () => {
await this.readFromRadio(controller);
}, this.fetchInterval);
}
private async readFromRadio(
controller: ReadableStreamDefaultController<Types.DeviceOutput>,
): Promise<void> {
let readBuffer = new ArrayBuffer(1);
while (readBuffer.byteLength > 0) {
const response = await fetch(
`${this.url}/api/v1/fromradio?all=${
this.receiveBatchRequests ? "true" : "false"
}`,
{
method: "GET",
headers: {
Accept: "application/x-protobuf",
},
},
);
private async readFromRadio(
controller: ReadableStreamDefaultController<Types.DeviceOutput>,
): Promise<void> {
let readBuffer = new ArrayBuffer(1);
while (readBuffer.byteLength > 0) {
const response = await fetch(
`${this.url}/api/v1/fromradio?all=${
this.receiveBatchRequests ? "true" : "false"
}`,
{
method: "GET",
headers: {
Accept: "application/x-protobuf",
},
},
);
readBuffer = await response.arrayBuffer();
readBuffer = await response.arrayBuffer();
if (readBuffer.byteLength > 0) {
controller.enqueue({
type: "packet",
data: new Uint8Array(readBuffer),
});
}
}
}
if (readBuffer.byteLength > 0) {
controller.enqueue({
type: "packet",
data: new Uint8Array(readBuffer),
});
}
}
}
private async writeToRadio(data: Uint8Array): Promise<void> {
await fetch(`${this.url}/api/v1/toradio`, {
method: "PUT",
headers: {
"Content-Type": "application/x-protobuf",
},
body: data,
});
}
private async writeToRadio(data: Uint8Array): Promise<void> {
await fetch(`${this.url}/api/v1/toradio`, {
method: "PUT",
headers: {
"Content-Type": "application/x-protobuf",
},
body: data,
});
}
get toDevice(): WritableStream<Uint8Array> {
return this._toDevice;
}
get toDevice(): WritableStream<Uint8Array> {
return this._toDevice;
}
get fromDevice(): ReadableStream<Types.DeviceOutput> {
return this._fromDevice;
}
get fromDevice(): ReadableStream<Types.DeviceOutput> {
return this._fromDevice;
}
}

View File

@@ -1,8 +1,8 @@
{
"name": "@meshtastic/transport-node",
"version": "0.0.1",
"description": "NodeJS-specific transport layer for Meshtastic web applications.",
"exports": {
".": "./mod.ts"
}
"name": "@meshtastic/transport-node",
"version": "0.0.1",
"description": "NodeJS-specific transport layer for Meshtastic web applications.",
"exports": {
".": "./mod.ts"
}
}

View File

@@ -1,77 +1,76 @@
import { Utils } from "@meshtastic/core";
import type { Types } from "@meshtastic/core";
import { Socket } from "node:net";
import { Readable, Writable } from "node:stream";
import { Utils } from "@meshtastic/core";
import type { Types } from "@meshtastic/core";
export class TransportNode implements Types.Transport {
private readonly _toDevice: WritableStream<Uint8Array>;
private readonly _fromDevice: ReadableStream<Types.DeviceOutput>;
private readonly _toDevice: WritableStream<Uint8Array>;
private readonly _fromDevice: ReadableStream<Types.DeviceOutput>;
/**
* Creates and connects a new TransportNode instance.
* @param hostname - The IP address or hostname of the Meshtastic device.
* @param port - The port number for the TCP connection (defaults to 4403).
* @returns A promise that resolves with a connected TransportNode instance.
*/
public static create(hostname: string, port = 4403): Promise<TransportNode> {
return new Promise((resolve, reject) => {
const socket = new Socket();
/**
* Creates and connects a new TransportNode instance.
* @param hostname - The IP address or hostname of the Meshtastic device.
* @param port - The port number for the TCP connection (defaults to 4403).
* @returns A promise that resolves with a connected TransportNode instance.
*/
public static create(hostname: string, port = 4403): Promise<TransportNode> {
return new Promise((resolve, reject) => {
const socket = new Socket();
const onError = (err: Error) => {
socket.destroy();
reject(err);
};
const onError = (err: Error) => {
socket.destroy();
reject(err);
};
socket.once("error", onError);
socket.once("error", onError);
socket.connect(port, hostname, () => {
socket.removeListener("error", onError);
resolve(new TransportNode(socket));
});
});
}
socket.connect(port, hostname, () => {
socket.removeListener("error", onError);
resolve(new TransportNode(socket));
});
});
}
/**
* Constructs a new TransportNode.
* @param connection - An active Node.js net.Socket connection.
*/
constructor(connection: Socket) {
connection.on("error", (err) => {
console.error("Socket connection error:", err);
});
/**
* Constructs a new TransportNode.
* @param connection - An active Node.js net.Socket connection.
*/
constructor(connection: Socket) {
connection.on("error", (err) => {
console.error("Socket connection error:", err);
});
const fromDeviceSource = Readable.toWeb(connection) as ReadableStream<
Uint8Array
>;
this._fromDevice = fromDeviceSource.pipeThrough(Utils.fromDeviceStream());
const fromDeviceSource = Readable.toWeb(
connection,
) as ReadableStream<Uint8Array>;
this._fromDevice = fromDeviceSource.pipeThrough(Utils.fromDeviceStream());
// Stream for data going FROM the application TO the Meshtastic device.
const toDeviceTransform = new TransformStream<Uint8Array, Uint8Array>();
this._toDevice = toDeviceTransform.writable;
// Stream for data going FROM the application TO the Meshtastic device.
const toDeviceTransform = new TransformStream<Uint8Array, Uint8Array>();
this._toDevice = toDeviceTransform.writable;
// The readable end of the transform is then piped to the Node.js socket.
// A similar assertion is needed here because `Writable.toWeb` also returns
// a generically typed stream (`WritableStream<any>`).
toDeviceTransform.readable.pipeTo(
Writable.toWeb(connection) as WritableStream<Uint8Array>,
)
.catch((err) => {
console.error("Error piping data to socket:", err);
connection.destroy(err as Error);
});
}
// The readable end of the transform is then piped to the Node.js socket.
// A similar assertion is needed here because `Writable.toWeb` also returns
// a generically typed stream (`WritableStream<any>`).
toDeviceTransform.readable
.pipeTo(Writable.toWeb(connection) as WritableStream<Uint8Array>)
.catch((err) => {
console.error("Error piping data to socket:", err);
connection.destroy(err as Error);
});
}
/**
* The WritableStream to send data to the Meshtastic device.
*/
public get toDevice(): WritableStream<Uint8Array> {
return this._toDevice;
}
/**
* The WritableStream to send data to the Meshtastic device.
*/
public get toDevice(): WritableStream<Uint8Array> {
return this._toDevice;
}
/**
* The ReadableStream to receive data from the Meshtastic device.
*/
public get fromDevice(): ReadableStream<Types.DeviceOutput> {
return this._fromDevice;
}
/**
* The ReadableStream to receive data from the Meshtastic device.
*/
public get fromDevice(): ReadableStream<Types.DeviceOutput> {
return this._fromDevice;
}
}

View File

@@ -1,16 +1,14 @@
{
"name": "@meshtastic/transport-web-bluetooth",
"version": "0.1.2",
"description": "A transport layer for Meshtastic applications using Web Bluetooth.",
"exports": {
".": "./mod.ts"
},
"imports": {
"@types/web-bluetooth": "npm:@types/web-bluetooth@^0.0.20"
},
"compilerOptions": {
"types": [
"@types/web-bluetooth"
]
}
"name": "@meshtastic/transport-web-bluetooth",
"version": "0.1.2",
"description": "A transport layer for Meshtastic applications using Web Bluetooth.",
"exports": {
".": "./mod.ts"
},
"imports": {
"@types/web-bluetooth": "npm:@types/web-bluetooth@^0.0.20"
},
"compilerOptions": {
"types": ["@types/web-bluetooth"]
}
}

View File

@@ -1,134 +1,133 @@
import type { Types } from "@meshtastic/core";
export class TransportWebBluetooth implements Types.Transport {
private _toDevice: WritableStream<Uint8Array>;
private _fromDevice: ReadableStream<Types.DeviceOutput>;
private _fromDeviceController?: ReadableStreamDefaultController<
Types.DeviceOutput
>;
private _isFirstWrite = true;
private _toDevice: WritableStream<Uint8Array>;
private _fromDevice: ReadableStream<Types.DeviceOutput>;
private _fromDeviceController?: ReadableStreamDefaultController<Types.DeviceOutput>;
private _isFirstWrite = true;
private toRadioCharacteristic: BluetoothRemoteGATTCharacteristic;
private fromRadioCharacteristic: BluetoothRemoteGATTCharacteristic;
private fromNumCharacteristic: BluetoothRemoteGATTCharacteristic;
private toRadioCharacteristic: BluetoothRemoteGATTCharacteristic;
private fromRadioCharacteristic: BluetoothRemoteGATTCharacteristic;
private fromNumCharacteristic: BluetoothRemoteGATTCharacteristic;
static ToRadioUuid = "f75c76d2-129e-4dad-a1dd-7866124401e7";
static FromRadioUuid = "2c55e69e-4993-11ed-b878-0242ac120002";
static FromNumUuid = "ed9da18c-a800-4f66-a670-aa7547e34453";
static ServiceUuid = "6ba1b218-15a8-461f-9fa8-5dcae273eafd";
static ToRadioUuid = "f75c76d2-129e-4dad-a1dd-7866124401e7";
static FromRadioUuid = "2c55e69e-4993-11ed-b878-0242ac120002";
static FromNumUuid = "ed9da18c-a800-4f66-a670-aa7547e34453";
static ServiceUuid = "6ba1b218-15a8-461f-9fa8-5dcae273eafd";
public static async create(): Promise<TransportWebBluetooth> {
const device = await navigator.bluetooth.requestDevice({
filters: [{ services: [this.ServiceUuid] }],
});
return await this.prepareConnection(device);
}
public static async create(): Promise<TransportWebBluetooth> {
const device = await navigator.bluetooth.requestDevice({
filters: [{ services: [this.ServiceUuid] }],
});
return await this.prepareConnection(device);
}
public static async createFromDevice(
device: BluetoothDevice,
): Promise<TransportWebBluetooth> {
return await this.prepareConnection(device);
}
public static async createFromDevice(
device: BluetoothDevice,
): Promise<TransportWebBluetooth> {
return await this.prepareConnection(device);
}
public static async prepareConnection(
device: BluetoothDevice,
): Promise<TransportWebBluetooth> {
const gattServer = await device.gatt?.connect();
public static async prepareConnection(
device: BluetoothDevice,
): Promise<TransportWebBluetooth> {
const gattServer = await device.gatt?.connect();
if (!gattServer) {
throw new Error("Failed to connect to GATT server");
}
if (!gattServer) {
throw new Error("Failed to connect to GATT server");
}
const service = await gattServer.getPrimaryService(this.ServiceUuid);
const service = await gattServer.getPrimaryService(this.ServiceUuid);
const toRadioCharacteristic = await service.getCharacteristic(
this.ToRadioUuid,
);
const fromRadioCharacteristic = await service.getCharacteristic(
this.FromRadioUuid,
);
const fromNumCharacteristic = await service.getCharacteristic(
this.FromNumUuid,
);
const toRadioCharacteristic = await service.getCharacteristic(
this.ToRadioUuid,
);
const fromRadioCharacteristic = await service.getCharacteristic(
this.FromRadioUuid,
);
const fromNumCharacteristic = await service.getCharacteristic(
this.FromNumUuid,
);
if (
!toRadioCharacteristic || !fromRadioCharacteristic ||
!fromNumCharacteristic
) {
throw new Error("Failed to find required characteristics");
}
if (
!toRadioCharacteristic ||
!fromRadioCharacteristic ||
!fromNumCharacteristic
) {
throw new Error("Failed to find required characteristics");
}
console.log("Connected to device", device.name);
console.log("Connected to device", device.name);
return new TransportWebBluetooth(
toRadioCharacteristic,
fromRadioCharacteristic,
fromNumCharacteristic,
);
}
return new TransportWebBluetooth(
toRadioCharacteristic,
fromRadioCharacteristic,
fromNumCharacteristic,
);
}
constructor(
toRadioCharacteristic: BluetoothRemoteGATTCharacteristic,
fromRadioCharacteristic: BluetoothRemoteGATTCharacteristic,
fromNumCharacteristic: BluetoothRemoteGATTCharacteristic,
) {
this.toRadioCharacteristic = toRadioCharacteristic;
this.fromRadioCharacteristic = fromRadioCharacteristic;
this.fromNumCharacteristic = fromNumCharacteristic;
constructor(
toRadioCharacteristic: BluetoothRemoteGATTCharacteristic,
fromRadioCharacteristic: BluetoothRemoteGATTCharacteristic,
fromNumCharacteristic: BluetoothRemoteGATTCharacteristic,
) {
this.toRadioCharacteristic = toRadioCharacteristic;
this.fromRadioCharacteristic = fromRadioCharacteristic;
this.fromNumCharacteristic = fromNumCharacteristic;
this._fromDevice = new ReadableStream({
start: (ctrl) => {
this._fromDeviceController = ctrl;
},
});
this._fromDevice = new ReadableStream({
start: (ctrl) => {
this._fromDeviceController = ctrl;
},
});
this._toDevice = new WritableStream({
write: async (chunk) => {
await this.toRadioCharacteristic.writeValue(chunk);
this._toDevice = new WritableStream({
write: async (chunk) => {
await this.toRadioCharacteristic.writeValue(chunk);
if (this._isFirstWrite && this._fromDeviceController) {
this._isFirstWrite = false;
setTimeout(() => {
this.readFromRadio(this._fromDeviceController!);
}, 50);
}
},
});
if (this._isFirstWrite && this._fromDeviceController) {
this._isFirstWrite = false;
setTimeout(() => {
this.readFromRadio(this._fromDeviceController!);
}, 50);
}
},
});
this.fromNumCharacteristic.addEventListener(
"characteristicvaluechanged",
() => {
if (this._fromDeviceController) {
this.readFromRadio(this._fromDeviceController);
}
},
);
this.fromNumCharacteristic.addEventListener(
"characteristicvaluechanged",
() => {
if (this._fromDeviceController) {
this.readFromRadio(this._fromDeviceController);
}
},
);
this.fromNumCharacteristic.startNotifications();
}
this.fromNumCharacteristic.startNotifications();
}
get toDevice(): WritableStream<Uint8Array> {
return this._toDevice;
}
get toDevice(): WritableStream<Uint8Array> {
return this._toDevice;
}
get fromDevice(): ReadableStream<Types.DeviceOutput> {
return this._fromDevice;
}
get fromDevice(): ReadableStream<Types.DeviceOutput> {
return this._fromDevice;
}
protected async readFromRadio(
controller: ReadableStreamDefaultController<Types.DeviceOutput>,
): Promise<void> {
let hasMoreData = true;
while (hasMoreData && this.fromRadioCharacteristic) {
const value = await this.fromRadioCharacteristic.readValue();
if (value.byteLength === 0) {
hasMoreData = false;
continue;
}
controller.enqueue({
type: "packet",
data: new Uint8Array(value.buffer),
});
}
}
protected async readFromRadio(
controller: ReadableStreamDefaultController<Types.DeviceOutput>,
): Promise<void> {
let hasMoreData = true;
while (hasMoreData && this.fromRadioCharacteristic) {
const value = await this.fromRadioCharacteristic.readValue();
if (value.byteLength === 0) {
hasMoreData = false;
continue;
}
controller.enqueue({
type: "packet",
data: new Uint8Array(value.buffer),
});
}
}
}

View File

@@ -1,16 +1,14 @@
{
"name": "@meshtastic/transport-web-serial",
"version": "0.2.1",
"description": "A transport layer for Meshtastic applications using Web Serial API.",
"exports": {
".": "./mod.ts"
},
"imports": {
"@types/w3c-web-serial": "npm:@types/w3c-web-serial@^1.0.7"
},
"compilerOptions": {
"types": [
"@types/w3c-web-serial"
]
}
"name": "@meshtastic/transport-web-serial",
"version": "0.2.1",
"description": "A transport layer for Meshtastic applications using Web Serial API.",
"exports": {
".": "./mod.ts"
},
"imports": {
"@types/w3c-web-serial": "npm:@types/w3c-web-serial@^1.0.7"
},
"compilerOptions": {
"types": ["@types/w3c-web-serial"]
}
}

View File

@@ -2,41 +2,41 @@ import { Utils } from "@meshtastic/core";
import type { Types } from "@meshtastic/core";
export class TransportWebSerial implements Types.Transport {
private _toDevice: WritableStream<Uint8Array>;
private _fromDevice: ReadableStream<Types.DeviceOutput>;
private _toDevice: WritableStream<Uint8Array>;
private _fromDevice: ReadableStream<Types.DeviceOutput>;
public static async create(baudRate?: number): Promise<TransportWebSerial> {
const port = await navigator.serial.requestPort();
await port.open({ baudRate: baudRate || 115200 });
return new TransportWebSerial(port);
}
public static async create(baudRate?: number): Promise<TransportWebSerial> {
const port = await navigator.serial.requestPort();
await port.open({ baudRate: baudRate || 115200 });
return new TransportWebSerial(port);
}
public static async createFromPort(
port: SerialPort,
baudRate?: number,
): Promise<TransportWebSerial> {
await port.open({ baudRate: baudRate || 115200 });
return new TransportWebSerial(port);
}
public static async createFromPort(
port: SerialPort,
baudRate?: number,
): Promise<TransportWebSerial> {
await port.open({ baudRate: baudRate || 115200 });
return new TransportWebSerial(port);
}
constructor(connection: SerialPort) {
if (!connection.readable || !connection.writable) {
throw new Error("Stream not accessible");
}
constructor(connection: SerialPort) {
if (!connection.readable || !connection.writable) {
throw new Error("Stream not accessible");
}
Utils.toDeviceStream.readable.pipeTo(connection.writable);
Utils.toDeviceStream.readable.pipeTo(connection.writable);
this._toDevice = Utils.toDeviceStream.writable;
this._fromDevice = connection.readable.pipeThrough(
Utils.fromDeviceStream(),
);
}
this._toDevice = Utils.toDeviceStream.writable;
this._fromDevice = connection.readable.pipeThrough(
Utils.fromDeviceStream(),
);
}
get toDevice(): WritableStream<Uint8Array> {
return this._toDevice;
}
get toDevice(): WritableStream<Uint8Array> {
return this._toDevice;
}
get fromDevice(): ReadableStream<Types.DeviceOutput> {
return this._fromDevice;
}
get fromDevice(): ReadableStream<Types.DeviceOutput> {
return this._fromDevice;
}
}

View File

@@ -98,7 +98,7 @@ improve the stability of future releases
## Development & Building
You'll need to download the package manager used with this repo. You can install
it by visiting [deno.com](https://deno.com/) and following the installation
it by visiting [bun.sh](https://bun.sh/) and following the installation
instructions listed on the home page.
### Development
@@ -106,13 +106,13 @@ instructions listed on the home page.
Install the dependencies.
```bash
deno i
bun install
```
Start the development server:
```bash
deno task dev
bun run dev
```
### Building and Packaging
@@ -120,33 +120,33 @@ deno task dev
Build the project:
```bash
deno task build
bun run build
```
GZip the output:
```bash
deno task package
bun run package
```
### Why Deno?
### Why Bun?
Meshtastic Web uses Deno as its development platform for several compelling
Meshtastic Web uses Bun as its development platform for several compelling
reasons:
- **Built-in Security**: Deno's security-first approach requires explicit
permissions for file, network, and environment access, reducing vulnerability
risks.
- **Fast Performance**: Bun is built from the ground up for speed, offering
significantly faster package installation and bundling compared to other
JavaScript runtimes.
- **TypeScript Support**: Native TypeScript support without additional
configuration, enhancing code quality and developer experience.
- **Modern JavaScript**: First-class support for ESM imports, top-level await,
and other modern JavaScript features.
- **Simplified Tooling**: Built-in formatter, linter, test runner, and bundler
eliminate the need for multiple third-party tools.
- **All-in-One Tooling**: Built-in package manager, bundler, test runner, and
transpiler eliminate the need for multiple third-party tools.
- **Node.js Compatibility**: Drop-in replacement for Node.js with better
performance and built-in tooling.
- **Reproducible Builds**: Lockfile ensures consistent builds across all
environments.
- **Web Standard APIs**: Uses browser-compatible APIs, making code more portable
between server and client environments.
### Contributing

49
packages/web/biome.json Normal file
View File

@@ -0,0 +1,49 @@
{
"$schema": "https://biomejs.dev/schemas/2.0.5/schema.json",
"files": {
"includes": ["**", "!node_modules/**", "!**/*.css", "!dist/**", "!build/**", "!coverage/**", "!**/*.d.ts"],
"ignoreUnknown": false
},
"formatter": {
"enabled": true,
"formatWithErrors": false,
"indentStyle": "space",
"indentWidth": 2,
"lineWidth": 80,
"attributePosition": "auto"
},
"linter": {
"enabled": true,
"rules": {
"recommended": true,
"suspicious": {
"noExplicitAny": "error",
"noDebugger": "error"
},
"style": {
"useConst": "error",
"useBlockStatements": "error",
"useSingleVarDeclarator": "off"
},
"complexity": {
"noForEach": "off"
},
"correctness": {
"noUnusedVariables": "error",
"noUnusedImports": "error"
}
}
},
"javascript": {
"formatter": {
"quoteStyle": "double",
"semicolons": "always"
}
},
"json": {
"formatter": {
"indentStyle": "space",
"indentWidth": 2
}
}
}

View File

@@ -1,57 +0,0 @@
{
"imports": {
"@app/": "./src/",
"@public/": "./public/",
"@pages/": "./src/pages/",
"@components/": "./src/components/",
"@core/": "./src/core/",
"@layouts/": "./src/layouts/",
"@std/path": "jsr:@std/path@^1.1.0"
},
"tasks": {
"build": "vite build",
"build:analyze": "BUNDLE_ANALYZE=true deno task build",
"lint": "deno lint src/",
"lint:fix": "deno lint --fix src/",
"format": "deno fmt src/",
"dev": "deno task dev:ui",
"dev:ui": "VITE_APP_VERSION=development deno run -A npm:vite dev",
"test": "deno run -A npm:vitest",
"check": "deno check",
"preview": "deno run -A npm:vite preview",
"generate:routes": "deno run -A npm:@tanstack/router-cli generate --outDir src/ routes --rootRoutePath /",
"package": "gzipper c -i html,js,css,png,ico,svg,json,webmanifest,txt dist dist/output && tar -cvf dist/build.tar -C ./dist/output/ ."
},
"include": ["src", "./vite-env.d.ts"],
"compilerOptions": {
"lib": [
"DOM",
"DOM.Iterable",
"ESNext",
"deno.window",
"deno.ns"
],
"jsx": "react-jsx",
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"strictNullChecks": true,
"types": [
"vite/client",
"node",
"npm:@types/w3c-web-serial",
"npm:@types/web-bluetooth"
],
"strictPropertyInitialization": false
},
"exclude": [
"routeTree.gen.ts",
"node_modules/",
"dist",
"build",
"coverage",
"out",
".vscode-test"
]
}

View File

@@ -18,6 +18,11 @@
href="https://cdn.jsdelivr.net/npm/@xz/fonts@1/serve/cascadia-code.min.css"
crossorigin="anonymous"
/>
<link
rel="stylesheet"
href="src/index.css"
crossorigin="anonymous"
/>
<meta name="theme-color" content="#67ea94" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="Meshtastic Web Client" />

View File

@@ -1,102 +1,112 @@
{
"name": "meshtastic-web",
"version": "2.7.0-0",
"type": "module",
"description": "Meshtastic web client",
"license": "GPL-3.0-only",
"repository": {
"type": "git",
"url": "git+https://github.com/meshtastic/web.git"
},
"bugs": {
"url": "https://github.com/meshtastic/web/issues"
},
"simple-git-hooks": {
"pre-commit": "deno task lint:fix && deno task format"
},
"homepage": "https://meshtastic.org",
"dependencies": {
"@bufbuild/protobuf": "^2.6.0",
"@hookform/resolvers": "^5.1.1",
"@meshtastic/core": "npm:@jsr/meshtastic__core@2.6.4",
"@meshtastic/js": "npm:@jsr/meshtastic__js@2.6.0-0",
"@meshtastic/transport-http": "npm:@jsr/meshtastic__transport-http",
"@meshtastic/transport-web-bluetooth": "npm:@jsr/meshtastic__transport-web-bluetooth",
"@meshtastic/transport-web-serial": "npm:@jsr/meshtastic__transport-web-serial",
"@noble/curves": "^1.9.2",
"@radix-ui/react-accordion": "^1.2.11",
"@radix-ui/react-checkbox": "^1.3.2",
"@radix-ui/react-dialog": "^1.1.14",
"@radix-ui/react-dropdown-menu": "^2.1.15",
"@radix-ui/react-label": "^2.1.7",
"@radix-ui/react-menubar": "^1.1.15",
"@radix-ui/react-popover": "^1.1.14",
"@radix-ui/react-scroll-area": "^1.2.9",
"@radix-ui/react-select": "^2.2.5",
"@radix-ui/react-separator": "^1.1.7",
"@radix-ui/react-slider": "^1.3.5",
"@radix-ui/react-switch": "^1.2.5",
"@radix-ui/react-tabs": "^1.1.12",
"@radix-ui/react-toast": "^1.2.14",
"@radix-ui/react-toggle-group": "^1.1.10",
"@radix-ui/react-tooltip": "^1.2.7",
"@tanstack/react-router": "^1.125.4",
"@tanstack/react-router-devtools": "^1.125.4",
"@tanstack/router-cli": "^1.125.4",
"@tanstack/router-devtools": "^1.125.4",
"@turf/turf": "^7.2.0",
"@types/node": "^24.0.10",
"@types/web-bluetooth": "^0.0.21",
"base64-js": "^1.5.1",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"cmdk": "^1.1.1",
"crypto-random-string": "^5.0.0",
"i18next": "^25.3.1",
"i18next-browser-languagedetector": "^8.2.0",
"i18next-http-backend": "^3.0.2",
"idb-keyval": "^6.2.2",
"immer": "^10.1.1",
"js-cookie": "^3.0.5",
"lucide-react": "^0.525.0",
"maplibre-gl": "5.6.1",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-error-boundary": "^6.0.0",
"react-hook-form": "^7.60.0",
"react-i18next": "^15.6.0",
"react-map-gl": "8.0.4",
"react-qrcode-logo": "^3.0.0",
"rfc4648": "^1.5.4",
"zod": "^3.25.75",
"zustand": "5.0.6"
},
"devDependencies": {
"@tailwindcss/postcss": "^4.1.11",
"@tanstack/router-plugin": "^1.125.5",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^16.3.0",
"@testing-library/user-event": "^14.6.1",
"@types/chrome": "^0.0.329",
"@types/react": "^19.1.8",
"@types/react-dom": "^19.1.6",
"@types/serviceworker": "^0.0.140",
"@types/js-cookie": "^3.0.6",
"@types/w3c-web-serial": "^1.0.8",
"@vitejs/plugin-react": "^4.6.0",
"autoprefixer": "^10.4.21",
"gzipper": "^8.2.1",
"happy-dom": "^18.0.1",
"postcss": "^8.5.6",
"simple-git-hooks": "^2.13.0",
"tailwind-merge": "^3.3.1",
"tailwindcss": "^4.1.11",
"tailwindcss-animate": "^1.0.7",
"tar": "^7.4.3",
"testing-library": "^0.0.2",
"typescript": "^5.8.3",
"vite": "^7.0",
"vitest": "^3.2.4"
}
"name": "meshtastic-web",
"version": "2.7.0-0",
"type": "module",
"description": "Meshtastic web client",
"license": "GPL-3.0-only",
"repository": {
"type": "git",
"url": "git+https://github.com/meshtastic/web.git"
},
"bugs": {
"url": "https://github.com/meshtastic/web/issues"
},
"simple-git-hooks": {
"pre-commit": "bun run check:fix"
},
"homepage": "https://meshtastic.org",
"scripts": {
"build": "bunx --bun vite build",
"build:analyze": "BUNDLE_ANALYZE=true bun run build",
"check": "biome check src/",
"check:fix": "biome check --write src/",
"dev": "bunx --bun vite",
"test": "bunx --bun vitest",
"ts:check": "bun run tsc --noEmit",
"preview": "bunx --bun vite preview",
"generate:routes": "bun @tanstack/router-cli generate --outDir src/ routes --rootRoutePath /",
"package": "gzipper c -i html,js,css,png,ico,svg,json,webmanifest,txt dist dist/output && tar -cvf dist/build.tar -C ./dist/output/ ."
},
"dependencies": {
"@bufbuild/protobuf": "^2.6.0",
"@hookform/resolvers": "^5.1.1",
"@meshtastic/core": "npm:@jsr/meshtastic__core@2.6.4",
"@meshtastic/transport-http": "npm:@jsr/meshtastic__transport-http",
"@meshtastic/transport-web-bluetooth": "npm:@jsr/meshtastic__transport-web-bluetooth",
"@meshtastic/transport-web-serial": "npm:@jsr/meshtastic__transport-web-serial",
"@noble/curves": "^1.9.2",
"@radix-ui/react-accordion": "^1.2.11",
"@radix-ui/react-checkbox": "^1.3.2",
"@radix-ui/react-dialog": "^1.1.14",
"@radix-ui/react-dropdown-menu": "^2.1.15",
"@radix-ui/react-label": "^2.1.7",
"@radix-ui/react-menubar": "^1.1.15",
"@radix-ui/react-popover": "^1.1.14",
"@radix-ui/react-scroll-area": "^1.2.9",
"@radix-ui/react-select": "^2.2.5",
"@radix-ui/react-separator": "^1.1.7",
"@radix-ui/react-slider": "^1.3.5",
"@radix-ui/react-switch": "^1.2.5",
"@radix-ui/react-tabs": "^1.1.12",
"@radix-ui/react-toast": "^1.2.14",
"@radix-ui/react-toggle-group": "^1.1.10",
"@radix-ui/react-tooltip": "^1.2.7",
"@tailwindcss/vite": "^4.1.11",
"@tanstack/react-router": "^1.127.9",
"@tanstack/react-router-devtools": "^1.127.9",
"@tanstack/router-cli": "^1.127.8",
"@tanstack/router-devtools": "^1.127.9",
"@turf/turf": "^7.2.0",
"@types/node": "^24.0.14",
"@types/web-bluetooth": "^0.0.21",
"base64-js": "^1.5.1",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"cmdk": "^1.1.1",
"crypto-random-string": "^5.0.0",
"i18next": "^25.3.2",
"i18next-browser-languagedetector": "^8.2.0",
"i18next-http-backend": "^3.0.2",
"idb-keyval": "^6.2.2",
"immer": "^10.1.1",
"js-cookie": "^3.0.5",
"lucide-react": "^0.525.0",
"maplibre-gl": "5.6.1",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-error-boundary": "^6.0.0",
"react-hook-form": "^7.60.0",
"react-i18next": "^15.6.0",
"react-map-gl": "8.0.4",
"react-qrcode-logo": "^3.0.0",
"rfc4648": "^1.5.4",
"zod": "^4.0.5",
"zustand": "5.0.6"
},
"devDependencies": {
"@biomejs/biome": "2.0.6",
"@tanstack/router-plugin": "^1.127.9",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^16.3.0",
"@testing-library/user-event": "^14.6.1",
"@types/chrome": "^0.1.0",
"@types/js-cookie": "^3.0.6",
"@types/react": "^19.1.8",
"@types/react-dom": "^19.1.6",
"@types/serviceworker": "^0.0.142",
"@types/w3c-web-serial": "^1.0.8",
"@vitejs/plugin-react": "^4.6.0",
"autoprefixer": "^10.4.21",
"gzipper": "^8.2.1",
"happy-dom": "^18.0.1",
"simple-git-hooks": "^2.13.0",
"tailwind-merge": "^3.3.1",
"tailwindcss": "^4.1.11",
"tailwindcss-animate": "^1.0.7",
"tar": "^7.4.3",
"testing-library": "^0.0.2",
"typescript": "^5.8.3",
"vite": "^7.0.4",
"vitest": "^3.2.4"
}
}

View File

@@ -1,5 +0,0 @@
module.exports = {
plugins: {
"@tailwindcss/postcss": {},
},
};

View File

@@ -1,69 +1,69 @@
{
"page": {
"sectionLabel": "Канали",
"channelName": "Канал: {{channelName}}",
"broadcastLabel": "Primary",
"channelIndex": "Ch {{index}}"
},
"validation": {
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
},
"settings": {
"label": "Настройки на канала",
"description": "Crypto, MQTT & misc settings"
},
"role": {
"label": "Роля",
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
"options": {
"primary": "PRIMARY",
"disabled": "DISABLED",
"secondary": "SECONDARY"
}
},
"psk": {
"label": "Pre-Shared Key",
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
"generate": "Генериране"
},
"name": {
"label": "Име",
"description": "A unique name for the channel <12 bytes, leave blank for default"
},
"uplinkEnabled": {
"label": "Uplink Enabled",
"description": "Send messages from the local mesh to MQTT"
},
"downlinkEnabled": {
"label": "Downlink Enabled",
"description": "Send messages from MQTT to the local mesh"
},
"positionPrecision": {
"label": "Местоположение",
"description": "The precision of the location to share with the channel. Can be disabled.",
"options": {
"none": "Да не се споделя местоположението",
"precise": "Точно местоположение",
"metric_km23": "Within 23 kilometers",
"metric_km12": "Within 12 kilometers",
"metric_km5_8": "Within 5.8 kilometers",
"metric_km2_9": "Within 2.9 kilometers",
"metric_km1_5": "Within 1.5 kilometers",
"metric_m700": "Within 700 meters",
"metric_m350": "Within 350 meters",
"metric_m200": "Within 200 meters",
"metric_m90": "Within 90 meters",
"metric_m50": "Within 50 meters",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
"page": {
"sectionLabel": "Канали",
"channelName": "Канал: {{channelName}}",
"broadcastLabel": "Primary",
"channelIndex": "Ch {{index}}"
},
"validation": {
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
},
"settings": {
"label": "Настройки на канала",
"description": "Crypto, MQTT & misc settings"
},
"role": {
"label": "Роля",
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
"options": {
"primary": "PRIMARY",
"disabled": "DISABLED",
"secondary": "SECONDARY"
}
},
"psk": {
"label": "Pre-Shared Key",
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
"generate": "Генериране"
},
"name": {
"label": "Име",
"description": "A unique name for the channel <12 bytes, leave blank for default"
},
"uplinkEnabled": {
"label": "Uplink Enabled",
"description": "Send messages from the local mesh to MQTT"
},
"downlinkEnabled": {
"label": "Downlink Enabled",
"description": "Send messages from MQTT to the local mesh"
},
"positionPrecision": {
"label": "Местоположение",
"description": "The precision of the location to share with the channel. Can be disabled.",
"options": {
"none": "Да не се споделя местоположението",
"precise": "Точно местоположение",
"metric_km23": "Within 23 kilometers",
"metric_km12": "Within 12 kilometers",
"metric_km5_8": "Within 5.8 kilometers",
"metric_km2_9": "Within 2.9 kilometers",
"metric_km1_5": "Within 1.5 kilometers",
"metric_m700": "Within 700 meters",
"metric_m350": "Within 350 meters",
"metric_m200": "Within 200 meters",
"metric_m90": "Within 90 meters",
"metric_m50": "Within 50 meters",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
}

View File

@@ -1,50 +1,50 @@
{
"emptyState": "Няма намерени резултати.",
"page": {
"title": "Command Menu"
},
"pinGroup": {
"label": "Pin command group"
},
"unpinGroup": {
"label": "Unpin command group"
},
"goto": {
"label": "Goto",
"command": {
"messages": "Съобщения",
"map": "Карта",
"config": "Конфигурация",
"channels": "Канали",
"nodes": "Възли"
}
},
"manage": {
"label": "Управление",
"command": {
"switchNode": "Switch Node",
"connectNewNode": "Свързване на нов възел"
}
},
"contextual": {
"label": "Contextual",
"command": {
"qrCode": "QR код",
"qrGenerator": "Генератор",
"qrImport": "Импортиране",
"scheduleShutdown": "Планирано изключване",
"scheduleReboot": "Планирано рестартиране",
"rebootToOtaMode": "Рестартиране в режим OTA",
"resetNodeDb": "Нулиране на базата данни с възли",
"factoryResetDevice": "Фабрично нулиране на устройството",
"factoryResetConfig": "Фабрично нулиране на конфигурацията"
}
},
"debug": {
"label": "Отстраняване на грешки",
"command": {
"reconfigure": "Преконфигуриране",
"clearAllStoredMessages": "Изчистване на всички съхранени съобщения"
}
}
"emptyState": "Няма намерени резултати.",
"page": {
"title": "Command Menu"
},
"pinGroup": {
"label": "Pin command group"
},
"unpinGroup": {
"label": "Unpin command group"
},
"goto": {
"label": "Goto",
"command": {
"messages": "Съобщения",
"map": "Карта",
"config": "Конфигурация",
"channels": "Канали",
"nodes": "Възли"
}
},
"manage": {
"label": "Управление",
"command": {
"switchNode": "Switch Node",
"connectNewNode": "Свързване на нов възел"
}
},
"contextual": {
"label": "Contextual",
"command": {
"qrCode": "QR код",
"qrGenerator": "Генератор",
"qrImport": "Импортиране",
"scheduleShutdown": "Планирано изключване",
"scheduleReboot": "Планирано рестартиране",
"rebootToOtaMode": "Рестартиране в режим OTA",
"resetNodeDb": "Нулиране на базата данни с възли",
"factoryResetDevice": "Фабрично нулиране на устройството",
"factoryResetConfig": "Фабрично нулиране на конфигурацията"
}
},
"debug": {
"label": "Отстраняване на грешки",
"command": {
"reconfigure": "Преконфигуриране",
"clearAllStoredMessages": "Изчистване на всички съхранени съобщения"
}
}
}

View File

@@ -1,141 +1,141 @@
{
"button": {
"apply": "Приложи",
"backupKey": "Backup Key",
"cancel": "Отказ",
"clearMessages": "Изчистване на съобщенията",
"close": "Затвори",
"confirm": "Потвърждаване",
"delete": "Изтриване",
"dismiss": "Отхвърляне",
"download": "Изтегляне",
"export": "Експортиране",
"generate": "Генериране",
"regenerate": "Регенериране",
"import": "Импортиране",
"message": "Съобщение",
"now": "Сега",
"ok": "Добре",
"print": "Отпечатване",
"rebootOtaNow": "Reboot to OTA Mode Now",
"remove": "Изтрий",
"requestNewKeys": "Request New Keys",
"requestPosition": "Request Position",
"reset": "Нулиране",
"save": "Запис",
"scanQr": "Сканиране на QR кода",
"traceRoute": "Trace Route",
"submit": "Submit"
},
"app": {
"title": "Meshtastic",
"fullTitle": "Meshtastic Web клиент"
},
"loading": "Зареждане...",
"unit": {
"cps": "CPS",
"dbm": "dBm",
"hertz": "Hz",
"hop": {
"one": "Hop",
"plural": "Hops"
},
"hopsAway": {
"one": "{{count}} hop away",
"plural": "{{count}} hops away",
"unknown": "Unknown hops away"
},
"megahertz": "MHz",
"raw": "raw",
"meter": {
"one": "Метър",
"plural": "Метри",
"suffix": "m"
},
"minute": {
"one": "Минута",
"plural": "Минути"
},
"hour": {
"one": "Час",
"plural": "Часа"
},
"millisecond": {
"one": "Милисекунда",
"plural": "Милисекунди",
"suffix": "ms"
},
"second": {
"one": "Секунда",
"plural": "Секунди"
},
"day": {
"one": "Ден",
"plural": "Дни"
},
"month": {
"one": "Месец",
"plural": "Месеца"
},
"year": {
"one": "Година",
"plural": "Години"
},
"snr": "SNR",
"volt": {
"one": "Волт",
"plural": "Волта",
"suffix": "V"
},
"record": {
"one": "Записи",
"plural": "Записи"
}
},
"security": {
"0bit": "Empty",
"8bit": "8 bit",
"128bit": "128 bit",
"256bit": "256 bit"
},
"unknown": {
"longName": "Неизвестно",
"shortName": "НЕИЗВ.",
"notAvailable": "N/A",
"num": "??"
},
"nodeUnknownPrefix": "!",
"unset": "НЕЗАДАДЕН",
"fallbackName": "Meshtastic {{last4}}",
"node": "Възел",
"formValidation": {
"unsavedChanges": "Unsaved changes",
"tooBig": {
"string": "Too long, expected less than or equal to {{maximum}} characters.",
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
},
"tooSmall": {
"string": "Too short, expected more than or equal to {{minimum}} characters.",
"number": "Too small, expected a number larger than or equal to {{minimum}}."
},
"invalidFormat": {
"ipv4": "Невалиден формат, очаква се IPv4 адрес.",
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
},
"invalidType": {
"number": "Невалиден тип, очаква се число."
},
"pskLength": {
"0bit": "Ключът трябва да е празен.",
"8bit": "Key is required to be an 8 bit pre-shared key (PSK).",
"128bit": "Key is required to be a 128 bit pre-shared key (PSK).",
"256bit": "Key is required to be a 256 bit pre-shared key (PSK)."
},
"required": {
"generic": "Това поле е задължително.",
"managed": "At least one admin key is requred if the node is managed.",
"key": "Ключът е задължителен."
}
}
"button": {
"apply": "Приложи",
"backupKey": "Backup Key",
"cancel": "Отказ",
"clearMessages": "Изчистване на съобщенията",
"close": "Затвори",
"confirm": "Потвърждаване",
"delete": "Изтриване",
"dismiss": "Отхвърляне",
"download": "Изтегляне",
"export": "Експортиране",
"generate": "Генериране",
"regenerate": "Регенериране",
"import": "Импортиране",
"message": "Съобщение",
"now": "Сега",
"ok": "Добре",
"print": "Отпечатване",
"rebootOtaNow": "Reboot to OTA Mode Now",
"remove": "Изтрий",
"requestNewKeys": "Request New Keys",
"requestPosition": "Request Position",
"reset": "Нулиране",
"save": "Запис",
"scanQr": "Сканиране на QR кода",
"traceRoute": "Trace Route",
"submit": "Submit"
},
"app": {
"title": "Meshtastic",
"fullTitle": "Meshtastic Web клиент"
},
"loading": "Зареждане...",
"unit": {
"cps": "CPS",
"dbm": "dBm",
"hertz": "Hz",
"hop": {
"one": "Hop",
"plural": "Hops"
},
"hopsAway": {
"one": "{{count}} hop away",
"plural": "{{count}} hops away",
"unknown": "Unknown hops away"
},
"megahertz": "MHz",
"raw": "raw",
"meter": {
"one": "Метър",
"plural": "Метри",
"suffix": "m"
},
"minute": {
"one": "Минута",
"plural": "Минути"
},
"hour": {
"one": "Час",
"plural": "Часа"
},
"millisecond": {
"one": "Милисекунда",
"plural": "Милисекунди",
"suffix": "ms"
},
"second": {
"one": "Секунда",
"plural": "Секунди"
},
"day": {
"one": "Ден",
"plural": "Дни"
},
"month": {
"one": "Месец",
"plural": "Месеца"
},
"year": {
"one": "Година",
"plural": "Години"
},
"snr": "SNR",
"volt": {
"one": "Волт",
"plural": "Волта",
"suffix": "V"
},
"record": {
"one": "Записи",
"plural": "Записи"
}
},
"security": {
"0bit": "Empty",
"8bit": "8 bit",
"128bit": "128 bit",
"256bit": "256 bit"
},
"unknown": {
"longName": "Неизвестно",
"shortName": "НЕИЗВ.",
"notAvailable": "N/A",
"num": "??"
},
"nodeUnknownPrefix": "!",
"unset": "НЕЗАДАДЕН",
"fallbackName": "Meshtastic {{last4}}",
"node": "Възел",
"formValidation": {
"unsavedChanges": "Unsaved changes",
"tooBig": {
"string": "Too long, expected less than or equal to {{maximum}} characters.",
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
},
"tooSmall": {
"string": "Too short, expected more than or equal to {{minimum}} characters.",
"number": "Too small, expected a number larger than or equal to {{minimum}}."
},
"invalidFormat": {
"ipv4": "Невалиден формат, очаква се IPv4 адрес.",
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
},
"invalidType": {
"number": "Невалиден тип, очаква се число."
},
"pskLength": {
"0bit": "Ключът трябва да е празен.",
"8bit": "Key is required to be an 8 bit pre-shared key (PSK).",
"128bit": "Key is required to be a 128 bit pre-shared key (PSK).",
"256bit": "Key is required to be a 256 bit pre-shared key (PSK)."
},
"required": {
"generic": "Това поле е задължително.",
"managed": "At least one admin key is requred if the node is managed.",
"key": "Ключът е задължителен."
}
}
}

View File

@@ -1,12 +1,12 @@
{
"dashboard": {
"title": "Свързани устройства",
"description": "Управлявайте свързаните си устройства Meshtastic.",
"connectionType_ble": "BLE",
"connectionType_serial": "Серийна",
"connectionType_network": "Мрежа",
"noDevicesTitle": "Няма свързани устройства",
"noDevicesDescription": "Свържете ново устройство, за да започнете.",
"button_newConnection": "Нова връзка"
}
"dashboard": {
"title": "Свързани устройства",
"description": "Управлявайте свързаните си устройства Meshtastic.",
"connectionType_ble": "BLE",
"connectionType_serial": "Серийна",
"connectionType_network": "Мрежа",
"noDevicesTitle": "Няма свързани устройства",
"noDevicesDescription": "Свържете ново устройство, за да започнете.",
"button_newConnection": "Нова връзка"
}
}

View File

@@ -1,428 +1,428 @@
{
"page": {
"title": "Конфигурация",
"tabBluetooth": "Bluetooth",
"tabDevice": "Устройство",
"tabDisplay": "Дисплей",
"tabLora": "LoRa",
"tabNetwork": "Мрежа",
"tabPosition": "Позиция",
"tabPower": "Захранване",
"tabSecurity": "Сигурност"
},
"sidebar": {
"label": "Модули"
},
"device": {
"title": "Настройки на устройството",
"description": "Настройки за устройството",
"buttonPin": {
"description": "Button pin override",
"label": "Button Pin"
},
"buzzerPin": {
"description": "Buzzer pin override",
"label": "Buzzer Pin"
},
"disableTripleClick": {
"description": "Disable triple click",
"label": "Disable Triple Click"
},
"doubleTapAsButtonPress": {
"description": "Treat double tap as button press",
"label": "Double Tap as Button Press"
},
"ledHeartbeatDisabled": {
"description": "Disable default blinking LED",
"label": "LED Heartbeat Disabled"
},
"nodeInfoBroadcastInterval": {
"description": "How often to broadcast node info",
"label": "Node Info Broadcast Interval"
},
"posixTimezone": {
"description": "The POSIX timezone string for the device",
"label": "POSIX часова зона"
},
"rebroadcastMode": {
"description": "How to handle rebroadcasting",
"label": "Rebroadcast Mode"
},
"role": {
"description": "What role the device performs on the mesh",
"label": "Роля"
}
},
"bluetooth": {
"title": "Настройки за Bluetooth",
"description": "Настройки за Bluetooth модула",
"note": "Забележка: Някои устройства (ESP32) не могат да използват едновременно Bluetooth и WiFi.",
"enabled": {
"description": "Активиране или дезактивиране на Bluetooth",
"label": "Активиран"
},
"pairingMode": {
"description": "Поведение при избор на ПИН.",
"label": "Режим на сдвояване"
},
"pin": {
"description": "Pin to use when pairing",
"label": "ПИН"
}
},
"display": {
"description": "Настройки за дисплея на устройството",
"title": "Настройки на дисплея",
"headingBold": {
"description": "Bolden the heading text",
"label": "Bold Heading"
},
"carouselDelay": {
"description": "Колко бързо да се превключва между прозорците",
"label": "Carousel Delay"
},
"compassNorthTop": {
"description": "Fix north to the top of compass",
"label": "Compass North Top"
},
"displayMode": {
"description": "Screen layout variant",
"label": "Display Mode"
},
"displayUnits": {
"description": "Показване на метрични или имперски мерни единици",
"label": "Display Units"
},
"flipScreen": {
"description": "Flip display 180 degrees",
"label": "Flip Screen"
},
"gpsDisplayUnits": {
"description": "Coordinate display format",
"label": "GPS Display Units"
},
"oledType": {
"description": "Type of OLED screen attached to the device",
"label": "OLED Type"
},
"screenTimeout": {
"description": "Turn off the display after this long",
"label": "Screen Timeout"
},
"twelveHourClock": {
"description": "Използване на 12-часов формат на часовника",
"label": "12-часов часовник"
},
"wakeOnTapOrMotion": {
"description": "Wake the device on tap or motion",
"label": "Wake on Tap or Motion"
}
},
"lora": {
"title": "Настройки на Mesh",
"description": "Settings for the LoRa mesh",
"bandwidth": {
"description": "Широчина на канала в MHz",
"label": "Широчина на честотната лента"
},
"boostedRxGain": {
"description": "Boosted RX gain",
"label": "Boosted RX Gain"
},
"codingRate": {
"description": "The denominator of the coding rate",
"label": "Coding Rate"
},
"frequencyOffset": {
"description": "Frequency offset to correct for crystal calibration errors",
"label": "Отместване на честотата"
},
"frequencySlot": {
"description": "LoRa frequency channel number",
"label": "Честотен слот"
},
"hopLimit": {
"description": "Maximum number of hops",
"label": "Hop Limit"
},
"ignoreMqtt": {
"description": "Don't forward MQTT messages over the mesh",
"label": "Ignore MQTT"
},
"modemPreset": {
"description": "Използване на предварително настроен модем",
"label": "Предварително настроен модем"
},
"okToMqtt": {
"description": "When set to true, this configuration indicates that the user approves the packet to be uploaded to MQTT. If set to false, remote nodes are requested not to forward packets to MQTT",
"label": "OK to MQTT"
},
"overrideDutyCycle": {
"description": "Override Duty Cycle",
"label": "Override Duty Cycle"
},
"overrideFrequency": {
"description": "Override frequency",
"label": "Override Frequency"
},
"region": {
"description": "Sets the region for your node",
"label": "Регион"
},
"spreadingFactor": {
"description": "Indicates the number of chirps per symbol",
"label": "Spreading Factor"
},
"transmitEnabled": {
"description": "Активиране/дезактивиране на предаването (TX) от LoRa радиото",
"label": "Предаването е активирано"
},
"transmitPower": {
"description": "Максимална мощност на предаване",
"label": "Мощност на предаване"
},
"usePreset": {
"description": "Use one of the predefined modem presets",
"label": "Използване на предварително зададени настройки"
},
"meshSettings": {
"description": "Settings for the LoRa mesh",
"label": "Настройки на Mesh"
},
"waveformSettings": {
"description": "Settings for the LoRa waveform",
"label": "Waveform Settings"
},
"radioSettings": {
"label": "Настройки на радиото",
"description": "Настройки за LoRa радиото"
}
},
"network": {
"title": "Конфигурация на WiFi",
"description": "Конфигурация на WiFi радиото",
"note": "Забележка: Някои устройства (ESP32) не могат да използват едновременно Bluetooth и WiFi.",
"addressMode": {
"description": "Address assignment selection",
"label": "Address Mode"
},
"dns": {
"description": "DNS сървър",
"label": "DNS"
},
"ethernetEnabled": {
"description": "Активиране или дезактивиране на Ethernet порта",
"label": "Активиран"
},
"gateway": {
"description": "Шлюз по подразбиране",
"label": "Шлюз"
},
"ip": {
"description": "IP адрес",
"label": "IP"
},
"psk": {
"description": "Парола за мрежата",
"label": "PSK"
},
"ssid": {
"description": "Име на мрежата",
"label": "SSID"
},
"subnet": {
"description": "Subnet Mask",
"label": "Subnet"
},
"wifiEnabled": {
"description": "Активиране или дезактивиране на WiFi радиото",
"label": "Активиран"
},
"meshViaUdp": {
"label": "Mesh via UDP"
},
"ntpServer": {
"label": "NTP сървър"
},
"rsyslogServer": {
"label": "Rsyslog Server"
},
"ethernetConfigSettings": {
"description": "Ethernet port configuration",
"label": "Конфигурация на Ethernet "
},
"ipConfigSettings": {
"description": "Конфигуриране на IP",
"label": "Конфигурация на IP"
},
"ntpConfigSettings": {
"description": "Конфигуриране на NTP",
"label": "Конфигурация на NTP"
},
"rsyslogConfigSettings": {
"description": "Rsyslog configuration",
"label": "Rsyslog Config"
},
"udpConfigSettings": {
"description": "UDP over Mesh configuration",
"label": "Конфигурация на UDP"
}
},
"position": {
"title": "Настройки на позицията",
"description": "Настройки за модула за позиция",
"broadcastInterval": {
"description": "How often your position is sent out over the mesh",
"label": "Broadcast Interval"
},
"enablePin": {
"description": "GPS module enable pin override",
"label": "Enable Pin"
},
"fixedPosition": {
"description": "Don't report GPS position, but a manually-specified one",
"label": "Фиксирана позиция"
},
"gpsMode": {
"description": "Configure whether device GPS is Enabled, Disabled, or Not Present",
"label": "Режим на GPS"
},
"gpsUpdateInterval": {
"description": "How often a GPS fix should be acquired",
"label": "Интервал на актуализиране на GPS"
},
"positionFlags": {
"description": "Optional fields to include when assembling position messages. The more fields are selected, the larger the message will be leading to longer airtime usage and a higher risk of packet loss.",
"label": "Position Flags"
},
"receivePin": {
"description": "GPS module RX pin override",
"label": "Receive Pin"
},
"smartPositionEnabled": {
"description": "Only send position when there has been a meaningful change in location",
"label": "Enable Smart Position"
},
"smartPositionMinDistance": {
"description": "Minimum distance (in meters) that must be traveled before a position update is sent",
"label": "Smart Position Minimum Distance"
},
"smartPositionMinInterval": {
"description": "Minimum interval (in seconds) that must pass before a position update is sent",
"label": "Smart Position Minimum Interval"
},
"transmitPin": {
"description": "GPS module TX pin override",
"label": "Transmit Pin"
},
"intervalsSettings": {
"description": "How often to send position updates",
"label": "Интервали"
},
"flags": {
"placeholder": "Select position flags...",
"altitude": "Надморска височина",
"altitudeGeoidalSeparation": "Altitude Geoidal Separation",
"altitudeMsl": "Altitude is Mean Sea Level",
"dop": "Dilution of precision (DOP) PDOP used by default",
"hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP",
"numSatellites": "Number of satellites",
"sequenceNumber": "Sequence number",
"timestamp": "Времево клеймо",
"unset": "Отказ",
"vehicleHeading": "Vehicle heading",
"vehicleSpeed": "Скорост на превозното средство"
}
},
"power": {
"adcMultiplierOverride": {
"description": "Used for tweaking battery voltage reading",
"label": "ADC Multiplier Override ratio"
},
"ina219Address": {
"description": "Address of the INA219 battery monitor",
"label": "INA219 Address"
},
"lightSleepDuration": {
"description": "How long the device will be in light sleep for",
"label": "Light Sleep Duration"
},
"minimumWakeTime": {
"description": "Minimum amount of time the device will stay awake for after receiving a packet",
"label": "Minimum Wake Time"
},
"noConnectionBluetoothDisabled": {
"description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long",
"label": "No Connection Bluetooth Disabled"
},
"powerSavingEnabled": {
"description": "Select if powered from a low-current source (i.e. solar), to minimize power consumption as much as possible.",
"label": "Активиране на енергоспестяващ режим"
},
"shutdownOnBatteryDelay": {
"description": "Automatically shutdown node after this long when on battery, 0 for indefinite",
"label": "Shutdown on battery delay"
},
"superDeepSleepDuration": {
"description": "How long the device will be in super deep sleep for",
"label": "Super Deep Sleep Duration"
},
"powerConfigSettings": {
"description": "Settings for the power module",
"label": "Конфигурация на захранването"
},
"sleepSettings": {
"description": "Sleep settings for the power module",
"label": "Sleep Settings"
}
},
"security": {
"description": "Settings for the Security configuration",
"title": "Насртойки на сигурността",
"button_backupKey": "Backup Key",
"adminChannelEnabled": {
"description": "Allow incoming device control over the insecure legacy admin channel",
"label": "Allow Legacy Admin"
},
"enableDebugLogApi": {
"description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth",
"label": "Enable Debug Log API"
},
"managed": {
"description": "If enabled, device configuration options are only able to be changed remotely by a Remote Admin node via admin messages. Do not enable this option unless at least one suitable Remote Admin node has been setup, and the public key is stored in one of the fields above.",
"label": "Managed"
},
"privateKey": {
"description": "Used to create a shared key with a remote device",
"label": "Частен ключ"
},
"publicKey": {
"description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key",
"label": "Публичен ключ"
},
"primaryAdminKey": {
"description": "The primary public key authorized to send admin messages to this node",
"label": "Primary Admin Key"
},
"secondaryAdminKey": {
"description": "The secondary public key authorized to send admin messages to this node",
"label": "Secondary Admin Key"
},
"serialOutputEnabled": {
"description": "Serial Console over the Stream API",
"label": "Serial Output Enabled"
},
"tertiaryAdminKey": {
"description": "The tertiary public key authorized to send admin messages to this node",
"label": "Tertiary Admin Key"
},
"adminSettings": {
"description": "Настройки за Admin",
"label": "Admin Settings"
},
"loggingSettings": {
"description": "Settings for Logging",
"label": "Logging Settings"
}
}
"page": {
"title": "Конфигурация",
"tabBluetooth": "Bluetooth",
"tabDevice": "Устройство",
"tabDisplay": "Дисплей",
"tabLora": "LoRa",
"tabNetwork": "Мрежа",
"tabPosition": "Позиция",
"tabPower": "Захранване",
"tabSecurity": "Сигурност"
},
"sidebar": {
"label": "Модули"
},
"device": {
"title": "Настройки на устройството",
"description": "Настройки за устройството",
"buttonPin": {
"description": "Button pin override",
"label": "Button Pin"
},
"buzzerPin": {
"description": "Buzzer pin override",
"label": "Buzzer Pin"
},
"disableTripleClick": {
"description": "Disable triple click",
"label": "Disable Triple Click"
},
"doubleTapAsButtonPress": {
"description": "Treat double tap as button press",
"label": "Double Tap as Button Press"
},
"ledHeartbeatDisabled": {
"description": "Disable default blinking LED",
"label": "LED Heartbeat Disabled"
},
"nodeInfoBroadcastInterval": {
"description": "How often to broadcast node info",
"label": "Node Info Broadcast Interval"
},
"posixTimezone": {
"description": "The POSIX timezone string for the device",
"label": "POSIX часова зона"
},
"rebroadcastMode": {
"description": "How to handle rebroadcasting",
"label": "Rebroadcast Mode"
},
"role": {
"description": "What role the device performs on the mesh",
"label": "Роля"
}
},
"bluetooth": {
"title": "Настройки за Bluetooth",
"description": "Настройки за Bluetooth модула",
"note": "Забележка: Някои устройства (ESP32) не могат да използват едновременно Bluetooth и WiFi.",
"enabled": {
"description": "Активиране или дезактивиране на Bluetooth",
"label": "Активиран"
},
"pairingMode": {
"description": "Поведение при избор на ПИН.",
"label": "Режим на сдвояване"
},
"pin": {
"description": "Pin to use when pairing",
"label": "ПИН"
}
},
"display": {
"description": "Настройки за дисплея на устройството",
"title": "Настройки на дисплея",
"headingBold": {
"description": "Bolden the heading text",
"label": "Bold Heading"
},
"carouselDelay": {
"description": "Колко бързо да се превключва между прозорците",
"label": "Carousel Delay"
},
"compassNorthTop": {
"description": "Fix north to the top of compass",
"label": "Compass North Top"
},
"displayMode": {
"description": "Screen layout variant",
"label": "Display Mode"
},
"displayUnits": {
"description": "Показване на метрични или имперски мерни единици",
"label": "Display Units"
},
"flipScreen": {
"description": "Flip display 180 degrees",
"label": "Flip Screen"
},
"gpsDisplayUnits": {
"description": "Coordinate display format",
"label": "GPS Display Units"
},
"oledType": {
"description": "Type of OLED screen attached to the device",
"label": "OLED Type"
},
"screenTimeout": {
"description": "Turn off the display after this long",
"label": "Screen Timeout"
},
"twelveHourClock": {
"description": "Използване на 12-часов формат на часовника",
"label": "12-часов часовник"
},
"wakeOnTapOrMotion": {
"description": "Wake the device on tap or motion",
"label": "Wake on Tap or Motion"
}
},
"lora": {
"title": "Настройки на Mesh",
"description": "Settings for the LoRa mesh",
"bandwidth": {
"description": "Широчина на канала в MHz",
"label": "Широчина на честотната лента"
},
"boostedRxGain": {
"description": "Boosted RX gain",
"label": "Boosted RX Gain"
},
"codingRate": {
"description": "The denominator of the coding rate",
"label": "Coding Rate"
},
"frequencyOffset": {
"description": "Frequency offset to correct for crystal calibration errors",
"label": "Отместване на честотата"
},
"frequencySlot": {
"description": "LoRa frequency channel number",
"label": "Честотен слот"
},
"hopLimit": {
"description": "Maximum number of hops",
"label": "Hop Limit"
},
"ignoreMqtt": {
"description": "Don't forward MQTT messages over the mesh",
"label": "Ignore MQTT"
},
"modemPreset": {
"description": "Използване на предварително настроен модем",
"label": "Предварително настроен модем"
},
"okToMqtt": {
"description": "When set to true, this configuration indicates that the user approves the packet to be uploaded to MQTT. If set to false, remote nodes are requested not to forward packets to MQTT",
"label": "OK to MQTT"
},
"overrideDutyCycle": {
"description": "Override Duty Cycle",
"label": "Override Duty Cycle"
},
"overrideFrequency": {
"description": "Override frequency",
"label": "Override Frequency"
},
"region": {
"description": "Sets the region for your node",
"label": "Регион"
},
"spreadingFactor": {
"description": "Indicates the number of chirps per symbol",
"label": "Spreading Factor"
},
"transmitEnabled": {
"description": "Активиране/дезактивиране на предаването (TX) от LoRa радиото",
"label": "Предаването е активирано"
},
"transmitPower": {
"description": "Максимална мощност на предаване",
"label": "Мощност на предаване"
},
"usePreset": {
"description": "Use one of the predefined modem presets",
"label": "Използване на предварително зададени настройки"
},
"meshSettings": {
"description": "Settings for the LoRa mesh",
"label": "Настройки на Mesh"
},
"waveformSettings": {
"description": "Settings for the LoRa waveform",
"label": "Waveform Settings"
},
"radioSettings": {
"label": "Настройки на радиото",
"description": "Настройки за LoRa радиото"
}
},
"network": {
"title": "Конфигурация на WiFi",
"description": "Конфигурация на WiFi радиото",
"note": "Забележка: Някои устройства (ESP32) не могат да използват едновременно Bluetooth и WiFi.",
"addressMode": {
"description": "Address assignment selection",
"label": "Address Mode"
},
"dns": {
"description": "DNS сървър",
"label": "DNS"
},
"ethernetEnabled": {
"description": "Активиране или дезактивиране на Ethernet порта",
"label": "Активиран"
},
"gateway": {
"description": "Шлюз по подразбиране",
"label": "Шлюз"
},
"ip": {
"description": "IP адрес",
"label": "IP"
},
"psk": {
"description": "Парола за мрежата",
"label": "PSK"
},
"ssid": {
"description": "Име на мрежата",
"label": "SSID"
},
"subnet": {
"description": "Subnet Mask",
"label": "Subnet"
},
"wifiEnabled": {
"description": "Активиране или дезактивиране на WiFi радиото",
"label": "Активиран"
},
"meshViaUdp": {
"label": "Mesh via UDP"
},
"ntpServer": {
"label": "NTP сървър"
},
"rsyslogServer": {
"label": "Rsyslog Server"
},
"ethernetConfigSettings": {
"description": "Ethernet port configuration",
"label": "Конфигурация на Ethernet "
},
"ipConfigSettings": {
"description": "Конфигуриране на IP",
"label": "Конфигурация на IP"
},
"ntpConfigSettings": {
"description": "Конфигуриране на NTP",
"label": "Конфигурация на NTP"
},
"rsyslogConfigSettings": {
"description": "Rsyslog configuration",
"label": "Rsyslog Config"
},
"udpConfigSettings": {
"description": "UDP over Mesh configuration",
"label": "Конфигурация на UDP"
}
},
"position": {
"title": "Настройки на позицията",
"description": "Настройки за модула за позиция",
"broadcastInterval": {
"description": "How often your position is sent out over the mesh",
"label": "Broadcast Interval"
},
"enablePin": {
"description": "GPS module enable pin override",
"label": "Enable Pin"
},
"fixedPosition": {
"description": "Don't report GPS position, but a manually-specified one",
"label": "Фиксирана позиция"
},
"gpsMode": {
"description": "Configure whether device GPS is Enabled, Disabled, or Not Present",
"label": "Режим на GPS"
},
"gpsUpdateInterval": {
"description": "How often a GPS fix should be acquired",
"label": "Интервал на актуализиране на GPS"
},
"positionFlags": {
"description": "Optional fields to include when assembling position messages. The more fields are selected, the larger the message will be leading to longer airtime usage and a higher risk of packet loss.",
"label": "Position Flags"
},
"receivePin": {
"description": "GPS module RX pin override",
"label": "Receive Pin"
},
"smartPositionEnabled": {
"description": "Only send position when there has been a meaningful change in location",
"label": "Enable Smart Position"
},
"smartPositionMinDistance": {
"description": "Minimum distance (in meters) that must be traveled before a position update is sent",
"label": "Smart Position Minimum Distance"
},
"smartPositionMinInterval": {
"description": "Minimum interval (in seconds) that must pass before a position update is sent",
"label": "Smart Position Minimum Interval"
},
"transmitPin": {
"description": "GPS module TX pin override",
"label": "Transmit Pin"
},
"intervalsSettings": {
"description": "How often to send position updates",
"label": "Интервали"
},
"flags": {
"placeholder": "Select position flags...",
"altitude": "Надморска височина",
"altitudeGeoidalSeparation": "Altitude Geoidal Separation",
"altitudeMsl": "Altitude is Mean Sea Level",
"dop": "Dilution of precision (DOP) PDOP used by default",
"hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP",
"numSatellites": "Number of satellites",
"sequenceNumber": "Sequence number",
"timestamp": "Времево клеймо",
"unset": "Отказ",
"vehicleHeading": "Vehicle heading",
"vehicleSpeed": "Скорост на превозното средство"
}
},
"power": {
"adcMultiplierOverride": {
"description": "Used for tweaking battery voltage reading",
"label": "ADC Multiplier Override ratio"
},
"ina219Address": {
"description": "Address of the INA219 battery monitor",
"label": "INA219 Address"
},
"lightSleepDuration": {
"description": "How long the device will be in light sleep for",
"label": "Light Sleep Duration"
},
"minimumWakeTime": {
"description": "Minimum amount of time the device will stay awake for after receiving a packet",
"label": "Minimum Wake Time"
},
"noConnectionBluetoothDisabled": {
"description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long",
"label": "No Connection Bluetooth Disabled"
},
"powerSavingEnabled": {
"description": "Select if powered from a low-current source (i.e. solar), to minimize power consumption as much as possible.",
"label": "Активиране на енергоспестяващ режим"
},
"shutdownOnBatteryDelay": {
"description": "Automatically shutdown node after this long when on battery, 0 for indefinite",
"label": "Shutdown on battery delay"
},
"superDeepSleepDuration": {
"description": "How long the device will be in super deep sleep for",
"label": "Super Deep Sleep Duration"
},
"powerConfigSettings": {
"description": "Settings for the power module",
"label": "Конфигурация на захранването"
},
"sleepSettings": {
"description": "Sleep settings for the power module",
"label": "Sleep Settings"
}
},
"security": {
"description": "Settings for the Security configuration",
"title": "Насртойки на сигурността",
"button_backupKey": "Backup Key",
"adminChannelEnabled": {
"description": "Allow incoming device control over the insecure legacy admin channel",
"label": "Allow Legacy Admin"
},
"enableDebugLogApi": {
"description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth",
"label": "Enable Debug Log API"
},
"managed": {
"description": "If enabled, device configuration options are only able to be changed remotely by a Remote Admin node via admin messages. Do not enable this option unless at least one suitable Remote Admin node has been setup, and the public key is stored in one of the fields above.",
"label": "Managed"
},
"privateKey": {
"description": "Used to create a shared key with a remote device",
"label": "Частен ключ"
},
"publicKey": {
"description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key",
"label": "Публичен ключ"
},
"primaryAdminKey": {
"description": "The primary public key authorized to send admin messages to this node",
"label": "Primary Admin Key"
},
"secondaryAdminKey": {
"description": "The secondary public key authorized to send admin messages to this node",
"label": "Secondary Admin Key"
},
"serialOutputEnabled": {
"description": "Serial Console over the Stream API",
"label": "Serial Output Enabled"
},
"tertiaryAdminKey": {
"description": "The tertiary public key authorized to send admin messages to this node",
"label": "Tertiary Admin Key"
},
"adminSettings": {
"description": "Настройки за Admin",
"label": "Admin Settings"
},
"loggingSettings": {
"description": "Settings for Logging",
"label": "Logging Settings"
}
}
}

View File

@@ -1,171 +1,171 @@
{
"deleteMessages": {
"description": "Това действие ще изчисти цялата история на съобщенията. Това не може да бъде отменено. Сигурни ли сте, че искате да продължите?",
"title": "Изчистване на всички съобщения"
},
"deviceName": {
"description": "Устройството ще се рестартира, след като конфигурацията бъде запазена.",
"longName": "Дълго име",
"shortName": "Кратко име",
"title": "Промяна на името на устройството"
},
"import": {
"description": "The current LoRa configuration will be overridden.",
"error": {
"invalidUrl": "Невалиден Meshtastic URL"
},
"channelPrefix": "Канал: ",
"channelSetUrl": "Channel Set/QR Code URL",
"channels": "Канали:",
"usePreset": "Use Preset?",
"title": "Import Channel Set"
},
"locationResponse": {
"altitude": "Надморска височина: ",
"coordinates": "Координати:",
"title": "Местоположение: {{identifier}}"
},
"pkiRegenerateDialog": {
"title": "Regenerate Pre-Shared Key?",
"description": "Are you sure you want to regenerate the pre-shared key?",
"regenerate": "Регенериране"
},
"newDeviceDialog": {
"title": "Свързване на ново устройство",
"https": "https",
"http": "http",
"tabHttp": "HTTP",
"tabBluetooth": "Bluetooth",
"tabSerial": "Serial",
"useHttps": "Използване на HTTPS",
"connecting": "Свързване...",
"connect": "Свързване",
"connectionFailedAlert": {
"title": "Връзката е неуспешна",
"descriptionPrefix": "Не може да се свърже с устройството.",
"httpsHint": "Ако използвате HTTPS, може да се наложи първо да приемете самоподписан сертификат. ",
"openLinkPrefix": "Моля, отворете",
"openLinkSuffix": "в нов раздел",
"acceptTlsWarningSuffix": "",
"learnMoreLink": "Научете повече"
},
"httpConnection": {
"label": "IP адрес/Име на хост",
"placeholder": "000.000.000.000 / meshtastic.local"
},
"serialConnection": {
"noDevicesPaired": "Все още няма сдвоени устройства.",
"newDeviceButton": "Ново устройство",
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
},
"bluetoothConnection": {
"noDevicesPaired": "Все още няма сдвоени устройства.",
"newDeviceButton": "Ново устройство"
},
"validation": {
"requiresWebBluetooth": "This connection type requires <0>Web Bluetooth</0>. Please use a supported browser, like Chrome or Edge.",
"requiresWebSerial": "This connection type requires <0>Web Serial</0>. Please use a supported browser, like Chrome or Edge.",
"requiresSecureContext": "This application requires a <0>secure context</0>. Please connect using HTTPS or localhost.",
"additionallyRequiresSecureContext": "Additionally, it requires a <0>secure context</0>. Please connect using HTTPS or localhost."
}
},
"nodeDetails": {
"message": "Съобщение",
"requestPosition": "Request Position",
"traceRoute": "Trace Route",
"airTxUtilization": "Air TX utilization",
"allRawMetrics": "All Raw Metrics:",
"batteryLevel": "Ниво на батерията",
"channelUtilization": "Използване на канала",
"details": "Подробности:",
"deviceMetrics": "Device Metrics:",
"hardware": "Хардуер: ",
"lastHeard": "Последно чут: ",
"nodeHexPrefix": "Node Hex: !",
"nodeNumber": "Номер на възела: ",
"position": "Позиция:",
"role": "Роля: ",
"uptime": "Време на работа: ",
"voltage": "Напрежение",
"title": "Node Details for {{identifier}}",
"ignoreNode": "Ignore node",
"removeNode": "Remove node",
"unignoreNode": "Unignore node"
},
"pkiBackup": {
"loseKeysWarning": "Ако загубите ключовете си, ще трябва да нулирате устройството си.",
"secureBackup": "Важно е да направите резервно копие на публичните и частните си ключове и да съхранявате резервното си копие сигурно!",
"footer": "=== КРАЙ НА КЛЮЧОВЕТЕ ===",
"header": "=== MESHTASTIC КЛЮЧОВЕ ЗА {{longName}} ({{shortName}}) ===",
"privateKey": "Частен ключ:",
"publicKey": "Публичен ключ:",
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
"title": "Backup Keys"
},
"pkiBackupReminder": {
"description": "We recommend backing up your key data regularly. Would you like to back up now?",
"title": "Backup Reminder",
"remindLaterPrefix": "Remind me in",
"remindNever": "Never remind me",
"backupNow": "Back up now"
},
"pkiRegenerate": {
"description": "Сигурни ли сте, че искате да регенерирате двойката ключове?",
"title": "Регенериране на двойката ключове"
},
"qr": {
"addChannels": "Добавяне на канали",
"replaceChannels": "Замяна на канали",
"description": "Текущата конфигурация на LoRa също ще бъде споделена.",
"sharableUrl": "Sharable URL",
"title": "Генериране на QR код"
},
"rebootOta": {
"title": "Планирано рестартиране",
"description": "Reboot the connected node after a delay into OTA (Over-the-Air) mode.",
"enterDelay": "Въведете забавяне (сек)",
"scheduled": "Насрочено е рестартиране"
},
"reboot": {
"title": "Планирано рестартиране",
"description": "Рестартиране на свързания възел след x минути."
},
"refreshKeys": {
"description": {
"acceptNewKeys": "This will remove the node from device and request new keys.",
"keyMismatchReasonSuffix": ". This is due to the remote node's current public key does not match the previously stored key for this node.",
"unableToSendDmPrefix": "Your node is unable to send a direct message to node: "
},
"acceptNewKeys": "Accept New Keys",
"title": "Keys Mismatch - {{identifier}}"
},
"removeNode": {
"description": "Сигурни ли сте, че искате да премахнете този възел?",
"title": "Премахване на възела?"
},
"shutdown": {
"title": "Планирано изключване",
"description": "Изключване на свързания възел след x минути."
},
"traceRoute": {
"routeToDestination": "Route to destination:",
"routeBack": "Route back:"
},
"tracerouteResponse": {
"title": "Traceroute: {{identifier}}"
},
"unsafeRoles": {
"confirmUnderstanding": "Да, знам какво правя",
"conjunction": " and the blog post about ",
"postamble": " and understand the implications of changing the role.",
"preamble": "I have read the ",
"choosingRightDeviceRole": "Choosing The Right Device Role",
"deviceRoleDocumentation": "Device Role Documentation",
"title": "Сигурни ли сте?"
},
"managedMode": {
"confirmUnderstanding": "Да, знам какво правя",
"title": "Сигурни ли сте?",
"description": "Enabling Managed Mode blocks client applications (including the web client) from writing configurations to a radio. Once enabled, radio configurations can <bold>only</bold> be changed through Remote Admin messages. This setting is not required for remote node administration."
}
"deleteMessages": {
"description": "Това действие ще изчисти цялата история на съобщенията. Това не може да бъде отменено. Сигурни ли сте, че искате да продължите?",
"title": "Изчистване на всички съобщения"
},
"deviceName": {
"description": "Устройството ще се рестартира, след като конфигурацията бъде запазена.",
"longName": "Дълго име",
"shortName": "Кратко име",
"title": "Промяна на името на устройството"
},
"import": {
"description": "The current LoRa configuration will be overridden.",
"error": {
"invalidUrl": "Невалиден Meshtastic URL"
},
"channelPrefix": "Канал: ",
"channelSetUrl": "Channel Set/QR Code URL",
"channels": "Канали:",
"usePreset": "Use Preset?",
"title": "Import Channel Set"
},
"locationResponse": {
"altitude": "Надморска височина: ",
"coordinates": "Координати:",
"title": "Местоположение: {{identifier}}"
},
"pkiRegenerateDialog": {
"title": "Regenerate Pre-Shared Key?",
"description": "Are you sure you want to regenerate the pre-shared key?",
"regenerate": "Регенериране"
},
"newDeviceDialog": {
"title": "Свързване на ново устройство",
"https": "https",
"http": "http",
"tabHttp": "HTTP",
"tabBluetooth": "Bluetooth",
"tabSerial": "Serial",
"useHttps": "Използване на HTTPS",
"connecting": "Свързване...",
"connect": "Свързване",
"connectionFailedAlert": {
"title": "Връзката е неуспешна",
"descriptionPrefix": "Не може да се свърже с устройството.",
"httpsHint": "Ако използвате HTTPS, може да се наложи първо да приемете самоподписан сертификат. ",
"openLinkPrefix": "Моля, отворете",
"openLinkSuffix": "в нов раздел",
"acceptTlsWarningSuffix": "",
"learnMoreLink": "Научете повече"
},
"httpConnection": {
"label": "IP адрес/Име на хост",
"placeholder": "000.000.000.000 / meshtastic.local"
},
"serialConnection": {
"noDevicesPaired": "Все още няма сдвоени устройства.",
"newDeviceButton": "Ново устройство",
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
},
"bluetoothConnection": {
"noDevicesPaired": "Все още няма сдвоени устройства.",
"newDeviceButton": "Ново устройство"
},
"validation": {
"requiresWebBluetooth": "This connection type requires <0>Web Bluetooth</0>. Please use a supported browser, like Chrome or Edge.",
"requiresWebSerial": "This connection type requires <0>Web Serial</0>. Please use a supported browser, like Chrome or Edge.",
"requiresSecureContext": "This application requires a <0>secure context</0>. Please connect using HTTPS or localhost.",
"additionallyRequiresSecureContext": "Additionally, it requires a <0>secure context</0>. Please connect using HTTPS or localhost."
}
},
"nodeDetails": {
"message": "Съобщение",
"requestPosition": "Request Position",
"traceRoute": "Trace Route",
"airTxUtilization": "Air TX utilization",
"allRawMetrics": "All Raw Metrics:",
"batteryLevel": "Ниво на батерията",
"channelUtilization": "Използване на канала",
"details": "Подробности:",
"deviceMetrics": "Device Metrics:",
"hardware": "Хардуер: ",
"lastHeard": "Последно чут: ",
"nodeHexPrefix": "Node Hex: !",
"nodeNumber": "Номер на възела: ",
"position": "Позиция:",
"role": "Роля: ",
"uptime": "Време на работа: ",
"voltage": "Напрежение",
"title": "Node Details for {{identifier}}",
"ignoreNode": "Ignore node",
"removeNode": "Remove node",
"unignoreNode": "Unignore node"
},
"pkiBackup": {
"loseKeysWarning": "Ако загубите ключовете си, ще трябва да нулирате устройството си.",
"secureBackup": "Важно е да направите резервно копие на публичните и частните си ключове и да съхранявате резервното си копие сигурно!",
"footer": "=== КРАЙ НА КЛЮЧОВЕТЕ ===",
"header": "=== MESHTASTIC КЛЮЧОВЕ ЗА {{longName}} ({{shortName}}) ===",
"privateKey": "Частен ключ:",
"publicKey": "Публичен ключ:",
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
"title": "Backup Keys"
},
"pkiBackupReminder": {
"description": "We recommend backing up your key data regularly. Would you like to back up now?",
"title": "Backup Reminder",
"remindLaterPrefix": "Remind me in",
"remindNever": "Never remind me",
"backupNow": "Back up now"
},
"pkiRegenerate": {
"description": "Сигурни ли сте, че искате да регенерирате двойката ключове?",
"title": "Регенериране на двойката ключове"
},
"qr": {
"addChannels": "Добавяне на канали",
"replaceChannels": "Замяна на канали",
"description": "Текущата конфигурация на LoRa също ще бъде споделена.",
"sharableUrl": "Sharable URL",
"title": "Генериране на QR код"
},
"rebootOta": {
"title": "Планирано рестартиране",
"description": "Reboot the connected node after a delay into OTA (Over-the-Air) mode.",
"enterDelay": "Въведете забавяне (сек)",
"scheduled": "Насрочено е рестартиране"
},
"reboot": {
"title": "Планирано рестартиране",
"description": "Рестартиране на свързания възел след x минути."
},
"refreshKeys": {
"description": {
"acceptNewKeys": "This will remove the node from device and request new keys.",
"keyMismatchReasonSuffix": ". This is due to the remote node's current public key does not match the previously stored key for this node.",
"unableToSendDmPrefix": "Your node is unable to send a direct message to node: "
},
"acceptNewKeys": "Accept New Keys",
"title": "Keys Mismatch - {{identifier}}"
},
"removeNode": {
"description": "Сигурни ли сте, че искате да премахнете този възел?",
"title": "Премахване на възела?"
},
"shutdown": {
"title": "Планирано изключване",
"description": "Изключване на свързания възел след x минути."
},
"traceRoute": {
"routeToDestination": "Route to destination:",
"routeBack": "Route back:"
},
"tracerouteResponse": {
"title": "Traceroute: {{identifier}}"
},
"unsafeRoles": {
"confirmUnderstanding": "Да, знам какво правя",
"conjunction": " and the blog post about ",
"postamble": " and understand the implications of changing the role.",
"preamble": "I have read the ",
"choosingRightDeviceRole": "Choosing The Right Device Role",
"deviceRoleDocumentation": "Device Role Documentation",
"title": "Сигурни ли сте?"
},
"managedMode": {
"confirmUnderstanding": "Да, знам какво правя",
"title": "Сигурни ли сте?",
"description": "Enabling Managed Mode blocks client applications (including the web client) from writing configurations to a radio. Once enabled, radio configurations can <bold>only</bold> be changed through Remote Admin messages. This setting is not required for remote node administration."
}
}

View File

@@ -1,39 +1,39 @@
{
"page": {
"title": "Съобщения: {{chatName}}",
"placeholder": "Enter Message"
},
"emptyState": {
"title": "Изберете чат",
"text": "Все още няма съобщения."
},
"selectChatPrompt": {
"text": "Select a channel or node to start messaging."
},
"sendMessage": {
"placeholder": "Въведете Вашето съобщение тук...",
"sendButton": "Изпрати"
},
"actionsMenu": {
"addReactionLabel": "Добавяне на реакция",
"replyLabel": "Отговор"
},
"deliveryStatus": {
"delivered": {
"label": "Съобщението е доставено",
"displayText": "Съобщението е доставено"
},
"failed": {
"label": "Message delivery failed",
"displayText": "Delivery failed"
},
"unknown": {
"label": "Статусът на съобщението е неизвестен",
"displayText": "Неизвестно състояние"
},
"waiting": {
"label": "Sending message",
"displayText": "Waiting for delivery"
}
}
"page": {
"title": "Съобщения: {{chatName}}",
"placeholder": "Enter Message"
},
"emptyState": {
"title": "Изберете чат",
"text": "Все още няма съобщения."
},
"selectChatPrompt": {
"text": "Select a channel or node to start messaging."
},
"sendMessage": {
"placeholder": "Въведете Вашето съобщение тук...",
"sendButton": "Изпрати"
},
"actionsMenu": {
"addReactionLabel": "Добавяне на реакция",
"replyLabel": "Отговор"
},
"deliveryStatus": {
"delivered": {
"label": "Съобщението е доставено",
"displayText": "Съобщението е доставено"
},
"failed": {
"label": "Message delivery failed",
"displayText": "Delivery failed"
},
"unknown": {
"label": "Статусът на съобщението е неизвестен",
"displayText": "Неизвестно състояние"
},
"waiting": {
"label": "Sending message",
"displayText": "Waiting for delivery"
}
}
}

View File

@@ -1,448 +1,448 @@
{
"page": {
"tabAmbientLighting": "Ambient Lighting",
"tabAudio": "Аудио",
"tabCannedMessage": "Canned",
"tabDetectionSensor": "Detection Sensor",
"tabExternalNotification": "Ext Notif",
"tabMqtt": "MQTT",
"tabNeighborInfo": "Neighbor Info",
"tabPaxcounter": "Paxcounter",
"tabRangeTest": "Range Test",
"tabSerial": "Serial",
"tabStoreAndForward": "S&F",
"tabTelemetry": "Телеметрия"
},
"ambientLighting": {
"title": "Ambient Lighting Settings",
"description": "Settings for the Ambient Lighting module",
"ledState": {
"label": "LED State",
"description": "Sets LED to on or off"
},
"current": {
"label": "Current",
"description": "Sets the current for the LED output. Default is 10"
},
"red": {
"label": "Червен",
"description": "Sets the red LED level. Values are 0-255"
},
"green": {
"label": "Зелен",
"description": "Sets the green LED level. Values are 0-255"
},
"blue": {
"label": "Син",
"description": "Sets the blue LED level. Values are 0-255"
}
},
"audio": {
"title": "Настройки на аудиото",
"description": "Настройки за аудио модула",
"codec2Enabled": {
"label": "Codec 2 е активиран",
"description": "Enable Codec 2 audio encoding"
},
"pttPin": {
"label": "PTT Pin",
"description": "GPIO pin to use for PTT"
},
"bitrate": {
"label": "Bitrate",
"description": "Bitrate to use for audio encoding"
},
"i2sWs": {
"label": "i2S WS",
"description": "GPIO pin to use for i2S WS"
},
"i2sSd": {
"label": "i2S SD",
"description": "GPIO pin to use for i2S SD"
},
"i2sDin": {
"label": "i2S DIN",
"description": "GPIO pin to use for i2S DIN"
},
"i2sSck": {
"label": "i2S SCK",
"description": "GPIO pin to use for i2S SCK"
}
},
"cannedMessage": {
"title": "Canned Message Settings",
"description": "Settings for the Canned Message module",
"moduleEnabled": {
"label": "Модулът е активиран",
"description": "Enable Canned Message"
},
"rotary1Enabled": {
"label": "Ротационен енкодер #1 е активиран",
"description": "Активиране на ротационния енкодер"
},
"inputbrokerPinA": {
"label": "Encoder Pin A",
"description": "GPIO Pin Value (1-39) For encoder port A"
},
"inputbrokerPinB": {
"label": "Encoder Pin B",
"description": "GPIO Pin Value (1-39) For encoder port B"
},
"inputbrokerPinPress": {
"label": "Encoder Pin Press",
"description": "GPIO Pin Value (1-39) For encoder Press"
},
"inputbrokerEventCw": {
"label": "Clockwise event",
"description": "Select input event."
},
"inputbrokerEventCcw": {
"label": "Counter Clockwise event",
"description": "Select input event."
},
"inputbrokerEventPress": {
"label": "Press event",
"description": "Select input event"
},
"updown1Enabled": {
"label": "Up Down enabled",
"description": "Enable the up / down encoder"
},
"allowInputSource": {
"label": "Allow Input Source",
"description": "Изберете от: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
},
"sendBell": {
"label": "Send Bell",
"description": "Sends a bell character with each message"
}
},
"detectionSensor": {
"title": "Detection Sensor Settings",
"description": "Settings for the Detection Sensor module",
"enabled": {
"label": "Активиран",
"description": "Enable or disable Detection Sensor Module"
},
"minimumBroadcastSecs": {
"label": "Minimum Broadcast Seconds",
"description": "The interval in seconds of how often we can send a message to the mesh when a state change is detected"
},
"stateBroadcastSecs": {
"label": "State Broadcast Seconds",
"description": "The interval in seconds of how often we should send a message to the mesh with the current state regardless of changes"
},
"sendBell": {
"label": "Send Bell",
"description": "Send ASCII bell with alert message"
},
"name": {
"label": "Приятелско име",
"description": "Използва се за форматиране на съобщението, изпратено до mesh, максимум 20 знака"
},
"monitorPin": {
"label": "Monitor Pin",
"description": "The GPIO pin to monitor for state changes"
},
"detectionTriggerType": {
"label": "Detection Triggered Type",
"description": "The type of trigger event to be used"
},
"usePullup": {
"label": "Use Pullup",
"description": "Whether or not use INPUT_PULLUP mode for GPIO pin"
}
},
"externalNotification": {
"title": "External Notification Settings",
"description": "Configure the external notification module",
"enabled": {
"label": "Модулът е активиран",
"description": "Enable External Notification"
},
"outputMs": {
"label": "Output MS",
"description": "Output MS"
},
"output": {
"label": "Output",
"description": "Output"
},
"outputVibra": {
"label": "Output Vibrate",
"description": "Output Vibrate"
},
"outputBuzzer": {
"label": "Output Buzzer",
"description": "Output Buzzer"
},
"active": {
"label": "Active",
"description": "Active"
},
"alertMessage": {
"label": "Предупредително съобщение",
"description": "Предупредително съобщение"
},
"alertMessageVibra": {
"label": "Alert Message Vibrate",
"description": "Alert Message Vibrate"
},
"alertMessageBuzzer": {
"label": "Alert Message Buzzer",
"description": "Alert Message Buzzer"
},
"alertBell": {
"label": "Alert Bell",
"description": "Should an alert be triggered when receiving an incoming bell?"
},
"alertBellVibra": {
"label": "Alert Bell Vibrate",
"description": "Alert Bell Vibrate"
},
"alertBellBuzzer": {
"label": "Alert Bell Buzzer",
"description": "Alert Bell Buzzer"
},
"usePwm": {
"label": "Use PWM",
"description": "Use PWM"
},
"nagTimeout": {
"label": "Nag Timeout",
"description": "Nag Timeout"
},
"useI2sAsBuzzer": {
"label": "Use I²S Pin as Buzzer",
"description": "Designate I²S Pin as Buzzer Output"
}
},
"mqtt": {
"title": "Настройки на MQTT",
"description": "Настройки за MQTT модула",
"enabled": {
"label": "Активиран",
"description": "Активиране или дезактивиране на MQTT"
},
"address": {
"label": "Адрес на MQTT сървъра",
"description": "Адрес на MQTT сървъра, който да се използва за сървъри по подразбиране/персонализирани сървъри"
},
"username": {
"label": "Потребителско име за MQTT",
"description": "Потребителско име за MQTT, което да се използва за сървъри по подразбиране/персонализирани сървъри"
},
"password": {
"label": "Парола за MQTT",
"description": "Парола за MQTT, която да се използва за сървъри по подразбиране/персонализирани сървъри"
},
"encryptionEnabled": {
"label": "Криптирането е активирано",
"description": "Enable or disable MQTT encryption. Note: All messages are sent to the MQTT broker unencrypted if this option is not enabled, even when your uplink channels have encryption keys set. This includes position data."
},
"jsonEnabled": {
"label": "JSON е активиран",
"description": "Whether to send/consume JSON packets on MQTT"
},
"tlsEnabled": {
"label": "TLS е активиран",
"description": "Активиране или дезактивиране на TLS"
},
"root": {
"label": "Root topic",
"description": "MQTT root topic to use for default/custom servers"
},
"proxyToClientEnabled": {
"label": "MQTT Client Proxy Enabled",
"description": "Utilizes the network connection to proxy MQTT messages to the client."
},
"mapReportingEnabled": {
"label": "Map Reporting Enabled",
"description": "Your node will periodically send an unencrypted map report packet to the configured MQTT server, this includes id, short and long name, approximate location, hardware model, role, firmware version, LoRa region, modem preset and primary channel name."
},
"mapReportSettings": {
"publishIntervalSecs": {
"label": "Map Report Publish Interval (s)",
"description": "Interval in seconds to publish map reports"
},
"positionPrecision": {
"label": "Приблизително местоположение",
"description": "Position shared will be accurate within this distance",
"options": {
"metric_km23": "Within 23 km",
"metric_km12": "Within 12 km",
"metric_km5_8": "Within 5.8 km",
"metric_km2_9": "Within 2.9 km",
"metric_km1_5": "Within 1.5 km",
"metric_m700": "Within 700 m",
"metric_m350": "Within 350 m",
"metric_m200": "Within 200 m",
"metric_m90": "Within 90 m",
"metric_m50": "Within 50 m",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
}
},
"neighborInfo": {
"title": "Neighbor Info Settings",
"description": "Settings for the Neighbor Info module",
"enabled": {
"label": "Активиран",
"description": "Enable or disable Neighbor Info Module"
},
"updateInterval": {
"label": "Update Interval",
"description": "Interval in seconds of how often we should try to send our Neighbor Info to the mesh"
}
},
"paxcounter": {
"title": "Paxcounter Settings",
"description": "Настройки за модула Paxcounter",
"enabled": {
"label": "Модулът е активиран",
"description": "Активиране на Paxcounter"
},
"paxcounterUpdateInterval": {
"label": "Update Interval (seconds)",
"description": "How long to wait between sending paxcounter packets"
},
"wifiThreshold": {
"label": "WiFi RSSI Threshold",
"description": "At what WiFi RSSI level should the counter increase. Defaults to -80."
},
"bleThreshold": {
"label": "BLE RSSI Threshold",
"description": "At what BLE RSSI level should the counter increase. Defaults to -80."
}
},
"rangeTest": {
"title": "Range Test Settings",
"description": "Settings for the Range Test module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Range Test"
},
"sender": {
"label": "Message Interval",
"description": "How long to wait between sending test packets"
},
"save": {
"label": "Save CSV to storage",
"description": "Само ESP32"
}
},
"serial": {
"title": "Serial Settings",
"description": "Settings for the Serial module",
"enabled": {
"label": "Модулът е активиран",
"description": "Enable Serial output"
},
"echo": {
"label": "Echo",
"description": "Any packets you send will be echoed back to your device"
},
"rxd": {
"label": "Receive Pin",
"description": "Set the GPIO pin to the RXD pin you have set up."
},
"txd": {
"label": "Transmit Pin",
"description": "Set the GPIO pin to the TXD pin you have set up."
},
"baud": {
"label": "Baud Rate",
"description": "The serial baud rate"
},
"timeout": {
"label": "Timeout",
"description": "Seconds to wait before we consider your packet as 'done'"
},
"mode": {
"label": "Режим",
"description": "Избор на режим"
},
"overrideConsoleSerialPort": {
"label": "Override Console Serial Port",
"description": "If you have a serial port connected to the console, this will override it."
}
},
"storeForward": {
"title": "Store & Forward Settings",
"description": "Settings for the Store & Forward module",
"enabled": {
"label": "Модулът е активиран",
"description": "Enable Store & Forward"
},
"heartbeat": {
"label": "Heartbeat Enabled",
"description": "Enable Store & Forward heartbeat"
},
"records": {
"label": "Брой записи",
"description": "Number of records to store"
},
"historyReturnMax": {
"label": "History return max",
"description": "Max number of records to return"
},
"historyReturnWindow": {
"label": "History return window",
"description": "Max number of records to return"
}
},
"telemetry": {
"title": "Настройки на телеметрията",
"description": "Настройки за модула за телеметрия",
"deviceUpdateInterval": {
"label": "Device Metrics",
"description": "Device metrics update interval (seconds)"
},
"environmentUpdateInterval": {
"label": "Environment metrics update interval (seconds)",
"description": ""
},
"environmentMeasurementEnabled": {
"label": "Модулът е активиран",
"description": "Enable the Environment Telemetry"
},
"environmentScreenEnabled": {
"label": "Displayed on Screen",
"description": "Show the Telemetry Module on the OLED"
},
"environmentDisplayFahrenheit": {
"label": "Показване на Фаренхайт",
"description": "Показване на температурата във Фаренхайт"
},
"airQualityEnabled": {
"label": "Качество на въздуха е активирано",
"description": "Активиране на телеметрията за качеството на въздуха"
},
"airQualityInterval": {
"label": "Air Quality Update Interval",
"description": "How often to send Air Quality data over the mesh"
},
"powerMeasurementEnabled": {
"label": "Power Measurement Enabled",
"description": "Enable the Power Measurement Telemetry"
},
"powerUpdateInterval": {
"label": "Power Update Interval",
"description": "How often to send Power data over the mesh"
},
"powerScreenEnabled": {
"label": "Power Screen Enabled",
"description": "Enable the Power Telemetry Screen"
}
}
"page": {
"tabAmbientLighting": "Ambient Lighting",
"tabAudio": "Аудио",
"tabCannedMessage": "Canned",
"tabDetectionSensor": "Detection Sensor",
"tabExternalNotification": "Ext Notif",
"tabMqtt": "MQTT",
"tabNeighborInfo": "Neighbor Info",
"tabPaxcounter": "Paxcounter",
"tabRangeTest": "Range Test",
"tabSerial": "Serial",
"tabStoreAndForward": "S&F",
"tabTelemetry": "Телеметрия"
},
"ambientLighting": {
"title": "Ambient Lighting Settings",
"description": "Settings for the Ambient Lighting module",
"ledState": {
"label": "LED State",
"description": "Sets LED to on or off"
},
"current": {
"label": "Current",
"description": "Sets the current for the LED output. Default is 10"
},
"red": {
"label": "Червен",
"description": "Sets the red LED level. Values are 0-255"
},
"green": {
"label": "Зелен",
"description": "Sets the green LED level. Values are 0-255"
},
"blue": {
"label": "Син",
"description": "Sets the blue LED level. Values are 0-255"
}
},
"audio": {
"title": "Настройки на аудиото",
"description": "Настройки за аудио модула",
"codec2Enabled": {
"label": "Codec 2 е активиран",
"description": "Enable Codec 2 audio encoding"
},
"pttPin": {
"label": "PTT Pin",
"description": "GPIO pin to use for PTT"
},
"bitrate": {
"label": "Bitrate",
"description": "Bitrate to use for audio encoding"
},
"i2sWs": {
"label": "i2S WS",
"description": "GPIO pin to use for i2S WS"
},
"i2sSd": {
"label": "i2S SD",
"description": "GPIO pin to use for i2S SD"
},
"i2sDin": {
"label": "i2S DIN",
"description": "GPIO pin to use for i2S DIN"
},
"i2sSck": {
"label": "i2S SCK",
"description": "GPIO pin to use for i2S SCK"
}
},
"cannedMessage": {
"title": "Canned Message Settings",
"description": "Settings for the Canned Message module",
"moduleEnabled": {
"label": "Модулът е активиран",
"description": "Enable Canned Message"
},
"rotary1Enabled": {
"label": "Ротационен енкодер #1 е активиран",
"description": "Активиране на ротационния енкодер"
},
"inputbrokerPinA": {
"label": "Encoder Pin A",
"description": "GPIO Pin Value (1-39) For encoder port A"
},
"inputbrokerPinB": {
"label": "Encoder Pin B",
"description": "GPIO Pin Value (1-39) For encoder port B"
},
"inputbrokerPinPress": {
"label": "Encoder Pin Press",
"description": "GPIO Pin Value (1-39) For encoder Press"
},
"inputbrokerEventCw": {
"label": "Clockwise event",
"description": "Select input event."
},
"inputbrokerEventCcw": {
"label": "Counter Clockwise event",
"description": "Select input event."
},
"inputbrokerEventPress": {
"label": "Press event",
"description": "Select input event"
},
"updown1Enabled": {
"label": "Up Down enabled",
"description": "Enable the up / down encoder"
},
"allowInputSource": {
"label": "Allow Input Source",
"description": "Изберете от: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
},
"sendBell": {
"label": "Send Bell",
"description": "Sends a bell character with each message"
}
},
"detectionSensor": {
"title": "Detection Sensor Settings",
"description": "Settings for the Detection Sensor module",
"enabled": {
"label": "Активиран",
"description": "Enable or disable Detection Sensor Module"
},
"minimumBroadcastSecs": {
"label": "Minimum Broadcast Seconds",
"description": "The interval in seconds of how often we can send a message to the mesh when a state change is detected"
},
"stateBroadcastSecs": {
"label": "State Broadcast Seconds",
"description": "The interval in seconds of how often we should send a message to the mesh with the current state regardless of changes"
},
"sendBell": {
"label": "Send Bell",
"description": "Send ASCII bell with alert message"
},
"name": {
"label": "Приятелско име",
"description": "Използва се за форматиране на съобщението, изпратено до mesh, максимум 20 знака"
},
"monitorPin": {
"label": "Monitor Pin",
"description": "The GPIO pin to monitor for state changes"
},
"detectionTriggerType": {
"label": "Detection Triggered Type",
"description": "The type of trigger event to be used"
},
"usePullup": {
"label": "Use Pullup",
"description": "Whether or not use INPUT_PULLUP mode for GPIO pin"
}
},
"externalNotification": {
"title": "External Notification Settings",
"description": "Configure the external notification module",
"enabled": {
"label": "Модулът е активиран",
"description": "Enable External Notification"
},
"outputMs": {
"label": "Output MS",
"description": "Output MS"
},
"output": {
"label": "Output",
"description": "Output"
},
"outputVibra": {
"label": "Output Vibrate",
"description": "Output Vibrate"
},
"outputBuzzer": {
"label": "Output Buzzer",
"description": "Output Buzzer"
},
"active": {
"label": "Active",
"description": "Active"
},
"alertMessage": {
"label": "Предупредително съобщение",
"description": "Предупредително съобщение"
},
"alertMessageVibra": {
"label": "Alert Message Vibrate",
"description": "Alert Message Vibrate"
},
"alertMessageBuzzer": {
"label": "Alert Message Buzzer",
"description": "Alert Message Buzzer"
},
"alertBell": {
"label": "Alert Bell",
"description": "Should an alert be triggered when receiving an incoming bell?"
},
"alertBellVibra": {
"label": "Alert Bell Vibrate",
"description": "Alert Bell Vibrate"
},
"alertBellBuzzer": {
"label": "Alert Bell Buzzer",
"description": "Alert Bell Buzzer"
},
"usePwm": {
"label": "Use PWM",
"description": "Use PWM"
},
"nagTimeout": {
"label": "Nag Timeout",
"description": "Nag Timeout"
},
"useI2sAsBuzzer": {
"label": "Use I²S Pin as Buzzer",
"description": "Designate I²S Pin as Buzzer Output"
}
},
"mqtt": {
"title": "Настройки на MQTT",
"description": "Настройки за MQTT модула",
"enabled": {
"label": "Активиран",
"description": "Активиране или дезактивиране на MQTT"
},
"address": {
"label": "Адрес на MQTT сървъра",
"description": "Адрес на MQTT сървъра, който да се използва за сървъри по подразбиране/персонализирани сървъри"
},
"username": {
"label": "Потребителско име за MQTT",
"description": "Потребителско име за MQTT, което да се използва за сървъри по подразбиране/персонализирани сървъри"
},
"password": {
"label": "Парола за MQTT",
"description": "Парола за MQTT, която да се използва за сървъри по подразбиране/персонализирани сървъри"
},
"encryptionEnabled": {
"label": "Криптирането е активирано",
"description": "Enable or disable MQTT encryption. Note: All messages are sent to the MQTT broker unencrypted if this option is not enabled, even when your uplink channels have encryption keys set. This includes position data."
},
"jsonEnabled": {
"label": "JSON е активиран",
"description": "Whether to send/consume JSON packets on MQTT"
},
"tlsEnabled": {
"label": "TLS е активиран",
"description": "Активиране или дезактивиране на TLS"
},
"root": {
"label": "Root topic",
"description": "MQTT root topic to use for default/custom servers"
},
"proxyToClientEnabled": {
"label": "MQTT Client Proxy Enabled",
"description": "Utilizes the network connection to proxy MQTT messages to the client."
},
"mapReportingEnabled": {
"label": "Map Reporting Enabled",
"description": "Your node will periodically send an unencrypted map report packet to the configured MQTT server, this includes id, short and long name, approximate location, hardware model, role, firmware version, LoRa region, modem preset and primary channel name."
},
"mapReportSettings": {
"publishIntervalSecs": {
"label": "Map Report Publish Interval (s)",
"description": "Interval in seconds to publish map reports"
},
"positionPrecision": {
"label": "Приблизително местоположение",
"description": "Position shared will be accurate within this distance",
"options": {
"metric_km23": "Within 23 km",
"metric_km12": "Within 12 km",
"metric_km5_8": "Within 5.8 km",
"metric_km2_9": "Within 2.9 km",
"metric_km1_5": "Within 1.5 km",
"metric_m700": "Within 700 m",
"metric_m350": "Within 350 m",
"metric_m200": "Within 200 m",
"metric_m90": "Within 90 m",
"metric_m50": "Within 50 m",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
}
},
"neighborInfo": {
"title": "Neighbor Info Settings",
"description": "Settings for the Neighbor Info module",
"enabled": {
"label": "Активиран",
"description": "Enable or disable Neighbor Info Module"
},
"updateInterval": {
"label": "Update Interval",
"description": "Interval in seconds of how often we should try to send our Neighbor Info to the mesh"
}
},
"paxcounter": {
"title": "Paxcounter Settings",
"description": "Настройки за модула Paxcounter",
"enabled": {
"label": "Модулът е активиран",
"description": "Активиране на Paxcounter"
},
"paxcounterUpdateInterval": {
"label": "Update Interval (seconds)",
"description": "How long to wait between sending paxcounter packets"
},
"wifiThreshold": {
"label": "WiFi RSSI Threshold",
"description": "At what WiFi RSSI level should the counter increase. Defaults to -80."
},
"bleThreshold": {
"label": "BLE RSSI Threshold",
"description": "At what BLE RSSI level should the counter increase. Defaults to -80."
}
},
"rangeTest": {
"title": "Range Test Settings",
"description": "Settings for the Range Test module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Range Test"
},
"sender": {
"label": "Message Interval",
"description": "How long to wait between sending test packets"
},
"save": {
"label": "Save CSV to storage",
"description": "Само ESP32"
}
},
"serial": {
"title": "Serial Settings",
"description": "Settings for the Serial module",
"enabled": {
"label": "Модулът е активиран",
"description": "Enable Serial output"
},
"echo": {
"label": "Echo",
"description": "Any packets you send will be echoed back to your device"
},
"rxd": {
"label": "Receive Pin",
"description": "Set the GPIO pin to the RXD pin you have set up."
},
"txd": {
"label": "Transmit Pin",
"description": "Set the GPIO pin to the TXD pin you have set up."
},
"baud": {
"label": "Baud Rate",
"description": "The serial baud rate"
},
"timeout": {
"label": "Timeout",
"description": "Seconds to wait before we consider your packet as 'done'"
},
"mode": {
"label": "Режим",
"description": "Избор на режим"
},
"overrideConsoleSerialPort": {
"label": "Override Console Serial Port",
"description": "If you have a serial port connected to the console, this will override it."
}
},
"storeForward": {
"title": "Store & Forward Settings",
"description": "Settings for the Store & Forward module",
"enabled": {
"label": "Модулът е активиран",
"description": "Enable Store & Forward"
},
"heartbeat": {
"label": "Heartbeat Enabled",
"description": "Enable Store & Forward heartbeat"
},
"records": {
"label": "Брой записи",
"description": "Number of records to store"
},
"historyReturnMax": {
"label": "History return max",
"description": "Max number of records to return"
},
"historyReturnWindow": {
"label": "History return window",
"description": "Max number of records to return"
}
},
"telemetry": {
"title": "Настройки на телеметрията",
"description": "Настройки за модула за телеметрия",
"deviceUpdateInterval": {
"label": "Device Metrics",
"description": "Device metrics update interval (seconds)"
},
"environmentUpdateInterval": {
"label": "Environment metrics update interval (seconds)",
"description": ""
},
"environmentMeasurementEnabled": {
"label": "Модулът е активиран",
"description": "Enable the Environment Telemetry"
},
"environmentScreenEnabled": {
"label": "Displayed on Screen",
"description": "Show the Telemetry Module on the OLED"
},
"environmentDisplayFahrenheit": {
"label": "Показване на Фаренхайт",
"description": "Показване на температурата във Фаренхайт"
},
"airQualityEnabled": {
"label": "Качество на въздуха е активирано",
"description": "Активиране на телеметрията за качеството на въздуха"
},
"airQualityInterval": {
"label": "Air Quality Update Interval",
"description": "How often to send Air Quality data over the mesh"
},
"powerMeasurementEnabled": {
"label": "Power Measurement Enabled",
"description": "Enable the Power Measurement Telemetry"
},
"powerUpdateInterval": {
"label": "Power Update Interval",
"description": "How often to send Power data over the mesh"
},
"powerScreenEnabled": {
"label": "Power Screen Enabled",
"description": "Enable the Power Telemetry Screen"
}
}
}

View File

@@ -1,63 +1,63 @@
{
"nodeDetail": {
"publicKeyEnabled": {
"label": "Публичният ключ е активиран"
},
"noPublicKey": {
"label": "Няма публичен ключ"
},
"directMessage": {
"label": "Директно съобщение {{shortName}}"
},
"favorite": {
"label": "Любим",
"tooltip": "Добавяне или премахване на този възел от любимите ви"
},
"notFavorite": {
"label": "Не е любим"
},
"error": {
"label": "Грешка",
"text": "Възникна грешка при извличането на подробности за възела. Моля, опитайте отново по-късно."
},
"status": {
"heard": "Heard",
"mqtt": "MQTT"
},
"elevation": {
"label": "Elevation"
},
"channelUtil": {
"label": "Channel Util"
},
"airtimeUtil": {
"label": "Airtime Util"
}
},
"nodesTable": {
"headings": {
"longName": "Дълго име",
"connection": "Connection",
"lastHeard": "Последно чут",
"encryption": "Криптиране",
"model": "Модел",
"macAddress": "MAC адрес"
},
"connectionStatus": {
"direct": "Direct",
"away": "away",
"unknown": "-",
"viaMqtt": ", чрез MQTT"
},
"lastHeardStatus": {
"never": "Никога"
}
},
"actions": {
"added": "Добавен",
"removed": "Премахнат",
"ignoreNode": "Ignore Node",
"unignoreNode": "Unignore Node",
"requestPosition": "Request Position"
}
"nodeDetail": {
"publicKeyEnabled": {
"label": "Публичният ключ е активиран"
},
"noPublicKey": {
"label": "Няма публичен ключ"
},
"directMessage": {
"label": "Директно съобщение {{shortName}}"
},
"favorite": {
"label": "Любим",
"tooltip": "Добавяне или премахване на този възел от любимите ви"
},
"notFavorite": {
"label": "Не е любим"
},
"error": {
"label": "Грешка",
"text": "Възникна грешка при извличането на подробности за възела. Моля, опитайте отново по-късно."
},
"status": {
"heard": "Heard",
"mqtt": "MQTT"
},
"elevation": {
"label": "Elevation"
},
"channelUtil": {
"label": "Channel Util"
},
"airtimeUtil": {
"label": "Airtime Util"
}
},
"nodesTable": {
"headings": {
"longName": "Дълго име",
"connection": "Connection",
"lastHeard": "Последно чут",
"encryption": "Криптиране",
"model": "Модел",
"macAddress": "MAC адрес"
},
"connectionStatus": {
"direct": "Direct",
"away": "away",
"unknown": "-",
"viaMqtt": ", чрез MQTT"
},
"lastHeardStatus": {
"never": "Никога"
}
},
"actions": {
"added": "Добавен",
"removed": "Премахнат",
"ignoreNode": "Ignore Node",
"unignoreNode": "Unignore Node",
"requestPosition": "Request Position"
}
}

View File

@@ -1,228 +1,228 @@
{
"navigation": {
"title": "Навигация",
"messages": "Съобщения",
"map": "Карта",
"config": "Конфигурация",
"radioConfig": "Конфигурация на радиото",
"moduleConfig": "Конфигурация на модула",
"channels": "Канали",
"nodes": "Възли"
},
"app": {
"title": "Meshtastic",
"logo": "Лого на Meshtastic"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Отваряне на страничната лента",
"close": "Затваряне на страничната лента"
}
},
"deviceInfo": {
"volts": "{{voltage}} волта",
"firmware": {
"title": "Фърмуер",
"version": "v{{version}}",
"buildDate": "Дата на компилация: {{date}}"
},
"deviceName": {
"title": "Име на устройството",
"changeName": "Промяна на името на устройството",
"placeholder": "Въвеждане на име на устройството"
},
"editDeviceName": "Редактиране на името на устройство"
}
},
"batteryStatus": {
"charging": "{{level}}% зареждане",
"pluggedIn": "Включен в ел. мрежа",
"title": "Батерия"
},
"search": {
"nodes": "Търсене на възли...",
"channels": "Търсене на канали...",
"commandPalette": "Търсене на команди..."
},
"toast": {
"positionRequestSent": {
"title": "Position request sent."
},
"requestingPosition": {
"title": "Requesting position, please wait..."
},
"sendingTraceroute": {
"title": "Sending Traceroute, please wait..."
},
"tracerouteSent": {
"title": "Traceroute sent."
},
"savedChannel": {
"title": "Запазен канал: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Чатът използва PKI криптиране."
},
"pskEncryption": {
"title": "Чатът използва PSK криптиране."
}
},
"configSaveError": {
"title": "Грешка при запазване на конфигурацията",
"description": "Възникна грешка при запазване на конфигурацията."
},
"validationError": {
"title": "Съществуват грешки в конфигурацията",
"description": "Моля, коригирайте грешките в конфигурацията, преди да я запазите."
},
"saveSuccess": {
"title": "Запазване на конфигурацията",
"description": "Промяната в конфигурацията {{case}} е запазена."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
}
},
"notifications": {
"copied": {
"label": "Копирано!"
},
"copyToClipboard": {
"label": "Копиране в клипборда"
},
"hidePassword": {
"label": "Скриване на паролата"
},
"showPassword": {
"label": "Показване на паролата"
},
"deliveryStatus": {
"delivered": "Delivered",
"failed": "Delivery Failed",
"waiting": "Изчакване",
"unknown": "Unknown"
}
},
"general": {
"label": "General"
},
"hardware": {
"label": "Хардуер"
},
"metrics": {
"label": "Metrics"
},
"role": {
"label": "Роля"
},
"filter": {
"label": "Филтър"
},
"advanced": {
"label": "Advanced"
},
"clearInput": {
"label": "Clear input"
},
"resetFilters": {
"label": "Нулиране на филтрите"
},
"nodeName": {
"label": "Име/номер на възел",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Airtime Utilization (%)"
},
"batteryLevel": {
"label": "Ниво на батерията (%)",
"labelText": "Ниво на батерията (%): {{value}}"
},
"batteryVoltage": {
"label": "Напрежение на батерията (V)",
"title": "Напрежение"
},
"channelUtilization": {
"label": "Използване на канала (%)"
},
"hops": {
"direct": "Direct",
"label": "Number of hops",
"text": "Number of hops: {{value}}"
},
"lastHeard": {
"label": "Последно чут",
"labelText": "Last heard: {{value}}",
"nowLabel": "Сега"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Любими"
},
"hide": {
"label": "Hide"
},
"showOnly": {
"label": "Show Only"
},
"viaMqtt": {
"label": "Свързан чрез MQTT"
},
"hopsUnknown": {
"label": "Unknown number of hops"
},
"showUnheard": {
"label": "Never heard"
},
"language": {
"label": "Език",
"changeLanguage": "Промяна на езика"
},
"theme": {
"dark": "Тъмна",
"light": "Светла",
"system": "Автоматично",
"changeTheme": "Промяна на цветовата схема"
},
"errorPage": {
"title": "This is a little embarrassing...",
"description1": "We are really sorry but an error occurred in the web client that caused it to crash. <br /> This is not supposed to happen, and we are working hard to fix it.",
"description2": "The best way to prevent this from happening again to you or anyone else is to report the issue to us.",
"reportInstructions": "Моля, включете следната информация в доклада си:",
"reportSteps": {
"step1": "Какво правехте, когато възникна грешката",
"step2": "Какво очаквахте да се случи",
"step3": "Какво всъщност се случи",
"step4": "Всяка друга подходяща информация"
},
"reportLink": "Можете да съобщите за проблема в нашия <0>GitHub</0>",
"dashboardLink": "Връщане към <0>таблото</0>",
"detailsSummary": "Подробности за грешката",
"errorMessageLabel": "Съобщение за грешка:",
"stackTraceLabel": "Stack trace:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Задвижвано от <0>▲ Vercel</0> | Meshtastic® е регистрирана търговска марка на Meshtastic LLC. | <1>Правна информация</1>",
"commitSha": "Commit SHA: {{sha}}"
}
"navigation": {
"title": "Навигация",
"messages": "Съобщения",
"map": "Карта",
"config": "Конфигурация",
"radioConfig": "Конфигурация на радиото",
"moduleConfig": "Конфигурация на модула",
"channels": "Канали",
"nodes": "Възли"
},
"app": {
"title": "Meshtastic",
"logo": "Лого на Meshtastic"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Отваряне на страничната лента",
"close": "Затваряне на страничната лента"
}
},
"deviceInfo": {
"volts": "{{voltage}} волта",
"firmware": {
"title": "Фърмуер",
"version": "v{{version}}",
"buildDate": "Дата на компилация: {{date}}"
},
"deviceName": {
"title": "Име на устройството",
"changeName": "Промяна на името на устройството",
"placeholder": "Въвеждане на име на устройството"
},
"editDeviceName": "Редактиране на името на устройство"
}
},
"batteryStatus": {
"charging": "{{level}}% зареждане",
"pluggedIn": "Включен в ел. мрежа",
"title": "Батерия"
},
"search": {
"nodes": "Търсене на възли...",
"channels": "Търсене на канали...",
"commandPalette": "Търсене на команди..."
},
"toast": {
"positionRequestSent": {
"title": "Position request sent."
},
"requestingPosition": {
"title": "Requesting position, please wait..."
},
"sendingTraceroute": {
"title": "Sending Traceroute, please wait..."
},
"tracerouteSent": {
"title": "Traceroute sent."
},
"savedChannel": {
"title": "Запазен канал: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Чатът използва PKI криптиране."
},
"pskEncryption": {
"title": "Чатът използва PSK криптиране."
}
},
"configSaveError": {
"title": "Грешка при запазване на конфигурацията",
"description": "Възникна грешка при запазване на конфигурацията."
},
"validationError": {
"title": "Съществуват грешки в конфигурацията",
"description": "Моля, коригирайте грешките в конфигурацията, преди да я запазите."
},
"saveSuccess": {
"title": "Запазване на конфигурацията",
"description": "Промяната в конфигурацията {{case}} е запазена."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
}
},
"notifications": {
"copied": {
"label": "Копирано!"
},
"copyToClipboard": {
"label": "Копиране в клипборда"
},
"hidePassword": {
"label": "Скриване на паролата"
},
"showPassword": {
"label": "Показване на паролата"
},
"deliveryStatus": {
"delivered": "Delivered",
"failed": "Delivery Failed",
"waiting": "Изчакване",
"unknown": "Unknown"
}
},
"general": {
"label": "General"
},
"hardware": {
"label": "Хардуер"
},
"metrics": {
"label": "Metrics"
},
"role": {
"label": "Роля"
},
"filter": {
"label": "Филтър"
},
"advanced": {
"label": "Advanced"
},
"clearInput": {
"label": "Clear input"
},
"resetFilters": {
"label": "Нулиране на филтрите"
},
"nodeName": {
"label": "Име/номер на възел",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Airtime Utilization (%)"
},
"batteryLevel": {
"label": "Ниво на батерията (%)",
"labelText": "Ниво на батерията (%): {{value}}"
},
"batteryVoltage": {
"label": "Напрежение на батерията (V)",
"title": "Напрежение"
},
"channelUtilization": {
"label": "Използване на канала (%)"
},
"hops": {
"direct": "Direct",
"label": "Number of hops",
"text": "Number of hops: {{value}}"
},
"lastHeard": {
"label": "Последно чут",
"labelText": "Last heard: {{value}}",
"nowLabel": "Сега"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Любими"
},
"hide": {
"label": "Hide"
},
"showOnly": {
"label": "Show Only"
},
"viaMqtt": {
"label": "Свързан чрез MQTT"
},
"hopsUnknown": {
"label": "Unknown number of hops"
},
"showUnheard": {
"label": "Never heard"
},
"language": {
"label": "Език",
"changeLanguage": "Промяна на езика"
},
"theme": {
"dark": "Тъмна",
"light": "Светла",
"system": "Автоматично",
"changeTheme": "Промяна на цветовата схема"
},
"errorPage": {
"title": "This is a little embarrassing...",
"description1": "We are really sorry but an error occurred in the web client that caused it to crash. <br /> This is not supposed to happen, and we are working hard to fix it.",
"description2": "The best way to prevent this from happening again to you or anyone else is to report the issue to us.",
"reportInstructions": "Моля, включете следната информация в доклада си:",
"reportSteps": {
"step1": "Какво правехте, когато възникна грешката",
"step2": "Какво очаквахте да се случи",
"step3": "Какво всъщност се случи",
"step4": "Всяка друга подходяща информация"
},
"reportLink": "Можете да съобщите за проблема в нашия <0>GitHub</0>",
"dashboardLink": "Връщане към <0>таблото</0>",
"detailsSummary": "Подробности за грешката",
"errorMessageLabel": "Съобщение за грешка:",
"stackTraceLabel": "Stack trace:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Задвижвано от <0>▲ Vercel</0> | Meshtastic® е регистрирана търговска марка на Meshtastic LLC. | <1>Правна информация</1>",
"commitSha": "Commit SHA: {{sha}}"
}
}

View File

@@ -1,69 +1,69 @@
{
"page": {
"sectionLabel": "Kanály",
"channelName": "Channel: {{channelName}}",
"broadcastLabel": "Primární",
"channelIndex": "Ch {{index}}"
},
"validation": {
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
},
"settings": {
"label": "Nastavení kanálu",
"description": "Crypto, MQTT & misc settings"
},
"role": {
"label": "Role",
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
"options": {
"primary": "PRIMARY",
"disabled": "DISABLED",
"secondary": "SECONDARY"
}
},
"psk": {
"label": "Pre-Shared Key",
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
"generate": "Generate"
},
"name": {
"label": "Jméno",
"description": "A unique name for the channel <12 bytes, leave blank for default"
},
"uplinkEnabled": {
"label": "Uplink Enabled",
"description": "Send messages from the local mesh to MQTT"
},
"downlinkEnabled": {
"label": "Downlink Enabled",
"description": "Send messages from MQTT to the local mesh"
},
"positionPrecision": {
"label": "Location",
"description": "The precision of the location to share with the channel. Can be disabled.",
"options": {
"none": "Do not share location",
"precise": "Precise Location",
"metric_km23": "Within 23 kilometers",
"metric_km12": "Within 12 kilometers",
"metric_km5_8": "Within 5.8 kilometers",
"metric_km2_9": "Within 2.9 kilometers",
"metric_km1_5": "Within 1.5 kilometers",
"metric_m700": "Within 700 meters",
"metric_m350": "Within 350 meters",
"metric_m200": "Within 200 meters",
"metric_m90": "Within 90 meters",
"metric_m50": "Within 50 meters",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
"page": {
"sectionLabel": "Kanály",
"channelName": "Channel: {{channelName}}",
"broadcastLabel": "Primární",
"channelIndex": "Ch {{index}}"
},
"validation": {
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
},
"settings": {
"label": "Nastavení kanálu",
"description": "Crypto, MQTT & misc settings"
},
"role": {
"label": "Role",
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
"options": {
"primary": "PRIMARY",
"disabled": "DISABLED",
"secondary": "SECONDARY"
}
},
"psk": {
"label": "Pre-Shared Key",
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
"generate": "Generate"
},
"name": {
"label": "Jméno",
"description": "A unique name for the channel <12 bytes, leave blank for default"
},
"uplinkEnabled": {
"label": "Uplink Enabled",
"description": "Send messages from the local mesh to MQTT"
},
"downlinkEnabled": {
"label": "Downlink Enabled",
"description": "Send messages from MQTT to the local mesh"
},
"positionPrecision": {
"label": "Location",
"description": "The precision of the location to share with the channel. Can be disabled.",
"options": {
"none": "Do not share location",
"precise": "Precise Location",
"metric_km23": "Within 23 kilometers",
"metric_km12": "Within 12 kilometers",
"metric_km5_8": "Within 5.8 kilometers",
"metric_km2_9": "Within 2.9 kilometers",
"metric_km1_5": "Within 1.5 kilometers",
"metric_m700": "Within 700 meters",
"metric_m350": "Within 350 meters",
"metric_m200": "Within 200 meters",
"metric_m90": "Within 90 meters",
"metric_m50": "Within 50 meters",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
}

View File

@@ -1,50 +1,50 @@
{
"emptyState": "No results found.",
"page": {
"title": "Command Menu"
},
"pinGroup": {
"label": "Pin command group"
},
"unpinGroup": {
"label": "Unpin command group"
},
"goto": {
"label": "Goto",
"command": {
"messages": "Zprávy",
"map": "Mapa",
"config": "Config",
"channels": "Kanály",
"nodes": "Uzly"
}
},
"manage": {
"label": "Manage",
"command": {
"switchNode": "Switch Node",
"connectNewNode": "Connect New Node"
}
},
"contextual": {
"label": "Contextual",
"command": {
"qrCode": "QR Code",
"qrGenerator": "Generator",
"qrImport": "Import",
"scheduleShutdown": "Schedule Shutdown",
"scheduleReboot": "Schedule Reboot",
"rebootToOtaMode": "Reboot To OTA Mode",
"resetNodeDb": "Reset Node DB",
"factoryResetDevice": "Factory Reset Device",
"factoryResetConfig": "Factory Reset Config"
}
},
"debug": {
"label": "Debug",
"command": {
"reconfigure": "Reconfigure",
"clearAllStoredMessages": "Clear All Stored Message"
}
}
"emptyState": "No results found.",
"page": {
"title": "Command Menu"
},
"pinGroup": {
"label": "Pin command group"
},
"unpinGroup": {
"label": "Unpin command group"
},
"goto": {
"label": "Goto",
"command": {
"messages": "Zprávy",
"map": "Mapa",
"config": "Config",
"channels": "Kanály",
"nodes": "Uzly"
}
},
"manage": {
"label": "Manage",
"command": {
"switchNode": "Switch Node",
"connectNewNode": "Connect New Node"
}
},
"contextual": {
"label": "Contextual",
"command": {
"qrCode": "QR Code",
"qrGenerator": "Generator",
"qrImport": "Import",
"scheduleShutdown": "Schedule Shutdown",
"scheduleReboot": "Schedule Reboot",
"rebootToOtaMode": "Reboot To OTA Mode",
"resetNodeDb": "Reset Node DB",
"factoryResetDevice": "Factory Reset Device",
"factoryResetConfig": "Factory Reset Config"
}
},
"debug": {
"label": "Debug",
"command": {
"reconfigure": "Reconfigure",
"clearAllStoredMessages": "Clear All Stored Message"
}
}
}

View File

@@ -1,141 +1,141 @@
{
"button": {
"apply": "Použít",
"backupKey": "Backup Key",
"cancel": "Zrušit",
"clearMessages": "Clear Messages",
"close": "Zavřít",
"confirm": "Confirm",
"delete": "Smazat",
"dismiss": "Dismiss",
"download": "Download",
"export": "Export",
"generate": "Generate",
"regenerate": "Regenerate",
"import": "Import",
"message": "Zpráva",
"now": "Now",
"ok": "OK",
"print": "Print",
"rebootOtaNow": "Reboot to OTA Mode Now",
"remove": "Odstranit",
"requestNewKeys": "Request New Keys",
"requestPosition": "Request Position",
"reset": "Reset",
"save": "Uložit",
"scanQr": "Naskenovat QR kód",
"traceRoute": "Trace Route",
"submit": "Submit"
},
"app": {
"title": "Meshtastic",
"fullTitle": "Meshtastic Web Client"
},
"loading": "Loading...",
"unit": {
"cps": "CPS",
"dbm": "dBm",
"hertz": "Hz",
"hop": {
"one": "Hop",
"plural": "Hops"
},
"hopsAway": {
"one": "{{count}} hop away",
"plural": "{{count}} hops away",
"unknown": "Unknown hops away"
},
"megahertz": "MHz",
"raw": "raw",
"meter": {
"one": "Meter",
"plural": "Meters",
"suffix": "m"
},
"minute": {
"one": "Minute",
"plural": "Minutes"
},
"hour": {
"one": "Hour",
"plural": "Hours"
},
"millisecond": {
"one": "Millisecond",
"plural": "Milliseconds",
"suffix": "ms"
},
"second": {
"one": "Second",
"plural": "Seconds"
},
"day": {
"one": "Day",
"plural": "Days"
},
"month": {
"one": "Month",
"plural": "Months"
},
"year": {
"one": "Year",
"plural": "Years"
},
"snr": "SNR",
"volt": {
"one": "Volt",
"plural": "Volts",
"suffix": "V"
},
"record": {
"one": "Records",
"plural": "Records"
}
},
"security": {
"0bit": "Empty",
"8bit": "8 bit",
"128bit": "128 bit",
"256bit": "256 bit"
},
"unknown": {
"longName": "Unknown",
"shortName": "UNK",
"notAvailable": "N/A",
"num": "??"
},
"nodeUnknownPrefix": "!",
"unset": "UNSET",
"fallbackName": "Meshtastic {{last4}}",
"node": "Node",
"formValidation": {
"unsavedChanges": "Unsaved changes",
"tooBig": {
"string": "Too long, expected less than or equal to {{maximum}} characters.",
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
},
"tooSmall": {
"string": "Too short, expected more than or equal to {{minimum}} characters.",
"number": "Too small, expected a number larger than or equal to {{minimum}}."
},
"invalidFormat": {
"ipv4": "Invalid format, expected an IPv4 address.",
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
},
"invalidType": {
"number": "Invalid type, expected a number."
},
"pskLength": {
"0bit": "Key is required to be empty.",
"8bit": "Key is required to be an 8 bit pre-shared key (PSK).",
"128bit": "Key is required to be a 128 bit pre-shared key (PSK).",
"256bit": "Key is required to be a 256 bit pre-shared key (PSK)."
},
"required": {
"generic": "This field is required.",
"managed": "At least one admin key is requred if the node is managed.",
"key": "Key is required."
}
}
"button": {
"apply": "Použít",
"backupKey": "Backup Key",
"cancel": "Zrušit",
"clearMessages": "Clear Messages",
"close": "Zavřít",
"confirm": "Confirm",
"delete": "Smazat",
"dismiss": "Dismiss",
"download": "Download",
"export": "Export",
"generate": "Generate",
"regenerate": "Regenerate",
"import": "Import",
"message": "Zpráva",
"now": "Now",
"ok": "OK",
"print": "Print",
"rebootOtaNow": "Reboot to OTA Mode Now",
"remove": "Odstranit",
"requestNewKeys": "Request New Keys",
"requestPosition": "Request Position",
"reset": "Reset",
"save": "Uložit",
"scanQr": "Naskenovat QR kód",
"traceRoute": "Trace Route",
"submit": "Submit"
},
"app": {
"title": "Meshtastic",
"fullTitle": "Meshtastic Web Client"
},
"loading": "Loading...",
"unit": {
"cps": "CPS",
"dbm": "dBm",
"hertz": "Hz",
"hop": {
"one": "Hop",
"plural": "Hops"
},
"hopsAway": {
"one": "{{count}} hop away",
"plural": "{{count}} hops away",
"unknown": "Unknown hops away"
},
"megahertz": "MHz",
"raw": "raw",
"meter": {
"one": "Meter",
"plural": "Meters",
"suffix": "m"
},
"minute": {
"one": "Minute",
"plural": "Minutes"
},
"hour": {
"one": "Hour",
"plural": "Hours"
},
"millisecond": {
"one": "Millisecond",
"plural": "Milliseconds",
"suffix": "ms"
},
"second": {
"one": "Second",
"plural": "Seconds"
},
"day": {
"one": "Day",
"plural": "Days"
},
"month": {
"one": "Month",
"plural": "Months"
},
"year": {
"one": "Year",
"plural": "Years"
},
"snr": "SNR",
"volt": {
"one": "Volt",
"plural": "Volts",
"suffix": "V"
},
"record": {
"one": "Records",
"plural": "Records"
}
},
"security": {
"0bit": "Empty",
"8bit": "8 bit",
"128bit": "128 bit",
"256bit": "256 bit"
},
"unknown": {
"longName": "Unknown",
"shortName": "UNK",
"notAvailable": "N/A",
"num": "??"
},
"nodeUnknownPrefix": "!",
"unset": "UNSET",
"fallbackName": "Meshtastic {{last4}}",
"node": "Node",
"formValidation": {
"unsavedChanges": "Unsaved changes",
"tooBig": {
"string": "Too long, expected less than or equal to {{maximum}} characters.",
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
},
"tooSmall": {
"string": "Too short, expected more than or equal to {{minimum}} characters.",
"number": "Too small, expected a number larger than or equal to {{minimum}}."
},
"invalidFormat": {
"ipv4": "Invalid format, expected an IPv4 address.",
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
},
"invalidType": {
"number": "Invalid type, expected a number."
},
"pskLength": {
"0bit": "Key is required to be empty.",
"8bit": "Key is required to be an 8 bit pre-shared key (PSK).",
"128bit": "Key is required to be a 128 bit pre-shared key (PSK).",
"256bit": "Key is required to be a 256 bit pre-shared key (PSK)."
},
"required": {
"generic": "This field is required.",
"managed": "At least one admin key is requred if the node is managed.",
"key": "Key is required."
}
}
}

View File

@@ -1,12 +1,12 @@
{
"dashboard": {
"title": "Connected Devices",
"description": "Manage your connected Meshtastic devices.",
"connectionType_ble": "BLE",
"connectionType_serial": "Sériová komunikace",
"connectionType_network": "Síť",
"noDevicesTitle": "No devices connected",
"noDevicesDescription": "Connect a new device to get started.",
"button_newConnection": "New Connection"
}
"dashboard": {
"title": "Connected Devices",
"description": "Manage your connected Meshtastic devices.",
"connectionType_ble": "BLE",
"connectionType_serial": "Sériová komunikace",
"connectionType_network": "Síť",
"noDevicesTitle": "No devices connected",
"noDevicesDescription": "Connect a new device to get started.",
"button_newConnection": "New Connection"
}
}

View File

@@ -1,428 +1,428 @@
{
"page": {
"title": "Configuration",
"tabBluetooth": "Bluetooth",
"tabDevice": "Zařízení",
"tabDisplay": "Obrazovka",
"tabLora": "LoRa",
"tabNetwork": "Síť",
"tabPosition": "Pozice",
"tabPower": "Napájení",
"tabSecurity": "Zabezpečení"
},
"sidebar": {
"label": "Modules"
},
"device": {
"title": "Device Settings",
"description": "Settings for the device",
"buttonPin": {
"description": "Button pin override",
"label": "Button Pin"
},
"buzzerPin": {
"description": "Buzzer pin override",
"label": "Buzzer Pin"
},
"disableTripleClick": {
"description": "Disable triple click",
"label": "Disable Triple Click"
},
"doubleTapAsButtonPress": {
"description": "Treat double tap as button press",
"label": "Dvojité klepnutí jako stisk tlačítka"
},
"ledHeartbeatDisabled": {
"description": "Disable default blinking LED",
"label": "LED Heartbeat Disabled"
},
"nodeInfoBroadcastInterval": {
"description": "How often to broadcast node info",
"label": "Node Info Broadcast Interval"
},
"posixTimezone": {
"description": "The POSIX timezone string for the device",
"label": "POSIX časové pásmo"
},
"rebroadcastMode": {
"description": "How to handle rebroadcasting",
"label": "Režim opětovného vysílání"
},
"role": {
"description": "What role the device performs on the mesh",
"label": "Role"
}
},
"bluetooth": {
"title": "Nastavení Bluetooth",
"description": "Settings for the Bluetooth module",
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
"enabled": {
"description": "Enable or disable Bluetooth",
"label": "Povoleno"
},
"pairingMode": {
"description": "Pin selection behaviour.",
"label": "Režim párování"
},
"pin": {
"description": "Pin to use when pairing",
"label": "Pin"
}
},
"display": {
"description": "Settings for the device display",
"title": "Display Settings",
"headingBold": {
"description": "Bolden the heading text",
"label": "Bold Heading"
},
"carouselDelay": {
"description": "How fast to cycle through windows",
"label": "Carousel Delay"
},
"compassNorthTop": {
"description": "Fix north to the top of compass",
"label": "Compass North Top"
},
"displayMode": {
"description": "Screen layout variant",
"label": "Display Mode"
},
"displayUnits": {
"description": "Display metric or imperial units",
"label": "Display Units"
},
"flipScreen": {
"description": "Flip display 180 degrees",
"label": "Flip Screen"
},
"gpsDisplayUnits": {
"description": "Coordinate display format",
"label": "GPS Display Units"
},
"oledType": {
"description": "Type of OLED screen attached to the device",
"label": "OLED Type"
},
"screenTimeout": {
"description": "Turn off the display after this long",
"label": "Screen Timeout"
},
"twelveHourClock": {
"description": "Use 12-hour clock format",
"label": "12-Hour Clock"
},
"wakeOnTapOrMotion": {
"description": "Wake the device on tap or motion",
"label": "Wake on Tap or Motion"
}
},
"lora": {
"title": "Mesh Settings",
"description": "Settings for the LoRa mesh",
"bandwidth": {
"description": "Channel bandwidth in MHz",
"label": "Šířka pásma"
},
"boostedRxGain": {
"description": "Boosted RX gain",
"label": "Boosted RX Gain"
},
"codingRate": {
"description": "The denominator of the coding rate",
"label": "Coding Rate"
},
"frequencyOffset": {
"description": "Frequency offset to correct for crystal calibration errors",
"label": "Frequency Offset"
},
"frequencySlot": {
"description": "LoRa frequency channel number",
"label": "Frequency Slot"
},
"hopLimit": {
"description": "Maximum number of hops",
"label": "Hop Limit"
},
"ignoreMqtt": {
"description": "Don't forward MQTT messages over the mesh",
"label": "Ignorovat MQTT"
},
"modemPreset": {
"description": "Modem preset to use",
"label": "Předvolba modemu"
},
"okToMqtt": {
"description": "When set to true, this configuration indicates that the user approves the packet to be uploaded to MQTT. If set to false, remote nodes are requested not to forward packets to MQTT",
"label": "OK do MQTT"
},
"overrideDutyCycle": {
"description": "Přepsat střídu",
"label": "Přepsat střídu"
},
"overrideFrequency": {
"description": "Override frequency",
"label": "Override Frequency"
},
"region": {
"description": "Sets the region for your node",
"label": "Region"
},
"spreadingFactor": {
"description": "Indicates the number of chirps per symbol",
"label": "Spreading Factor"
},
"transmitEnabled": {
"description": "Enable/Disable transmit (TX) from the LoRa radio",
"label": "Transmit Enabled"
},
"transmitPower": {
"description": "Max transmit power",
"label": "Transmit Power"
},
"usePreset": {
"description": "Use one of the predefined modem presets",
"label": "Use Preset"
},
"meshSettings": {
"description": "Settings for the LoRa mesh",
"label": "Mesh Settings"
},
"waveformSettings": {
"description": "Settings for the LoRa waveform",
"label": "Waveform Settings"
},
"radioSettings": {
"label": "Radio Settings",
"description": "Settings for the LoRa radio"
}
},
"network": {
"title": "WiFi Config",
"description": "WiFi radio configuration",
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
"addressMode": {
"description": "Address assignment selection",
"label": "Address Mode"
},
"dns": {
"description": "DNS Server",
"label": "DNS"
},
"ethernetEnabled": {
"description": "Enable or disable the Ethernet port",
"label": "Povoleno"
},
"gateway": {
"description": "Default Gateway",
"label": "Gateway/Brána"
},
"ip": {
"description": "IP Address",
"label": "IP adresa"
},
"psk": {
"description": "Network password",
"label": "PSK"
},
"ssid": {
"description": "Network name",
"label": "SSID"
},
"subnet": {
"description": "Subnet Mask",
"label": "Podsíť"
},
"wifiEnabled": {
"description": "Enable or disable the WiFi radio",
"label": "Povoleno"
},
"meshViaUdp": {
"label": "Mesh via UDP"
},
"ntpServer": {
"label": "NTP Server"
},
"rsyslogServer": {
"label": "Rsyslog Server"
},
"ethernetConfigSettings": {
"description": "Ethernet port configuration",
"label": "Ethernet Config"
},
"ipConfigSettings": {
"description": "IP configuration",
"label": "IP Config"
},
"ntpConfigSettings": {
"description": "NTP configuration",
"label": "NTP Config"
},
"rsyslogConfigSettings": {
"description": "Rsyslog configuration",
"label": "Rsyslog Config"
},
"udpConfigSettings": {
"description": "UDP over Mesh configuration",
"label": "UDP Konfigurace"
}
},
"position": {
"title": "Position Settings",
"description": "Settings for the position module",
"broadcastInterval": {
"description": "How often your position is sent out over the mesh",
"label": "Broadcast Interval"
},
"enablePin": {
"description": "GPS module enable pin override",
"label": "Enable Pin"
},
"fixedPosition": {
"description": "Don't report GPS position, but a manually-specified one",
"label": "Fixed Position"
},
"gpsMode": {
"description": "Configure whether device GPS is Enabled, Disabled, or Not Present",
"label": "GPS Mode"
},
"gpsUpdateInterval": {
"description": "How often a GPS fix should be acquired",
"label": "GPS Update Interval"
},
"positionFlags": {
"description": "Optional fields to include when assembling position messages. The more fields are selected, the larger the message will be leading to longer airtime usage and a higher risk of packet loss.",
"label": "Position Flags"
},
"receivePin": {
"description": "GPS module RX pin override",
"label": "Receive Pin"
},
"smartPositionEnabled": {
"description": "Only send position when there has been a meaningful change in location",
"label": "Enable Smart Position"
},
"smartPositionMinDistance": {
"description": "Minimum distance (in meters) that must be traveled before a position update is sent",
"label": "Smart Position Minimum Distance"
},
"smartPositionMinInterval": {
"description": "Minimum interval (in seconds) that must pass before a position update is sent",
"label": "Smart Position Minimum Interval"
},
"transmitPin": {
"description": "GPS module TX pin override",
"label": "Transmit Pin"
},
"intervalsSettings": {
"description": "How often to send position updates",
"label": "Intervals"
},
"flags": {
"placeholder": "Select position flags...",
"altitude": "Altitude",
"altitudeGeoidalSeparation": "Altitude Geoidal Separation",
"altitudeMsl": "Altitude is Mean Sea Level",
"dop": "Dilution of precision (DOP) PDOP used by default",
"hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP",
"numSatellites": "Number of satellites",
"sequenceNumber": "Sequence number",
"timestamp": "Časová značka",
"unset": "Zrušit nastavení",
"vehicleHeading": "Vehicle heading",
"vehicleSpeed": "Vehicle speed"
}
},
"power": {
"adcMultiplierOverride": {
"description": "Used for tweaking battery voltage reading",
"label": "ADC Multiplier Override ratio"
},
"ina219Address": {
"description": "Address of the INA219 battery monitor",
"label": "INA219 Address"
},
"lightSleepDuration": {
"description": "How long the device will be in light sleep for",
"label": "Light Sleep Duration"
},
"minimumWakeTime": {
"description": "Minimum amount of time the device will stay awake for after receiving a packet",
"label": "Minimum Wake Time"
},
"noConnectionBluetoothDisabled": {
"description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long",
"label": "No Connection Bluetooth Disabled"
},
"powerSavingEnabled": {
"description": "Select if powered from a low-current source (i.e. solar), to minimize power consumption as much as possible.",
"label": "Povolit úsporný režim"
},
"shutdownOnBatteryDelay": {
"description": "Automatically shutdown node after this long when on battery, 0 for indefinite",
"label": "Shutdown on battery delay"
},
"superDeepSleepDuration": {
"description": "How long the device will be in super deep sleep for",
"label": "Super Deep Sleep Duration"
},
"powerConfigSettings": {
"description": "Settings for the power module",
"label": "Nastavení napájení"
},
"sleepSettings": {
"description": "Sleep settings for the power module",
"label": "Sleep Settings"
}
},
"security": {
"description": "Settings for the Security configuration",
"title": "Security Settings",
"button_backupKey": "Backup Key",
"adminChannelEnabled": {
"description": "Allow incoming device control over the insecure legacy admin channel",
"label": "Allow Legacy Admin"
},
"enableDebugLogApi": {
"description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth",
"label": "Enable Debug Log API"
},
"managed": {
"description": "If enabled, device configuration options are only able to be changed remotely by a Remote Admin node via admin messages. Do not enable this option unless at least one suitable Remote Admin node has been setup, and the public key is stored in one of the fields above.",
"label": "Managed"
},
"privateKey": {
"description": "Used to create a shared key with a remote device",
"label": "Soukromý klíč"
},
"publicKey": {
"description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key",
"label": "Veřejný klíč"
},
"primaryAdminKey": {
"description": "The primary public key authorized to send admin messages to this node",
"label": "Primary Admin Key"
},
"secondaryAdminKey": {
"description": "The secondary public key authorized to send admin messages to this node",
"label": "Secondary Admin Key"
},
"serialOutputEnabled": {
"description": "Serial Console over the Stream API",
"label": "Serial Output Enabled"
},
"tertiaryAdminKey": {
"description": "The tertiary public key authorized to send admin messages to this node",
"label": "Tertiary Admin Key"
},
"adminSettings": {
"description": "Settings for Admin",
"label": "Admin Settings"
},
"loggingSettings": {
"description": "Settings for Logging",
"label": "Logging Settings"
}
}
"page": {
"title": "Configuration",
"tabBluetooth": "Bluetooth",
"tabDevice": "Zařízení",
"tabDisplay": "Obrazovka",
"tabLora": "LoRa",
"tabNetwork": "Síť",
"tabPosition": "Pozice",
"tabPower": "Napájení",
"tabSecurity": "Zabezpečení"
},
"sidebar": {
"label": "Modules"
},
"device": {
"title": "Device Settings",
"description": "Settings for the device",
"buttonPin": {
"description": "Button pin override",
"label": "Button Pin"
},
"buzzerPin": {
"description": "Buzzer pin override",
"label": "Buzzer Pin"
},
"disableTripleClick": {
"description": "Disable triple click",
"label": "Disable Triple Click"
},
"doubleTapAsButtonPress": {
"description": "Treat double tap as button press",
"label": "Dvojité klepnutí jako stisk tlačítka"
},
"ledHeartbeatDisabled": {
"description": "Disable default blinking LED",
"label": "LED Heartbeat Disabled"
},
"nodeInfoBroadcastInterval": {
"description": "How often to broadcast node info",
"label": "Node Info Broadcast Interval"
},
"posixTimezone": {
"description": "The POSIX timezone string for the device",
"label": "POSIX časové pásmo"
},
"rebroadcastMode": {
"description": "How to handle rebroadcasting",
"label": "Režim opětovného vysílání"
},
"role": {
"description": "What role the device performs on the mesh",
"label": "Role"
}
},
"bluetooth": {
"title": "Nastavení Bluetooth",
"description": "Settings for the Bluetooth module",
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
"enabled": {
"description": "Enable or disable Bluetooth",
"label": "Povoleno"
},
"pairingMode": {
"description": "Pin selection behaviour.",
"label": "Režim párování"
},
"pin": {
"description": "Pin to use when pairing",
"label": "Pin"
}
},
"display": {
"description": "Settings for the device display",
"title": "Display Settings",
"headingBold": {
"description": "Bolden the heading text",
"label": "Bold Heading"
},
"carouselDelay": {
"description": "How fast to cycle through windows",
"label": "Carousel Delay"
},
"compassNorthTop": {
"description": "Fix north to the top of compass",
"label": "Compass North Top"
},
"displayMode": {
"description": "Screen layout variant",
"label": "Display Mode"
},
"displayUnits": {
"description": "Display metric or imperial units",
"label": "Display Units"
},
"flipScreen": {
"description": "Flip display 180 degrees",
"label": "Flip Screen"
},
"gpsDisplayUnits": {
"description": "Coordinate display format",
"label": "GPS Display Units"
},
"oledType": {
"description": "Type of OLED screen attached to the device",
"label": "OLED Type"
},
"screenTimeout": {
"description": "Turn off the display after this long",
"label": "Screen Timeout"
},
"twelveHourClock": {
"description": "Use 12-hour clock format",
"label": "12-Hour Clock"
},
"wakeOnTapOrMotion": {
"description": "Wake the device on tap or motion",
"label": "Wake on Tap or Motion"
}
},
"lora": {
"title": "Mesh Settings",
"description": "Settings for the LoRa mesh",
"bandwidth": {
"description": "Channel bandwidth in MHz",
"label": "Šířka pásma"
},
"boostedRxGain": {
"description": "Boosted RX gain",
"label": "Boosted RX Gain"
},
"codingRate": {
"description": "The denominator of the coding rate",
"label": "Coding Rate"
},
"frequencyOffset": {
"description": "Frequency offset to correct for crystal calibration errors",
"label": "Frequency Offset"
},
"frequencySlot": {
"description": "LoRa frequency channel number",
"label": "Frequency Slot"
},
"hopLimit": {
"description": "Maximum number of hops",
"label": "Hop Limit"
},
"ignoreMqtt": {
"description": "Don't forward MQTT messages over the mesh",
"label": "Ignorovat MQTT"
},
"modemPreset": {
"description": "Modem preset to use",
"label": "Předvolba modemu"
},
"okToMqtt": {
"description": "When set to true, this configuration indicates that the user approves the packet to be uploaded to MQTT. If set to false, remote nodes are requested not to forward packets to MQTT",
"label": "OK do MQTT"
},
"overrideDutyCycle": {
"description": "Přepsat střídu",
"label": "Přepsat střídu"
},
"overrideFrequency": {
"description": "Override frequency",
"label": "Override Frequency"
},
"region": {
"description": "Sets the region for your node",
"label": "Region"
},
"spreadingFactor": {
"description": "Indicates the number of chirps per symbol",
"label": "Spreading Factor"
},
"transmitEnabled": {
"description": "Enable/Disable transmit (TX) from the LoRa radio",
"label": "Transmit Enabled"
},
"transmitPower": {
"description": "Max transmit power",
"label": "Transmit Power"
},
"usePreset": {
"description": "Use one of the predefined modem presets",
"label": "Use Preset"
},
"meshSettings": {
"description": "Settings for the LoRa mesh",
"label": "Mesh Settings"
},
"waveformSettings": {
"description": "Settings for the LoRa waveform",
"label": "Waveform Settings"
},
"radioSettings": {
"label": "Radio Settings",
"description": "Settings for the LoRa radio"
}
},
"network": {
"title": "WiFi Config",
"description": "WiFi radio configuration",
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
"addressMode": {
"description": "Address assignment selection",
"label": "Address Mode"
},
"dns": {
"description": "DNS Server",
"label": "DNS"
},
"ethernetEnabled": {
"description": "Enable or disable the Ethernet port",
"label": "Povoleno"
},
"gateway": {
"description": "Default Gateway",
"label": "Gateway/Brána"
},
"ip": {
"description": "IP Address",
"label": "IP adresa"
},
"psk": {
"description": "Network password",
"label": "PSK"
},
"ssid": {
"description": "Network name",
"label": "SSID"
},
"subnet": {
"description": "Subnet Mask",
"label": "Podsíť"
},
"wifiEnabled": {
"description": "Enable or disable the WiFi radio",
"label": "Povoleno"
},
"meshViaUdp": {
"label": "Mesh via UDP"
},
"ntpServer": {
"label": "NTP Server"
},
"rsyslogServer": {
"label": "Rsyslog Server"
},
"ethernetConfigSettings": {
"description": "Ethernet port configuration",
"label": "Ethernet Config"
},
"ipConfigSettings": {
"description": "IP configuration",
"label": "IP Config"
},
"ntpConfigSettings": {
"description": "NTP configuration",
"label": "NTP Config"
},
"rsyslogConfigSettings": {
"description": "Rsyslog configuration",
"label": "Rsyslog Config"
},
"udpConfigSettings": {
"description": "UDP over Mesh configuration",
"label": "UDP Konfigurace"
}
},
"position": {
"title": "Position Settings",
"description": "Settings for the position module",
"broadcastInterval": {
"description": "How often your position is sent out over the mesh",
"label": "Broadcast Interval"
},
"enablePin": {
"description": "GPS module enable pin override",
"label": "Enable Pin"
},
"fixedPosition": {
"description": "Don't report GPS position, but a manually-specified one",
"label": "Fixed Position"
},
"gpsMode": {
"description": "Configure whether device GPS is Enabled, Disabled, or Not Present",
"label": "GPS Mode"
},
"gpsUpdateInterval": {
"description": "How often a GPS fix should be acquired",
"label": "GPS Update Interval"
},
"positionFlags": {
"description": "Optional fields to include when assembling position messages. The more fields are selected, the larger the message will be leading to longer airtime usage and a higher risk of packet loss.",
"label": "Position Flags"
},
"receivePin": {
"description": "GPS module RX pin override",
"label": "Receive Pin"
},
"smartPositionEnabled": {
"description": "Only send position when there has been a meaningful change in location",
"label": "Enable Smart Position"
},
"smartPositionMinDistance": {
"description": "Minimum distance (in meters) that must be traveled before a position update is sent",
"label": "Smart Position Minimum Distance"
},
"smartPositionMinInterval": {
"description": "Minimum interval (in seconds) that must pass before a position update is sent",
"label": "Smart Position Minimum Interval"
},
"transmitPin": {
"description": "GPS module TX pin override",
"label": "Transmit Pin"
},
"intervalsSettings": {
"description": "How often to send position updates",
"label": "Intervals"
},
"flags": {
"placeholder": "Select position flags...",
"altitude": "Altitude",
"altitudeGeoidalSeparation": "Altitude Geoidal Separation",
"altitudeMsl": "Altitude is Mean Sea Level",
"dop": "Dilution of precision (DOP) PDOP used by default",
"hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP",
"numSatellites": "Number of satellites",
"sequenceNumber": "Sequence number",
"timestamp": "Časová značka",
"unset": "Zrušit nastavení",
"vehicleHeading": "Vehicle heading",
"vehicleSpeed": "Vehicle speed"
}
},
"power": {
"adcMultiplierOverride": {
"description": "Used for tweaking battery voltage reading",
"label": "ADC Multiplier Override ratio"
},
"ina219Address": {
"description": "Address of the INA219 battery monitor",
"label": "INA219 Address"
},
"lightSleepDuration": {
"description": "How long the device will be in light sleep for",
"label": "Light Sleep Duration"
},
"minimumWakeTime": {
"description": "Minimum amount of time the device will stay awake for after receiving a packet",
"label": "Minimum Wake Time"
},
"noConnectionBluetoothDisabled": {
"description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long",
"label": "No Connection Bluetooth Disabled"
},
"powerSavingEnabled": {
"description": "Select if powered from a low-current source (i.e. solar), to minimize power consumption as much as possible.",
"label": "Povolit úsporný režim"
},
"shutdownOnBatteryDelay": {
"description": "Automatically shutdown node after this long when on battery, 0 for indefinite",
"label": "Shutdown on battery delay"
},
"superDeepSleepDuration": {
"description": "How long the device will be in super deep sleep for",
"label": "Super Deep Sleep Duration"
},
"powerConfigSettings": {
"description": "Settings for the power module",
"label": "Nastavení napájení"
},
"sleepSettings": {
"description": "Sleep settings for the power module",
"label": "Sleep Settings"
}
},
"security": {
"description": "Settings for the Security configuration",
"title": "Security Settings",
"button_backupKey": "Backup Key",
"adminChannelEnabled": {
"description": "Allow incoming device control over the insecure legacy admin channel",
"label": "Allow Legacy Admin"
},
"enableDebugLogApi": {
"description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth",
"label": "Enable Debug Log API"
},
"managed": {
"description": "If enabled, device configuration options are only able to be changed remotely by a Remote Admin node via admin messages. Do not enable this option unless at least one suitable Remote Admin node has been setup, and the public key is stored in one of the fields above.",
"label": "Managed"
},
"privateKey": {
"description": "Used to create a shared key with a remote device",
"label": "Soukromý klíč"
},
"publicKey": {
"description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key",
"label": "Veřejný klíč"
},
"primaryAdminKey": {
"description": "The primary public key authorized to send admin messages to this node",
"label": "Primary Admin Key"
},
"secondaryAdminKey": {
"description": "The secondary public key authorized to send admin messages to this node",
"label": "Secondary Admin Key"
},
"serialOutputEnabled": {
"description": "Serial Console over the Stream API",
"label": "Serial Output Enabled"
},
"tertiaryAdminKey": {
"description": "The tertiary public key authorized to send admin messages to this node",
"label": "Tertiary Admin Key"
},
"adminSettings": {
"description": "Settings for Admin",
"label": "Admin Settings"
},
"loggingSettings": {
"description": "Settings for Logging",
"label": "Logging Settings"
}
}
}

View File

@@ -1,171 +1,171 @@
{
"deleteMessages": {
"description": "This action will clear all message history. This cannot be undone. Are you sure you want to continue?",
"title": "Clear All Messages"
},
"deviceName": {
"description": "The Device will restart once the config is saved.",
"longName": "Long Name",
"shortName": "Short Name",
"title": "Change Device Name"
},
"import": {
"description": "The current LoRa configuration will be overridden.",
"error": {
"invalidUrl": "Invalid Meshtastic URL"
},
"channelPrefix": "Channel: ",
"channelSetUrl": "Channel Set/QR Code URL",
"channels": "Channels:",
"usePreset": "Use Preset?",
"title": "Import Channel Set"
},
"locationResponse": {
"altitude": "Altitude: ",
"coordinates": "Coordinates: ",
"title": "Location: {{identifier}}"
},
"pkiRegenerateDialog": {
"title": "Regenerate Pre-Shared Key?",
"description": "Are you sure you want to regenerate the pre-shared key?",
"regenerate": "Regenerate"
},
"newDeviceDialog": {
"title": "Connect New Device",
"https": "https",
"http": "http",
"tabHttp": "HTTP",
"tabBluetooth": "Bluetooth",
"tabSerial": "Sériová komunikace",
"useHttps": "Use HTTPS",
"connecting": "Connecting...",
"connect": "Connect",
"connectionFailedAlert": {
"title": "Connection Failed",
"descriptionPrefix": "Could not connect to the device. ",
"httpsHint": "If using HTTPS, you may need to accept a self-signed certificate first. ",
"openLinkPrefix": "Please open ",
"openLinkSuffix": " in a new tab",
"acceptTlsWarningSuffix": ", accept any TLS warnings if prompted, then try again",
"learnMoreLink": "Learn more"
},
"httpConnection": {
"label": "IP Address/Hostname",
"placeholder": "000.000.000.000 / meshtastic.local"
},
"serialConnection": {
"noDevicesPaired": "No devices paired yet.",
"newDeviceButton": "New device",
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
},
"bluetoothConnection": {
"noDevicesPaired": "No devices paired yet.",
"newDeviceButton": "New device"
},
"validation": {
"requiresWebBluetooth": "This connection type requires <0>Web Bluetooth</0>. Please use a supported browser, like Chrome or Edge.",
"requiresWebSerial": "This connection type requires <0>Web Serial</0>. Please use a supported browser, like Chrome or Edge.",
"requiresSecureContext": "This application requires a <0>secure context</0>. Please connect using HTTPS or localhost.",
"additionallyRequiresSecureContext": "Additionally, it requires a <0>secure context</0>. Please connect using HTTPS or localhost."
}
},
"nodeDetails": {
"message": "Zpráva",
"requestPosition": "Request Position",
"traceRoute": "Trace Route",
"airTxUtilization": "Air TX utilization",
"allRawMetrics": "All Raw Metrics:",
"batteryLevel": "Battery level",
"channelUtilization": "Channel utilization",
"details": "Details:",
"deviceMetrics": "Device Metrics:",
"hardware": "Hardware: ",
"lastHeard": "Last Heard: ",
"nodeHexPrefix": "Node Hex: !",
"nodeNumber": "Node Number: ",
"position": "Position:",
"role": "Role: ",
"uptime": "Uptime: ",
"voltage": "Napětí",
"title": "Node Details for {{identifier}}",
"ignoreNode": "Ignore node",
"removeNode": "Remove node",
"unignoreNode": "Unignore node"
},
"pkiBackup": {
"loseKeysWarning": "If you lose your keys, you will need to reset your device.",
"secureBackup": "Its important to backup your public and private keys and store your backup securely!",
"footer": "=== END OF KEYS ===",
"header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===",
"privateKey": "Private Key:",
"publicKey": "Public Key:",
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
"title": "Backup Keys"
},
"pkiBackupReminder": {
"description": "We recommend backing up your key data regularly. Would you like to back up now?",
"title": "Backup Reminder",
"remindLaterPrefix": "Remind me in",
"remindNever": "Never remind me",
"backupNow": "Back up now"
},
"pkiRegenerate": {
"description": "Are you sure you want to regenerate key pair?",
"title": "Regenerate Key Pair"
},
"qr": {
"addChannels": "Add Channels",
"replaceChannels": "Replace Channels",
"description": "The current LoRa configuration will also be shared.",
"sharableUrl": "Sharable URL",
"title": "Generate QR Code"
},
"rebootOta": {
"title": "Schedule Reboot",
"description": "Reboot the connected node after a delay into OTA (Over-the-Air) mode.",
"enterDelay": "Enter delay (sec)",
"scheduled": "Reboot has been scheduled"
},
"reboot": {
"title": "Schedule Reboot",
"description": "Reboot the connected node after x minutes."
},
"refreshKeys": {
"description": {
"acceptNewKeys": "This will remove the node from device and request new keys.",
"keyMismatchReasonSuffix": ". This is due to the remote node's current public key does not match the previously stored key for this node.",
"unableToSendDmPrefix": "Your node is unable to send a direct message to node: "
},
"acceptNewKeys": "Accept New Keys",
"title": "Keys Mismatch - {{identifier}}"
},
"removeNode": {
"description": "Are you sure you want to remove this Node?",
"title": "Remove Node?"
},
"shutdown": {
"title": "Schedule Shutdown",
"description": "Turn off the connected node after x minutes."
},
"traceRoute": {
"routeToDestination": "Route to destination:",
"routeBack": "Route back:"
},
"tracerouteResponse": {
"title": "Traceroute: {{identifier}}"
},
"unsafeRoles": {
"confirmUnderstanding": "Yes, I know what I'm doing",
"conjunction": " and the blog post about ",
"postamble": " and understand the implications of changing the role.",
"preamble": "I have read the ",
"choosingRightDeviceRole": "Choosing The Right Device Role",
"deviceRoleDocumentation": "Device Role Documentation",
"title": "Jste si jistý?"
},
"managedMode": {
"confirmUnderstanding": "Yes, I know what I'm doing",
"title": "Jste si jistý?",
"description": "Enabling Managed Mode blocks client applications (including the web client) from writing configurations to a radio. Once enabled, radio configurations can <bold>only</bold> be changed through Remote Admin messages. This setting is not required for remote node administration."
}
"deleteMessages": {
"description": "This action will clear all message history. This cannot be undone. Are you sure you want to continue?",
"title": "Clear All Messages"
},
"deviceName": {
"description": "The Device will restart once the config is saved.",
"longName": "Long Name",
"shortName": "Short Name",
"title": "Change Device Name"
},
"import": {
"description": "The current LoRa configuration will be overridden.",
"error": {
"invalidUrl": "Invalid Meshtastic URL"
},
"channelPrefix": "Channel: ",
"channelSetUrl": "Channel Set/QR Code URL",
"channels": "Channels:",
"usePreset": "Use Preset?",
"title": "Import Channel Set"
},
"locationResponse": {
"altitude": "Altitude: ",
"coordinates": "Coordinates: ",
"title": "Location: {{identifier}}"
},
"pkiRegenerateDialog": {
"title": "Regenerate Pre-Shared Key?",
"description": "Are you sure you want to regenerate the pre-shared key?",
"regenerate": "Regenerate"
},
"newDeviceDialog": {
"title": "Connect New Device",
"https": "https",
"http": "http",
"tabHttp": "HTTP",
"tabBluetooth": "Bluetooth",
"tabSerial": "Sériová komunikace",
"useHttps": "Use HTTPS",
"connecting": "Connecting...",
"connect": "Connect",
"connectionFailedAlert": {
"title": "Connection Failed",
"descriptionPrefix": "Could not connect to the device. ",
"httpsHint": "If using HTTPS, you may need to accept a self-signed certificate first. ",
"openLinkPrefix": "Please open ",
"openLinkSuffix": " in a new tab",
"acceptTlsWarningSuffix": ", accept any TLS warnings if prompted, then try again",
"learnMoreLink": "Learn more"
},
"httpConnection": {
"label": "IP Address/Hostname",
"placeholder": "000.000.000.000 / meshtastic.local"
},
"serialConnection": {
"noDevicesPaired": "No devices paired yet.",
"newDeviceButton": "New device",
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
},
"bluetoothConnection": {
"noDevicesPaired": "No devices paired yet.",
"newDeviceButton": "New device"
},
"validation": {
"requiresWebBluetooth": "This connection type requires <0>Web Bluetooth</0>. Please use a supported browser, like Chrome or Edge.",
"requiresWebSerial": "This connection type requires <0>Web Serial</0>. Please use a supported browser, like Chrome or Edge.",
"requiresSecureContext": "This application requires a <0>secure context</0>. Please connect using HTTPS or localhost.",
"additionallyRequiresSecureContext": "Additionally, it requires a <0>secure context</0>. Please connect using HTTPS or localhost."
}
},
"nodeDetails": {
"message": "Zpráva",
"requestPosition": "Request Position",
"traceRoute": "Trace Route",
"airTxUtilization": "Air TX utilization",
"allRawMetrics": "All Raw Metrics:",
"batteryLevel": "Battery level",
"channelUtilization": "Channel utilization",
"details": "Details:",
"deviceMetrics": "Device Metrics:",
"hardware": "Hardware: ",
"lastHeard": "Last Heard: ",
"nodeHexPrefix": "Node Hex: !",
"nodeNumber": "Node Number: ",
"position": "Position:",
"role": "Role: ",
"uptime": "Uptime: ",
"voltage": "Napětí",
"title": "Node Details for {{identifier}}",
"ignoreNode": "Ignore node",
"removeNode": "Remove node",
"unignoreNode": "Unignore node"
},
"pkiBackup": {
"loseKeysWarning": "If you lose your keys, you will need to reset your device.",
"secureBackup": "Its important to backup your public and private keys and store your backup securely!",
"footer": "=== END OF KEYS ===",
"header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===",
"privateKey": "Private Key:",
"publicKey": "Public Key:",
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
"title": "Backup Keys"
},
"pkiBackupReminder": {
"description": "We recommend backing up your key data regularly. Would you like to back up now?",
"title": "Backup Reminder",
"remindLaterPrefix": "Remind me in",
"remindNever": "Never remind me",
"backupNow": "Back up now"
},
"pkiRegenerate": {
"description": "Are you sure you want to regenerate key pair?",
"title": "Regenerate Key Pair"
},
"qr": {
"addChannels": "Add Channels",
"replaceChannels": "Replace Channels",
"description": "The current LoRa configuration will also be shared.",
"sharableUrl": "Sharable URL",
"title": "Generate QR Code"
},
"rebootOta": {
"title": "Schedule Reboot",
"description": "Reboot the connected node after a delay into OTA (Over-the-Air) mode.",
"enterDelay": "Enter delay (sec)",
"scheduled": "Reboot has been scheduled"
},
"reboot": {
"title": "Schedule Reboot",
"description": "Reboot the connected node after x minutes."
},
"refreshKeys": {
"description": {
"acceptNewKeys": "This will remove the node from device and request new keys.",
"keyMismatchReasonSuffix": ". This is due to the remote node's current public key does not match the previously stored key for this node.",
"unableToSendDmPrefix": "Your node is unable to send a direct message to node: "
},
"acceptNewKeys": "Accept New Keys",
"title": "Keys Mismatch - {{identifier}}"
},
"removeNode": {
"description": "Are you sure you want to remove this Node?",
"title": "Remove Node?"
},
"shutdown": {
"title": "Schedule Shutdown",
"description": "Turn off the connected node after x minutes."
},
"traceRoute": {
"routeToDestination": "Route to destination:",
"routeBack": "Route back:"
},
"tracerouteResponse": {
"title": "Traceroute: {{identifier}}"
},
"unsafeRoles": {
"confirmUnderstanding": "Yes, I know what I'm doing",
"conjunction": " and the blog post about ",
"postamble": " and understand the implications of changing the role.",
"preamble": "I have read the ",
"choosingRightDeviceRole": "Choosing The Right Device Role",
"deviceRoleDocumentation": "Device Role Documentation",
"title": "Jste si jistý?"
},
"managedMode": {
"confirmUnderstanding": "Yes, I know what I'm doing",
"title": "Jste si jistý?",
"description": "Enabling Managed Mode blocks client applications (including the web client) from writing configurations to a radio. Once enabled, radio configurations can <bold>only</bold> be changed through Remote Admin messages. This setting is not required for remote node administration."
}
}

View File

@@ -1,39 +1,39 @@
{
"page": {
"title": "Messages: {{chatName}}",
"placeholder": "Enter Message"
},
"emptyState": {
"title": "Select a Chat",
"text": "No messages yet."
},
"selectChatPrompt": {
"text": "Select a channel or node to start messaging."
},
"sendMessage": {
"placeholder": "Enter your message here...",
"sendButton": "Odeslat"
},
"actionsMenu": {
"addReactionLabel": "Add Reaction",
"replyLabel": "Reply"
},
"deliveryStatus": {
"delivered": {
"label": "Message delivered",
"displayText": "Message delivered"
},
"failed": {
"label": "Message delivery failed",
"displayText": "Delivery failed"
},
"unknown": {
"label": "Message status unknown",
"displayText": "Unknown state"
},
"waiting": {
"label": "Sending message",
"displayText": "Waiting for delivery"
}
}
"page": {
"title": "Messages: {{chatName}}",
"placeholder": "Enter Message"
},
"emptyState": {
"title": "Select a Chat",
"text": "No messages yet."
},
"selectChatPrompt": {
"text": "Select a channel or node to start messaging."
},
"sendMessage": {
"placeholder": "Enter your message here...",
"sendButton": "Odeslat"
},
"actionsMenu": {
"addReactionLabel": "Add Reaction",
"replyLabel": "Reply"
},
"deliveryStatus": {
"delivered": {
"label": "Message delivered",
"displayText": "Message delivered"
},
"failed": {
"label": "Message delivery failed",
"displayText": "Delivery failed"
},
"unknown": {
"label": "Message status unknown",
"displayText": "Unknown state"
},
"waiting": {
"label": "Sending message",
"displayText": "Waiting for delivery"
}
}
}

View File

@@ -1,448 +1,448 @@
{
"page": {
"tabAmbientLighting": "Ambientní osvětlení",
"tabAudio": "Zvuk",
"tabCannedMessage": "Canned",
"tabDetectionSensor": "Detekční senzor",
"tabExternalNotification": "Ext Notif",
"tabMqtt": "MQTT",
"tabNeighborInfo": "Informace o sousedech",
"tabPaxcounter": "Paxcounter",
"tabRangeTest": "Zkouška dosahu",
"tabSerial": "Sériová komunikace",
"tabStoreAndForward": "S&F",
"tabTelemetry": "Telemetrie"
},
"ambientLighting": {
"title": "Ambient Lighting Settings",
"description": "Settings for the Ambient Lighting module",
"ledState": {
"label": "LED State",
"description": "Sets LED to on or off"
},
"current": {
"label": "Proud",
"description": "Sets the current for the LED output. Default is 10"
},
"red": {
"label": "Červená",
"description": "Sets the red LED level. Values are 0-255"
},
"green": {
"label": "Zelená",
"description": "Sets the green LED level. Values are 0-255"
},
"blue": {
"label": "Modrá",
"description": "Sets the blue LED level. Values are 0-255"
}
},
"audio": {
"title": "Audio Settings",
"description": "Settings for the Audio module",
"codec2Enabled": {
"label": "Codec 2 Enabled",
"description": "Enable Codec 2 audio encoding"
},
"pttPin": {
"label": "PTT Pin",
"description": "GPIO pin to use for PTT"
},
"bitrate": {
"label": "Bitrate",
"description": "Bitrate to use for audio encoding"
},
"i2sWs": {
"label": "i2S WS",
"description": "GPIO pin to use for i2S WS"
},
"i2sSd": {
"label": "i2S SD",
"description": "GPIO pin to use for i2S SD"
},
"i2sDin": {
"label": "i2S DIN",
"description": "GPIO pin to use for i2S DIN"
},
"i2sSck": {
"label": "i2S SCK",
"description": "GPIO pin to use for i2S SCK"
}
},
"cannedMessage": {
"title": "Canned Message Settings",
"description": "Settings for the Canned Message module",
"moduleEnabled": {
"label": "Module Enabled",
"description": "Enable Canned Message"
},
"rotary1Enabled": {
"label": "Rotary Encoder #1 Enabled",
"description": "Enable the rotary encoder"
},
"inputbrokerPinA": {
"label": "Encoder Pin A",
"description": "GPIO Pin Value (1-39) For encoder port A"
},
"inputbrokerPinB": {
"label": "Encoder Pin B",
"description": "GPIO Pin Value (1-39) For encoder port B"
},
"inputbrokerPinPress": {
"label": "Encoder Pin Press",
"description": "GPIO Pin Value (1-39) For encoder Press"
},
"inputbrokerEventCw": {
"label": "Clockwise event",
"description": "Select input event."
},
"inputbrokerEventCcw": {
"label": "Counter Clockwise event",
"description": "Select input event."
},
"inputbrokerEventPress": {
"label": "Press event",
"description": "Select input event"
},
"updown1Enabled": {
"label": "Up Down enabled",
"description": "Enable the up / down encoder"
},
"allowInputSource": {
"label": "Allow Input Source",
"description": "Select from: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
},
"sendBell": {
"label": "Send Bell",
"description": "Sends a bell character with each message"
}
},
"detectionSensor": {
"title": "Detection Sensor Settings",
"description": "Settings for the Detection Sensor module",
"enabled": {
"label": "Povoleno",
"description": "Enable or disable Detection Sensor Module"
},
"minimumBroadcastSecs": {
"label": "Minimum Broadcast Seconds",
"description": "The interval in seconds of how often we can send a message to the mesh when a state change is detected"
},
"stateBroadcastSecs": {
"label": "State Broadcast Seconds",
"description": "The interval in seconds of how often we should send a message to the mesh with the current state regardless of changes"
},
"sendBell": {
"label": "Send Bell",
"description": "Send ASCII bell with alert message"
},
"name": {
"label": "Friendly Name",
"description": "Used to format the message sent to mesh, max 20 Characters"
},
"monitorPin": {
"label": "Monitor Pin",
"description": "The GPIO pin to monitor for state changes"
},
"detectionTriggerType": {
"label": "Detection Triggered Type",
"description": "The type of trigger event to be used"
},
"usePullup": {
"label": "Use Pullup",
"description": "Whether or not use INPUT_PULLUP mode for GPIO pin"
}
},
"externalNotification": {
"title": "External Notification Settings",
"description": "Configure the external notification module",
"enabled": {
"label": "Module Enabled",
"description": "Enable External Notification"
},
"outputMs": {
"label": "Output MS",
"description": "Output MS"
},
"output": {
"label": "Output",
"description": "Output"
},
"outputVibra": {
"label": "Output Vibrate",
"description": "Output Vibrate"
},
"outputBuzzer": {
"label": "Output Buzzer",
"description": "Output Buzzer"
},
"active": {
"label": "Active",
"description": "Active"
},
"alertMessage": {
"label": "Alert Message",
"description": "Alert Message"
},
"alertMessageVibra": {
"label": "Alert Message Vibrate",
"description": "Alert Message Vibrate"
},
"alertMessageBuzzer": {
"label": "Alert Message Buzzer",
"description": "Alert Message Buzzer"
},
"alertBell": {
"label": "Alert Bell",
"description": "Should an alert be triggered when receiving an incoming bell?"
},
"alertBellVibra": {
"label": "Alert Bell Vibrate",
"description": "Alert Bell Vibrate"
},
"alertBellBuzzer": {
"label": "Alert Bell Buzzer",
"description": "Alert Bell Buzzer"
},
"usePwm": {
"label": "Use PWM",
"description": "Use PWM"
},
"nagTimeout": {
"label": "Nag Timeout",
"description": "Nag Timeout"
},
"useI2sAsBuzzer": {
"label": "Use I²S Pin as Buzzer",
"description": "Designate I²S Pin as Buzzer Output"
}
},
"mqtt": {
"title": "MQTT Settings",
"description": "Settings for the MQTT module",
"enabled": {
"label": "Povoleno",
"description": "Enable or disable MQTT"
},
"address": {
"label": "MQTT Server Address",
"description": "MQTT server address to use for default/custom servers"
},
"username": {
"label": "MQTT Username",
"description": "MQTT username to use for default/custom servers"
},
"password": {
"label": "MQTT Password",
"description": "MQTT password to use for default/custom servers"
},
"encryptionEnabled": {
"label": "Encryption Enabled",
"description": "Enable or disable MQTT encryption. Note: All messages are sent to the MQTT broker unencrypted if this option is not enabled, even when your uplink channels have encryption keys set. This includes position data."
},
"jsonEnabled": {
"label": "JSON Enabled",
"description": "Whether to send/consume JSON packets on MQTT"
},
"tlsEnabled": {
"label": "TLS povoleno",
"description": "Enable or disable TLS"
},
"root": {
"label": "Kořenové téma",
"description": "MQTT root topic to use for default/custom servers"
},
"proxyToClientEnabled": {
"label": "MQTT Client Proxy Enabled",
"description": "Utilizes the network connection to proxy MQTT messages to the client."
},
"mapReportingEnabled": {
"label": "Map Reporting Enabled",
"description": "Your node will periodically send an unencrypted map report packet to the configured MQTT server, this includes id, short and long name, approximate location, hardware model, role, firmware version, LoRa region, modem preset and primary channel name."
},
"mapReportSettings": {
"publishIntervalSecs": {
"label": "Map Report Publish Interval (s)",
"description": "Interval in seconds to publish map reports"
},
"positionPrecision": {
"label": "Approximate Location",
"description": "Position shared will be accurate within this distance",
"options": {
"metric_km23": "Within 23 km",
"metric_km12": "Within 12 km",
"metric_km5_8": "Within 5.8 km",
"metric_km2_9": "Within 2.9 km",
"metric_km1_5": "Within 1.5 km",
"metric_m700": "Within 700 m",
"metric_m350": "Within 350 m",
"metric_m200": "Within 200 m",
"metric_m90": "Within 90 m",
"metric_m50": "Within 50 m",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
}
},
"neighborInfo": {
"title": "Neighbor Info Settings",
"description": "Settings for the Neighbor Info module",
"enabled": {
"label": "Povoleno",
"description": "Enable or disable Neighbor Info Module"
},
"updateInterval": {
"label": "Update Interval",
"description": "Interval in seconds of how often we should try to send our Neighbor Info to the mesh"
}
},
"paxcounter": {
"title": "Paxcounter Settings",
"description": "Settings for the Paxcounter module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Paxcounter"
},
"paxcounterUpdateInterval": {
"label": "Update Interval (seconds)",
"description": "How long to wait between sending paxcounter packets"
},
"wifiThreshold": {
"label": "WiFi RSSI Threshold",
"description": "At what WiFi RSSI level should the counter increase. Defaults to -80."
},
"bleThreshold": {
"label": "BLE RSSI Threshold",
"description": "At what BLE RSSI level should the counter increase. Defaults to -80."
}
},
"rangeTest": {
"title": "Range Test Settings",
"description": "Settings for the Range Test module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Range Test"
},
"sender": {
"label": "Message Interval",
"description": "How long to wait between sending test packets"
},
"save": {
"label": "Save CSV to storage",
"description": "ESP32 Only"
}
},
"serial": {
"title": "Serial Settings",
"description": "Settings for the Serial module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Serial output"
},
"echo": {
"label": "Echo",
"description": "Any packets you send will be echoed back to your device"
},
"rxd": {
"label": "Receive Pin",
"description": "Set the GPIO pin to the RXD pin you have set up."
},
"txd": {
"label": "Transmit Pin",
"description": "Set the GPIO pin to the TXD pin you have set up."
},
"baud": {
"label": "Baud Rate",
"description": "The serial baud rate"
},
"timeout": {
"label": "Vypršel čas spojení",
"description": "Seconds to wait before we consider your packet as 'done'"
},
"mode": {
"label": "Mode",
"description": "Select Mode"
},
"overrideConsoleSerialPort": {
"label": "Override Console Serial Port",
"description": "If you have a serial port connected to the console, this will override it."
}
},
"storeForward": {
"title": "Store & Forward Settings",
"description": "Settings for the Store & Forward module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Store & Forward"
},
"heartbeat": {
"label": "Heartbeat Enabled",
"description": "Enable Store & Forward heartbeat"
},
"records": {
"label": "Počet záznamů",
"description": "Number of records to store"
},
"historyReturnMax": {
"label": "History return max",
"description": "Max number of records to return"
},
"historyReturnWindow": {
"label": "History return window",
"description": "Max number of records to return"
}
},
"telemetry": {
"title": "Telemetry Settings",
"description": "Settings for the Telemetry module",
"deviceUpdateInterval": {
"label": "Device Metrics",
"description": "Interval aktualizace měření spotřeby (v sekundách)"
},
"environmentUpdateInterval": {
"label": "Interval aktualizace měření životního prostředí (v sekundách)",
"description": ""
},
"environmentMeasurementEnabled": {
"label": "Module Enabled",
"description": "Enable the Environment Telemetry"
},
"environmentScreenEnabled": {
"label": "Displayed on Screen",
"description": "Show the Telemetry Module on the OLED"
},
"environmentDisplayFahrenheit": {
"label": "Display Fahrenheit",
"description": "Display temp in Fahrenheit"
},
"airQualityEnabled": {
"label": "Air Quality Enabled",
"description": "Enable the Air Quality Telemetry"
},
"airQualityInterval": {
"label": "Air Quality Update Interval",
"description": "How often to send Air Quality data over the mesh"
},
"powerMeasurementEnabled": {
"label": "Power Measurement Enabled",
"description": "Enable the Power Measurement Telemetry"
},
"powerUpdateInterval": {
"label": "Power Update Interval",
"description": "How often to send Power data over the mesh"
},
"powerScreenEnabled": {
"label": "Power Screen Enabled",
"description": "Enable the Power Telemetry Screen"
}
}
"page": {
"tabAmbientLighting": "Ambientní osvětlení",
"tabAudio": "Zvuk",
"tabCannedMessage": "Canned",
"tabDetectionSensor": "Detekční senzor",
"tabExternalNotification": "Ext Notif",
"tabMqtt": "MQTT",
"tabNeighborInfo": "Informace o sousedech",
"tabPaxcounter": "Paxcounter",
"tabRangeTest": "Zkouška dosahu",
"tabSerial": "Sériová komunikace",
"tabStoreAndForward": "S&F",
"tabTelemetry": "Telemetrie"
},
"ambientLighting": {
"title": "Ambient Lighting Settings",
"description": "Settings for the Ambient Lighting module",
"ledState": {
"label": "LED State",
"description": "Sets LED to on or off"
},
"current": {
"label": "Proud",
"description": "Sets the current for the LED output. Default is 10"
},
"red": {
"label": "Červená",
"description": "Sets the red LED level. Values are 0-255"
},
"green": {
"label": "Zelená",
"description": "Sets the green LED level. Values are 0-255"
},
"blue": {
"label": "Modrá",
"description": "Sets the blue LED level. Values are 0-255"
}
},
"audio": {
"title": "Audio Settings",
"description": "Settings for the Audio module",
"codec2Enabled": {
"label": "Codec 2 Enabled",
"description": "Enable Codec 2 audio encoding"
},
"pttPin": {
"label": "PTT Pin",
"description": "GPIO pin to use for PTT"
},
"bitrate": {
"label": "Bitrate",
"description": "Bitrate to use for audio encoding"
},
"i2sWs": {
"label": "i2S WS",
"description": "GPIO pin to use for i2S WS"
},
"i2sSd": {
"label": "i2S SD",
"description": "GPIO pin to use for i2S SD"
},
"i2sDin": {
"label": "i2S DIN",
"description": "GPIO pin to use for i2S DIN"
},
"i2sSck": {
"label": "i2S SCK",
"description": "GPIO pin to use for i2S SCK"
}
},
"cannedMessage": {
"title": "Canned Message Settings",
"description": "Settings for the Canned Message module",
"moduleEnabled": {
"label": "Module Enabled",
"description": "Enable Canned Message"
},
"rotary1Enabled": {
"label": "Rotary Encoder #1 Enabled",
"description": "Enable the rotary encoder"
},
"inputbrokerPinA": {
"label": "Encoder Pin A",
"description": "GPIO Pin Value (1-39) For encoder port A"
},
"inputbrokerPinB": {
"label": "Encoder Pin B",
"description": "GPIO Pin Value (1-39) For encoder port B"
},
"inputbrokerPinPress": {
"label": "Encoder Pin Press",
"description": "GPIO Pin Value (1-39) For encoder Press"
},
"inputbrokerEventCw": {
"label": "Clockwise event",
"description": "Select input event."
},
"inputbrokerEventCcw": {
"label": "Counter Clockwise event",
"description": "Select input event."
},
"inputbrokerEventPress": {
"label": "Press event",
"description": "Select input event"
},
"updown1Enabled": {
"label": "Up Down enabled",
"description": "Enable the up / down encoder"
},
"allowInputSource": {
"label": "Allow Input Source",
"description": "Select from: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
},
"sendBell": {
"label": "Send Bell",
"description": "Sends a bell character with each message"
}
},
"detectionSensor": {
"title": "Detection Sensor Settings",
"description": "Settings for the Detection Sensor module",
"enabled": {
"label": "Povoleno",
"description": "Enable or disable Detection Sensor Module"
},
"minimumBroadcastSecs": {
"label": "Minimum Broadcast Seconds",
"description": "The interval in seconds of how often we can send a message to the mesh when a state change is detected"
},
"stateBroadcastSecs": {
"label": "State Broadcast Seconds",
"description": "The interval in seconds of how often we should send a message to the mesh with the current state regardless of changes"
},
"sendBell": {
"label": "Send Bell",
"description": "Send ASCII bell with alert message"
},
"name": {
"label": "Friendly Name",
"description": "Used to format the message sent to mesh, max 20 Characters"
},
"monitorPin": {
"label": "Monitor Pin",
"description": "The GPIO pin to monitor for state changes"
},
"detectionTriggerType": {
"label": "Detection Triggered Type",
"description": "The type of trigger event to be used"
},
"usePullup": {
"label": "Use Pullup",
"description": "Whether or not use INPUT_PULLUP mode for GPIO pin"
}
},
"externalNotification": {
"title": "External Notification Settings",
"description": "Configure the external notification module",
"enabled": {
"label": "Module Enabled",
"description": "Enable External Notification"
},
"outputMs": {
"label": "Output MS",
"description": "Output MS"
},
"output": {
"label": "Output",
"description": "Output"
},
"outputVibra": {
"label": "Output Vibrate",
"description": "Output Vibrate"
},
"outputBuzzer": {
"label": "Output Buzzer",
"description": "Output Buzzer"
},
"active": {
"label": "Active",
"description": "Active"
},
"alertMessage": {
"label": "Alert Message",
"description": "Alert Message"
},
"alertMessageVibra": {
"label": "Alert Message Vibrate",
"description": "Alert Message Vibrate"
},
"alertMessageBuzzer": {
"label": "Alert Message Buzzer",
"description": "Alert Message Buzzer"
},
"alertBell": {
"label": "Alert Bell",
"description": "Should an alert be triggered when receiving an incoming bell?"
},
"alertBellVibra": {
"label": "Alert Bell Vibrate",
"description": "Alert Bell Vibrate"
},
"alertBellBuzzer": {
"label": "Alert Bell Buzzer",
"description": "Alert Bell Buzzer"
},
"usePwm": {
"label": "Use PWM",
"description": "Use PWM"
},
"nagTimeout": {
"label": "Nag Timeout",
"description": "Nag Timeout"
},
"useI2sAsBuzzer": {
"label": "Use I²S Pin as Buzzer",
"description": "Designate I²S Pin as Buzzer Output"
}
},
"mqtt": {
"title": "MQTT Settings",
"description": "Settings for the MQTT module",
"enabled": {
"label": "Povoleno",
"description": "Enable or disable MQTT"
},
"address": {
"label": "MQTT Server Address",
"description": "MQTT server address to use for default/custom servers"
},
"username": {
"label": "MQTT Username",
"description": "MQTT username to use for default/custom servers"
},
"password": {
"label": "MQTT Password",
"description": "MQTT password to use for default/custom servers"
},
"encryptionEnabled": {
"label": "Encryption Enabled",
"description": "Enable or disable MQTT encryption. Note: All messages are sent to the MQTT broker unencrypted if this option is not enabled, even when your uplink channels have encryption keys set. This includes position data."
},
"jsonEnabled": {
"label": "JSON Enabled",
"description": "Whether to send/consume JSON packets on MQTT"
},
"tlsEnabled": {
"label": "TLS povoleno",
"description": "Enable or disable TLS"
},
"root": {
"label": "Kořenové téma",
"description": "MQTT root topic to use for default/custom servers"
},
"proxyToClientEnabled": {
"label": "MQTT Client Proxy Enabled",
"description": "Utilizes the network connection to proxy MQTT messages to the client."
},
"mapReportingEnabled": {
"label": "Map Reporting Enabled",
"description": "Your node will periodically send an unencrypted map report packet to the configured MQTT server, this includes id, short and long name, approximate location, hardware model, role, firmware version, LoRa region, modem preset and primary channel name."
},
"mapReportSettings": {
"publishIntervalSecs": {
"label": "Map Report Publish Interval (s)",
"description": "Interval in seconds to publish map reports"
},
"positionPrecision": {
"label": "Approximate Location",
"description": "Position shared will be accurate within this distance",
"options": {
"metric_km23": "Within 23 km",
"metric_km12": "Within 12 km",
"metric_km5_8": "Within 5.8 km",
"metric_km2_9": "Within 2.9 km",
"metric_km1_5": "Within 1.5 km",
"metric_m700": "Within 700 m",
"metric_m350": "Within 350 m",
"metric_m200": "Within 200 m",
"metric_m90": "Within 90 m",
"metric_m50": "Within 50 m",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
}
},
"neighborInfo": {
"title": "Neighbor Info Settings",
"description": "Settings for the Neighbor Info module",
"enabled": {
"label": "Povoleno",
"description": "Enable or disable Neighbor Info Module"
},
"updateInterval": {
"label": "Update Interval",
"description": "Interval in seconds of how often we should try to send our Neighbor Info to the mesh"
}
},
"paxcounter": {
"title": "Paxcounter Settings",
"description": "Settings for the Paxcounter module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Paxcounter"
},
"paxcounterUpdateInterval": {
"label": "Update Interval (seconds)",
"description": "How long to wait between sending paxcounter packets"
},
"wifiThreshold": {
"label": "WiFi RSSI Threshold",
"description": "At what WiFi RSSI level should the counter increase. Defaults to -80."
},
"bleThreshold": {
"label": "BLE RSSI Threshold",
"description": "At what BLE RSSI level should the counter increase. Defaults to -80."
}
},
"rangeTest": {
"title": "Range Test Settings",
"description": "Settings for the Range Test module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Range Test"
},
"sender": {
"label": "Message Interval",
"description": "How long to wait between sending test packets"
},
"save": {
"label": "Save CSV to storage",
"description": "ESP32 Only"
}
},
"serial": {
"title": "Serial Settings",
"description": "Settings for the Serial module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Serial output"
},
"echo": {
"label": "Echo",
"description": "Any packets you send will be echoed back to your device"
},
"rxd": {
"label": "Receive Pin",
"description": "Set the GPIO pin to the RXD pin you have set up."
},
"txd": {
"label": "Transmit Pin",
"description": "Set the GPIO pin to the TXD pin you have set up."
},
"baud": {
"label": "Baud Rate",
"description": "The serial baud rate"
},
"timeout": {
"label": "Vypršel čas spojení",
"description": "Seconds to wait before we consider your packet as 'done'"
},
"mode": {
"label": "Mode",
"description": "Select Mode"
},
"overrideConsoleSerialPort": {
"label": "Override Console Serial Port",
"description": "If you have a serial port connected to the console, this will override it."
}
},
"storeForward": {
"title": "Store & Forward Settings",
"description": "Settings for the Store & Forward module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Store & Forward"
},
"heartbeat": {
"label": "Heartbeat Enabled",
"description": "Enable Store & Forward heartbeat"
},
"records": {
"label": "Počet záznamů",
"description": "Number of records to store"
},
"historyReturnMax": {
"label": "History return max",
"description": "Max number of records to return"
},
"historyReturnWindow": {
"label": "History return window",
"description": "Max number of records to return"
}
},
"telemetry": {
"title": "Telemetry Settings",
"description": "Settings for the Telemetry module",
"deviceUpdateInterval": {
"label": "Device Metrics",
"description": "Interval aktualizace měření spotřeby (v sekundách)"
},
"environmentUpdateInterval": {
"label": "Interval aktualizace měření životního prostředí (v sekundách)",
"description": ""
},
"environmentMeasurementEnabled": {
"label": "Module Enabled",
"description": "Enable the Environment Telemetry"
},
"environmentScreenEnabled": {
"label": "Displayed on Screen",
"description": "Show the Telemetry Module on the OLED"
},
"environmentDisplayFahrenheit": {
"label": "Display Fahrenheit",
"description": "Display temp in Fahrenheit"
},
"airQualityEnabled": {
"label": "Air Quality Enabled",
"description": "Enable the Air Quality Telemetry"
},
"airQualityInterval": {
"label": "Air Quality Update Interval",
"description": "How often to send Air Quality data over the mesh"
},
"powerMeasurementEnabled": {
"label": "Power Measurement Enabled",
"description": "Enable the Power Measurement Telemetry"
},
"powerUpdateInterval": {
"label": "Power Update Interval",
"description": "How often to send Power data over the mesh"
},
"powerScreenEnabled": {
"label": "Power Screen Enabled",
"description": "Enable the Power Telemetry Screen"
}
}
}

View File

@@ -1,63 +1,63 @@
{
"nodeDetail": {
"publicKeyEnabled": {
"label": "Public Key Enabled"
},
"noPublicKey": {
"label": "No Public Key"
},
"directMessage": {
"label": "Direct Message {{shortName}}"
},
"favorite": {
"label": "Oblíbené",
"tooltip": "Add or remove this node from your favorites"
},
"notFavorite": {
"label": "Not a Favorite"
},
"error": {
"label": "Chyba",
"text": "An error occurred while fetching node details. Please try again later."
},
"status": {
"heard": "Heard",
"mqtt": "MQTT"
},
"elevation": {
"label": "Elevation"
},
"channelUtil": {
"label": "Channel Util"
},
"airtimeUtil": {
"label": "Airtime Util"
}
},
"nodesTable": {
"headings": {
"longName": "Long Name",
"connection": "Connection",
"lastHeard": "Last Heard",
"encryption": "Encryption",
"model": "Model",
"macAddress": "MAC Address"
},
"connectionStatus": {
"direct": "Přímý",
"away": "away",
"unknown": "-",
"viaMqtt": ", via MQTT"
},
"lastHeardStatus": {
"never": "Never"
}
},
"actions": {
"added": "Added",
"removed": "Removed",
"ignoreNode": "Ignore Node",
"unignoreNode": "Unignore Node",
"requestPosition": "Request Position"
}
"nodeDetail": {
"publicKeyEnabled": {
"label": "Public Key Enabled"
},
"noPublicKey": {
"label": "No Public Key"
},
"directMessage": {
"label": "Direct Message {{shortName}}"
},
"favorite": {
"label": "Oblíbené",
"tooltip": "Add or remove this node from your favorites"
},
"notFavorite": {
"label": "Not a Favorite"
},
"error": {
"label": "Chyba",
"text": "An error occurred while fetching node details. Please try again later."
},
"status": {
"heard": "Heard",
"mqtt": "MQTT"
},
"elevation": {
"label": "Elevation"
},
"channelUtil": {
"label": "Channel Util"
},
"airtimeUtil": {
"label": "Airtime Util"
}
},
"nodesTable": {
"headings": {
"longName": "Long Name",
"connection": "Connection",
"lastHeard": "Last Heard",
"encryption": "Encryption",
"model": "Model",
"macAddress": "MAC Address"
},
"connectionStatus": {
"direct": "Přímý",
"away": "away",
"unknown": "-",
"viaMqtt": ", via MQTT"
},
"lastHeardStatus": {
"never": "Never"
}
},
"actions": {
"added": "Added",
"removed": "Removed",
"ignoreNode": "Ignore Node",
"unignoreNode": "Unignore Node",
"requestPosition": "Request Position"
}
}

View File

@@ -1,228 +1,228 @@
{
"navigation": {
"title": "Navigation",
"messages": "Zprávy",
"map": "Mapa",
"config": "Config",
"radioConfig": "Radio Config",
"moduleConfig": "Module Config",
"channels": "Kanály",
"nodes": "Uzly"
},
"app": {
"title": "Meshtastic",
"logo": "Meshtastic Logo"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Open sidebar",
"close": "Close sidebar"
}
},
"deviceInfo": {
"volts": "{{voltage}} volts",
"firmware": {
"title": "Firmware",
"version": "v{{version}}",
"buildDate": "Build date: {{date}}"
},
"deviceName": {
"title": "Device Name",
"changeName": "Change Device Name",
"placeholder": "Enter device name"
},
"editDeviceName": "Edit device name"
}
},
"batteryStatus": {
"charging": "{{level}}% charging",
"pluggedIn": "Plugged in",
"title": "Baterie"
},
"search": {
"nodes": "Search nodes...",
"channels": "Search channels...",
"commandPalette": "Search commands..."
},
"toast": {
"positionRequestSent": {
"title": "Position request sent."
},
"requestingPosition": {
"title": "Requesting position, please wait..."
},
"sendingTraceroute": {
"title": "Sending Traceroute, please wait..."
},
"tracerouteSent": {
"title": "Traceroute sent."
},
"savedChannel": {
"title": "Saved Channel: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Chat is using PKI encryption."
},
"pskEncryption": {
"title": "Chat is using PSK encryption."
}
},
"configSaveError": {
"title": "Error Saving Config",
"description": "An error occurred while saving the configuration."
},
"validationError": {
"title": "Config Errors Exist",
"description": "Please fix the configuration errors before saving."
},
"saveSuccess": {
"title": "Saving Config",
"description": "The configuration change {{case}} has been saved."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
}
},
"notifications": {
"copied": {
"label": "Copied!"
},
"copyToClipboard": {
"label": "Copy to clipboard"
},
"hidePassword": {
"label": "Skrýt heslo"
},
"showPassword": {
"label": "Zobrazit heslo"
},
"deliveryStatus": {
"delivered": "Delivered",
"failed": "Delivery Failed",
"waiting": "Waiting",
"unknown": "Unknown"
}
},
"general": {
"label": "General"
},
"hardware": {
"label": "Hardware"
},
"metrics": {
"label": "Metriky"
},
"role": {
"label": "Role"
},
"filter": {
"label": "Filtr"
},
"advanced": {
"label": "Advanced"
},
"clearInput": {
"label": "Clear input"
},
"resetFilters": {
"label": "Reset Filters"
},
"nodeName": {
"label": "Node name/number",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Airtime Utilization (%)"
},
"batteryLevel": {
"label": "Battery level (%)",
"labelText": "Battery level (%): {{value}}"
},
"batteryVoltage": {
"label": "Battery voltage (V)",
"title": "Napětí"
},
"channelUtilization": {
"label": "Channel Utilization (%)"
},
"hops": {
"direct": "Přímý",
"label": "Number of hops",
"text": "Number of hops: {{value}}"
},
"lastHeard": {
"label": "Naposledy slyšen",
"labelText": "Last heard: {{value}}",
"nowLabel": "Now"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Favorites"
},
"hide": {
"label": "Hide"
},
"showOnly": {
"label": "Show Only"
},
"viaMqtt": {
"label": "Connected via MQTT"
},
"hopsUnknown": {
"label": "Unknown number of hops"
},
"showUnheard": {
"label": "Never heard"
},
"language": {
"label": "Jazyk",
"changeLanguage": "Change Language"
},
"theme": {
"dark": "Tmavý",
"light": "Světlý",
"system": "Automatic",
"changeTheme": "Change Color Scheme"
},
"errorPage": {
"title": "This is a little embarrassing...",
"description1": "We are really sorry but an error occurred in the web client that caused it to crash. <br /> This is not supposed to happen, and we are working hard to fix it.",
"description2": "The best way to prevent this from happening again to you or anyone else is to report the issue to us.",
"reportInstructions": "Please include the following information in your report:",
"reportSteps": {
"step1": "What you were doing when the error occurred",
"step2": "What you expected to happen",
"step3": "What actually happened",
"step4": "Any other relevant information"
},
"reportLink": "You can report the issue to our <0>GitHub</0>",
"dashboardLink": "Return to the <0>dashboard</0>",
"detailsSummary": "Error Details",
"errorMessageLabel": "Error message:",
"stackTraceLabel": "Stack trace:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® is a registered trademark of Meshtastic LLC. | <1>Legal Information</1>",
"commitSha": "Commit SHA: {{sha}}"
}
"navigation": {
"title": "Navigation",
"messages": "Zprávy",
"map": "Mapa",
"config": "Config",
"radioConfig": "Radio Config",
"moduleConfig": "Module Config",
"channels": "Kanály",
"nodes": "Uzly"
},
"app": {
"title": "Meshtastic",
"logo": "Meshtastic Logo"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Open sidebar",
"close": "Close sidebar"
}
},
"deviceInfo": {
"volts": "{{voltage}} volts",
"firmware": {
"title": "Firmware",
"version": "v{{version}}",
"buildDate": "Build date: {{date}}"
},
"deviceName": {
"title": "Device Name",
"changeName": "Change Device Name",
"placeholder": "Enter device name"
},
"editDeviceName": "Edit device name"
}
},
"batteryStatus": {
"charging": "{{level}}% charging",
"pluggedIn": "Plugged in",
"title": "Baterie"
},
"search": {
"nodes": "Search nodes...",
"channels": "Search channels...",
"commandPalette": "Search commands..."
},
"toast": {
"positionRequestSent": {
"title": "Position request sent."
},
"requestingPosition": {
"title": "Requesting position, please wait..."
},
"sendingTraceroute": {
"title": "Sending Traceroute, please wait..."
},
"tracerouteSent": {
"title": "Traceroute sent."
},
"savedChannel": {
"title": "Saved Channel: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Chat is using PKI encryption."
},
"pskEncryption": {
"title": "Chat is using PSK encryption."
}
},
"configSaveError": {
"title": "Error Saving Config",
"description": "An error occurred while saving the configuration."
},
"validationError": {
"title": "Config Errors Exist",
"description": "Please fix the configuration errors before saving."
},
"saveSuccess": {
"title": "Saving Config",
"description": "The configuration change {{case}} has been saved."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
}
},
"notifications": {
"copied": {
"label": "Copied!"
},
"copyToClipboard": {
"label": "Copy to clipboard"
},
"hidePassword": {
"label": "Skrýt heslo"
},
"showPassword": {
"label": "Zobrazit heslo"
},
"deliveryStatus": {
"delivered": "Delivered",
"failed": "Delivery Failed",
"waiting": "Waiting",
"unknown": "Unknown"
}
},
"general": {
"label": "General"
},
"hardware": {
"label": "Hardware"
},
"metrics": {
"label": "Metriky"
},
"role": {
"label": "Role"
},
"filter": {
"label": "Filtr"
},
"advanced": {
"label": "Advanced"
},
"clearInput": {
"label": "Clear input"
},
"resetFilters": {
"label": "Reset Filters"
},
"nodeName": {
"label": "Node name/number",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Airtime Utilization (%)"
},
"batteryLevel": {
"label": "Battery level (%)",
"labelText": "Battery level (%): {{value}}"
},
"batteryVoltage": {
"label": "Battery voltage (V)",
"title": "Napětí"
},
"channelUtilization": {
"label": "Channel Utilization (%)"
},
"hops": {
"direct": "Přímý",
"label": "Number of hops",
"text": "Number of hops: {{value}}"
},
"lastHeard": {
"label": "Naposledy slyšen",
"labelText": "Last heard: {{value}}",
"nowLabel": "Now"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Favorites"
},
"hide": {
"label": "Hide"
},
"showOnly": {
"label": "Show Only"
},
"viaMqtt": {
"label": "Connected via MQTT"
},
"hopsUnknown": {
"label": "Unknown number of hops"
},
"showUnheard": {
"label": "Never heard"
},
"language": {
"label": "Jazyk",
"changeLanguage": "Change Language"
},
"theme": {
"dark": "Tmavý",
"light": "Světlý",
"system": "Automatic",
"changeTheme": "Change Color Scheme"
},
"errorPage": {
"title": "This is a little embarrassing...",
"description1": "We are really sorry but an error occurred in the web client that caused it to crash. <br /> This is not supposed to happen, and we are working hard to fix it.",
"description2": "The best way to prevent this from happening again to you or anyone else is to report the issue to us.",
"reportInstructions": "Please include the following information in your report:",
"reportSteps": {
"step1": "What you were doing when the error occurred",
"step2": "What you expected to happen",
"step3": "What actually happened",
"step4": "Any other relevant information"
},
"reportLink": "You can report the issue to our <0>GitHub</0>",
"dashboardLink": "Return to the <0>dashboard</0>",
"detailsSummary": "Error Details",
"errorMessageLabel": "Error message:",
"stackTraceLabel": "Stack trace:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® is a registered trademark of Meshtastic LLC. | <1>Legal Information</1>",
"commitSha": "Commit SHA: {{sha}}"
}
}

View File

@@ -1,69 +1,69 @@
{
"page": {
"sectionLabel": "Kanäle",
"channelName": "Kanal {{channelName}}",
"broadcastLabel": "Primär",
"channelIndex": "Kanal {{index}}"
},
"validation": {
"pskInvalid": "Bitte geben Sie einen gültigen {{bits}} Bit PSK Schlüssel ein."
},
"settings": {
"label": "Kanaleinstellungen",
"description": "Verschlüsselung, MQTT & sonstige Einstellungen"
},
"role": {
"label": "Rolle",
"description": "Gerätetelemetrie wird über den PRIMÄR Kanal gesendet. Nur ein PRIMÄR Kanal ist erlaubt.",
"options": {
"primary": "PRIMÄR",
"disabled": "DEAKTIVIERT",
"secondary": "SEKUNDÄR"
}
},
"psk": {
"label": "Vorher verteilter Schlüssel",
"description": "Unterstützte PSK-Längen: 256-Bit, 128-Bit, 8-Bit, leer (0-Bit)",
"generate": "Erzeugen"
},
"name": {
"label": "Name",
"description": "Ein eindeutiger Name für den Kanal <12 Bytes. Leer lassen für Standard."
},
"uplinkEnabled": {
"label": "Uplink aktiviert",
"description": "Nachrichten vom lokalen Netz über MQTT versenden"
},
"downlinkEnabled": {
"label": "Downlink aktiviert",
"description": "Nachrichten von MQTT im lokalen Netz versenden"
},
"positionPrecision": {
"label": "Standort",
"description": "Die Genauigkeit des Standorts, die in diesem Kanal geteilt werden soll. Kann deaktiviert werden.",
"options": {
"none": "Standort nicht freigeben",
"precise": "Genauer Standort",
"metric_km23": "Innerhalb von 23 Kilometern",
"metric_km12": "Innerhalb von 12 Kilometern",
"metric_km5_8": "Innerhalb von 5,8 Kilometern",
"metric_km2_9": "Innerhalb von 2,9 Kilometern",
"metric_km1_5": "Innerhalb von 1,5 Kilometern",
"metric_m700": "Innerhalb von 700 Metern",
"metric_m350": "Innerhalb von 350 Metern",
"metric_m200": "Innerhalb von 200 Metern",
"metric_m90": "Innerhalb von 90 Metern",
"metric_m50": "Innerhalb von 50 Metern",
"imperial_mi15": "Innerhalb von 15 Meilen",
"imperial_mi7_3": "Innerhalb von 7,3 Meilen",
"imperial_mi3_6": "Innerhalb von 3,6 Meilen",
"imperial_mi1_8": "Innerhalb von 1,8 Meilen",
"imperial_mi0_9": "Innerhalb von 0,9 Meilen",
"imperial_mi0_5": "Innerhalb von 0,5 Meilen",
"imperial_mi0_2": "Innerhalb von 0,2 Meilen",
"imperial_ft600": "Innerhalb von 600 Fuß",
"imperial_ft300": "Innerhalb von 300 Fuß",
"imperial_ft150": "Innerhalb von 150 Fuß"
}
}
"page": {
"sectionLabel": "Kanäle",
"channelName": "Kanal {{channelName}}",
"broadcastLabel": "Primär",
"channelIndex": "Kanal {{index}}"
},
"validation": {
"pskInvalid": "Bitte geben Sie einen gültigen {{bits}} Bit PSK Schlüssel ein."
},
"settings": {
"label": "Kanaleinstellungen",
"description": "Verschlüsselung, MQTT & sonstige Einstellungen"
},
"role": {
"label": "Rolle",
"description": "Gerätetelemetrie wird über den PRIMÄR Kanal gesendet. Nur ein PRIMÄR Kanal ist erlaubt.",
"options": {
"primary": "PRIMÄR",
"disabled": "DEAKTIVIERT",
"secondary": "SEKUNDÄR"
}
},
"psk": {
"label": "Vorher verteilter Schlüssel",
"description": "Unterstützte PSK-Längen: 256-Bit, 128-Bit, 8-Bit, leer (0-Bit)",
"generate": "Erzeugen"
},
"name": {
"label": "Name",
"description": "Ein eindeutiger Name für den Kanal <12 Bytes. Leer lassen für Standard."
},
"uplinkEnabled": {
"label": "Uplink aktiviert",
"description": "Nachrichten vom lokalen Netz über MQTT versenden"
},
"downlinkEnabled": {
"label": "Downlink aktiviert",
"description": "Nachrichten von MQTT im lokalen Netz versenden"
},
"positionPrecision": {
"label": "Standort",
"description": "Die Genauigkeit des Standorts, die in diesem Kanal geteilt werden soll. Kann deaktiviert werden.",
"options": {
"none": "Standort nicht freigeben",
"precise": "Genauer Standort",
"metric_km23": "Innerhalb von 23 Kilometern",
"metric_km12": "Innerhalb von 12 Kilometern",
"metric_km5_8": "Innerhalb von 5,8 Kilometern",
"metric_km2_9": "Innerhalb von 2,9 Kilometern",
"metric_km1_5": "Innerhalb von 1,5 Kilometern",
"metric_m700": "Innerhalb von 700 Metern",
"metric_m350": "Innerhalb von 350 Metern",
"metric_m200": "Innerhalb von 200 Metern",
"metric_m90": "Innerhalb von 90 Metern",
"metric_m50": "Innerhalb von 50 Metern",
"imperial_mi15": "Innerhalb von 15 Meilen",
"imperial_mi7_3": "Innerhalb von 7,3 Meilen",
"imperial_mi3_6": "Innerhalb von 3,6 Meilen",
"imperial_mi1_8": "Innerhalb von 1,8 Meilen",
"imperial_mi0_9": "Innerhalb von 0,9 Meilen",
"imperial_mi0_5": "Innerhalb von 0,5 Meilen",
"imperial_mi0_2": "Innerhalb von 0,2 Meilen",
"imperial_ft600": "Innerhalb von 600 Fuß",
"imperial_ft300": "Innerhalb von 300 Fuß",
"imperial_ft150": "Innerhalb von 150 Fuß"
}
}
}

View File

@@ -1,50 +1,50 @@
{
"emptyState": "Keine Ergebnisse gefunden.",
"page": {
"title": "Befehlsmenü"
},
"pinGroup": {
"label": "Befehlsgruppe anheften"
},
"unpinGroup": {
"label": "Befehlsgruppe lösen"
},
"goto": {
"label": "Gehe zu",
"command": {
"messages": "Nachrichten",
"map": "Karte",
"config": "Einstellungen",
"channels": "Kanäle",
"nodes": "Knoten"
}
},
"manage": {
"label": "Verwalten",
"command": {
"switchNode": "Knoten wechseln",
"connectNewNode": "Neuen Knoten verbinden"
}
},
"contextual": {
"label": "Kontextabhängig",
"command": {
"qrCode": "QR Code",
"qrGenerator": "Generator",
"qrImport": "Importieren",
"scheduleShutdown": "Herunterfahren planen",
"scheduleReboot": "Neustarten planen",
"rebootToOtaMode": "Neustart in den OTA Modus",
"resetNodeDb": "Knotendatenbank zurücksetzen",
"factoryResetDevice": "Gerät auf Werkseinstellungen zurücksetzen",
"factoryResetConfig": "Auf Werkseinstellungen zurücksetzen"
}
},
"debug": {
"label": "Debug",
"command": {
"reconfigure": "Neu einrichten",
"clearAllStoredMessages": "Alle gespeicherten Nachrichten löschen"
}
}
"emptyState": "Keine Ergebnisse gefunden.",
"page": {
"title": "Befehlsmenü"
},
"pinGroup": {
"label": "Befehlsgruppe anheften"
},
"unpinGroup": {
"label": "Befehlsgruppe lösen"
},
"goto": {
"label": "Gehe zu",
"command": {
"messages": "Nachrichten",
"map": "Karte",
"config": "Einstellungen",
"channels": "Kanäle",
"nodes": "Knoten"
}
},
"manage": {
"label": "Verwalten",
"command": {
"switchNode": "Knoten wechseln",
"connectNewNode": "Neuen Knoten verbinden"
}
},
"contextual": {
"label": "Kontextabhängig",
"command": {
"qrCode": "QR Code",
"qrGenerator": "Generator",
"qrImport": "Importieren",
"scheduleShutdown": "Herunterfahren planen",
"scheduleReboot": "Neustarten planen",
"rebootToOtaMode": "Neustart in den OTA Modus",
"resetNodeDb": "Knotendatenbank zurücksetzen",
"factoryResetDevice": "Gerät auf Werkseinstellungen zurücksetzen",
"factoryResetConfig": "Auf Werkseinstellungen zurücksetzen"
}
},
"debug": {
"label": "Debug",
"command": {
"reconfigure": "Neu einrichten",
"clearAllStoredMessages": "Alle gespeicherten Nachrichten löschen"
}
}
}

View File

@@ -1,141 +1,141 @@
{
"button": {
"apply": "Anwenden",
"backupKey": "Schlüssel sichern",
"cancel": "Abbrechen",
"clearMessages": "Nachrichten löschen",
"close": "Schließen",
"confirm": "Bestätigen",
"delete": "Löschen",
"dismiss": "Tastatur ausblenden",
"download": "Herunterladen",
"export": "Exportieren",
"generate": "Erzeugen",
"regenerate": "Neu erzeugen",
"import": "Importieren",
"message": "Nachricht",
"now": "Jetzt",
"ok": "Ok",
"print": "Drucken",
"rebootOtaNow": "Neustart in den OTA Modus",
"remove": "Entfernen",
"requestNewKeys": "Neue Schlüssel anfordern",
"requestPosition": "Standort anfordern",
"reset": "Zurücksetzen",
"save": "Speichern",
"scanQr": "QR Code scannen",
"traceRoute": "Route verfolgen",
"submit": "Absenden"
},
"app": {
"title": "Meshtastic",
"fullTitle": "Meshtastic Web-Applikation"
},
"loading": "Wird geladen...",
"unit": {
"cps": "CPS",
"dbm": "dBm",
"hertz": "Hz",
"hop": {
"one": "Sprung",
"plural": "Sprünge"
},
"hopsAway": {
"one": "{{count}} Sprung entfernt",
"plural": "{{count}} Sprünge entfernt",
"unknown": "Sprungweite unbekannt"
},
"megahertz": "MHz",
"raw": "Einheitslos",
"meter": {
"one": "Meter",
"plural": "Meter",
"suffix": "m"
},
"minute": {
"one": "Minute",
"plural": "Minuten"
},
"hour": {
"one": "Stunde",
"plural": "Stunden"
},
"millisecond": {
"one": "Millisekunde",
"plural": "Millisekunden",
"suffix": "ms"
},
"second": {
"one": "Sekunde",
"plural": "Sekunden"
},
"day": {
"one": "Tag",
"plural": "Tage"
},
"month": {
"one": "Monat",
"plural": "Monate"
},
"year": {
"one": "Jahr",
"plural": "Jahre"
},
"snr": "SNR",
"volt": {
"one": "Volt",
"plural": "Volt",
"suffix": "V"
},
"record": {
"one": "Datensatz",
"plural": "Datensätze"
}
},
"security": {
"0bit": "Leer",
"8bit": "8 Bit",
"128bit": "128 Bit",
"256bit": "256 Bit"
},
"unknown": {
"longName": "Unbekannt",
"shortName": "UNB",
"notAvailable": "Keine Angaben",
"num": "???"
},
"nodeUnknownPrefix": "!",
"unset": "NICHT GESETZT",
"fallbackName": "Meshtastic {{last4}}",
"node": "Knoten",
"formValidation": {
"unsavedChanges": "Ungespeicherte Änderungen",
"tooBig": {
"string": "Zu lang, erwarte maximal {{maximum}} Zeichen.",
"number": "Zu groß, erwartete eine Zahl kleiner oder gleich {{maximum}}.",
"bytes": "Zu groß, erwarte maximal {{params.maximum}} Bytes."
},
"tooSmall": {
"string": "Zu kurz, erwartete mindestens {{minimum}} Zeichen.",
"number": "Zu klein, erwartete eine Zahl größer oder gleich {{minimum}}."
},
"invalidFormat": {
"ipv4": "Ungültiges Format, erwartete eine IPv4 Adresse.",
"key": "Ungültiges Format, erwartet einen Base64-kodierten vor verteilten Schlüssel (PSK)."
},
"invalidType": {
"number": "Ungültiger Typ, erwartete eine Zahl."
},
"pskLength": {
"0bit": "Der Schlüssel muss leer sein.",
"8bit": "Der administrative Schlüssel muss ein vor verteilter 8 Bit Schlüssel (PSK) sein.",
"128bit": "Der administrative Schlüssel muss ein vor verteilter 128 Bit Schlüssel (PSK) sein.",
"256bit": "Der administrative Schlüssel muss ein vor verteilter 256 Bit Schlüssel (PSK) sein."
},
"required": {
"generic": "Dies ist ein Pflichtfeld.",
"managed": "Mindestens ein administrativer Schlüssel wird benötigt, um diesen Knoten zu verwalten",
"key": "Schlüssel erforderlich."
}
}
"button": {
"apply": "Anwenden",
"backupKey": "Schlüssel sichern",
"cancel": "Abbrechen",
"clearMessages": "Nachrichten löschen",
"close": "Schließen",
"confirm": "Bestätigen",
"delete": "Löschen",
"dismiss": "Tastatur ausblenden",
"download": "Herunterladen",
"export": "Exportieren",
"generate": "Erzeugen",
"regenerate": "Neu erzeugen",
"import": "Importieren",
"message": "Nachricht",
"now": "Jetzt",
"ok": "Ok",
"print": "Drucken",
"rebootOtaNow": "Neustart in den OTA Modus",
"remove": "Entfernen",
"requestNewKeys": "Neue Schlüssel anfordern",
"requestPosition": "Standort anfordern",
"reset": "Zurücksetzen",
"save": "Speichern",
"scanQr": "QR Code scannen",
"traceRoute": "Route verfolgen",
"submit": "Absenden"
},
"app": {
"title": "Meshtastic",
"fullTitle": "Meshtastic Web-Applikation"
},
"loading": "Wird geladen...",
"unit": {
"cps": "CPS",
"dbm": "dBm",
"hertz": "Hz",
"hop": {
"one": "Sprung",
"plural": "Sprünge"
},
"hopsAway": {
"one": "{{count}} Sprung entfernt",
"plural": "{{count}} Sprünge entfernt",
"unknown": "Sprungweite unbekannt"
},
"megahertz": "MHz",
"raw": "Einheitslos",
"meter": {
"one": "Meter",
"plural": "Meter",
"suffix": "m"
},
"minute": {
"one": "Minute",
"plural": "Minuten"
},
"hour": {
"one": "Stunde",
"plural": "Stunden"
},
"millisecond": {
"one": "Millisekunde",
"plural": "Millisekunden",
"suffix": "ms"
},
"second": {
"one": "Sekunde",
"plural": "Sekunden"
},
"day": {
"one": "Tag",
"plural": "Tage"
},
"month": {
"one": "Monat",
"plural": "Monate"
},
"year": {
"one": "Jahr",
"plural": "Jahre"
},
"snr": "SNR",
"volt": {
"one": "Volt",
"plural": "Volt",
"suffix": "V"
},
"record": {
"one": "Datensatz",
"plural": "Datensätze"
}
},
"security": {
"0bit": "Leer",
"8bit": "8 Bit",
"128bit": "128 Bit",
"256bit": "256 Bit"
},
"unknown": {
"longName": "Unbekannt",
"shortName": "UNB",
"notAvailable": "Keine Angaben",
"num": "???"
},
"nodeUnknownPrefix": "!",
"unset": "NICHT GESETZT",
"fallbackName": "Meshtastic {{last4}}",
"node": "Knoten",
"formValidation": {
"unsavedChanges": "Ungespeicherte Änderungen",
"tooBig": {
"string": "Zu lang, erwarte maximal {{maximum}} Zeichen.",
"number": "Zu groß, erwartete eine Zahl kleiner oder gleich {{maximum}}.",
"bytes": "Zu groß, erwarte maximal {{params.maximum}} Bytes."
},
"tooSmall": {
"string": "Zu kurz, erwartete mindestens {{minimum}} Zeichen.",
"number": "Zu klein, erwartete eine Zahl größer oder gleich {{minimum}}."
},
"invalidFormat": {
"ipv4": "Ungültiges Format, erwartete eine IPv4 Adresse.",
"key": "Ungültiges Format, erwartet einen Base64-kodierten vor verteilten Schlüssel (PSK)."
},
"invalidType": {
"number": "Ungültiger Typ, erwartete eine Zahl."
},
"pskLength": {
"0bit": "Der Schlüssel muss leer sein.",
"8bit": "Der administrative Schlüssel muss ein vor verteilter 8 Bit Schlüssel (PSK) sein.",
"128bit": "Der administrative Schlüssel muss ein vor verteilter 128 Bit Schlüssel (PSK) sein.",
"256bit": "Der administrative Schlüssel muss ein vor verteilter 256 Bit Schlüssel (PSK) sein."
},
"required": {
"generic": "Dies ist ein Pflichtfeld.",
"managed": "Mindestens ein administrativer Schlüssel wird benötigt, um diesen Knoten zu verwalten",
"key": "Schlüssel erforderlich."
}
}
}

View File

@@ -1,12 +1,12 @@
{
"dashboard": {
"title": "Verbundene Geräte",
"description": "Verwalten Sie Ihre verbundenen Meshtastic Geräte.",
"connectionType_ble": "BLE",
"connectionType_serial": "Seriell",
"connectionType_network": "Netzwerk",
"noDevicesTitle": "Keine Geräte verbunden",
"noDevicesDescription": "Verbinden Sie ein neues Gerät, um zu beginnen.",
"button_newConnection": "Neue Verbindung"
}
"dashboard": {
"title": "Verbundene Geräte",
"description": "Verwalten Sie Ihre verbundenen Meshtastic Geräte.",
"connectionType_ble": "BLE",
"connectionType_serial": "Seriell",
"connectionType_network": "Netzwerk",
"noDevicesTitle": "Keine Geräte verbunden",
"noDevicesDescription": "Verbinden Sie ein neues Gerät, um zu beginnen.",
"button_newConnection": "Neue Verbindung"
}
}

View File

@@ -1,428 +1,428 @@
{
"page": {
"title": "Einstellungen",
"tabBluetooth": "Bluetooth",
"tabDevice": "Gerät",
"tabDisplay": "Display",
"tabLora": "LoRa",
"tabNetwork": "Netzwerk",
"tabPosition": "Standort",
"tabPower": "Leistung",
"tabSecurity": "Sicherheit"
},
"sidebar": {
"label": "Module"
},
"device": {
"title": "Geräteeinstellungen",
"description": "Einstellungen für dieses Gerät",
"buttonPin": {
"description": "GPIO für Taste überschreiben",
"label": "GPIO Taste"
},
"buzzerPin": {
"description": "GPIO für Summer überschreiben",
"label": "GPIO Summer"
},
"disableTripleClick": {
"description": "Dreifachklicken deaktivieren",
"label": "Dreifachklicken deaktivieren"
},
"doubleTapAsButtonPress": {
"description": "Doppeltes Tippen als Taste verwenden",
"label": "Doppelklick als Tastendruck"
},
"ledHeartbeatDisabled": {
"description": "Die Herzschlag LED deaktivieren",
"label": "Herzschlag LED deaktivieren"
},
"nodeInfoBroadcastInterval": {
"description": "Häufigkeit der Übertragung von Knoteninformationen",
"label": "Knoteninfo Übertragungsintervall"
},
"posixTimezone": {
"description": "Zeichenfolge der POSIX Zeitzone für dieses Gerät",
"label": "POSIX Zeitzone"
},
"rebroadcastMode": {
"description": "Wie Weiterleitungen behandelt werden",
"label": "Weiterleitungsmodus"
},
"role": {
"description": "In welche Rolle das Gerät im Netz arbeitet",
"label": "Rolle"
}
},
"bluetooth": {
"title": "Bluetooth Einstellungen",
"description": "Einstellungen für das Bluetooth Modul",
"note": "Hinweis: Einige Geräte (ESP32) können nicht gleichzeitig Bluetooth und WLAN verwenden.",
"enabled": {
"description": "Bluetooth aktivieren oder deaktivieren",
"label": "Aktiviert"
},
"pairingMode": {
"description": "PIN Nummer Auswahlverhalten",
"label": "Kopplungsmodus"
},
"pin": {
"description": "PIN Nummer zum Verbinden verwenden",
"label": "PIN Nummer"
}
},
"display": {
"description": "Einstellungen für die Geräteanzeige",
"title": "Anzeigeeinstellungen",
"headingBold": {
"description": "Überschrifttext fett darstellen",
"label": "Fette Überschrift"
},
"carouselDelay": {
"description": "Bestimmt wie schnell die Fenster durch gewechselt werden",
"label": "Karussellverzögerung"
},
"compassNorthTop": {
"description": "Norden im Kompass immer oben anzeigen",
"label": "Kompass Norden oben"
},
"displayMode": {
"description": "Variante des Anzeigelayout",
"label": "Anzeigemodus"
},
"displayUnits": {
"description": "Zeige metrische oder imperiale Einheiten",
"label": "Anzeigeeinheiten"
},
"flipScreen": {
"description": "Anzeige um 180 Grad drehen",
"label": "Anzeige drehen"
},
"gpsDisplayUnits": {
"description": "Anzeigeformat der Koordinaten",
"label": "GPS Anzeigeformat"
},
"oledType": {
"description": "Art des OLED Anzeige, die an dem Gerät angeschlossen ist",
"label": "OLED Typ"
},
"screenTimeout": {
"description": "Anzeige nach dieser Zeit automatisch ausschalten",
"label": "Anzeigeabschaltung"
},
"twelveHourClock": {
"description": "12-Stunden Format benutzen",
"label": "12-Stunden Uhr"
},
"wakeOnTapOrMotion": {
"description": "Gerät durch Tippen oder Bewegung aufwecken",
"label": "Aufwachen durch Tippen oder Bewegung"
}
},
"lora": {
"title": "Netzeinstellungen",
"description": "Einstellungen für das LoRa Netz",
"bandwidth": {
"description": "Kanalbandbreite in MHz",
"label": "Bandbreite"
},
"boostedRxGain": {
"description": "Erhöhte Empfangsverstärkung",
"label": "Erhöhte Empfangsverstärkung"
},
"codingRate": {
"description": "Kodierrate",
"label": "Fehlerkorrektur"
},
"frequencyOffset": {
"description": "Frequenzversatz zur Kalibrierung von Oszillatorfehlern",
"label": "Frequenzversatz"
},
"frequencySlot": {
"description": "LoRa Frequenzschlitz",
"label": "Frequenzschlitz"
},
"hopLimit": {
"description": "Maximale Sprungweite",
"label": "Sprungweite"
},
"ignoreMqtt": {
"description": "MQTT Nachrichten nicht über das Netz weiterleiten",
"label": "MQTT ignorieren"
},
"modemPreset": {
"description": "Modem Voreinstellung die verwendet wird",
"label": "Modem Voreinstellungen"
},
"okToMqtt": {
"description": "Wenn auf aktiviert, zeigt diese Einstellung an, dass der Benutzer das Weiterleiten von Nachrichten über MQTT akzeptiert. Wenn deaktiviert, werden entfernte Knoten aufgefordert, Nachrichten nicht über MQTT weiterzuleiten",
"label": "OK für MQTT"
},
"overrideDutyCycle": {
"description": "Duty-Cycle überschreiben",
"label": "Duty-Cycle überschreiben"
},
"overrideFrequency": {
"description": "Sendefrequenz überschreiben (MHz)",
"label": "Sendefrequenz überschreiben"
},
"region": {
"description": "Legt die Region für Ihren Knoten fest",
"label": "Region"
},
"spreadingFactor": {
"description": "Anzahl der Symbole zur Kodierung der Nutzdaten",
"label": "Spreizfaktor"
},
"transmitEnabled": {
"description": "Sender (TX) des LoRa Funkgerätes aktivieren/deaktivieren",
"label": "Senden aktiviert"
},
"transmitPower": {
"description": "Maximale Sendeleistung",
"label": "Sendeleistung"
},
"usePreset": {
"description": "Eine der vordefinierten Modem Voreinstellungen verwenden",
"label": "Voreinstellung verwenden"
},
"meshSettings": {
"description": "Einstellungen für das LoRa Netz",
"label": "Netzeinstellungen"
},
"waveformSettings": {
"description": "Einstellungen für die LoRa Wellenform",
"label": "Einstellungen der Wellenform"
},
"radioSettings": {
"label": "Radio-Einstellungen",
"description": "Einstellungen für das LoRa Funkgerät"
}
},
"network": {
"title": "WLAN Einstellungen",
"description": "WLAN Funkeinstellungen",
"note": "Hinweis: Einige Geräte (ESP32) können nicht gleichzeitig Bluetooth und WLAN verwenden.",
"addressMode": {
"description": "Auswahl der IP Adressenzuweisung",
"label": "IP Adressenmodus"
},
"dns": {
"description": "DNS Server",
"label": "DNS"
},
"ethernetEnabled": {
"description": "Aktivieren oder deaktivieren sie den Ethernet Anschluss",
"label": "Aktiviert"
},
"gateway": {
"description": "Standard Gateway",
"label": "Gateway"
},
"ip": {
"description": "IP Adresse",
"label": "IP"
},
"psk": {
"description": "Netzwerkpasswort",
"label": "PSK"
},
"ssid": {
"description": "Netzwerkname",
"label": "SSID"
},
"subnet": {
"description": "Subnetzmaske",
"label": "Subnetz"
},
"wifiEnabled": {
"description": "Aktivieren oder deaktivieren Sie die WLAN Übertragung",
"label": "Aktiviert"
},
"meshViaUdp": {
"label": "Netz über UDP"
},
"ntpServer": {
"label": "NTP Server"
},
"rsyslogServer": {
"label": "Rsyslog Server"
},
"ethernetConfigSettings": {
"description": "Einstellung des Ethernet Ports",
"label": "Ethernet Einstellung"
},
"ipConfigSettings": {
"description": "Einstellung der IP Adresse",
"label": "IP Adresseinstellungen"
},
"ntpConfigSettings": {
"description": "NTP Server Einstellungen",
"label": "NTP Einstellungen"
},
"rsyslogConfigSettings": {
"description": "Rsyslog Einstellung",
"label": "Rsyslog Einstellung"
},
"udpConfigSettings": {
"description": "UDP über Netz Einstellung",
"label": "UDP Konfiguration"
}
},
"position": {
"title": "Standorteinstellung",
"description": "Einstellungen für das Standortmodul",
"broadcastInterval": {
"description": "Wie oft Ihr Standort über das Netz gesendet wird",
"label": "Übertragungsintervall"
},
"enablePin": {
"description": "Überschreiben des GPIO der das GPS-Modul aktiviert",
"label": "GPIO GPS aktivieren"
},
"fixedPosition": {
"description": "GPS Standort nicht senden, sondern manuell angegeben",
"label": "Fester Standort"
},
"gpsMode": {
"description": "Einstellung, ob GPS des Geräts aktiviert, deaktiviert oder nicht vorhanden ist",
"label": "GPS Modus"
},
"gpsUpdateInterval": {
"description": "Wie oft ein GPS Standort ermittelt werden soll",
"label": "GPS Aktualisierungsintervall"
},
"positionFlags": {
"description": "Optionalen, die bei der Zusammenstellung von Standortnachrichten enthalten sein sollen. Je mehr Optionen ausgewählt werden, desto größer wird die Nachricht und die längere Übertragungszeit erhöht das Risiko für einen Nachrichtenverlust.",
"label": "Standort Optionen"
},
"receivePin": {
"description": "GPIO Pin für serielles Empfangen (RX) des GPS-Moduls überschreiben",
"label": "GPIO Empfangen"
},
"smartPositionEnabled": {
"description": "Standort nur verschicken, wenn eine sinnvolle Standortänderung stattgefunden hat",
"label": "Intelligenten Standort aktivieren"
},
"smartPositionMinDistance": {
"description": "Mindestabstand (in Meter), die vor dem Senden einer Standortaktualisierung zurückgelegt werden muss",
"label": "Minimale Entfernung für intelligenten Standort"
},
"smartPositionMinInterval": {
"description": "Minimales Intervall (in Sekunden), das vor dem Senden einer Standortaktualisierung vergangen sein muss",
"label": "Minimales Intervall für intelligenten Standort"
},
"transmitPin": {
"description": "GPIO Pin für serielles Senden (TX) des GPS-Moduls überschreiben",
"label": "GPIO Senden"
},
"intervalsSettings": {
"description": "Wie oft Standortaktualisierungen gesendet werden",
"label": "Intervalle"
},
"flags": {
"placeholder": "Standort Optionen auswählen",
"altitude": "Höhe",
"altitudeGeoidalSeparation": "Geoidale Höhentrennung",
"altitudeMsl": "Höhe in Bezug auf Meeresspiegel",
"dop": "Dilution of Präzision (DOP) PDOP standardmäßig verwenden",
"hdopVdop": "Wenn DOP gesetzt ist, wird HDOP / VDOP anstelle von PDOP verwendet",
"numSatellites": "Anzahl Satelliten",
"sequenceNumber": "Sequenznummer",
"timestamp": "Zeitstempel",
"unset": "Nicht konfiguriert",
"vehicleHeading": "Fahrzeugsteuerkurs",
"vehicleSpeed": "Fahrzeuggeschwindigkeit"
}
},
"power": {
"adcMultiplierOverride": {
"description": "Zur Optimierung der Genauigkeit bei der Akkuspannunsmessung",
"label": "ADC Multiplikationsfaktor"
},
"ina219Address": {
"description": "Adresse des INA219 Stromsensors",
"label": "INA219 Adresse"
},
"lightSleepDuration": {
"description": "Wie lange das Gerät im leichten Schlafmodus ist",
"label": "Dauer leichter Schlafmodus"
},
"minimumWakeTime": {
"description": "Minimale Zeitspanne für die das Gerät aktiv bleibt, nachdem es eine Nachricht empfangen hat",
"label": "Minimale Aufwachzeit"
},
"noConnectionBluetoothDisabled": {
"description": "Wenn das Gerät keine Bluetooth Verbindung erhält, wird der BLE Funk nach dieser Zeit deaktiviert",
"label": "Keine Verbindung, Bluetooth deaktiviert"
},
"powerSavingEnabled": {
"description": "Auswählen, wenn aus einer Stromquelle mit niedriger Kapazität (z.B Solar) betrieben wird, um den Stromverbrauch so weit wie möglich zu minimieren.",
"label": "Energiesparmodus aktivieren"
},
"shutdownOnBatteryDelay": {
"description": "Verzögerung bis zum Abschalten der Knoten sich im Akkubetrieb befindet. 0 für unbegrenzt",
"label": "Verzögerung Akkuabschaltung"
},
"superDeepSleepDuration": {
"description": "Wie lange das Gerät im supertiefen Schlafmodus ist",
"label": "Dauer Supertiefschlaf"
},
"powerConfigSettings": {
"description": "Einstellungen für das Energiemodul",
"label": "Power Konfiguration"
},
"sleepSettings": {
"description": "Einstellungen Ruhezustand für das Energiemodul",
"label": "Einstellung Ruhezustand"
}
},
"security": {
"description": "Sicherheitseinstellungen",
"title": "Sicherheitseinstellungen",
"button_backupKey": "Schlüssel sichern",
"adminChannelEnabled": {
"description": "Erlaubt die Gerätesteuerung über den unsicheren, veralteten administrativen Kanal",
"label": "Veraltete Administrierung erlauben"
},
"enableDebugLogApi": {
"description": "Ausgabe von Fehlerprotokollen in Echtzeit über die serielle Schnittstelle, Anzeige und Export von Standort reduzierten Geräteprotokollen über Bluetooth",
"label": "Debug-Protokoll API aktivieren"
},
"managed": {
"description": "Wenn aktiviert, können die Geräteeinstellungen nur von einem entfernten Administratorknoten über administrative Nachrichten geändert werden. Aktivieren Sie diese Option nur, wenn mindestens ein geeigneter Administratorknoten eingerichtet, und desen öffentlicher Schlüssel wird in einem der obigen Felder gespeichert wurde.",
"label": "Verwaltet"
},
"privateKey": {
"description": "Wird verwendet, um einen gemeinsamen Schlüssel mit einem entfernten Gerät zu erstellen",
"label": "Privater Schlüssel"
},
"publicKey": {
"description": "Wird an andere Knoten im Netz gesendet, damit diese einen gemeinsamen geheimen Schlüssel berechnen können",
"label": "Öffentlicher Schlüssel"
},
"primaryAdminKey": {
"description": "Erster öffentlicher Schlüssel, der berechtigt ist, administrative Nachrichten an diesen Knoten zu senden",
"label": "Erster Admin-Schlüssel"
},
"secondaryAdminKey": {
"description": "Zweiter öffentlicher Schlüssel, der berechtigt ist, administrative Nachrichten an diesen Knoten zu senden",
"label": "Zweiter Admin-Schlüssel"
},
"serialOutputEnabled": {
"description": "Serielle Konsole über die Stream-API",
"label": "Serielle Ausgabe aktiviert"
},
"tertiaryAdminKey": {
"description": "Dritter öffentlicher Schlüssel, der berechtigt ist, administrative Nachrichten an diesen Knoten zu senden",
"label": "Dritter Admin-Schlüssel"
},
"adminSettings": {
"description": "Administrator Einstellungen",
"label": "Administrator Einstellungen"
},
"loggingSettings": {
"description": "Einstellungen für die Protokollierung",
"label": "Protokolleinstellungen"
}
}
"page": {
"title": "Einstellungen",
"tabBluetooth": "Bluetooth",
"tabDevice": "Gerät",
"tabDisplay": "Display",
"tabLora": "LoRa",
"tabNetwork": "Netzwerk",
"tabPosition": "Standort",
"tabPower": "Leistung",
"tabSecurity": "Sicherheit"
},
"sidebar": {
"label": "Module"
},
"device": {
"title": "Geräteeinstellungen",
"description": "Einstellungen für dieses Gerät",
"buttonPin": {
"description": "GPIO für Taste überschreiben",
"label": "GPIO Taste"
},
"buzzerPin": {
"description": "GPIO für Summer überschreiben",
"label": "GPIO Summer"
},
"disableTripleClick": {
"description": "Dreifachklicken deaktivieren",
"label": "Dreifachklicken deaktivieren"
},
"doubleTapAsButtonPress": {
"description": "Doppeltes Tippen als Taste verwenden",
"label": "Doppelklick als Tastendruck"
},
"ledHeartbeatDisabled": {
"description": "Die Herzschlag LED deaktivieren",
"label": "Herzschlag LED deaktivieren"
},
"nodeInfoBroadcastInterval": {
"description": "Häufigkeit der Übertragung von Knoteninformationen",
"label": "Knoteninfo Übertragungsintervall"
},
"posixTimezone": {
"description": "Zeichenfolge der POSIX Zeitzone für dieses Gerät",
"label": "POSIX Zeitzone"
},
"rebroadcastMode": {
"description": "Wie Weiterleitungen behandelt werden",
"label": "Weiterleitungsmodus"
},
"role": {
"description": "In welche Rolle das Gerät im Netz arbeitet",
"label": "Rolle"
}
},
"bluetooth": {
"title": "Bluetooth Einstellungen",
"description": "Einstellungen für das Bluetooth Modul",
"note": "Hinweis: Einige Geräte (ESP32) können nicht gleichzeitig Bluetooth und WLAN verwenden.",
"enabled": {
"description": "Bluetooth aktivieren oder deaktivieren",
"label": "Aktiviert"
},
"pairingMode": {
"description": "PIN Nummer Auswahlverhalten",
"label": "Kopplungsmodus"
},
"pin": {
"description": "PIN Nummer zum Verbinden verwenden",
"label": "PIN Nummer"
}
},
"display": {
"description": "Einstellungen für die Geräteanzeige",
"title": "Anzeigeeinstellungen",
"headingBold": {
"description": "Überschrifttext fett darstellen",
"label": "Fette Überschrift"
},
"carouselDelay": {
"description": "Bestimmt wie schnell die Fenster durch gewechselt werden",
"label": "Karussellverzögerung"
},
"compassNorthTop": {
"description": "Norden im Kompass immer oben anzeigen",
"label": "Kompass Norden oben"
},
"displayMode": {
"description": "Variante des Anzeigelayout",
"label": "Anzeigemodus"
},
"displayUnits": {
"description": "Zeige metrische oder imperiale Einheiten",
"label": "Anzeigeeinheiten"
},
"flipScreen": {
"description": "Anzeige um 180 Grad drehen",
"label": "Anzeige drehen"
},
"gpsDisplayUnits": {
"description": "Anzeigeformat der Koordinaten",
"label": "GPS Anzeigeformat"
},
"oledType": {
"description": "Art des OLED Anzeige, die an dem Gerät angeschlossen ist",
"label": "OLED Typ"
},
"screenTimeout": {
"description": "Anzeige nach dieser Zeit automatisch ausschalten",
"label": "Anzeigeabschaltung"
},
"twelveHourClock": {
"description": "12-Stunden Format benutzen",
"label": "12-Stunden Uhr"
},
"wakeOnTapOrMotion": {
"description": "Gerät durch Tippen oder Bewegung aufwecken",
"label": "Aufwachen durch Tippen oder Bewegung"
}
},
"lora": {
"title": "Netzeinstellungen",
"description": "Einstellungen für das LoRa Netz",
"bandwidth": {
"description": "Kanalbandbreite in MHz",
"label": "Bandbreite"
},
"boostedRxGain": {
"description": "Erhöhte Empfangsverstärkung",
"label": "Erhöhte Empfangsverstärkung"
},
"codingRate": {
"description": "Kodierrate",
"label": "Fehlerkorrektur"
},
"frequencyOffset": {
"description": "Frequenzversatz zur Kalibrierung von Oszillatorfehlern",
"label": "Frequenzversatz"
},
"frequencySlot": {
"description": "LoRa Frequenzschlitz",
"label": "Frequenzschlitz"
},
"hopLimit": {
"description": "Maximale Sprungweite",
"label": "Sprungweite"
},
"ignoreMqtt": {
"description": "MQTT Nachrichten nicht über das Netz weiterleiten",
"label": "MQTT ignorieren"
},
"modemPreset": {
"description": "Modem Voreinstellung die verwendet wird",
"label": "Modem Voreinstellungen"
},
"okToMqtt": {
"description": "Wenn auf aktiviert, zeigt diese Einstellung an, dass der Benutzer das Weiterleiten von Nachrichten über MQTT akzeptiert. Wenn deaktiviert, werden entfernte Knoten aufgefordert, Nachrichten nicht über MQTT weiterzuleiten",
"label": "OK für MQTT"
},
"overrideDutyCycle": {
"description": "Duty-Cycle überschreiben",
"label": "Duty-Cycle überschreiben"
},
"overrideFrequency": {
"description": "Sendefrequenz überschreiben (MHz)",
"label": "Sendefrequenz überschreiben"
},
"region": {
"description": "Legt die Region für Ihren Knoten fest",
"label": "Region"
},
"spreadingFactor": {
"description": "Anzahl der Symbole zur Kodierung der Nutzdaten",
"label": "Spreizfaktor"
},
"transmitEnabled": {
"description": "Sender (TX) des LoRa Funkgerätes aktivieren/deaktivieren",
"label": "Senden aktiviert"
},
"transmitPower": {
"description": "Maximale Sendeleistung",
"label": "Sendeleistung"
},
"usePreset": {
"description": "Eine der vordefinierten Modem Voreinstellungen verwenden",
"label": "Voreinstellung verwenden"
},
"meshSettings": {
"description": "Einstellungen für das LoRa Netz",
"label": "Netzeinstellungen"
},
"waveformSettings": {
"description": "Einstellungen für die LoRa Wellenform",
"label": "Einstellungen der Wellenform"
},
"radioSettings": {
"label": "Radio-Einstellungen",
"description": "Einstellungen für das LoRa Funkgerät"
}
},
"network": {
"title": "WLAN Einstellungen",
"description": "WLAN Funkeinstellungen",
"note": "Hinweis: Einige Geräte (ESP32) können nicht gleichzeitig Bluetooth und WLAN verwenden.",
"addressMode": {
"description": "Auswahl der IP Adressenzuweisung",
"label": "IP Adressenmodus"
},
"dns": {
"description": "DNS Server",
"label": "DNS"
},
"ethernetEnabled": {
"description": "Aktivieren oder deaktivieren sie den Ethernet Anschluss",
"label": "Aktiviert"
},
"gateway": {
"description": "Standard Gateway",
"label": "Gateway"
},
"ip": {
"description": "IP Adresse",
"label": "IP"
},
"psk": {
"description": "Netzwerkpasswort",
"label": "PSK"
},
"ssid": {
"description": "Netzwerkname",
"label": "SSID"
},
"subnet": {
"description": "Subnetzmaske",
"label": "Subnetz"
},
"wifiEnabled": {
"description": "Aktivieren oder deaktivieren Sie die WLAN Übertragung",
"label": "Aktiviert"
},
"meshViaUdp": {
"label": "Netz über UDP"
},
"ntpServer": {
"label": "NTP Server"
},
"rsyslogServer": {
"label": "Rsyslog Server"
},
"ethernetConfigSettings": {
"description": "Einstellung des Ethernet Ports",
"label": "Ethernet Einstellung"
},
"ipConfigSettings": {
"description": "Einstellung der IP Adresse",
"label": "IP Adresseinstellungen"
},
"ntpConfigSettings": {
"description": "NTP Server Einstellungen",
"label": "NTP Einstellungen"
},
"rsyslogConfigSettings": {
"description": "Rsyslog Einstellung",
"label": "Rsyslog Einstellung"
},
"udpConfigSettings": {
"description": "UDP über Netz Einstellung",
"label": "UDP Konfiguration"
}
},
"position": {
"title": "Standorteinstellung",
"description": "Einstellungen für das Standortmodul",
"broadcastInterval": {
"description": "Wie oft Ihr Standort über das Netz gesendet wird",
"label": "Übertragungsintervall"
},
"enablePin": {
"description": "Überschreiben des GPIO der das GPS-Modul aktiviert",
"label": "GPIO GPS aktivieren"
},
"fixedPosition": {
"description": "GPS Standort nicht senden, sondern manuell angegeben",
"label": "Fester Standort"
},
"gpsMode": {
"description": "Einstellung, ob GPS des Geräts aktiviert, deaktiviert oder nicht vorhanden ist",
"label": "GPS Modus"
},
"gpsUpdateInterval": {
"description": "Wie oft ein GPS Standort ermittelt werden soll",
"label": "GPS Aktualisierungsintervall"
},
"positionFlags": {
"description": "Optionalen, die bei der Zusammenstellung von Standortnachrichten enthalten sein sollen. Je mehr Optionen ausgewählt werden, desto größer wird die Nachricht und die längere Übertragungszeit erhöht das Risiko für einen Nachrichtenverlust.",
"label": "Standort Optionen"
},
"receivePin": {
"description": "GPIO Pin für serielles Empfangen (RX) des GPS-Moduls überschreiben",
"label": "GPIO Empfangen"
},
"smartPositionEnabled": {
"description": "Standort nur verschicken, wenn eine sinnvolle Standortänderung stattgefunden hat",
"label": "Intelligenten Standort aktivieren"
},
"smartPositionMinDistance": {
"description": "Mindestabstand (in Meter), die vor dem Senden einer Standortaktualisierung zurückgelegt werden muss",
"label": "Minimale Entfernung für intelligenten Standort"
},
"smartPositionMinInterval": {
"description": "Minimales Intervall (in Sekunden), das vor dem Senden einer Standortaktualisierung vergangen sein muss",
"label": "Minimales Intervall für intelligenten Standort"
},
"transmitPin": {
"description": "GPIO Pin für serielles Senden (TX) des GPS-Moduls überschreiben",
"label": "GPIO Senden"
},
"intervalsSettings": {
"description": "Wie oft Standortaktualisierungen gesendet werden",
"label": "Intervalle"
},
"flags": {
"placeholder": "Standort Optionen auswählen",
"altitude": "Höhe",
"altitudeGeoidalSeparation": "Geoidale Höhentrennung",
"altitudeMsl": "Höhe in Bezug auf Meeresspiegel",
"dop": "Dilution of Präzision (DOP) PDOP standardmäßig verwenden",
"hdopVdop": "Wenn DOP gesetzt ist, wird HDOP / VDOP anstelle von PDOP verwendet",
"numSatellites": "Anzahl Satelliten",
"sequenceNumber": "Sequenznummer",
"timestamp": "Zeitstempel",
"unset": "Nicht konfiguriert",
"vehicleHeading": "Fahrzeugsteuerkurs",
"vehicleSpeed": "Fahrzeuggeschwindigkeit"
}
},
"power": {
"adcMultiplierOverride": {
"description": "Zur Optimierung der Genauigkeit bei der Akkuspannunsmessung",
"label": "ADC Multiplikationsfaktor"
},
"ina219Address": {
"description": "Adresse des INA219 Stromsensors",
"label": "INA219 Adresse"
},
"lightSleepDuration": {
"description": "Wie lange das Gerät im leichten Schlafmodus ist",
"label": "Dauer leichter Schlafmodus"
},
"minimumWakeTime": {
"description": "Minimale Zeitspanne für die das Gerät aktiv bleibt, nachdem es eine Nachricht empfangen hat",
"label": "Minimale Aufwachzeit"
},
"noConnectionBluetoothDisabled": {
"description": "Wenn das Gerät keine Bluetooth Verbindung erhält, wird der BLE Funk nach dieser Zeit deaktiviert",
"label": "Keine Verbindung, Bluetooth deaktiviert"
},
"powerSavingEnabled": {
"description": "Auswählen, wenn aus einer Stromquelle mit niedriger Kapazität (z.B Solar) betrieben wird, um den Stromverbrauch so weit wie möglich zu minimieren.",
"label": "Energiesparmodus aktivieren"
},
"shutdownOnBatteryDelay": {
"description": "Verzögerung bis zum Abschalten der Knoten sich im Akkubetrieb befindet. 0 für unbegrenzt",
"label": "Verzögerung Akkuabschaltung"
},
"superDeepSleepDuration": {
"description": "Wie lange das Gerät im supertiefen Schlafmodus ist",
"label": "Dauer Supertiefschlaf"
},
"powerConfigSettings": {
"description": "Einstellungen für das Energiemodul",
"label": "Power Konfiguration"
},
"sleepSettings": {
"description": "Einstellungen Ruhezustand für das Energiemodul",
"label": "Einstellung Ruhezustand"
}
},
"security": {
"description": "Sicherheitseinstellungen",
"title": "Sicherheitseinstellungen",
"button_backupKey": "Schlüssel sichern",
"adminChannelEnabled": {
"description": "Erlaubt die Gerätesteuerung über den unsicheren, veralteten administrativen Kanal",
"label": "Veraltete Administrierung erlauben"
},
"enableDebugLogApi": {
"description": "Ausgabe von Fehlerprotokollen in Echtzeit über die serielle Schnittstelle, Anzeige und Export von Standort reduzierten Geräteprotokollen über Bluetooth",
"label": "Debug-Protokoll API aktivieren"
},
"managed": {
"description": "Wenn aktiviert, können die Geräteeinstellungen nur von einem entfernten Administratorknoten über administrative Nachrichten geändert werden. Aktivieren Sie diese Option nur, wenn mindestens ein geeigneter Administratorknoten eingerichtet, und desen öffentlicher Schlüssel wird in einem der obigen Felder gespeichert wurde.",
"label": "Verwaltet"
},
"privateKey": {
"description": "Wird verwendet, um einen gemeinsamen Schlüssel mit einem entfernten Gerät zu erstellen",
"label": "Privater Schlüssel"
},
"publicKey": {
"description": "Wird an andere Knoten im Netz gesendet, damit diese einen gemeinsamen geheimen Schlüssel berechnen können",
"label": "Öffentlicher Schlüssel"
},
"primaryAdminKey": {
"description": "Erster öffentlicher Schlüssel, der berechtigt ist, administrative Nachrichten an diesen Knoten zu senden",
"label": "Erster Admin-Schlüssel"
},
"secondaryAdminKey": {
"description": "Zweiter öffentlicher Schlüssel, der berechtigt ist, administrative Nachrichten an diesen Knoten zu senden",
"label": "Zweiter Admin-Schlüssel"
},
"serialOutputEnabled": {
"description": "Serielle Konsole über die Stream-API",
"label": "Serielle Ausgabe aktiviert"
},
"tertiaryAdminKey": {
"description": "Dritter öffentlicher Schlüssel, der berechtigt ist, administrative Nachrichten an diesen Knoten zu senden",
"label": "Dritter Admin-Schlüssel"
},
"adminSettings": {
"description": "Administrator Einstellungen",
"label": "Administrator Einstellungen"
},
"loggingSettings": {
"description": "Einstellungen für die Protokollierung",
"label": "Protokolleinstellungen"
}
}
}

View File

@@ -1,171 +1,171 @@
{
"deleteMessages": {
"description": "Diese Aktion wird den Nachrichtenverlauf löschen. Dies kann nicht rückgängig gemacht werden. Sind Sie sicher, dass Sie fortfahren möchten?",
"title": "Alle Nachrichten löschen"
},
"deviceName": {
"description": "Das Gerät wird neu gestartet, sobald die Einstellung gespeichert ist.",
"longName": "Langer Name",
"shortName": "Kurzname",
"title": "Gerätename ändern"
},
"import": {
"description": "Die aktuelle LoRa Einstellung wird überschrieben.",
"error": {
"invalidUrl": "Ungültige Meshtastic URL"
},
"channelPrefix": "Kanal: ",
"channelSetUrl": "Kanalsammlung / QR-Code URL",
"channels": "Kanäle:",
"usePreset": "Voreinstellung verwenden?",
"title": "Kanalsammlung importieren"
},
"locationResponse": {
"altitude": "Höhe: ",
"coordinates": "Koordinaten: ",
"title": "Standort: {{identifier}}"
},
"pkiRegenerateDialog": {
"title": "Vorab verteilten Schlüssel (PSK) neu erstellen?",
"description": "Sind Sie sicher, dass Sie den vorab verteilten Schlüssel neu erstellen möchten?",
"regenerate": "Neu erstellen"
},
"newDeviceDialog": {
"title": "Neues Gerät verbinden",
"https": "https",
"http": "http",
"tabHttp": "HTTP",
"tabBluetooth": "Bluetooth",
"tabSerial": "Seriell",
"useHttps": "HTTPS verwenden",
"connecting": "Wird verbunden...",
"connect": "Verbindung herstellen",
"connectionFailedAlert": {
"title": "Verbindung fehlgeschlagen",
"descriptionPrefix": "Verbindung zum Gerät fehlgeschlagen. ",
"httpsHint": "Wenn Sie HTTPS verwenden, müssen Sie möglicherweise zuerst ein selbstsigniertes Zertifikat akzeptieren. ",
"openLinkPrefix": "Öffnen Sie ",
"openLinkSuffix": "in einem neuen Tab",
"acceptTlsWarningSuffix": ", akzeptieren Sie alle TLS-Warnungen, wenn Sie dazu aufgefordert werden, dann versuchen Sie es erneut",
"learnMoreLink": "Mehr erfahren"
},
"httpConnection": {
"label": "IP Adresse/Hostname",
"placeholder": "000.000.000.000 / meshtastic.local"
},
"serialConnection": {
"noDevicesPaired": "Noch keine Geräte gekoppelt.",
"newDeviceButton": "Neues Gerät",
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
},
"bluetoothConnection": {
"noDevicesPaired": "Noch keine Geräte gekoppelt.",
"newDeviceButton": "Neues Gerät"
},
"validation": {
"requiresWebBluetooth": "Dieser Verbindungstyp erfordert <0>Bluetooth</0> im Browser. Bitte verwenden Sie einen unterstützten Browser, wie Chrome oder Edge.",
"requiresWebSerial": "Dieser Verbindungstyp erfordert <0>Serielle Schnittstelle</0> im Browser. Bitte verwenden Sie einen unterstützten Browser, wie Chrome oder Edge.",
"requiresSecureContext": "Diese Anwendung erfordert einen <0>sicheren Kontext</0>. Bitte verbinden Sie sich über HTTPS oder localhost.",
"additionallyRequiresSecureContext": "Zusätzlich erfordert es einen <0>sicheren Kontext</0>. Bitte verbinden Sie sich über HTTPS oder localhost."
}
},
"nodeDetails": {
"message": "Nachricht",
"requestPosition": "Standort anfordern",
"traceRoute": "Route verfolgen",
"airTxUtilization": "Auslastung Sendezeit",
"allRawMetrics": "Alle Rohdaten",
"batteryLevel": "Akkustand",
"channelUtilization": "Kanalauslastung",
"details": "Details:",
"deviceMetrics": "Gerätekennzahlen:",
"hardware": "Hardware: ",
"lastHeard": "Zuletzt gehört: ",
"nodeHexPrefix": "Knoten ID: !",
"nodeNumber": "Knotennummer: ",
"position": "Standort:",
"role": "Rolle: ",
"uptime": "Laufzeit: ",
"voltage": "Spannung",
"title": "Knotendetails für {{identifier}}",
"ignoreNode": "Knoten ignorieren",
"removeNode": "Knoten entfernen",
"unignoreNode": "Knoten akzeptieren"
},
"pkiBackup": {
"loseKeysWarning": "Wenn Sie Ihre Schlüssel verlieren, müssen Sie Ihr Gerät zurücksetzen.",
"secureBackup": "Es ist wichtig, dass Sie Ihre öffentlichen und privaten Schlüssel sichern und diese sicher speichern!",
"footer": "=== END OF KEYS ===",
"header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===",
"privateKey": "Privater Schlüssel:",
"publicKey": "Öffentlicher Schlüssel:",
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
"title": "Schlüssel sichern"
},
"pkiBackupReminder": {
"description": "Wir empfehlen die regelmäßige Sicherung Ihrer Schlüsseldaten. Möchten Sie jetzt sicheren?",
"title": "Erinnerungen für Sicherungen",
"remindLaterPrefix": "Erinnerung in:",
"remindNever": "Nie erinnern",
"backupNow": "Jetzt sichern"
},
"pkiRegenerate": {
"description": "Sind Sie sicher, dass Sie Schlüsselpaar neu erstellen möchten?",
"title": "Schlüsselpaar neu erstellen"
},
"qr": {
"addChannels": "Kanäle hinzufügen",
"replaceChannels": "Kanäle ersetzen",
"description": "Die aktuelle LoRa Einstellung wird ebenfalls geteilt.",
"sharableUrl": "Teilbare URL",
"title": "QR Code Erzeugen"
},
"rebootOta": {
"title": "Neustart planen",
"description": "Startet den verbundenen Knoten nach einer Verzögerung in den OTA (Over-the-Air) Modus.",
"enterDelay": "Verzögerung eingeben (Sek.)",
"scheduled": "Neustart wurde geplant"
},
"reboot": {
"title": "Neustart planen",
"description": "Startet den verbundenen Knoten nach x Minuten neu."
},
"refreshKeys": {
"description": {
"acceptNewKeys": "Dies entfernt den Knoten vom Gerät und fordert neue Schlüssel an.",
"keyMismatchReasonSuffix": ". Dies liegt daran, dass der aktuelle öffentliche Schlüssel des entfernten Knotens nicht mit dem zuvor gespeicherten Schlüssel für diesen Knoten übereinstimmt.",
"unableToSendDmPrefix": "Ihr Knoten kann keine Direktnachricht an folgenden Knoten senden: "
},
"acceptNewKeys": "Neue Schlüssel akzeptieren",
"title": "Schlüsselfehler - {{identifier}}"
},
"removeNode": {
"description": "Sind Sie sicher, dass Sie diesen Knoten entfernen möchten?",
"title": "Knoten entfernen?"
},
"shutdown": {
"title": "Herunterfahren planen",
"description": "Schaltet den verbundenen Knoten nach x Minuten aus."
},
"traceRoute": {
"routeToDestination": "Route zum Ziel:",
"routeBack": "Route zurück:"
},
"tracerouteResponse": {
"title": "Traceroute: {{identifier}}"
},
"unsafeRoles": {
"confirmUnderstanding": "Ja, ich weiß, was ich tue!",
"conjunction": " und der Blog-Beitrag über ",
"postamble": " und verstehen die Auswirkungen einer Veränderung der Rolle.",
"preamble": "Ich habe die",
"choosingRightDeviceRole": "Wahl der richtigen Geräterolle",
"deviceRoleDocumentation": "Dokumentation der Geräterolle",
"title": "Bist Du sicher?"
},
"managedMode": {
"confirmUnderstanding": "Ja, ich weiß, was ich tue!",
"title": "Bist Du sicher?",
"description": "Das Aktivieren des verwalteten Modus blockiert das Schreiben der Einstellungen in das Funkgerät durch alle Anwendungen (einschließlich der Webanwendung). Einmal aktiviert, können die Einstellungen <bold>nur</bold> durch administrative Nachrichten geändert werden. Diese Einstellung ist für die Fernverwaltung von abgesetzten Knoten nicht erforderlich."
}
"deleteMessages": {
"description": "Diese Aktion wird den Nachrichtenverlauf löschen. Dies kann nicht rückgängig gemacht werden. Sind Sie sicher, dass Sie fortfahren möchten?",
"title": "Alle Nachrichten löschen"
},
"deviceName": {
"description": "Das Gerät wird neu gestartet, sobald die Einstellung gespeichert ist.",
"longName": "Langer Name",
"shortName": "Kurzname",
"title": "Gerätename ändern"
},
"import": {
"description": "Die aktuelle LoRa Einstellung wird überschrieben.",
"error": {
"invalidUrl": "Ungültige Meshtastic URL"
},
"channelPrefix": "Kanal: ",
"channelSetUrl": "Kanalsammlung / QR-Code URL",
"channels": "Kanäle:",
"usePreset": "Voreinstellung verwenden?",
"title": "Kanalsammlung importieren"
},
"locationResponse": {
"altitude": "Höhe: ",
"coordinates": "Koordinaten: ",
"title": "Standort: {{identifier}}"
},
"pkiRegenerateDialog": {
"title": "Vorab verteilten Schlüssel (PSK) neu erstellen?",
"description": "Sind Sie sicher, dass Sie den vorab verteilten Schlüssel neu erstellen möchten?",
"regenerate": "Neu erstellen"
},
"newDeviceDialog": {
"title": "Neues Gerät verbinden",
"https": "https",
"http": "http",
"tabHttp": "HTTP",
"tabBluetooth": "Bluetooth",
"tabSerial": "Seriell",
"useHttps": "HTTPS verwenden",
"connecting": "Wird verbunden...",
"connect": "Verbindung herstellen",
"connectionFailedAlert": {
"title": "Verbindung fehlgeschlagen",
"descriptionPrefix": "Verbindung zum Gerät fehlgeschlagen. ",
"httpsHint": "Wenn Sie HTTPS verwenden, müssen Sie möglicherweise zuerst ein selbstsigniertes Zertifikat akzeptieren. ",
"openLinkPrefix": "Öffnen Sie ",
"openLinkSuffix": "in einem neuen Tab",
"acceptTlsWarningSuffix": ", akzeptieren Sie alle TLS-Warnungen, wenn Sie dazu aufgefordert werden, dann versuchen Sie es erneut",
"learnMoreLink": "Mehr erfahren"
},
"httpConnection": {
"label": "IP Adresse/Hostname",
"placeholder": "000.000.000.000 / meshtastic.local"
},
"serialConnection": {
"noDevicesPaired": "Noch keine Geräte gekoppelt.",
"newDeviceButton": "Neues Gerät",
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
},
"bluetoothConnection": {
"noDevicesPaired": "Noch keine Geräte gekoppelt.",
"newDeviceButton": "Neues Gerät"
},
"validation": {
"requiresWebBluetooth": "Dieser Verbindungstyp erfordert <0>Bluetooth</0> im Browser. Bitte verwenden Sie einen unterstützten Browser, wie Chrome oder Edge.",
"requiresWebSerial": "Dieser Verbindungstyp erfordert <0>Serielle Schnittstelle</0> im Browser. Bitte verwenden Sie einen unterstützten Browser, wie Chrome oder Edge.",
"requiresSecureContext": "Diese Anwendung erfordert einen <0>sicheren Kontext</0>. Bitte verbinden Sie sich über HTTPS oder localhost.",
"additionallyRequiresSecureContext": "Zusätzlich erfordert es einen <0>sicheren Kontext</0>. Bitte verbinden Sie sich über HTTPS oder localhost."
}
},
"nodeDetails": {
"message": "Nachricht",
"requestPosition": "Standort anfordern",
"traceRoute": "Route verfolgen",
"airTxUtilization": "Auslastung Sendezeit",
"allRawMetrics": "Alle Rohdaten",
"batteryLevel": "Akkustand",
"channelUtilization": "Kanalauslastung",
"details": "Details:",
"deviceMetrics": "Gerätekennzahlen:",
"hardware": "Hardware: ",
"lastHeard": "Zuletzt gehört: ",
"nodeHexPrefix": "Knoten ID: !",
"nodeNumber": "Knotennummer: ",
"position": "Standort:",
"role": "Rolle: ",
"uptime": "Laufzeit: ",
"voltage": "Spannung",
"title": "Knotendetails für {{identifier}}",
"ignoreNode": "Knoten ignorieren",
"removeNode": "Knoten entfernen",
"unignoreNode": "Knoten akzeptieren"
},
"pkiBackup": {
"loseKeysWarning": "Wenn Sie Ihre Schlüssel verlieren, müssen Sie Ihr Gerät zurücksetzen.",
"secureBackup": "Es ist wichtig, dass Sie Ihre öffentlichen und privaten Schlüssel sichern und diese sicher speichern!",
"footer": "=== END OF KEYS ===",
"header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===",
"privateKey": "Privater Schlüssel:",
"publicKey": "Öffentlicher Schlüssel:",
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
"title": "Schlüssel sichern"
},
"pkiBackupReminder": {
"description": "Wir empfehlen die regelmäßige Sicherung Ihrer Schlüsseldaten. Möchten Sie jetzt sicheren?",
"title": "Erinnerungen für Sicherungen",
"remindLaterPrefix": "Erinnerung in:",
"remindNever": "Nie erinnern",
"backupNow": "Jetzt sichern"
},
"pkiRegenerate": {
"description": "Sind Sie sicher, dass Sie Schlüsselpaar neu erstellen möchten?",
"title": "Schlüsselpaar neu erstellen"
},
"qr": {
"addChannels": "Kanäle hinzufügen",
"replaceChannels": "Kanäle ersetzen",
"description": "Die aktuelle LoRa Einstellung wird ebenfalls geteilt.",
"sharableUrl": "Teilbare URL",
"title": "QR Code Erzeugen"
},
"rebootOta": {
"title": "Neustart planen",
"description": "Startet den verbundenen Knoten nach einer Verzögerung in den OTA (Over-the-Air) Modus.",
"enterDelay": "Verzögerung eingeben (Sek.)",
"scheduled": "Neustart wurde geplant"
},
"reboot": {
"title": "Neustart planen",
"description": "Startet den verbundenen Knoten nach x Minuten neu."
},
"refreshKeys": {
"description": {
"acceptNewKeys": "Dies entfernt den Knoten vom Gerät und fordert neue Schlüssel an.",
"keyMismatchReasonSuffix": ". Dies liegt daran, dass der aktuelle öffentliche Schlüssel des entfernten Knotens nicht mit dem zuvor gespeicherten Schlüssel für diesen Knoten übereinstimmt.",
"unableToSendDmPrefix": "Ihr Knoten kann keine Direktnachricht an folgenden Knoten senden: "
},
"acceptNewKeys": "Neue Schlüssel akzeptieren",
"title": "Schlüsselfehler - {{identifier}}"
},
"removeNode": {
"description": "Sind Sie sicher, dass Sie diesen Knoten entfernen möchten?",
"title": "Knoten entfernen?"
},
"shutdown": {
"title": "Herunterfahren planen",
"description": "Schaltet den verbundenen Knoten nach x Minuten aus."
},
"traceRoute": {
"routeToDestination": "Route zum Ziel:",
"routeBack": "Route zurück:"
},
"tracerouteResponse": {
"title": "Traceroute: {{identifier}}"
},
"unsafeRoles": {
"confirmUnderstanding": "Ja, ich weiß, was ich tue!",
"conjunction": " und der Blog-Beitrag über ",
"postamble": " und verstehen die Auswirkungen einer Veränderung der Rolle.",
"preamble": "Ich habe die",
"choosingRightDeviceRole": "Wahl der richtigen Geräterolle",
"deviceRoleDocumentation": "Dokumentation der Geräterolle",
"title": "Bist Du sicher?"
},
"managedMode": {
"confirmUnderstanding": "Ja, ich weiß, was ich tue!",
"title": "Bist Du sicher?",
"description": "Das Aktivieren des verwalteten Modus blockiert das Schreiben der Einstellungen in das Funkgerät durch alle Anwendungen (einschließlich der Webanwendung). Einmal aktiviert, können die Einstellungen <bold>nur</bold> durch administrative Nachrichten geändert werden. Diese Einstellung ist für die Fernverwaltung von abgesetzten Knoten nicht erforderlich."
}
}

View File

@@ -1,39 +1,39 @@
{
"page": {
"title": "Nachrichten: {{chatName}}",
"placeholder": "Nachricht eingeben"
},
"emptyState": {
"title": "Einen Chat auswählen",
"text": "Noch keine Nachrichten."
},
"selectChatPrompt": {
"text": "Wählen Sie einen Kanal oder Knoten, um Nachrichten zu schreiben."
},
"sendMessage": {
"placeholder": "Geben Sie hier Ihre Nachricht ein...",
"sendButton": "Senden"
},
"actionsMenu": {
"addReactionLabel": "Reaktion hinzufügen",
"replyLabel": "Antworten"
},
"deliveryStatus": {
"delivered": {
"label": "Nachricht zugestellt",
"displayText": "Nachricht zugestellt"
},
"failed": {
"label": "Nachrichtenübermittlung fehlgeschlagen",
"displayText": "Zustellung fehlgeschlagen"
},
"unknown": {
"label": "Nachrichtenstatus unbekannt",
"displayText": "Unbekannter Status"
},
"waiting": {
"label": "Nachricht wird gesendet",
"displayText": "Warte auf Zustellung"
}
}
"page": {
"title": "Nachrichten: {{chatName}}",
"placeholder": "Nachricht eingeben"
},
"emptyState": {
"title": "Einen Chat auswählen",
"text": "Noch keine Nachrichten."
},
"selectChatPrompt": {
"text": "Wählen Sie einen Kanal oder Knoten, um Nachrichten zu schreiben."
},
"sendMessage": {
"placeholder": "Geben Sie hier Ihre Nachricht ein...",
"sendButton": "Senden"
},
"actionsMenu": {
"addReactionLabel": "Reaktion hinzufügen",
"replyLabel": "Antworten"
},
"deliveryStatus": {
"delivered": {
"label": "Nachricht zugestellt",
"displayText": "Nachricht zugestellt"
},
"failed": {
"label": "Nachrichtenübermittlung fehlgeschlagen",
"displayText": "Zustellung fehlgeschlagen"
},
"unknown": {
"label": "Nachrichtenstatus unbekannt",
"displayText": "Unbekannter Status"
},
"waiting": {
"label": "Nachricht wird gesendet",
"displayText": "Warte auf Zustellung"
}
}
}

View File

@@ -1,448 +1,448 @@
{
"page": {
"tabAmbientLighting": "Umgebungslicht",
"tabAudio": "Audio",
"tabCannedMessage": "Vordefinierte Nachrichten",
"tabDetectionSensor": "Erkennungssensor",
"tabExternalNotification": "Externe Benachrichtigung",
"tabMqtt": "MQTT",
"tabNeighborInfo": "Nachbarinformation",
"tabPaxcounter": "Pax Zähler",
"tabRangeTest": "Reichweitentest",
"tabSerial": "Seriell",
"tabStoreAndForward": "Speichern&Weiterleiten",
"tabTelemetry": "Telemetrie"
},
"ambientLighting": {
"title": "Einstellung Umgebungsbeleuchtung",
"description": "Einstellungen für das Modul Umgebungsbeleuchtung",
"ledState": {
"label": "LED Status",
"description": "Setzt die LED auf ein oder aus"
},
"current": {
"label": "Stromstärke",
"description": "Legt den Strom für den LED Ausgang fest. Standard ist 10"
},
"red": {
"label": "Rot",
"description": "Legt den roten LED Wert fest. Bereich 0-255"
},
"green": {
"label": "Grün",
"description": "Legt den grünen LED Wert fest. Bereich 0-255"
},
"blue": {
"label": "Blau",
"description": "Legt den blauen LED Wert fest. Bereich 0-255"
}
},
"audio": {
"title": "Audioeinstellungen",
"description": "Einstellungen für das Audiomodul",
"codec2Enabled": {
"label": "Codec 2 aktiviert",
"description": "Codec 2 Audiokodierung aktivieren"
},
"pttPin": {
"label": "GPIO PTT",
"description": "Für PTT verwendeter GPIO Pin"
},
"bitrate": {
"label": "Bitrate",
"description": "Bitrate zur Audiokodierung"
},
"i2sWs": {
"label": "i2S WS",
"description": "GPIO Pin für i2S WS"
},
"i2sSd": {
"label": "i2S SD",
"description": "GPIO Pin für i2S SD"
},
"i2sDin": {
"label": "i2S DIN",
"description": "GPIO Pin für i2S DIN"
},
"i2sSck": {
"label": "i2S SCK",
"description": "GPIO Pin für i2S SCK"
}
},
"cannedMessage": {
"title": "Einstellungen für vordefinierte Nachrichten",
"description": "Einstellungen für das Modul vordefinierte Nachrichten",
"moduleEnabled": {
"label": "Modul aktiviert",
"description": "Vordefinierte Nachrichten aktivieren"
},
"rotary1Enabled": {
"label": "Drehgeber #1 aktiviert",
"description": "Drehgeber aktivieren"
},
"inputbrokerPinA": {
"label": "Drehgeber Pin A",
"description": "GPIO Pin Wert (1-39) für Drehgeber Pin A"
},
"inputbrokerPinB": {
"label": "Drehgeber Pin B",
"description": "GPIO Pin Wert (1-39) für Drehgeber Pin B"
},
"inputbrokerPinPress": {
"label": "Drehgeber Pin Taste",
"description": "GPIO Pin Wert (1-39) für Drehgeber Pin Taste"
},
"inputbrokerEventCw": {
"label": "Ereignis im Uhrzeigersinn",
"description": "Eingabeereignis auswählen."
},
"inputbrokerEventCcw": {
"label": "Ereignis gegen Uhrzeigersinn",
"description": "Eingabeereignis auswählen."
},
"inputbrokerEventPress": {
"label": "Ereignis Tastendruck",
"description": "Eingabeereignis auswählen."
},
"updown1Enabled": {
"label": "Geber Hoch/Runter aktiviert",
"description": "Aktiviere Geber Hoch/Runter"
},
"allowInputSource": {
"label": "Eingabequelle zulassen",
"description": "Wählen Sie aus: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
},
"sendBell": {
"label": "Sende Glocke",
"description": "Sendet ein Klingelzeichen (Glocke) mit jeder Nachricht"
}
},
"detectionSensor": {
"title": "Sensoreinstellungen für Erkennung",
"description": "Einstellungen für das Erkennungssensormodul",
"enabled": {
"label": "Aktiviert",
"description": "Erkennungssensormodul aktivieren oder deaktivieren"
},
"minimumBroadcastSecs": {
"label": "Minimale Übertragungszeit alle Sekunden",
"description": "Das Intervall in Sekunden, wie oft eine Nachricht an das Netz gesendet wird, wenn eine Statusänderung erkannt wurde"
},
"stateBroadcastSecs": {
"label": "Statusübertragung alle Sekunden",
"description": "Das Intervall in Sekunden, wie oft eine Nachricht mit dem aktuellen Status an das Netz gesendet wird, unabhängig von Änderungen"
},
"sendBell": {
"label": "Sende Glocke",
"description": "ASCII-Glocke mit Warnmeldung senden"
},
"name": {
"label": "Anzeigename",
"description": "Formatierte Nachricht die an das Netz gesendet wird, maximal 20 Zeichen"
},
"monitorPin": {
"label": "GPIO Pin überwachen",
"description": "Der GPIO Pin zur Überwachung von Statusänderungen"
},
"detectionTriggerType": {
"label": "Auslösetyp der Erkennung",
"description": "Die Art des zu verwendenden Auslöseereignisses"
},
"usePullup": {
"label": "Pullup verwenden",
"description": "Gibt an, ob der INPUT_PULLUP Modus für GPIO Pin verwendet wird oder nicht"
}
},
"externalNotification": {
"title": "Einstellungen für externe Benachrichtigungen",
"description": "Einstellung für das Modul externe Benachrichtigung",
"enabled": {
"label": "Modul aktiviert",
"description": "Externe Benachrichtigung aktivieren"
},
"outputMs": {
"label": "Ausgabe MS",
"description": "Ausgabe MS"
},
"output": {
"label": "Ausgabe",
"description": "Ausgabe"
},
"outputVibra": {
"label": "Ausgabe Vibration",
"description": "Ausgabe Vibration"
},
"outputBuzzer": {
"label": "Ausgabe Summer",
"description": "Ausgabe Summer"
},
"active": {
"label": "Aktiv",
"description": "Aktiv"
},
"alertMessage": {
"label": "Warnmeldung",
"description": "Warnmeldung"
},
"alertMessageVibra": {
"label": "Vibration bei Warnmeldung",
"description": "Vibration bei Warnmeldung"
},
"alertMessageBuzzer": {
"label": "Summer bei Warnmeldung",
"description": "Summer bei Warnmeldung"
},
"alertBell": {
"label": "Warnglocke",
"description": "Soll beim Empfang eines eingehenden Klingelzeichens (Glocke) eine Warnung ausgelöst werden?"
},
"alertBellVibra": {
"label": "Vibration bei Klingelzeichen",
"description": "Vibration bei Klingelzeichen"
},
"alertBellBuzzer": {
"label": "Summer bei Klingelzeichen",
"description": "Summer bei Klingelzeichen"
},
"usePwm": {
"label": "PWM verwenden",
"description": "PWM verwenden"
},
"nagTimeout": {
"label": "Nervige Verzögerung",
"description": "Nervige Verzögerung"
},
"useI2sAsBuzzer": {
"label": "I2S GPIO Pin als Summer verwenden",
"description": "I2S GPIO Pin als Summerausgang definieren"
}
},
"mqtt": {
"title": "MQTT Einstellungen",
"description": "Einstellungen für das MQTT Modul",
"enabled": {
"label": "Aktiviert",
"description": "MQTT aktivieren oder deaktivieren"
},
"address": {
"label": "MQTT Server Adresse",
"description": "MQTT Serveradresse für Standard/benutzerdefinierte Server"
},
"username": {
"label": "MQTT Benutzername",
"description": "MQTT Benutzername für Standard/benutzerdefinierte Server"
},
"password": {
"label": "MQTT Passwort",
"description": "MQTT Passwort für Standard/benutzerdefinierte Server"
},
"encryptionEnabled": {
"label": "Verschlüsselung aktiviert",
"description": "MQTT-Verschlüsselung aktivieren oder deaktivieren. Hinweis: Alle Nachrichten werden unverschlüsselt an den MQTT-Broker gesendet, wenn diese Option nicht aktiviert ist. Unabhängig von der eingestellten Kanalverschlüsselung. Einschließlich der Standortdaten."
},
"jsonEnabled": {
"label": "JSON aktiviert",
"description": "Gibt an, ob JSON Nachrichten über MQTT gesendet oder empfangen werden sollen"
},
"tlsEnabled": {
"label": "TLS aktiviert",
"description": "TLS aktivieren oder deaktivieren"
},
"root": {
"label": "Hauptthema",
"description": "MQTT Hauptthema für Standard/Benutzerdefinierte Server"
},
"proxyToClientEnabled": {
"label": "MQTT Client Proxy aktiviert",
"description": "Verwendet die Netzwerkverbindung zum Austausch von MQTT Nachrichten mit dem Client."
},
"mapReportingEnabled": {
"label": "Kartenberichte aktiviert",
"description": "Ihr Knoten sendet in regelmäßigen Abständen eine unverschlüsselte Nachricht mit Kartenbericht an den konfigurierten MQTT-Server. Einschließlich ID, langen und kurzen Namen, ungefährer Standort, Hardwaremodell, Geräterolle, Firmware-Version, LoRa Region, Modem-Voreinstellung und Name des Primärkanal."
},
"mapReportSettings": {
"publishIntervalSecs": {
"label": "Veröffentlichungsintervall Kartenbericht (s)",
"description": "Intervall in Sekunden, um Kartenberichte zu veröffentlichen"
},
"positionPrecision": {
"label": "Ungefährer Standort",
"description": "Der geteilte Standort mit einer Genauigkeit innerhalb dieser Entfernung",
"options": {
"metric_km23": "Innerhalb von 23 km",
"metric_km12": "Innerhalb von 12 km",
"metric_km5_8": "Innerhalb von 5,8 km",
"metric_km2_9": "Innerhalb von 2,9 km",
"metric_km1_5": "Innerhalb von 1,5 km",
"metric_m700": "Innerhalb von 700 m",
"metric_m350": "Innerhalb von 350 m",
"metric_m200": "Innerhalb von 200 m",
"metric_m90": "Innerhalb von 90 m",
"metric_m50": "Innerhalb von 50 m",
"imperial_mi15": "Innerhalb von 15 Meilen",
"imperial_mi7_3": "Innerhalb von 7,3 Meilen",
"imperial_mi3_6": "Innerhalb von 3,6 Meilen",
"imperial_mi1_8": "Innerhalb von 1,8 Meilen",
"imperial_mi0_9": "Innerhalb von 0,9 Meilen",
"imperial_mi0_5": "Innerhalb von 0,5 Meilen",
"imperial_mi0_2": "Innerhalb von 0,2 Meilen",
"imperial_ft600": "Innerhalb von 600 Fuß",
"imperial_ft300": "Innerhalb von 300 Fuß",
"imperial_ft150": "Innerhalb von 150 Fuß"
}
}
}
},
"neighborInfo": {
"title": "Einstellung Nachbarinformation",
"description": "Einstellungen für das Modul Nachbarinformation",
"enabled": {
"label": "Aktiviert",
"description": "Nachbarinformation Modul aktivieren oder deaktivieren"
},
"updateInterval": {
"label": "Aktualisierungsintervall",
"description": "Intervall in Sekunden, wie oft die Nachbarinformation an das Netz gesendet wird"
}
},
"paxcounter": {
"title": "Einstellung für Pax Zähler",
"description": "Einstellungen für das Modul Pax Zähler",
"enabled": {
"label": "Modul aktiviert",
"description": "Aktiviere Pax Zähler"
},
"paxcounterUpdateInterval": {
"label": "Aktualisierungsintervall (Sekunden)",
"description": "Wie lange soll zwischen dem Senden von Pax Zählernachrichten gewartet werden"
},
"wifiThreshold": {
"label": "WLAN RSSI Grenzwert",
"description": "Bei welchem WLAN RSSI Grenzwert sollte der Zähler erhöht werden. Standardwert -80"
},
"bleThreshold": {
"label": "BLE RSSI Grenzwert",
"description": "Bei welchem BLE RSSI Grenzwert sollte der Zähler erhöht werden. Standardwert -80"
}
},
"rangeTest": {
"title": "Einstellung Reichweitentest",
"description": "Einstellungen für das Modul Reichweitentest",
"enabled": {
"label": "Modul aktiviert",
"description": "Reichweitentest aktivieren"
},
"sender": {
"label": "Nachrichtenintervall",
"description": "Wie lange soll zwischen dem Senden von Testnachrichten gewartet werden"
},
"save": {
"label": "CSV im internen Speicher abspeichern",
"description": "Nur für ESP32"
}
},
"serial": {
"title": "Serielle Einstellungen",
"description": "Einstellungen für das serielle Modul",
"enabled": {
"label": "Modul aktiviert",
"description": "Serielle Ausgabe aktivieren"
},
"echo": {
"label": "Echo",
"description": "Wenn aktiviert, werden alle Nachrichten, die Sie senden, an Ihr Gerät zurückgesendet"
},
"rxd": {
"label": "GPIO Empfangen",
"description": "Setzen Sie den GPIO Pin, den Sie eingerichtet haben, als RXD Pin."
},
"txd": {
"label": "GPIO Senden",
"description": "Setzen Sie den GPIO Pin, den Sie eingerichtet haben, als TXD Pin."
},
"baud": {
"label": "Baudrate",
"description": "Serielle Baudrate"
},
"timeout": {
"label": "Zeitlimit erreicht",
"description": "Wartezeit in Sekunden bis eine Nachricht als gesendet angenommen wird"
},
"mode": {
"label": "Betriebsmodus",
"description": "Modus auswählen"
},
"overrideConsoleSerialPort": {
"label": "Seriellen Port der Konsole überschreiben",
"description": "Wenn Sie einen seriellen Port an die Konsole angeschlossen haben, wird diese überschrieben."
}
},
"storeForward": {
"title": "Speichern & Weiterleiten Einstellungen",
"description": "Einstellungen für das Modul Speichern & Weiterleiten",
"enabled": {
"label": "Modul aktiviert",
"description": "Speichern & Weiterleiten aktivieren"
},
"heartbeat": {
"label": "Herzschlag aktiviert",
"description": "Herzschlag für Speichern & Weiterleiten aktivieren"
},
"records": {
"label": "Anzahl Einträge",
"description": "Anzahl der zu speichernden Datensätze"
},
"historyReturnMax": {
"label": "Verlauf Rückgabewert maximal",
"description": "Maximale Anzahl an zurückzugebenden Datensätzen"
},
"historyReturnWindow": {
"label": "Zeitraum Rückgabewert",
"description": "Maximale Anzahl an zurückzugebenden Datensätzen"
}
},
"telemetry": {
"title": "Telemetrieeinstellungen",
"description": "Einstellungen für das Telemetriemodul",
"deviceUpdateInterval": {
"label": "Gerätekennzahlen",
"description": "Aktualisierungsintervall für Gerätekennzahlen (Sekunden)"
},
"environmentUpdateInterval": {
"label": "Aktualisierungsintervall für Umweltdaten (Sekunden)",
"description": ""
},
"environmentMeasurementEnabled": {
"label": "Modul aktiviert",
"description": "Aktiviert die Telemetrie für Umweltdaten"
},
"environmentScreenEnabled": {
"label": "OLED Anzeige aktivieren",
"description": "Zeige das Telemetriemodul auf der OLED Anzeige"
},
"environmentDisplayFahrenheit": {
"label": "Temperatur in Fahrenheit",
"description": "Temperatur in Fahrenheit anzeigen"
},
"airQualityEnabled": {
"label": "Luftqualität aktiviert",
"description": "Telemetrie für Luftqualität aktivieren"
},
"airQualityInterval": {
"label": "Aktualisierungsintervall Luftqualität",
"description": "Wie oft werden Luftqualitätsdaten über das Netz gesendet"
},
"powerMeasurementEnabled": {
"label": "Energiemessung aktiviert",
"description": "Aktiviere die Telemetrie für die Energiemessung"
},
"powerUpdateInterval": {
"label": "Aktualisierungsintervall Energie",
"description": "Wie oft werden Energiedaten an das Netz gesendet"
},
"powerScreenEnabled": {
"label": "Energieanzeige aktiviert",
"description": "Aktiviere die Anzeige für Energietelemetrie"
}
}
"page": {
"tabAmbientLighting": "Umgebungslicht",
"tabAudio": "Audio",
"tabCannedMessage": "Vordefinierte Nachrichten",
"tabDetectionSensor": "Erkennungssensor",
"tabExternalNotification": "Externe Benachrichtigung",
"tabMqtt": "MQTT",
"tabNeighborInfo": "Nachbarinformation",
"tabPaxcounter": "Pax Zähler",
"tabRangeTest": "Reichweitentest",
"tabSerial": "Seriell",
"tabStoreAndForward": "Speichern&Weiterleiten",
"tabTelemetry": "Telemetrie"
},
"ambientLighting": {
"title": "Einstellung Umgebungsbeleuchtung",
"description": "Einstellungen für das Modul Umgebungsbeleuchtung",
"ledState": {
"label": "LED Status",
"description": "Setzt die LED auf ein oder aus"
},
"current": {
"label": "Stromstärke",
"description": "Legt den Strom für den LED Ausgang fest. Standard ist 10"
},
"red": {
"label": "Rot",
"description": "Legt den roten LED Wert fest. Bereich 0-255"
},
"green": {
"label": "Grün",
"description": "Legt den grünen LED Wert fest. Bereich 0-255"
},
"blue": {
"label": "Blau",
"description": "Legt den blauen LED Wert fest. Bereich 0-255"
}
},
"audio": {
"title": "Audioeinstellungen",
"description": "Einstellungen für das Audiomodul",
"codec2Enabled": {
"label": "Codec 2 aktiviert",
"description": "Codec 2 Audiokodierung aktivieren"
},
"pttPin": {
"label": "GPIO PTT",
"description": "Für PTT verwendeter GPIO Pin"
},
"bitrate": {
"label": "Bitrate",
"description": "Bitrate zur Audiokodierung"
},
"i2sWs": {
"label": "i2S WS",
"description": "GPIO Pin für i2S WS"
},
"i2sSd": {
"label": "i2S SD",
"description": "GPIO Pin für i2S SD"
},
"i2sDin": {
"label": "i2S DIN",
"description": "GPIO Pin für i2S DIN"
},
"i2sSck": {
"label": "i2S SCK",
"description": "GPIO Pin für i2S SCK"
}
},
"cannedMessage": {
"title": "Einstellungen für vordefinierte Nachrichten",
"description": "Einstellungen für das Modul vordefinierte Nachrichten",
"moduleEnabled": {
"label": "Modul aktiviert",
"description": "Vordefinierte Nachrichten aktivieren"
},
"rotary1Enabled": {
"label": "Drehgeber #1 aktiviert",
"description": "Drehgeber aktivieren"
},
"inputbrokerPinA": {
"label": "Drehgeber Pin A",
"description": "GPIO Pin Wert (1-39) für Drehgeber Pin A"
},
"inputbrokerPinB": {
"label": "Drehgeber Pin B",
"description": "GPIO Pin Wert (1-39) für Drehgeber Pin B"
},
"inputbrokerPinPress": {
"label": "Drehgeber Pin Taste",
"description": "GPIO Pin Wert (1-39) für Drehgeber Pin Taste"
},
"inputbrokerEventCw": {
"label": "Ereignis im Uhrzeigersinn",
"description": "Eingabeereignis auswählen."
},
"inputbrokerEventCcw": {
"label": "Ereignis gegen Uhrzeigersinn",
"description": "Eingabeereignis auswählen."
},
"inputbrokerEventPress": {
"label": "Ereignis Tastendruck",
"description": "Eingabeereignis auswählen."
},
"updown1Enabled": {
"label": "Geber Hoch/Runter aktiviert",
"description": "Aktiviere Geber Hoch/Runter"
},
"allowInputSource": {
"label": "Eingabequelle zulassen",
"description": "Wählen Sie aus: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
},
"sendBell": {
"label": "Sende Glocke",
"description": "Sendet ein Klingelzeichen (Glocke) mit jeder Nachricht"
}
},
"detectionSensor": {
"title": "Sensoreinstellungen für Erkennung",
"description": "Einstellungen für das Erkennungssensormodul",
"enabled": {
"label": "Aktiviert",
"description": "Erkennungssensormodul aktivieren oder deaktivieren"
},
"minimumBroadcastSecs": {
"label": "Minimale Übertragungszeit alle Sekunden",
"description": "Das Intervall in Sekunden, wie oft eine Nachricht an das Netz gesendet wird, wenn eine Statusänderung erkannt wurde"
},
"stateBroadcastSecs": {
"label": "Statusübertragung alle Sekunden",
"description": "Das Intervall in Sekunden, wie oft eine Nachricht mit dem aktuellen Status an das Netz gesendet wird, unabhängig von Änderungen"
},
"sendBell": {
"label": "Sende Glocke",
"description": "ASCII-Glocke mit Warnmeldung senden"
},
"name": {
"label": "Anzeigename",
"description": "Formatierte Nachricht die an das Netz gesendet wird, maximal 20 Zeichen"
},
"monitorPin": {
"label": "GPIO Pin überwachen",
"description": "Der GPIO Pin zur Überwachung von Statusänderungen"
},
"detectionTriggerType": {
"label": "Auslösetyp der Erkennung",
"description": "Die Art des zu verwendenden Auslöseereignisses"
},
"usePullup": {
"label": "Pullup verwenden",
"description": "Gibt an, ob der INPUT_PULLUP Modus für GPIO Pin verwendet wird oder nicht"
}
},
"externalNotification": {
"title": "Einstellungen für externe Benachrichtigungen",
"description": "Einstellung für das Modul externe Benachrichtigung",
"enabled": {
"label": "Modul aktiviert",
"description": "Externe Benachrichtigung aktivieren"
},
"outputMs": {
"label": "Ausgabe MS",
"description": "Ausgabe MS"
},
"output": {
"label": "Ausgabe",
"description": "Ausgabe"
},
"outputVibra": {
"label": "Ausgabe Vibration",
"description": "Ausgabe Vibration"
},
"outputBuzzer": {
"label": "Ausgabe Summer",
"description": "Ausgabe Summer"
},
"active": {
"label": "Aktiv",
"description": "Aktiv"
},
"alertMessage": {
"label": "Warnmeldung",
"description": "Warnmeldung"
},
"alertMessageVibra": {
"label": "Vibration bei Warnmeldung",
"description": "Vibration bei Warnmeldung"
},
"alertMessageBuzzer": {
"label": "Summer bei Warnmeldung",
"description": "Summer bei Warnmeldung"
},
"alertBell": {
"label": "Warnglocke",
"description": "Soll beim Empfang eines eingehenden Klingelzeichens (Glocke) eine Warnung ausgelöst werden?"
},
"alertBellVibra": {
"label": "Vibration bei Klingelzeichen",
"description": "Vibration bei Klingelzeichen"
},
"alertBellBuzzer": {
"label": "Summer bei Klingelzeichen",
"description": "Summer bei Klingelzeichen"
},
"usePwm": {
"label": "PWM verwenden",
"description": "PWM verwenden"
},
"nagTimeout": {
"label": "Nervige Verzögerung",
"description": "Nervige Verzögerung"
},
"useI2sAsBuzzer": {
"label": "I2S GPIO Pin als Summer verwenden",
"description": "I2S GPIO Pin als Summerausgang definieren"
}
},
"mqtt": {
"title": "MQTT Einstellungen",
"description": "Einstellungen für das MQTT Modul",
"enabled": {
"label": "Aktiviert",
"description": "MQTT aktivieren oder deaktivieren"
},
"address": {
"label": "MQTT Server Adresse",
"description": "MQTT Serveradresse für Standard/benutzerdefinierte Server"
},
"username": {
"label": "MQTT Benutzername",
"description": "MQTT Benutzername für Standard/benutzerdefinierte Server"
},
"password": {
"label": "MQTT Passwort",
"description": "MQTT Passwort für Standard/benutzerdefinierte Server"
},
"encryptionEnabled": {
"label": "Verschlüsselung aktiviert",
"description": "MQTT-Verschlüsselung aktivieren oder deaktivieren. Hinweis: Alle Nachrichten werden unverschlüsselt an den MQTT-Broker gesendet, wenn diese Option nicht aktiviert ist. Unabhängig von der eingestellten Kanalverschlüsselung. Einschließlich der Standortdaten."
},
"jsonEnabled": {
"label": "JSON aktiviert",
"description": "Gibt an, ob JSON Nachrichten über MQTT gesendet oder empfangen werden sollen"
},
"tlsEnabled": {
"label": "TLS aktiviert",
"description": "TLS aktivieren oder deaktivieren"
},
"root": {
"label": "Hauptthema",
"description": "MQTT Hauptthema für Standard/Benutzerdefinierte Server"
},
"proxyToClientEnabled": {
"label": "MQTT Client Proxy aktiviert",
"description": "Verwendet die Netzwerkverbindung zum Austausch von MQTT Nachrichten mit dem Client."
},
"mapReportingEnabled": {
"label": "Kartenberichte aktiviert",
"description": "Ihr Knoten sendet in regelmäßigen Abständen eine unverschlüsselte Nachricht mit Kartenbericht an den konfigurierten MQTT-Server. Einschließlich ID, langen und kurzen Namen, ungefährer Standort, Hardwaremodell, Geräterolle, Firmware-Version, LoRa Region, Modem-Voreinstellung und Name des Primärkanal."
},
"mapReportSettings": {
"publishIntervalSecs": {
"label": "Veröffentlichungsintervall Kartenbericht (s)",
"description": "Intervall in Sekunden, um Kartenberichte zu veröffentlichen"
},
"positionPrecision": {
"label": "Ungefährer Standort",
"description": "Der geteilte Standort mit einer Genauigkeit innerhalb dieser Entfernung",
"options": {
"metric_km23": "Innerhalb von 23 km",
"metric_km12": "Innerhalb von 12 km",
"metric_km5_8": "Innerhalb von 5,8 km",
"metric_km2_9": "Innerhalb von 2,9 km",
"metric_km1_5": "Innerhalb von 1,5 km",
"metric_m700": "Innerhalb von 700 m",
"metric_m350": "Innerhalb von 350 m",
"metric_m200": "Innerhalb von 200 m",
"metric_m90": "Innerhalb von 90 m",
"metric_m50": "Innerhalb von 50 m",
"imperial_mi15": "Innerhalb von 15 Meilen",
"imperial_mi7_3": "Innerhalb von 7,3 Meilen",
"imperial_mi3_6": "Innerhalb von 3,6 Meilen",
"imperial_mi1_8": "Innerhalb von 1,8 Meilen",
"imperial_mi0_9": "Innerhalb von 0,9 Meilen",
"imperial_mi0_5": "Innerhalb von 0,5 Meilen",
"imperial_mi0_2": "Innerhalb von 0,2 Meilen",
"imperial_ft600": "Innerhalb von 600 Fuß",
"imperial_ft300": "Innerhalb von 300 Fuß",
"imperial_ft150": "Innerhalb von 150 Fuß"
}
}
}
},
"neighborInfo": {
"title": "Einstellung Nachbarinformation",
"description": "Einstellungen für das Modul Nachbarinformation",
"enabled": {
"label": "Aktiviert",
"description": "Nachbarinformation Modul aktivieren oder deaktivieren"
},
"updateInterval": {
"label": "Aktualisierungsintervall",
"description": "Intervall in Sekunden, wie oft die Nachbarinformation an das Netz gesendet wird"
}
},
"paxcounter": {
"title": "Einstellung für Pax Zähler",
"description": "Einstellungen für das Modul Pax Zähler",
"enabled": {
"label": "Modul aktiviert",
"description": "Aktiviere Pax Zähler"
},
"paxcounterUpdateInterval": {
"label": "Aktualisierungsintervall (Sekunden)",
"description": "Wie lange soll zwischen dem Senden von Pax Zählernachrichten gewartet werden"
},
"wifiThreshold": {
"label": "WLAN RSSI Grenzwert",
"description": "Bei welchem WLAN RSSI Grenzwert sollte der Zähler erhöht werden. Standardwert -80"
},
"bleThreshold": {
"label": "BLE RSSI Grenzwert",
"description": "Bei welchem BLE RSSI Grenzwert sollte der Zähler erhöht werden. Standardwert -80"
}
},
"rangeTest": {
"title": "Einstellung Reichweitentest",
"description": "Einstellungen für das Modul Reichweitentest",
"enabled": {
"label": "Modul aktiviert",
"description": "Reichweitentest aktivieren"
},
"sender": {
"label": "Nachrichtenintervall",
"description": "Wie lange soll zwischen dem Senden von Testnachrichten gewartet werden"
},
"save": {
"label": "CSV im internen Speicher abspeichern",
"description": "Nur für ESP32"
}
},
"serial": {
"title": "Serielle Einstellungen",
"description": "Einstellungen für das serielle Modul",
"enabled": {
"label": "Modul aktiviert",
"description": "Serielle Ausgabe aktivieren"
},
"echo": {
"label": "Echo",
"description": "Wenn aktiviert, werden alle Nachrichten, die Sie senden, an Ihr Gerät zurückgesendet"
},
"rxd": {
"label": "GPIO Empfangen",
"description": "Setzen Sie den GPIO Pin, den Sie eingerichtet haben, als RXD Pin."
},
"txd": {
"label": "GPIO Senden",
"description": "Setzen Sie den GPIO Pin, den Sie eingerichtet haben, als TXD Pin."
},
"baud": {
"label": "Baudrate",
"description": "Serielle Baudrate"
},
"timeout": {
"label": "Zeitlimit erreicht",
"description": "Wartezeit in Sekunden bis eine Nachricht als gesendet angenommen wird"
},
"mode": {
"label": "Betriebsmodus",
"description": "Modus auswählen"
},
"overrideConsoleSerialPort": {
"label": "Seriellen Port der Konsole überschreiben",
"description": "Wenn Sie einen seriellen Port an die Konsole angeschlossen haben, wird diese überschrieben."
}
},
"storeForward": {
"title": "Speichern & Weiterleiten Einstellungen",
"description": "Einstellungen für das Modul Speichern & Weiterleiten",
"enabled": {
"label": "Modul aktiviert",
"description": "Speichern & Weiterleiten aktivieren"
},
"heartbeat": {
"label": "Herzschlag aktiviert",
"description": "Herzschlag für Speichern & Weiterleiten aktivieren"
},
"records": {
"label": "Anzahl Einträge",
"description": "Anzahl der zu speichernden Datensätze"
},
"historyReturnMax": {
"label": "Verlauf Rückgabewert maximal",
"description": "Maximale Anzahl an zurückzugebenden Datensätzen"
},
"historyReturnWindow": {
"label": "Zeitraum Rückgabewert",
"description": "Maximale Anzahl an zurückzugebenden Datensätzen"
}
},
"telemetry": {
"title": "Telemetrieeinstellungen",
"description": "Einstellungen für das Telemetriemodul",
"deviceUpdateInterval": {
"label": "Gerätekennzahlen",
"description": "Aktualisierungsintervall für Gerätekennzahlen (Sekunden)"
},
"environmentUpdateInterval": {
"label": "Aktualisierungsintervall für Umweltdaten (Sekunden)",
"description": ""
},
"environmentMeasurementEnabled": {
"label": "Modul aktiviert",
"description": "Aktiviert die Telemetrie für Umweltdaten"
},
"environmentScreenEnabled": {
"label": "OLED Anzeige aktivieren",
"description": "Zeige das Telemetriemodul auf der OLED Anzeige"
},
"environmentDisplayFahrenheit": {
"label": "Temperatur in Fahrenheit",
"description": "Temperatur in Fahrenheit anzeigen"
},
"airQualityEnabled": {
"label": "Luftqualität aktiviert",
"description": "Telemetrie für Luftqualität aktivieren"
},
"airQualityInterval": {
"label": "Aktualisierungsintervall Luftqualität",
"description": "Wie oft werden Luftqualitätsdaten über das Netz gesendet"
},
"powerMeasurementEnabled": {
"label": "Energiemessung aktiviert",
"description": "Aktiviere die Telemetrie für die Energiemessung"
},
"powerUpdateInterval": {
"label": "Aktualisierungsintervall Energie",
"description": "Wie oft werden Energiedaten an das Netz gesendet"
},
"powerScreenEnabled": {
"label": "Energieanzeige aktiviert",
"description": "Aktiviere die Anzeige für Energietelemetrie"
}
}
}

View File

@@ -1,63 +1,63 @@
{
"nodeDetail": {
"publicKeyEnabled": {
"label": "Öffentlicher Schlüssel aktiviert"
},
"noPublicKey": {
"label": "Kein öffentlicher Schlüssel"
},
"directMessage": {
"label": "Direktnachricht {{shortName}}"
},
"favorite": {
"label": "Favorit",
"tooltip": "Diesen Knoten zu Favoriten hinzufügen oder entfernen"
},
"notFavorite": {
"label": "Kein Favorit"
},
"error": {
"label": "Fehler",
"text": "Beim Abrufen der Knotendetails ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut."
},
"status": {
"heard": "Gehört",
"mqtt": "MQTT"
},
"elevation": {
"label": "Höhe"
},
"channelUtil": {
"label": "Kanal-Auslastung"
},
"airtimeUtil": {
"label": "Sendezeit-Auslastung"
}
},
"nodesTable": {
"headings": {
"longName": "Langer Name",
"connection": "Verbindung",
"lastHeard": "Zuletzt gehört",
"encryption": "Verschlüsselung",
"model": "Modell",
"macAddress": "MAC Adresse"
},
"connectionStatus": {
"direct": "Direkt",
"away": "abwesend",
"unknown": "-",
"viaMqtt": ", über MQTT"
},
"lastHeardStatus": {
"never": "Nie"
}
},
"actions": {
"added": "Hinzugefügt",
"removed": "Entfernt",
"ignoreNode": "Knoten ignorieren",
"unignoreNode": "Knoten akzeptieren",
"requestPosition": "Standort anfordern"
}
"nodeDetail": {
"publicKeyEnabled": {
"label": "Öffentlicher Schlüssel aktiviert"
},
"noPublicKey": {
"label": "Kein öffentlicher Schlüssel"
},
"directMessage": {
"label": "Direktnachricht {{shortName}}"
},
"favorite": {
"label": "Favorit",
"tooltip": "Diesen Knoten zu Favoriten hinzufügen oder entfernen"
},
"notFavorite": {
"label": "Kein Favorit"
},
"error": {
"label": "Fehler",
"text": "Beim Abrufen der Knotendetails ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut."
},
"status": {
"heard": "Gehört",
"mqtt": "MQTT"
},
"elevation": {
"label": "Höhe"
},
"channelUtil": {
"label": "Kanal-Auslastung"
},
"airtimeUtil": {
"label": "Sendezeit-Auslastung"
}
},
"nodesTable": {
"headings": {
"longName": "Langer Name",
"connection": "Verbindung",
"lastHeard": "Zuletzt gehört",
"encryption": "Verschlüsselung",
"model": "Modell",
"macAddress": "MAC Adresse"
},
"connectionStatus": {
"direct": "Direkt",
"away": "abwesend",
"unknown": "-",
"viaMqtt": ", über MQTT"
},
"lastHeardStatus": {
"never": "Nie"
}
},
"actions": {
"added": "Hinzugefügt",
"removed": "Entfernt",
"ignoreNode": "Knoten ignorieren",
"unignoreNode": "Knoten akzeptieren",
"requestPosition": "Standort anfordern"
}
}

View File

@@ -1,228 +1,228 @@
{
"navigation": {
"title": "Navigation",
"messages": "Nachrichten",
"map": "Karte",
"config": "Einstellungen",
"radioConfig": "Funkgerätekonfiguration",
"moduleConfig": "Moduleinstellungen",
"channels": "Kanäle",
"nodes": "Knoten"
},
"app": {
"title": "Meshtastic",
"logo": "Meshtastic Logo"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Seitenleiste öffnen",
"close": "Seitenleiste schließen"
}
},
"deviceInfo": {
"volts": "{{voltage}} Volt",
"firmware": {
"title": "Firmware",
"version": "v{{version}}",
"buildDate": "Erstelldatum: {{date}}"
},
"deviceName": {
"title": "Gerätename",
"changeName": "Gerätename ändern",
"placeholder": "Gerätename eingeben"
},
"editDeviceName": "Gerätename bearbeiten"
}
},
"batteryStatus": {
"charging": "{{level}}% Ladung",
"pluggedIn": "Wird geladen",
"title": "Batterie"
},
"search": {
"nodes": "Knoten suchen...",
"channels": "Kanäle suchen...",
"commandPalette": "Befehle suchen..."
},
"toast": {
"positionRequestSent": {
"title": "Standortanfrage gesendet."
},
"requestingPosition": {
"title": "Standort wird angefordert, bitte warten..."
},
"sendingTraceroute": {
"title": "Sende Traceroute, bitte warten..."
},
"tracerouteSent": {
"title": "Traceroute gesendet."
},
"savedChannel": {
"title": "Gespeicherter Kanal: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Der Chat verwendet PKI-Verschlüsselung."
},
"pskEncryption": {
"title": "Chat verwendet PSK-Verschlüsselung."
}
},
"configSaveError": {
"title": "Fehler beim Speichern von Einstellung",
"description": "Beim Speichern der Einstellungen ist ein Fehler aufgetreten."
},
"validationError": {
"title": "Einstellungsfehler vorhanden",
"description": "Bitte korrigieren Sie die Einstellungsfehler vor dem Speichern."
},
"saveSuccess": {
"title": "Einstellungen speichern",
"description": "Die Einstellungsänderung {{case}} wurde gespeichert."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} Favoriten.",
"action": {
"added": "Hinzugefügt",
"removed": "Entfernt",
"to": "bis",
"from": "von"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} Ignorierliste",
"action": {
"added": "Hinzugefügt",
"removed": "Entfernt",
"to": "bis",
"from": "von"
}
}
},
"notifications": {
"copied": {
"label": "Kopiert!"
},
"copyToClipboard": {
"label": "In die Zwischenablage kopieren"
},
"hidePassword": {
"label": "Passwort verbergen"
},
"showPassword": {
"label": "Passwort anzeigen"
},
"deliveryStatus": {
"delivered": "Zugestellt",
"failed": "Zustellung fehlgeschlagen",
"waiting": "Warte...",
"unknown": "Unbekannt"
}
},
"general": {
"label": "Allgemein"
},
"hardware": {
"label": "Hardware"
},
"metrics": {
"label": "Messgrößen"
},
"role": {
"label": "Rolle"
},
"filter": {
"label": "Filter"
},
"advanced": {
"label": "Fortgeschritten"
},
"clearInput": {
"label": "Eingabe löschen"
},
"resetFilters": {
"label": "Filter zurücksetzen"
},
"nodeName": {
"label": "Knotenname/-nummer",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Sendezeit-Auslastung (%)"
},
"batteryLevel": {
"label": "Akkustand (%)",
"labelText": "Akkustand (%): {{value}}"
},
"batteryVoltage": {
"label": "Batteriespannung (V)",
"title": "Spannung"
},
"channelUtilization": {
"label": "Kanalauslastung (%)"
},
"hops": {
"direct": "Direkt",
"label": "Anzahl Hops",
"text": "Sprungweite: {{value}}"
},
"lastHeard": {
"label": "Zuletzt gehört",
"labelText": "Zuletzt gehört: {{value}}",
"nowLabel": "Jetzt"
},
"snr": {
"label": "SNR (dB)"
},
"favorites": {
"label": "Favoriten"
},
"hide": {
"label": "Ausblenden"
},
"showOnly": {
"label": "Zeige nur"
},
"viaMqtt": {
"label": "Über MQTT verbunden"
},
"hopsUnknown": {
"label": "Unbekannte Sprungweite"
},
"showUnheard": {
"label": "Nie gehört"
},
"language": {
"label": "Sprache",
"changeLanguage": "Sprache ändern"
},
"theme": {
"dark": "Dunkel",
"light": "Hell",
"system": "Automatisch",
"changeTheme": "Farbschema ändern"
},
"errorPage": {
"title": "Das ist ein wenig peinlich...",
"description1": "Es tut uns wirklich leid, aber im Webclient ist ein Fehler aufgetreten, der es zum Absturz gebracht hat. <br /> Das soll nicht passieren, und wir arbeiten hart daran, es zu beheben.",
"description2": "Der beste Weg, um zu verhindern, dass sich dies Ihnen oder irgendjemand anderem wiederholt, besteht darin, uns über dieses Problem zu berichten.",
"reportInstructions": "Bitte fügen Sie folgende Informationen in Ihren Bericht ein:",
"reportSteps": {
"step1": "Was haben Sie getan, als der Fehler aufgetreten ist",
"step2": "Was haben Sie erwartet",
"step3": "Was tatsächlich passiert ist",
"step4": "Sonstige relevante Informationen"
},
"reportLink": "Sie können das Problem auf unserem <0>GitHub</0> melden",
"dashboardLink": "Zurück zum <0>Dashboard</0>",
"detailsSummary": "Fehlerdetails",
"errorMessageLabel": "Fehlermeldungen:",
"stackTraceLabel": "Stapelabzug:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® ist eine eingetragene Marke der Meshtastic LLC. | <1>Rechtliche Informationen</1>",
"commitSha": "Commit SHA: {{sha}}"
}
"navigation": {
"title": "Navigation",
"messages": "Nachrichten",
"map": "Karte",
"config": "Einstellungen",
"radioConfig": "Funkgerätekonfiguration",
"moduleConfig": "Moduleinstellungen",
"channels": "Kanäle",
"nodes": "Knoten"
},
"app": {
"title": "Meshtastic",
"logo": "Meshtastic Logo"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Seitenleiste öffnen",
"close": "Seitenleiste schließen"
}
},
"deviceInfo": {
"volts": "{{voltage}} Volt",
"firmware": {
"title": "Firmware",
"version": "v{{version}}",
"buildDate": "Erstelldatum: {{date}}"
},
"deviceName": {
"title": "Gerätename",
"changeName": "Gerätename ändern",
"placeholder": "Gerätename eingeben"
},
"editDeviceName": "Gerätename bearbeiten"
}
},
"batteryStatus": {
"charging": "{{level}}% Ladung",
"pluggedIn": "Wird geladen",
"title": "Batterie"
},
"search": {
"nodes": "Knoten suchen...",
"channels": "Kanäle suchen...",
"commandPalette": "Befehle suchen..."
},
"toast": {
"positionRequestSent": {
"title": "Standortanfrage gesendet."
},
"requestingPosition": {
"title": "Standort wird angefordert, bitte warten..."
},
"sendingTraceroute": {
"title": "Sende Traceroute, bitte warten..."
},
"tracerouteSent": {
"title": "Traceroute gesendet."
},
"savedChannel": {
"title": "Gespeicherter Kanal: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Der Chat verwendet PKI-Verschlüsselung."
},
"pskEncryption": {
"title": "Chat verwendet PSK-Verschlüsselung."
}
},
"configSaveError": {
"title": "Fehler beim Speichern von Einstellung",
"description": "Beim Speichern der Einstellungen ist ein Fehler aufgetreten."
},
"validationError": {
"title": "Einstellungsfehler vorhanden",
"description": "Bitte korrigieren Sie die Einstellungsfehler vor dem Speichern."
},
"saveSuccess": {
"title": "Einstellungen speichern",
"description": "Die Einstellungsänderung {{case}} wurde gespeichert."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} Favoriten.",
"action": {
"added": "Hinzugefügt",
"removed": "Entfernt",
"to": "bis",
"from": "von"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} Ignorierliste",
"action": {
"added": "Hinzugefügt",
"removed": "Entfernt",
"to": "bis",
"from": "von"
}
}
},
"notifications": {
"copied": {
"label": "Kopiert!"
},
"copyToClipboard": {
"label": "In die Zwischenablage kopieren"
},
"hidePassword": {
"label": "Passwort verbergen"
},
"showPassword": {
"label": "Passwort anzeigen"
},
"deliveryStatus": {
"delivered": "Zugestellt",
"failed": "Zustellung fehlgeschlagen",
"waiting": "Warte...",
"unknown": "Unbekannt"
}
},
"general": {
"label": "Allgemein"
},
"hardware": {
"label": "Hardware"
},
"metrics": {
"label": "Messgrößen"
},
"role": {
"label": "Rolle"
},
"filter": {
"label": "Filter"
},
"advanced": {
"label": "Fortgeschritten"
},
"clearInput": {
"label": "Eingabe löschen"
},
"resetFilters": {
"label": "Filter zurücksetzen"
},
"nodeName": {
"label": "Knotenname/-nummer",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Sendezeit-Auslastung (%)"
},
"batteryLevel": {
"label": "Akkustand (%)",
"labelText": "Akkustand (%): {{value}}"
},
"batteryVoltage": {
"label": "Batteriespannung (V)",
"title": "Spannung"
},
"channelUtilization": {
"label": "Kanalauslastung (%)"
},
"hops": {
"direct": "Direkt",
"label": "Anzahl Hops",
"text": "Sprungweite: {{value}}"
},
"lastHeard": {
"label": "Zuletzt gehört",
"labelText": "Zuletzt gehört: {{value}}",
"nowLabel": "Jetzt"
},
"snr": {
"label": "SNR (dB)"
},
"favorites": {
"label": "Favoriten"
},
"hide": {
"label": "Ausblenden"
},
"showOnly": {
"label": "Zeige nur"
},
"viaMqtt": {
"label": "Über MQTT verbunden"
},
"hopsUnknown": {
"label": "Unbekannte Sprungweite"
},
"showUnheard": {
"label": "Nie gehört"
},
"language": {
"label": "Sprache",
"changeLanguage": "Sprache ändern"
},
"theme": {
"dark": "Dunkel",
"light": "Hell",
"system": "Automatisch",
"changeTheme": "Farbschema ändern"
},
"errorPage": {
"title": "Das ist ein wenig peinlich...",
"description1": "Es tut uns wirklich leid, aber im Webclient ist ein Fehler aufgetreten, der es zum Absturz gebracht hat. <br /> Das soll nicht passieren, und wir arbeiten hart daran, es zu beheben.",
"description2": "Der beste Weg, um zu verhindern, dass sich dies Ihnen oder irgendjemand anderem wiederholt, besteht darin, uns über dieses Problem zu berichten.",
"reportInstructions": "Bitte fügen Sie folgende Informationen in Ihren Bericht ein:",
"reportSteps": {
"step1": "Was haben Sie getan, als der Fehler aufgetreten ist",
"step2": "Was haben Sie erwartet",
"step3": "Was tatsächlich passiert ist",
"step4": "Sonstige relevante Informationen"
},
"reportLink": "Sie können das Problem auf unserem <0>GitHub</0> melden",
"dashboardLink": "Zurück zum <0>Dashboard</0>",
"detailsSummary": "Fehlerdetails",
"errorMessageLabel": "Fehlermeldungen:",
"stackTraceLabel": "Stapelabzug:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® ist eine eingetragene Marke der Meshtastic LLC. | <1>Rechtliche Informationen</1>",
"commitSha": "Commit SHA: {{sha}}"
}
}

View File

@@ -1,69 +1,69 @@
{
"page": {
"sectionLabel": "Channels",
"channelName": "Channel: {{channelName}}",
"broadcastLabel": "Primary",
"channelIndex": "Ch {{index}}"
},
"validation": {
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
},
"settings": {
"label": "Channel Settings",
"description": "Crypto, MQTT & misc settings"
},
"role": {
"label": "Role",
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
"options": {
"primary": "PRIMARY",
"disabled": "DISABLED",
"secondary": "SECONDARY"
}
},
"psk": {
"label": "Pre-Shared Key",
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
"generate": "Generate"
},
"name": {
"label": "Name",
"description": "A unique name for the channel <12 bytes, leave blank for default"
},
"uplinkEnabled": {
"label": "Uplink Enabled",
"description": "Send messages from the local mesh to MQTT"
},
"downlinkEnabled": {
"label": "Downlink Enabled",
"description": "Send messages from MQTT to the local mesh"
},
"positionPrecision": {
"label": "Location",
"description": "The precision of the location to share with the channel. Can be disabled.",
"options": {
"none": "Do not share location",
"precise": "Precise Location",
"metric_km23": "Within 23 kilometers",
"metric_km12": "Within 12 kilometers",
"metric_km5_8": "Within 5.8 kilometers",
"metric_km2_9": "Within 2.9 kilometers",
"metric_km1_5": "Within 1.5 kilometers",
"metric_m700": "Within 700 meters",
"metric_m350": "Within 350 meters",
"metric_m200": "Within 200 meters",
"metric_m90": "Within 90 meters",
"metric_m50": "Within 50 meters",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
"page": {
"sectionLabel": "Channels",
"channelName": "Channel: {{channelName}}",
"broadcastLabel": "Primary",
"channelIndex": "Ch {{index}}"
},
"validation": {
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
},
"settings": {
"label": "Channel Settings",
"description": "Crypto, MQTT & misc settings"
},
"role": {
"label": "Role",
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
"options": {
"primary": "PRIMARY",
"disabled": "DISABLED",
"secondary": "SECONDARY"
}
},
"psk": {
"label": "Pre-Shared Key",
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
"generate": "Generate"
},
"name": {
"label": "Name",
"description": "A unique name for the channel <12 bytes, leave blank for default"
},
"uplinkEnabled": {
"label": "Uplink Enabled",
"description": "Send messages from the local mesh to MQTT"
},
"downlinkEnabled": {
"label": "Downlink Enabled",
"description": "Send messages from MQTT to the local mesh"
},
"positionPrecision": {
"label": "Location",
"description": "The precision of the location to share with the channel. Can be disabled.",
"options": {
"none": "Do not share location",
"precise": "Precise Location",
"metric_km23": "Within 23 kilometers",
"metric_km12": "Within 12 kilometers",
"metric_km5_8": "Within 5.8 kilometers",
"metric_km2_9": "Within 2.9 kilometers",
"metric_km1_5": "Within 1.5 kilometers",
"metric_m700": "Within 700 meters",
"metric_m350": "Within 350 meters",
"metric_m200": "Within 200 meters",
"metric_m90": "Within 90 meters",
"metric_m50": "Within 50 meters",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
}

View File

@@ -1,112 +1,112 @@
{
"button": {
"apply": "Apply",
"backupKey": "Backup Key",
"cancel": "Cancel",
"clearMessages": "Clear Messages",
"close": "Close",
"confirm": "Confirm",
"delete": "Delete",
"dismiss": "Dismiss",
"download": "Download",
"export": "Export",
"generate": "Generate",
"regenerate": "Regenerate",
"import": "Import",
"message": "Message",
"now": "Now",
"ok": "OK",
"print": "Print",
"rebootOtaNow": "Reboot to OTA Mode Now",
"remove": "Remove",
"requestNewKeys": "Request New Keys",
"requestPosition": "Request Position",
"reset": "Reset",
"save": "Save",
"scanQr": "Scan QR Code",
"traceRoute": "Trace Route",
"submit": "Submit"
},
"app": {
"title": "Meshtastic",
"fullTitle": "Meshtastic Web Client"
},
"loading": "Loading...",
"unit": {
"cps": "CPS",
"dbm": "dBm",
"hertz": "Hz",
"hop": {
"one": "Hop",
"plural": "Hops"
},
"hopsAway": {
"one": "{{count}} hop away",
"plural": "{{count}} hops away",
"unknown": "Unknown hops away"
},
"megahertz": "MHz",
"raw": "raw",
"meter": { "one": "Meter", "plural": "Meters", "suffix": "m" },
"minute": { "one": "Minute", "plural": "Minutes" },
"hour": { "one": "Hour", "plural": "Hours" },
"millisecond": {
"one": "Millisecond",
"plural": "Milliseconds",
"suffix": "ms"
},
"second": { "one": "Second", "plural": "Seconds" },
"day": { "one": "Day", "plural": "Days" },
"month": { "one": "Month", "plural": "Months" },
"year": { "one": "Year", "plural": "Years" },
"snr": "SNR",
"volt": { "one": "Volt", "plural": "Volts", "suffix": "V" },
"record": { "one": "Records", "plural": "Records" }
},
"security": {
"0bit": "Empty",
"8bit": "8 bit",
"128bit": "128 bit",
"256bit": "256 bit"
},
"unknown": {
"longName": "Unknown",
"shortName": "UNK",
"notAvailable": "N/A",
"num": "??"
},
"nodeUnknownPrefix": "!",
"unset": "UNSET",
"fallbackName": "Meshtastic {{last4}}",
"node": "Node",
"formValidation": {
"unsavedChanges": "Unsaved changes",
"tooBig": {
"string": "Too long, expected less than or equal to {{maximum}} characters.",
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
},
"tooSmall": {
"string": "Too short, expected more than or equal to {{minimum}} characters.",
"number": "Too small, expected a number larger than or equal to {{minimum}}."
},
"invalidFormat": {
"ipv4": "Invalid format, expected an IPv4 address.",
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
},
"invalidType": {
"number": "Invalid type, expected a number."
},
"pskLength": {
"0bit": "Key is required to be empty.",
"8bit": "Key is required to be an 8 bit pre-shared key (PSK).",
"128bit": "Key is required to be a 128 bit pre-shared key (PSK).",
"256bit": "Key is required to be a 256 bit pre-shared key (PSK)."
},
"required": {
"generic": "This field is required.",
"managed": "At least one admin key is requred if the node is managed.",
"key": "Key is required."
}
}
"button": {
"apply": "Apply",
"backupKey": "Backup Key",
"cancel": "Cancel",
"clearMessages": "Clear Messages",
"close": "Close",
"confirm": "Confirm",
"delete": "Delete",
"dismiss": "Dismiss",
"download": "Download",
"export": "Export",
"generate": "Generate",
"regenerate": "Regenerate",
"import": "Import",
"message": "Message",
"now": "Now",
"ok": "OK",
"print": "Print",
"rebootOtaNow": "Reboot to OTA Mode Now",
"remove": "Remove",
"requestNewKeys": "Request New Keys",
"requestPosition": "Request Position",
"reset": "Reset",
"save": "Save",
"scanQr": "Scan QR Code",
"traceRoute": "Trace Route",
"submit": "Submit"
},
"app": {
"title": "Meshtastic",
"fullTitle": "Meshtastic Web Client"
},
"loading": "Loading...",
"unit": {
"cps": "CPS",
"dbm": "dBm",
"hertz": "Hz",
"hop": {
"one": "Hop",
"plural": "Hops"
},
"hopsAway": {
"one": "{{count}} hop away",
"plural": "{{count}} hops away",
"unknown": "Unknown hops away"
},
"megahertz": "MHz",
"raw": "raw",
"meter": { "one": "Meter", "plural": "Meters", "suffix": "m" },
"minute": { "one": "Minute", "plural": "Minutes" },
"hour": { "one": "Hour", "plural": "Hours" },
"millisecond": {
"one": "Millisecond",
"plural": "Milliseconds",
"suffix": "ms"
},
"second": { "one": "Second", "plural": "Seconds" },
"day": { "one": "Day", "plural": "Days" },
"month": { "one": "Month", "plural": "Months" },
"year": { "one": "Year", "plural": "Years" },
"snr": "SNR",
"volt": { "one": "Volt", "plural": "Volts", "suffix": "V" },
"record": { "one": "Records", "plural": "Records" }
},
"security": {
"0bit": "Empty",
"8bit": "8 bit",
"128bit": "128 bit",
"256bit": "256 bit"
},
"unknown": {
"longName": "Unknown",
"shortName": "UNK",
"notAvailable": "N/A",
"num": "??"
},
"nodeUnknownPrefix": "!",
"unset": "UNSET",
"fallbackName": "Meshtastic {{last4}}",
"node": "Node",
"formValidation": {
"unsavedChanges": "Unsaved changes",
"tooBig": {
"string": "Too long, expected less than or equal to {{maximum}} characters.",
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
},
"tooSmall": {
"string": "Too short, expected more than or equal to {{minimum}} characters.",
"number": "Too small, expected a number larger than or equal to {{minimum}}."
},
"invalidFormat": {
"ipv4": "Invalid format, expected an IPv4 address.",
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
},
"invalidType": {
"number": "Invalid type, expected a number."
},
"pskLength": {
"0bit": "Key is required to be empty.",
"8bit": "Key is required to be an 8 bit pre-shared key (PSK).",
"128bit": "Key is required to be a 128 bit pre-shared key (PSK).",
"256bit": "Key is required to be a 256 bit pre-shared key (PSK)."
},
"required": {
"generic": "This field is required.",
"managed": "At least one admin key is requred if the node is managed.",
"key": "Key is required."
}
}
}

View File

@@ -1,12 +1,12 @@
{
"dashboard": {
"title": "Connected Devices",
"description": "Manage your connected Meshtastic devices.",
"connectionType_ble": "BLE",
"connectionType_serial": "Serial",
"connectionType_network": "Network",
"noDevicesTitle": "No devices connected",
"noDevicesDescription": "Connect a new device to get started.",
"button_newConnection": "New Connection"
}
"dashboard": {
"title": "Connected Devices",
"description": "Manage your connected Meshtastic devices.",
"connectionType_ble": "BLE",
"connectionType_serial": "Serial",
"connectionType_network": "Network",
"noDevicesTitle": "No devices connected",
"noDevicesDescription": "Connect a new device to get started.",
"button_newConnection": "New Connection"
}
}

View File

@@ -1,428 +1,428 @@
{
"page": {
"title": "Configuration",
"tabBluetooth": "Bluetooth",
"tabDevice": "Device",
"tabDisplay": "Display",
"tabLora": "LoRa",
"tabNetwork": "Network",
"tabPosition": "Position",
"tabPower": "Power",
"tabSecurity": "Security"
},
"sidebar": {
"label": "Modules"
},
"device": {
"title": "Device Settings",
"description": "Settings for the device",
"buttonPin": {
"description": "Button pin override",
"label": "Button Pin"
},
"buzzerPin": {
"description": "Buzzer pin override",
"label": "Buzzer Pin"
},
"disableTripleClick": {
"description": "Disable triple click",
"label": "Disable Triple Click"
},
"doubleTapAsButtonPress": {
"description": "Treat double tap as button press",
"label": "Double Tap as Button Press"
},
"ledHeartbeatDisabled": {
"description": "Disable default blinking LED",
"label": "LED Heartbeat Disabled"
},
"nodeInfoBroadcastInterval": {
"description": "How often to broadcast node info",
"label": "Node Info Broadcast Interval"
},
"posixTimezone": {
"description": "The POSIX timezone string for the device",
"label": "POSIX Timezone"
},
"rebroadcastMode": {
"description": "How to handle rebroadcasting",
"label": "Rebroadcast Mode"
},
"role": {
"description": "What role the device performs on the mesh",
"label": "Role"
}
},
"bluetooth": {
"title": "Bluetooth Settings",
"description": "Settings for the Bluetooth module",
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
"enabled": {
"description": "Enable or disable Bluetooth",
"label": "Enabled"
},
"pairingMode": {
"description": "Pin selection behaviour.",
"label": "Pairing mode"
},
"pin": {
"description": "Pin to use when pairing",
"label": "Pin"
}
},
"display": {
"description": "Settings for the device display",
"title": "Display Settings",
"headingBold": {
"description": "Bolden the heading text",
"label": "Bold Heading"
},
"carouselDelay": {
"description": "How fast to cycle through windows",
"label": "Carousel Delay"
},
"compassNorthTop": {
"description": "Fix north to the top of compass",
"label": "Compass North Top"
},
"displayMode": {
"description": "Screen layout variant",
"label": "Display Mode"
},
"displayUnits": {
"description": "Display metric or imperial units",
"label": "Display Units"
},
"flipScreen": {
"description": "Flip display 180 degrees",
"label": "Flip Screen"
},
"gpsDisplayUnits": {
"description": "Coordinate display format",
"label": "GPS Display Units"
},
"oledType": {
"description": "Type of OLED screen attached to the device",
"label": "OLED Type"
},
"screenTimeout": {
"description": "Turn off the display after this long",
"label": "Screen Timeout"
},
"twelveHourClock": {
"description": "Use 12-hour clock format",
"label": "12-Hour Clock"
},
"wakeOnTapOrMotion": {
"description": "Wake the device on tap or motion",
"label": "Wake on Tap or Motion"
}
},
"lora": {
"title": "Mesh Settings",
"description": "Settings for the LoRa mesh",
"bandwidth": {
"description": "Channel bandwidth in MHz",
"label": "Bandwidth"
},
"boostedRxGain": {
"description": "Boosted RX gain",
"label": "Boosted RX Gain"
},
"codingRate": {
"description": "The denominator of the coding rate",
"label": "Coding Rate"
},
"frequencyOffset": {
"description": "Frequency offset to correct for crystal calibration errors",
"label": "Frequency Offset"
},
"frequencySlot": {
"description": "LoRa frequency channel number",
"label": "Frequency Slot"
},
"hopLimit": {
"description": "Maximum number of hops",
"label": "Hop Limit"
},
"ignoreMqtt": {
"description": "Don't forward MQTT messages over the mesh",
"label": "Ignore MQTT"
},
"modemPreset": {
"description": "Modem preset to use",
"label": "Modem Preset"
},
"okToMqtt": {
"description": "When set to true, this configuration indicates that the user approves the packet to be uploaded to MQTT. If set to false, remote nodes are requested not to forward packets to MQTT",
"label": "OK to MQTT"
},
"overrideDutyCycle": {
"description": "Override Duty Cycle",
"label": "Override Duty Cycle"
},
"overrideFrequency": {
"description": "Override frequency",
"label": "Override Frequency"
},
"region": {
"description": "Sets the region for your node",
"label": "Region"
},
"spreadingFactor": {
"description": "Indicates the number of chirps per symbol",
"label": "Spreading Factor"
},
"transmitEnabled": {
"description": "Enable/Disable transmit (TX) from the LoRa radio",
"label": "Transmit Enabled"
},
"transmitPower": {
"description": "Max transmit power",
"label": "Transmit Power"
},
"usePreset": {
"description": "Use one of the predefined modem presets",
"label": "Use Preset"
},
"meshSettings": {
"description": "Settings for the LoRa mesh",
"label": "Mesh Settings"
},
"waveformSettings": {
"description": "Settings for the LoRa waveform",
"label": "Waveform Settings"
},
"radioSettings": {
"label": "Radio Settings",
"description": "Settings for the LoRa radio"
}
},
"network": {
"title": "WiFi Config",
"description": "WiFi radio configuration",
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
"addressMode": {
"description": "Address assignment selection",
"label": "Address Mode"
},
"dns": {
"description": "DNS Server",
"label": "DNS"
},
"ethernetEnabled": {
"description": "Enable or disable the Ethernet port",
"label": "Enabled"
},
"gateway": {
"description": "Default Gateway",
"label": "Gateway"
},
"ip": {
"description": "IP Address",
"label": "IP"
},
"psk": {
"description": "Network password",
"label": "PSK"
},
"ssid": {
"description": "Network name",
"label": "SSID"
},
"subnet": {
"description": "Subnet Mask",
"label": "Subnet"
},
"wifiEnabled": {
"description": "Enable or disable the WiFi radio",
"label": "Enabled"
},
"meshViaUdp": {
"label": "Mesh via UDP"
},
"ntpServer": {
"label": "NTP Server"
},
"rsyslogServer": {
"label": "Rsyslog Server"
},
"ethernetConfigSettings": {
"description": "Ethernet port configuration",
"label": "Ethernet Config"
},
"ipConfigSettings": {
"description": "IP configuration",
"label": "IP Config"
},
"ntpConfigSettings": {
"description": "NTP configuration",
"label": "NTP Config"
},
"rsyslogConfigSettings": {
"description": "Rsyslog configuration",
"label": "Rsyslog Config"
},
"udpConfigSettings": {
"description": "UDP over Mesh configuration",
"label": "UDP Config"
}
},
"position": {
"title": "Position Settings",
"description": "Settings for the position module",
"broadcastInterval": {
"description": "How often your position is sent out over the mesh",
"label": "Broadcast Interval"
},
"enablePin": {
"description": "GPS module enable pin override",
"label": "Enable Pin"
},
"fixedPosition": {
"description": "Don't report GPS position, but a manually-specified one",
"label": "Fixed Position"
},
"gpsMode": {
"description": "Configure whether device GPS is Enabled, Disabled, or Not Present",
"label": "GPS Mode"
},
"gpsUpdateInterval": {
"description": "How often a GPS fix should be acquired",
"label": "GPS Update Interval"
},
"positionFlags": {
"description": "Optional fields to include when assembling position messages. The more fields are selected, the larger the message will be leading to longer airtime usage and a higher risk of packet loss.",
"label": "Position Flags"
},
"receivePin": {
"description": "GPS module RX pin override",
"label": "Receive Pin"
},
"smartPositionEnabled": {
"description": "Only send position when there has been a meaningful change in location",
"label": "Enable Smart Position"
},
"smartPositionMinDistance": {
"description": "Minimum distance (in meters) that must be traveled before a position update is sent",
"label": "Smart Position Minimum Distance"
},
"smartPositionMinInterval": {
"description": "Minimum interval (in seconds) that must pass before a position update is sent",
"label": "Smart Position Minimum Interval"
},
"transmitPin": {
"description": "GPS module TX pin override",
"label": "Transmit Pin"
},
"intervalsSettings": {
"description": "How often to send position updates",
"label": "Intervals"
},
"flags": {
"placeholder": "Select position flags...",
"altitude": "Altitude",
"altitudeGeoidalSeparation": "Altitude Geoidal Separation",
"altitudeMsl": "Altitude is Mean Sea Level",
"dop": "Dilution of precision (DOP) PDOP used by default",
"hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP",
"numSatellites": "Number of satellites",
"sequenceNumber": "Sequence number",
"timestamp": "Timestamp",
"unset": "Unset",
"vehicleHeading": "Vehicle heading",
"vehicleSpeed": "Vehicle speed"
}
},
"power": {
"adcMultiplierOverride": {
"description": "Used for tweaking battery voltage reading",
"label": "ADC Multiplier Override ratio"
},
"ina219Address": {
"description": "Address of the INA219 battery monitor",
"label": "INA219 Address"
},
"lightSleepDuration": {
"description": "How long the device will be in light sleep for",
"label": "Light Sleep Duration"
},
"minimumWakeTime": {
"description": "Minimum amount of time the device will stay awake for after receiving a packet",
"label": "Minimum Wake Time"
},
"noConnectionBluetoothDisabled": {
"description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long",
"label": "No Connection Bluetooth Disabled"
},
"powerSavingEnabled": {
"description": "Select if powered from a low-current source (i.e. solar), to minimize power consumption as much as possible.",
"label": "Enable power saving mode"
},
"shutdownOnBatteryDelay": {
"description": "Automatically shutdown node after this long when on battery, 0 for indefinite",
"label": "Shutdown on battery delay"
},
"superDeepSleepDuration": {
"description": "How long the device will be in super deep sleep for",
"label": "Super Deep Sleep Duration"
},
"powerConfigSettings": {
"description": "Settings for the power module",
"label": "Power Config"
},
"sleepSettings": {
"description": "Sleep settings for the power module",
"label": "Sleep Settings"
}
},
"security": {
"description": "Settings for the Security configuration",
"title": "Security Settings",
"button_backupKey": "Backup Key",
"adminChannelEnabled": {
"description": "Allow incoming device control over the insecure legacy admin channel",
"label": "Allow Legacy Admin"
},
"enableDebugLogApi": {
"description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth",
"label": "Enable Debug Log API"
},
"managed": {
"description": "If enabled, device configuration options are only able to be changed remotely by a Remote Admin node via admin messages. Do not enable this option unless at least one suitable Remote Admin node has been setup, and the public key is stored in one of the fields above.",
"label": "Managed"
},
"privateKey": {
"description": "Used to create a shared key with a remote device",
"label": "Private Key"
},
"publicKey": {
"description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key",
"label": "Public Key"
},
"primaryAdminKey": {
"description": "The primary public key authorized to send admin messages to this node",
"label": "Primary Admin Key"
},
"secondaryAdminKey": {
"description": "The secondary public key authorized to send admin messages to this node",
"label": "Secondary Admin Key"
},
"serialOutputEnabled": {
"description": "Serial Console over the Stream API",
"label": "Serial Output Enabled"
},
"tertiaryAdminKey": {
"description": "The tertiary public key authorized to send admin messages to this node",
"label": "Tertiary Admin Key"
},
"adminSettings": {
"description": "Settings for Admin",
"label": "Admin Settings"
},
"loggingSettings": {
"description": "Settings for Logging",
"label": "Logging Settings"
}
}
"page": {
"title": "Configuration",
"tabBluetooth": "Bluetooth",
"tabDevice": "Device",
"tabDisplay": "Display",
"tabLora": "LoRa",
"tabNetwork": "Network",
"tabPosition": "Position",
"tabPower": "Power",
"tabSecurity": "Security"
},
"sidebar": {
"label": "Modules"
},
"device": {
"title": "Device Settings",
"description": "Settings for the device",
"buttonPin": {
"description": "Button pin override",
"label": "Button Pin"
},
"buzzerPin": {
"description": "Buzzer pin override",
"label": "Buzzer Pin"
},
"disableTripleClick": {
"description": "Disable triple click",
"label": "Disable Triple Click"
},
"doubleTapAsButtonPress": {
"description": "Treat double tap as button press",
"label": "Double Tap as Button Press"
},
"ledHeartbeatDisabled": {
"description": "Disable default blinking LED",
"label": "LED Heartbeat Disabled"
},
"nodeInfoBroadcastInterval": {
"description": "How often to broadcast node info",
"label": "Node Info Broadcast Interval"
},
"posixTimezone": {
"description": "The POSIX timezone string for the device",
"label": "POSIX Timezone"
},
"rebroadcastMode": {
"description": "How to handle rebroadcasting",
"label": "Rebroadcast Mode"
},
"role": {
"description": "What role the device performs on the mesh",
"label": "Role"
}
},
"bluetooth": {
"title": "Bluetooth Settings",
"description": "Settings for the Bluetooth module",
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
"enabled": {
"description": "Enable or disable Bluetooth",
"label": "Enabled"
},
"pairingMode": {
"description": "Pin selection behaviour.",
"label": "Pairing mode"
},
"pin": {
"description": "Pin to use when pairing",
"label": "Pin"
}
},
"display": {
"description": "Settings for the device display",
"title": "Display Settings",
"headingBold": {
"description": "Bolden the heading text",
"label": "Bold Heading"
},
"carouselDelay": {
"description": "How fast to cycle through windows",
"label": "Carousel Delay"
},
"compassNorthTop": {
"description": "Fix north to the top of compass",
"label": "Compass North Top"
},
"displayMode": {
"description": "Screen layout variant",
"label": "Display Mode"
},
"displayUnits": {
"description": "Display metric or imperial units",
"label": "Display Units"
},
"flipScreen": {
"description": "Flip display 180 degrees",
"label": "Flip Screen"
},
"gpsDisplayUnits": {
"description": "Coordinate display format",
"label": "GPS Display Units"
},
"oledType": {
"description": "Type of OLED screen attached to the device",
"label": "OLED Type"
},
"screenTimeout": {
"description": "Turn off the display after this long",
"label": "Screen Timeout"
},
"twelveHourClock": {
"description": "Use 12-hour clock format",
"label": "12-Hour Clock"
},
"wakeOnTapOrMotion": {
"description": "Wake the device on tap or motion",
"label": "Wake on Tap or Motion"
}
},
"lora": {
"title": "Mesh Settings",
"description": "Settings for the LoRa mesh",
"bandwidth": {
"description": "Channel bandwidth in MHz",
"label": "Bandwidth"
},
"boostedRxGain": {
"description": "Boosted RX gain",
"label": "Boosted RX Gain"
},
"codingRate": {
"description": "The denominator of the coding rate",
"label": "Coding Rate"
},
"frequencyOffset": {
"description": "Frequency offset to correct for crystal calibration errors",
"label": "Frequency Offset"
},
"frequencySlot": {
"description": "LoRa frequency channel number",
"label": "Frequency Slot"
},
"hopLimit": {
"description": "Maximum number of hops",
"label": "Hop Limit"
},
"ignoreMqtt": {
"description": "Don't forward MQTT messages over the mesh",
"label": "Ignore MQTT"
},
"modemPreset": {
"description": "Modem preset to use",
"label": "Modem Preset"
},
"okToMqtt": {
"description": "When set to true, this configuration indicates that the user approves the packet to be uploaded to MQTT. If set to false, remote nodes are requested not to forward packets to MQTT",
"label": "OK to MQTT"
},
"overrideDutyCycle": {
"description": "Override Duty Cycle",
"label": "Override Duty Cycle"
},
"overrideFrequency": {
"description": "Override frequency",
"label": "Override Frequency"
},
"region": {
"description": "Sets the region for your node",
"label": "Region"
},
"spreadingFactor": {
"description": "Indicates the number of chirps per symbol",
"label": "Spreading Factor"
},
"transmitEnabled": {
"description": "Enable/Disable transmit (TX) from the LoRa radio",
"label": "Transmit Enabled"
},
"transmitPower": {
"description": "Max transmit power",
"label": "Transmit Power"
},
"usePreset": {
"description": "Use one of the predefined modem presets",
"label": "Use Preset"
},
"meshSettings": {
"description": "Settings for the LoRa mesh",
"label": "Mesh Settings"
},
"waveformSettings": {
"description": "Settings for the LoRa waveform",
"label": "Waveform Settings"
},
"radioSettings": {
"label": "Radio Settings",
"description": "Settings for the LoRa radio"
}
},
"network": {
"title": "WiFi Config",
"description": "WiFi radio configuration",
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
"addressMode": {
"description": "Address assignment selection",
"label": "Address Mode"
},
"dns": {
"description": "DNS Server",
"label": "DNS"
},
"ethernetEnabled": {
"description": "Enable or disable the Ethernet port",
"label": "Enabled"
},
"gateway": {
"description": "Default Gateway",
"label": "Gateway"
},
"ip": {
"description": "IP Address",
"label": "IP"
},
"psk": {
"description": "Network password",
"label": "PSK"
},
"ssid": {
"description": "Network name",
"label": "SSID"
},
"subnet": {
"description": "Subnet Mask",
"label": "Subnet"
},
"wifiEnabled": {
"description": "Enable or disable the WiFi radio",
"label": "Enabled"
},
"meshViaUdp": {
"label": "Mesh via UDP"
},
"ntpServer": {
"label": "NTP Server"
},
"rsyslogServer": {
"label": "Rsyslog Server"
},
"ethernetConfigSettings": {
"description": "Ethernet port configuration",
"label": "Ethernet Config"
},
"ipConfigSettings": {
"description": "IP configuration",
"label": "IP Config"
},
"ntpConfigSettings": {
"description": "NTP configuration",
"label": "NTP Config"
},
"rsyslogConfigSettings": {
"description": "Rsyslog configuration",
"label": "Rsyslog Config"
},
"udpConfigSettings": {
"description": "UDP over Mesh configuration",
"label": "UDP Config"
}
},
"position": {
"title": "Position Settings",
"description": "Settings for the position module",
"broadcastInterval": {
"description": "How often your position is sent out over the mesh",
"label": "Broadcast Interval"
},
"enablePin": {
"description": "GPS module enable pin override",
"label": "Enable Pin"
},
"fixedPosition": {
"description": "Don't report GPS position, but a manually-specified one",
"label": "Fixed Position"
},
"gpsMode": {
"description": "Configure whether device GPS is Enabled, Disabled, or Not Present",
"label": "GPS Mode"
},
"gpsUpdateInterval": {
"description": "How often a GPS fix should be acquired",
"label": "GPS Update Interval"
},
"positionFlags": {
"description": "Optional fields to include when assembling position messages. The more fields are selected, the larger the message will be leading to longer airtime usage and a higher risk of packet loss.",
"label": "Position Flags"
},
"receivePin": {
"description": "GPS module RX pin override",
"label": "Receive Pin"
},
"smartPositionEnabled": {
"description": "Only send position when there has been a meaningful change in location",
"label": "Enable Smart Position"
},
"smartPositionMinDistance": {
"description": "Minimum distance (in meters) that must be traveled before a position update is sent",
"label": "Smart Position Minimum Distance"
},
"smartPositionMinInterval": {
"description": "Minimum interval (in seconds) that must pass before a position update is sent",
"label": "Smart Position Minimum Interval"
},
"transmitPin": {
"description": "GPS module TX pin override",
"label": "Transmit Pin"
},
"intervalsSettings": {
"description": "How often to send position updates",
"label": "Intervals"
},
"flags": {
"placeholder": "Select position flags...",
"altitude": "Altitude",
"altitudeGeoidalSeparation": "Altitude Geoidal Separation",
"altitudeMsl": "Altitude is Mean Sea Level",
"dop": "Dilution of precision (DOP) PDOP used by default",
"hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP",
"numSatellites": "Number of satellites",
"sequenceNumber": "Sequence number",
"timestamp": "Timestamp",
"unset": "Unset",
"vehicleHeading": "Vehicle heading",
"vehicleSpeed": "Vehicle speed"
}
},
"power": {
"adcMultiplierOverride": {
"description": "Used for tweaking battery voltage reading",
"label": "ADC Multiplier Override ratio"
},
"ina219Address": {
"description": "Address of the INA219 battery monitor",
"label": "INA219 Address"
},
"lightSleepDuration": {
"description": "How long the device will be in light sleep for",
"label": "Light Sleep Duration"
},
"minimumWakeTime": {
"description": "Minimum amount of time the device will stay awake for after receiving a packet",
"label": "Minimum Wake Time"
},
"noConnectionBluetoothDisabled": {
"description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long",
"label": "No Connection Bluetooth Disabled"
},
"powerSavingEnabled": {
"description": "Select if powered from a low-current source (i.e. solar), to minimize power consumption as much as possible.",
"label": "Enable power saving mode"
},
"shutdownOnBatteryDelay": {
"description": "Automatically shutdown node after this long when on battery, 0 for indefinite",
"label": "Shutdown on battery delay"
},
"superDeepSleepDuration": {
"description": "How long the device will be in super deep sleep for",
"label": "Super Deep Sleep Duration"
},
"powerConfigSettings": {
"description": "Settings for the power module",
"label": "Power Config"
},
"sleepSettings": {
"description": "Sleep settings for the power module",
"label": "Sleep Settings"
}
},
"security": {
"description": "Settings for the Security configuration",
"title": "Security Settings",
"button_backupKey": "Backup Key",
"adminChannelEnabled": {
"description": "Allow incoming device control over the insecure legacy admin channel",
"label": "Allow Legacy Admin"
},
"enableDebugLogApi": {
"description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth",
"label": "Enable Debug Log API"
},
"managed": {
"description": "If enabled, device configuration options are only able to be changed remotely by a Remote Admin node via admin messages. Do not enable this option unless at least one suitable Remote Admin node has been setup, and the public key is stored in one of the fields above.",
"label": "Managed"
},
"privateKey": {
"description": "Used to create a shared key with a remote device",
"label": "Private Key"
},
"publicKey": {
"description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key",
"label": "Public Key"
},
"primaryAdminKey": {
"description": "The primary public key authorized to send admin messages to this node",
"label": "Primary Admin Key"
},
"secondaryAdminKey": {
"description": "The secondary public key authorized to send admin messages to this node",
"label": "Secondary Admin Key"
},
"serialOutputEnabled": {
"description": "Serial Console over the Stream API",
"label": "Serial Output Enabled"
},
"tertiaryAdminKey": {
"description": "The tertiary public key authorized to send admin messages to this node",
"label": "Tertiary Admin Key"
},
"adminSettings": {
"description": "Settings for Admin",
"label": "Admin Settings"
},
"loggingSettings": {
"description": "Settings for Logging",
"label": "Logging Settings"
}
}
}

View File

@@ -1,183 +1,183 @@
{
"deleteMessages": {
"description": "This action will clear all message history. This cannot be undone. Are you sure you want to continue?",
"title": "Clear All Messages"
},
"deviceName": {
"description": "The Device will restart once the config is saved.",
"longName": "Long Name",
"shortName": "Short Name",
"title": "Change Device Name",
"validation": {
"longNameMax": "Long name must not be more than 40 characters",
"shortNameMax": "Short name must not be more than 4 characters",
"longNameMin": "Long name must have at least 1 character",
"shortNameMin": "Short name must have at least 1 character"
}
},
"import": {
"description": "The current LoRa configuration will be overridden.",
"error": {
"invalidUrl": "Invalid Meshtastic URL"
},
"channelPrefix": "Channel: ",
"channelSetUrl": "Channel Set/QR Code URL",
"channels": "Channels:",
"usePreset": "Use Preset?",
"title": "Import Channel Set"
},
"locationResponse": {
"title": "Location: {{identifier}}",
"altitude": "Altitude: ",
"coordinates": "Coordinates: ",
"noCoordinates": "No Coordinates"
},
"pkiRegenerateDialog": {
"title": "Regenerate Pre-Shared Key?",
"description": "Are you sure you want to regenerate the pre-shared key?",
"regenerate": "Regenerate"
},
"newDeviceDialog": {
"title": "Connect New Device",
"https": "https",
"http": "http",
"tabHttp": "HTTP",
"tabBluetooth": "Bluetooth",
"tabSerial": "Serial",
"deleteMessages": {
"description": "This action will clear all message history. This cannot be undone. Are you sure you want to continue?",
"title": "Clear All Messages"
},
"deviceName": {
"description": "The Device will restart once the config is saved.",
"longName": "Long Name",
"shortName": "Short Name",
"title": "Change Device Name",
"validation": {
"longNameMax": "Long name must not be more than 40 characters",
"shortNameMax": "Short name must not be more than 4 characters",
"longNameMin": "Long name must have at least 1 character",
"shortNameMin": "Short name must have at least 1 character"
}
},
"import": {
"description": "The current LoRa configuration will be overridden.",
"error": {
"invalidUrl": "Invalid Meshtastic URL"
},
"channelPrefix": "Channel: ",
"channelSetUrl": "Channel Set/QR Code URL",
"channels": "Channels:",
"usePreset": "Use Preset?",
"title": "Import Channel Set"
},
"locationResponse": {
"title": "Location: {{identifier}}",
"altitude": "Altitude: ",
"coordinates": "Coordinates: ",
"noCoordinates": "No Coordinates"
},
"pkiRegenerateDialog": {
"title": "Regenerate Pre-Shared Key?",
"description": "Are you sure you want to regenerate the pre-shared key?",
"regenerate": "Regenerate"
},
"newDeviceDialog": {
"title": "Connect New Device",
"https": "https",
"http": "http",
"tabHttp": "HTTP",
"tabBluetooth": "Bluetooth",
"tabSerial": "Serial",
"useHttps": "Use HTTPS",
"connecting": "Connecting...",
"connect": "Connect",
"connectionFailedAlert": {
"title": "Connection Failed",
"descriptionPrefix": "Could not connect to the device. ",
"httpsHint": "If using HTTPS, you may need to accept a self-signed certificate first. ",
"openLinkPrefix": "Please open ",
"openLinkSuffix": " in a new tab",
"acceptTlsWarningSuffix": ", accept any TLS warnings if prompted, then try again",
"learnMoreLink": "Learn more"
},
"httpConnection": {
"label": "IP Address/Hostname",
"placeholder": "000.000.000.000 / meshtastic.local"
},
"serialConnection": {
"noDevicesPaired": "No devices paired yet.",
"newDeviceButton": "New device",
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
},
"bluetoothConnection": {
"noDevicesPaired": "No devices paired yet.",
"newDeviceButton": "New device",
"connectionFailed": "Connection failed",
"deviceDisconnected": "Device disconnected",
"unknownDevice": "Unknown Device",
"errorLoadingDevices": "Error loading devices",
"unknownErrorLoadingDevices": "Unknown error loading devices"
},
"validation": {
"requiresFeatures": "This connection type requires <0></0>. Please use a supported browser, like Chrome or Edge.",
"requiresSecureContext": "This application requires a <0>secure context</0>. Please connect using HTTPS or localhost.",
"additionallyRequiresSecureContext": "Additionally, it requires a <0>secure context</0>. Please connect using HTTPS or localhost."
}
},
"nodeDetails": {
"message": "Message",
"requestPosition": "Request Position",
"traceRoute": "Trace Route",
"airTxUtilization": "Air TX utilization",
"allRawMetrics": "All Raw Metrics:",
"batteryLevel": "Battery level",
"channelUtilization": "Channel utilization",
"details": "Details:",
"deviceMetrics": "Device Metrics:",
"hardware": "Hardware: ",
"lastHeard": "Last Heard: ",
"nodeHexPrefix": "Node Hex: !",
"nodeNumber": "Node Number: ",
"position": "Position:",
"role": "Role: ",
"uptime": "Uptime: ",
"voltage": "Voltage",
"title": "Node Details for {{identifier}}",
"ignoreNode": "Ignore node",
"removeNode": "Remove node",
"unignoreNode": "Unignore node"
},
"pkiBackup": {
"loseKeysWarning": "If you lose your keys, you will need to reset your device.",
"secureBackup": "Its important to backup your public and private keys and store your backup securely!",
"footer": "=== END OF KEYS ===",
"header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===",
"privateKey": "Private Key:",
"publicKey": "Public Key:",
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
"title": "Backup Keys"
},
"pkiBackupReminder": {
"description": "We recommend backing up your key data regularly. Would you like to back up now?",
"title": "Backup Reminder",
"remindLaterPrefix": "Remind me in",
"remindNever": "Never remind me",
"backupNow": "Back up now"
},
"pkiRegenerate": {
"description": "Are you sure you want to regenerate key pair?",
"title": "Regenerate Key Pair"
},
"qr": {
"addChannels": "Add Channels",
"replaceChannels": "Replace Channels",
"description": "The current LoRa configuration will also be shared.",
"sharableUrl": "Sharable URL",
"title": "Generate QR Code"
},
"rebootOta": {
"title": "Schedule Reboot",
"description": "Reboot the connected node after a delay into OTA (Over-the-Air) mode.",
"enterDelay": "Enter delay (sec)",
"scheduled": "Reboot has been scheduled"
},
"reboot": {
"title": "Schedule Reboot",
"description": "Reboot the connected node after x minutes."
},
"refreshKeys": {
"description": {
"acceptNewKeys": "This will remove the node from device and request new keys.",
"keyMismatchReasonSuffix": ". This is due to the remote node's current public key does not match the previously stored key for this node.",
"unableToSendDmPrefix": "Your node is unable to send a direct message to node: "
},
"acceptNewKeys": "Accept New Keys",
"title": "Keys Mismatch - {{identifier}}"
},
"removeNode": {
"description": "Are you sure you want to remove this Node?",
"title": "Remove Node?"
},
"shutdown": {
"title": "Schedule Shutdown",
"description": "Turn off the connected node after x minutes."
},
"traceRoute": {
"routeToDestination": "Route to destination:",
"routeBack": "Route back:"
},
"tracerouteResponse": {
"title": "Traceroute: {{identifier}}"
},
"unsafeRoles": {
"confirmUnderstanding": "Yes, I know what I'm doing",
"conjunction": " and the blog post about ",
"postamble": " and understand the implications of changing the role.",
"preamble": "I have read the ",
"choosingRightDeviceRole": "Choosing The Right Device Role",
"deviceRoleDocumentation": "Device Role Documentation",
"title": "Are you sure?"
},
"managedMode": {
"confirmUnderstanding": "Yes, I know what I'm doing",
"title": "Are you sure?",
"description": "Enabling Managed Mode blocks client applications (including the web client) from writing configurations to a radio. Once enabled, radio configurations can only be changed through Remote Admin messages. This setting is not required for remote node administration."
}
"useHttps": "Use HTTPS",
"connecting": "Connecting...",
"connect": "Connect",
"connectionFailedAlert": {
"title": "Connection Failed",
"descriptionPrefix": "Could not connect to the device. ",
"httpsHint": "If using HTTPS, you may need to accept a self-signed certificate first. ",
"openLinkPrefix": "Please open ",
"openLinkSuffix": " in a new tab",
"acceptTlsWarningSuffix": ", accept any TLS warnings if prompted, then try again",
"learnMoreLink": "Learn more"
},
"httpConnection": {
"label": "IP Address/Hostname",
"placeholder": "000.000.000.000 / meshtastic.local"
},
"serialConnection": {
"noDevicesPaired": "No devices paired yet.",
"newDeviceButton": "New device",
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
},
"bluetoothConnection": {
"noDevicesPaired": "No devices paired yet.",
"newDeviceButton": "New device",
"connectionFailed": "Connection failed",
"deviceDisconnected": "Device disconnected",
"unknownDevice": "Unknown Device",
"errorLoadingDevices": "Error loading devices",
"unknownErrorLoadingDevices": "Unknown error loading devices"
},
"validation": {
"requiresFeatures": "This connection type requires <0></0>. Please use a supported browser, like Chrome or Edge.",
"requiresSecureContext": "This application requires a <0>secure context</0>. Please connect using HTTPS or localhost.",
"additionallyRequiresSecureContext": "Additionally, it requires a <0>secure context</0>. Please connect using HTTPS or localhost."
}
},
"nodeDetails": {
"message": "Message",
"requestPosition": "Request Position",
"traceRoute": "Trace Route",
"airTxUtilization": "Air TX utilization",
"allRawMetrics": "All Raw Metrics:",
"batteryLevel": "Battery level",
"channelUtilization": "Channel utilization",
"details": "Details:",
"deviceMetrics": "Device Metrics:",
"hardware": "Hardware: ",
"lastHeard": "Last Heard: ",
"nodeHexPrefix": "Node Hex: !",
"nodeNumber": "Node Number: ",
"position": "Position:",
"role": "Role: ",
"uptime": "Uptime: ",
"voltage": "Voltage",
"title": "Node Details for {{identifier}}",
"ignoreNode": "Ignore node",
"removeNode": "Remove node",
"unignoreNode": "Unignore node"
},
"pkiBackup": {
"loseKeysWarning": "If you lose your keys, you will need to reset your device.",
"secureBackup": "Its important to backup your public and private keys and store your backup securely!",
"footer": "=== END OF KEYS ===",
"header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===",
"privateKey": "Private Key:",
"publicKey": "Public Key:",
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
"title": "Backup Keys"
},
"pkiBackupReminder": {
"description": "We recommend backing up your key data regularly. Would you like to back up now?",
"title": "Backup Reminder",
"remindLaterPrefix": "Remind me in",
"remindNever": "Never remind me",
"backupNow": "Back up now"
},
"pkiRegenerate": {
"description": "Are you sure you want to regenerate key pair?",
"title": "Regenerate Key Pair"
},
"qr": {
"addChannels": "Add Channels",
"replaceChannels": "Replace Channels",
"description": "The current LoRa configuration will also be shared.",
"sharableUrl": "Sharable URL",
"title": "Generate QR Code"
},
"rebootOta": {
"title": "Schedule Reboot",
"description": "Reboot the connected node after a delay into OTA (Over-the-Air) mode.",
"enterDelay": "Enter delay (sec)",
"scheduled": "Reboot has been scheduled"
},
"reboot": {
"title": "Schedule Reboot",
"description": "Reboot the connected node after x minutes."
},
"refreshKeys": {
"description": {
"acceptNewKeys": "This will remove the node from device and request new keys.",
"keyMismatchReasonSuffix": ". This is due to the remote node's current public key does not match the previously stored key for this node.",
"unableToSendDmPrefix": "Your node is unable to send a direct message to node: "
},
"acceptNewKeys": "Accept New Keys",
"title": "Keys Mismatch - {{identifier}}"
},
"removeNode": {
"description": "Are you sure you want to remove this Node?",
"title": "Remove Node?"
},
"shutdown": {
"title": "Schedule Shutdown",
"description": "Turn off the connected node after x minutes."
},
"traceRoute": {
"routeToDestination": "Route to destination:",
"routeBack": "Route back:"
},
"tracerouteResponse": {
"title": "Traceroute: {{identifier}}"
},
"unsafeRoles": {
"confirmUnderstanding": "Yes, I know what I'm doing",
"conjunction": " and the blog post about ",
"postamble": " and understand the implications of changing the role.",
"preamble": "I have read the ",
"choosingRightDeviceRole": "Choosing The Right Device Role",
"deviceRoleDocumentation": "Device Role Documentation",
"title": "Are you sure?"
},
"managedMode": {
"confirmUnderstanding": "Yes, I know what I'm doing",
"title": "Are you sure?",
"description": "Enabling Managed Mode blocks client applications (including the web client) from writing configurations to a radio. Once enabled, radio configurations can only be changed through Remote Admin messages. This setting is not required for remote node administration."
}
}

View File

@@ -1,40 +1,40 @@
{
"page": {
"title": "Messages: {{chatName}}",
"placeholder": "Enter Message"
},
"emptyState": {
"title": "Select a Chat",
"text": "No messages yet."
},
"selectChatPrompt": {
"text": "Select a channel or node to start messaging."
},
"sendMessage": {
"placeholder": "Enter your message here...",
"sendButton": "Send"
},
"actionsMenu": {
"addReactionLabel": "Add Reaction",
"replyLabel": "Reply"
},
"page": {
"title": "Messages: {{chatName}}",
"placeholder": "Enter Message"
},
"emptyState": {
"title": "Select a Chat",
"text": "No messages yet."
},
"selectChatPrompt": {
"text": "Select a channel or node to start messaging."
},
"sendMessage": {
"placeholder": "Enter your message here...",
"sendButton": "Send"
},
"actionsMenu": {
"addReactionLabel": "Add Reaction",
"replyLabel": "Reply"
},
"deliveryStatus": {
"delivered": {
"label": "Message delivered",
"displayText": "Message delivered"
},
"failed": {
"label": "Message delivery failed",
"displayText": "Delivery failed"
},
"unknown": {
"label": "Message status unknown",
"displayText": "Unknown state"
},
"waiting": {
"label": "Sending message",
"displayText": "Waiting for delivery"
}
}
"deliveryStatus": {
"delivered": {
"label": "Message delivered",
"displayText": "Message delivered"
},
"failed": {
"label": "Message delivery failed",
"displayText": "Delivery failed"
},
"unknown": {
"label": "Message status unknown",
"displayText": "Unknown state"
},
"waiting": {
"label": "Sending message",
"displayText": "Waiting for delivery"
}
}
}

View File

@@ -1,448 +1,448 @@
{
"page": {
"tabAmbientLighting": "Ambient Lighting",
"tabAudio": "Audio",
"tabCannedMessage": "Canned",
"tabDetectionSensor": "Detection Sensor",
"tabExternalNotification": "Ext Notif",
"tabMqtt": "MQTT",
"tabNeighborInfo": "Neighbor Info",
"tabPaxcounter": "Paxcounter",
"tabRangeTest": "Range Test",
"tabSerial": "Serial",
"tabStoreAndForward": "S&F",
"tabTelemetry": "Telemetry"
},
"ambientLighting": {
"title": "Ambient Lighting Settings",
"description": "Settings for the Ambient Lighting module",
"ledState": {
"label": "LED State",
"description": "Sets LED to on or off"
},
"current": {
"label": "Current",
"description": "Sets the current for the LED output. Default is 10"
},
"red": {
"label": "Red",
"description": "Sets the red LED level. Values are 0-255"
},
"green": {
"label": "Green",
"description": "Sets the green LED level. Values are 0-255"
},
"blue": {
"label": "Blue",
"description": "Sets the blue LED level. Values are 0-255"
}
},
"audio": {
"title": "Audio Settings",
"description": "Settings for the Audio module",
"codec2Enabled": {
"label": "Codec 2 Enabled",
"description": "Enable Codec 2 audio encoding"
},
"pttPin": {
"label": "PTT Pin",
"description": "GPIO pin to use for PTT"
},
"bitrate": {
"label": "Bitrate",
"description": "Bitrate to use for audio encoding"
},
"i2sWs": {
"label": "i2S WS",
"description": "GPIO pin to use for i2S WS"
},
"i2sSd": {
"label": "i2S SD",
"description": "GPIO pin to use for i2S SD"
},
"i2sDin": {
"label": "i2S DIN",
"description": "GPIO pin to use for i2S DIN"
},
"i2sSck": {
"label": "i2S SCK",
"description": "GPIO pin to use for i2S SCK"
}
},
"cannedMessage": {
"title": "Canned Message Settings",
"description": "Settings for the Canned Message module",
"moduleEnabled": {
"label": "Module Enabled",
"description": "Enable Canned Message"
},
"rotary1Enabled": {
"label": "Rotary Encoder #1 Enabled",
"description": "Enable the rotary encoder"
},
"inputbrokerPinA": {
"label": "Encoder Pin A",
"description": "GPIO Pin Value (1-39) For encoder port A"
},
"inputbrokerPinB": {
"label": "Encoder Pin B",
"description": "GPIO Pin Value (1-39) For encoder port B"
},
"inputbrokerPinPress": {
"label": "Encoder Pin Press",
"description": "GPIO Pin Value (1-39) For encoder Press"
},
"inputbrokerEventCw": {
"label": "Clockwise event",
"description": "Select input event."
},
"inputbrokerEventCcw": {
"label": "Counter Clockwise event",
"description": "Select input event."
},
"inputbrokerEventPress": {
"label": "Press event",
"description": "Select input event"
},
"updown1Enabled": {
"label": "Up Down enabled",
"description": "Enable the up / down encoder"
},
"allowInputSource": {
"label": "Allow Input Source",
"description": "Select from: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
},
"sendBell": {
"label": "Send Bell",
"description": "Sends a bell character with each message"
}
},
"detectionSensor": {
"title": "Detection Sensor Settings",
"description": "Settings for the Detection Sensor module",
"enabled": {
"label": "Enabled",
"description": "Enable or disable Detection Sensor Module"
},
"minimumBroadcastSecs": {
"label": "Minimum Broadcast Seconds",
"description": "The interval in seconds of how often we can send a message to the mesh when a state change is detected"
},
"stateBroadcastSecs": {
"label": "State Broadcast Seconds",
"description": "The interval in seconds of how often we should send a message to the mesh with the current state regardless of changes"
},
"sendBell": {
"label": "Send Bell",
"description": "Send ASCII bell with alert message"
},
"name": {
"label": "Friendly Name",
"description": "Used to format the message sent to mesh, max 20 Characters"
},
"monitorPin": {
"label": "Monitor Pin",
"description": "The GPIO pin to monitor for state changes"
},
"detectionTriggerType": {
"label": "Detection Triggered Type",
"description": "The type of trigger event to be used"
},
"usePullup": {
"label": "Use Pullup",
"description": "Whether or not use INPUT_PULLUP mode for GPIO pin"
}
},
"externalNotification": {
"title": "External Notification Settings",
"description": "Configure the external notification module",
"enabled": {
"label": "Module Enabled",
"description": "Enable External Notification"
},
"outputMs": {
"label": "Output MS",
"description": "Output MS"
},
"output": {
"label": "Output",
"description": "Output"
},
"outputVibra": {
"label": "Output Vibrate",
"description": "Output Vibrate"
},
"outputBuzzer": {
"label": "Output Buzzer",
"description": "Output Buzzer"
},
"active": {
"label": "Active",
"description": "Active"
},
"alertMessage": {
"label": "Alert Message",
"description": "Alert Message"
},
"alertMessageVibra": {
"label": "Alert Message Vibrate",
"description": "Alert Message Vibrate"
},
"alertMessageBuzzer": {
"label": "Alert Message Buzzer",
"description": "Alert Message Buzzer"
},
"alertBell": {
"label": "Alert Bell",
"description": "Should an alert be triggered when receiving an incoming bell?"
},
"alertBellVibra": {
"label": "Alert Bell Vibrate",
"description": "Alert Bell Vibrate"
},
"alertBellBuzzer": {
"label": "Alert Bell Buzzer",
"description": "Alert Bell Buzzer"
},
"usePwm": {
"label": "Use PWM",
"description": "Use PWM"
},
"nagTimeout": {
"label": "Nag Timeout",
"description": "Nag Timeout"
},
"useI2sAsBuzzer": {
"label": "Use I²S Pin as Buzzer",
"description": "Designate I²S Pin as Buzzer Output"
}
},
"mqtt": {
"title": "MQTT Settings",
"description": "Settings for the MQTT module",
"enabled": {
"label": "Enabled",
"description": "Enable or disable MQTT"
},
"address": {
"label": "MQTT Server Address",
"description": "MQTT server address to use for default/custom servers"
},
"username": {
"label": "MQTT Username",
"description": "MQTT username to use for default/custom servers"
},
"password": {
"label": "MQTT Password",
"description": "MQTT password to use for default/custom servers"
},
"encryptionEnabled": {
"label": "Encryption Enabled",
"description": "Enable or disable MQTT encryption. Note: All messages are sent to the MQTT broker unencrypted if this option is not enabled, even when your uplink channels have encryption keys set. This includes position data."
},
"jsonEnabled": {
"label": "JSON Enabled",
"description": "Whether to send/consume JSON packets on MQTT"
},
"tlsEnabled": {
"label": "TLS Enabled",
"description": "Enable or disable TLS"
},
"root": {
"label": "Root topic",
"description": "MQTT root topic to use for default/custom servers"
},
"proxyToClientEnabled": {
"label": "MQTT Client Proxy Enabled",
"description": "Utilizes the network connection to proxy MQTT messages to the client."
},
"mapReportingEnabled": {
"label": "Map Reporting Enabled",
"description": "Your node will periodically send an unencrypted map report packet to the configured MQTT server, this includes id, short and long name, approximate location, hardware model, role, firmware version, LoRa region, modem preset and primary channel name."
},
"mapReportSettings": {
"publishIntervalSecs": {
"label": "Map Report Publish Interval (s)",
"description": "Interval in seconds to publish map reports"
},
"positionPrecision": {
"label": "Approximate Location",
"description": "Position shared will be accurate within this distance",
"options": {
"metric_km23": "Within 23 km",
"metric_km12": "Within 12 km",
"metric_km5_8": "Within 5.8 km",
"metric_km2_9": "Within 2.9 km",
"metric_km1_5": "Within 1.5 km",
"metric_m700": "Within 700 m",
"metric_m350": "Within 350 m",
"metric_m200": "Within 200 m",
"metric_m90": "Within 90 m",
"metric_m50": "Within 50 m",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
}
},
"neighborInfo": {
"title": "Neighbor Info Settings",
"description": "Settings for the Neighbor Info module",
"enabled": {
"label": "Enabled",
"description": "Enable or disable Neighbor Info Module"
},
"updateInterval": {
"label": "Update Interval",
"description": "Interval in seconds of how often we should try to send our Neighbor Info to the mesh"
}
},
"paxcounter": {
"title": "Paxcounter Settings",
"description": "Settings for the Paxcounter module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Paxcounter"
},
"paxcounterUpdateInterval": {
"label": "Update Interval (seconds)",
"description": "How long to wait between sending paxcounter packets"
},
"wifiThreshold": {
"label": "WiFi RSSI Threshold",
"description": "At what WiFi RSSI level should the counter increase. Defaults to -80."
},
"bleThreshold": {
"label": "BLE RSSI Threshold",
"description": "At what BLE RSSI level should the counter increase. Defaults to -80."
}
},
"rangeTest": {
"title": "Range Test Settings",
"description": "Settings for the Range Test module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Range Test"
},
"sender": {
"label": "Message Interval",
"description": "How long to wait between sending test packets"
},
"save": {
"label": "Save CSV to storage",
"description": "ESP32 Only"
}
},
"serial": {
"title": "Serial Settings",
"description": "Settings for the Serial module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Serial output"
},
"echo": {
"label": "Echo",
"description": "Any packets you send will be echoed back to your device"
},
"rxd": {
"label": "Receive Pin",
"description": "Set the GPIO pin to the RXD pin you have set up."
},
"txd": {
"label": "Transmit Pin",
"description": "Set the GPIO pin to the TXD pin you have set up."
},
"baud": {
"label": "Baud Rate",
"description": "The serial baud rate"
},
"timeout": {
"label": "Timeout",
"description": "Seconds to wait before we consider your packet as 'done'"
},
"mode": {
"label": "Mode",
"description": "Select Mode"
},
"overrideConsoleSerialPort": {
"label": "Override Console Serial Port",
"description": "If you have a serial port connected to the console, this will override it."
}
},
"storeForward": {
"title": "Store & Forward Settings",
"description": "Settings for the Store & Forward module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Store & Forward"
},
"heartbeat": {
"label": "Heartbeat Enabled",
"description": "Enable Store & Forward heartbeat"
},
"records": {
"label": "Number of records",
"description": "Number of records to store"
},
"historyReturnMax": {
"label": "History return max",
"description": "Max number of records to return"
},
"historyReturnWindow": {
"label": "History return window",
"description": "Max number of records to return"
}
},
"telemetry": {
"title": "Telemetry Settings",
"description": "Settings for the Telemetry module",
"deviceUpdateInterval": {
"label": "Device Metrics",
"description": "Device metrics update interval (seconds)"
},
"environmentUpdateInterval": {
"label": "Environment metrics update interval (seconds)",
"description": ""
},
"environmentMeasurementEnabled": {
"label": "Module Enabled",
"description": "Enable the Environment Telemetry"
},
"environmentScreenEnabled": {
"label": "Displayed on Screen",
"description": "Show the Telemetry Module on the OLED"
},
"environmentDisplayFahrenheit": {
"label": "Display Fahrenheit",
"description": "Display temp in Fahrenheit"
},
"airQualityEnabled": {
"label": "Air Quality Enabled",
"description": "Enable the Air Quality Telemetry"
},
"airQualityInterval": {
"label": "Air Quality Update Interval",
"description": "How often to send Air Quality data over the mesh"
},
"powerMeasurementEnabled": {
"label": "Power Measurement Enabled",
"description": "Enable the Power Measurement Telemetry"
},
"powerUpdateInterval": {
"label": "Power Update Interval",
"description": "How often to send Power data over the mesh"
},
"powerScreenEnabled": {
"label": "Power Screen Enabled",
"description": "Enable the Power Telemetry Screen"
}
}
"page": {
"tabAmbientLighting": "Ambient Lighting",
"tabAudio": "Audio",
"tabCannedMessage": "Canned",
"tabDetectionSensor": "Detection Sensor",
"tabExternalNotification": "Ext Notif",
"tabMqtt": "MQTT",
"tabNeighborInfo": "Neighbor Info",
"tabPaxcounter": "Paxcounter",
"tabRangeTest": "Range Test",
"tabSerial": "Serial",
"tabStoreAndForward": "S&F",
"tabTelemetry": "Telemetry"
},
"ambientLighting": {
"title": "Ambient Lighting Settings",
"description": "Settings for the Ambient Lighting module",
"ledState": {
"label": "LED State",
"description": "Sets LED to on or off"
},
"current": {
"label": "Current",
"description": "Sets the current for the LED output. Default is 10"
},
"red": {
"label": "Red",
"description": "Sets the red LED level. Values are 0-255"
},
"green": {
"label": "Green",
"description": "Sets the green LED level. Values are 0-255"
},
"blue": {
"label": "Blue",
"description": "Sets the blue LED level. Values are 0-255"
}
},
"audio": {
"title": "Audio Settings",
"description": "Settings for the Audio module",
"codec2Enabled": {
"label": "Codec 2 Enabled",
"description": "Enable Codec 2 audio encoding"
},
"pttPin": {
"label": "PTT Pin",
"description": "GPIO pin to use for PTT"
},
"bitrate": {
"label": "Bitrate",
"description": "Bitrate to use for audio encoding"
},
"i2sWs": {
"label": "i2S WS",
"description": "GPIO pin to use for i2S WS"
},
"i2sSd": {
"label": "i2S SD",
"description": "GPIO pin to use for i2S SD"
},
"i2sDin": {
"label": "i2S DIN",
"description": "GPIO pin to use for i2S DIN"
},
"i2sSck": {
"label": "i2S SCK",
"description": "GPIO pin to use for i2S SCK"
}
},
"cannedMessage": {
"title": "Canned Message Settings",
"description": "Settings for the Canned Message module",
"moduleEnabled": {
"label": "Module Enabled",
"description": "Enable Canned Message"
},
"rotary1Enabled": {
"label": "Rotary Encoder #1 Enabled",
"description": "Enable the rotary encoder"
},
"inputbrokerPinA": {
"label": "Encoder Pin A",
"description": "GPIO Pin Value (1-39) For encoder port A"
},
"inputbrokerPinB": {
"label": "Encoder Pin B",
"description": "GPIO Pin Value (1-39) For encoder port B"
},
"inputbrokerPinPress": {
"label": "Encoder Pin Press",
"description": "GPIO Pin Value (1-39) For encoder Press"
},
"inputbrokerEventCw": {
"label": "Clockwise event",
"description": "Select input event."
},
"inputbrokerEventCcw": {
"label": "Counter Clockwise event",
"description": "Select input event."
},
"inputbrokerEventPress": {
"label": "Press event",
"description": "Select input event"
},
"updown1Enabled": {
"label": "Up Down enabled",
"description": "Enable the up / down encoder"
},
"allowInputSource": {
"label": "Allow Input Source",
"description": "Select from: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
},
"sendBell": {
"label": "Send Bell",
"description": "Sends a bell character with each message"
}
},
"detectionSensor": {
"title": "Detection Sensor Settings",
"description": "Settings for the Detection Sensor module",
"enabled": {
"label": "Enabled",
"description": "Enable or disable Detection Sensor Module"
},
"minimumBroadcastSecs": {
"label": "Minimum Broadcast Seconds",
"description": "The interval in seconds of how often we can send a message to the mesh when a state change is detected"
},
"stateBroadcastSecs": {
"label": "State Broadcast Seconds",
"description": "The interval in seconds of how often we should send a message to the mesh with the current state regardless of changes"
},
"sendBell": {
"label": "Send Bell",
"description": "Send ASCII bell with alert message"
},
"name": {
"label": "Friendly Name",
"description": "Used to format the message sent to mesh, max 20 Characters"
},
"monitorPin": {
"label": "Monitor Pin",
"description": "The GPIO pin to monitor for state changes"
},
"detectionTriggerType": {
"label": "Detection Triggered Type",
"description": "The type of trigger event to be used"
},
"usePullup": {
"label": "Use Pullup",
"description": "Whether or not use INPUT_PULLUP mode for GPIO pin"
}
},
"externalNotification": {
"title": "External Notification Settings",
"description": "Configure the external notification module",
"enabled": {
"label": "Module Enabled",
"description": "Enable External Notification"
},
"outputMs": {
"label": "Output MS",
"description": "Output MS"
},
"output": {
"label": "Output",
"description": "Output"
},
"outputVibra": {
"label": "Output Vibrate",
"description": "Output Vibrate"
},
"outputBuzzer": {
"label": "Output Buzzer",
"description": "Output Buzzer"
},
"active": {
"label": "Active",
"description": "Active"
},
"alertMessage": {
"label": "Alert Message",
"description": "Alert Message"
},
"alertMessageVibra": {
"label": "Alert Message Vibrate",
"description": "Alert Message Vibrate"
},
"alertMessageBuzzer": {
"label": "Alert Message Buzzer",
"description": "Alert Message Buzzer"
},
"alertBell": {
"label": "Alert Bell",
"description": "Should an alert be triggered when receiving an incoming bell?"
},
"alertBellVibra": {
"label": "Alert Bell Vibrate",
"description": "Alert Bell Vibrate"
},
"alertBellBuzzer": {
"label": "Alert Bell Buzzer",
"description": "Alert Bell Buzzer"
},
"usePwm": {
"label": "Use PWM",
"description": "Use PWM"
},
"nagTimeout": {
"label": "Nag Timeout",
"description": "Nag Timeout"
},
"useI2sAsBuzzer": {
"label": "Use I²S Pin as Buzzer",
"description": "Designate I²S Pin as Buzzer Output"
}
},
"mqtt": {
"title": "MQTT Settings",
"description": "Settings for the MQTT module",
"enabled": {
"label": "Enabled",
"description": "Enable or disable MQTT"
},
"address": {
"label": "MQTT Server Address",
"description": "MQTT server address to use for default/custom servers"
},
"username": {
"label": "MQTT Username",
"description": "MQTT username to use for default/custom servers"
},
"password": {
"label": "MQTT Password",
"description": "MQTT password to use for default/custom servers"
},
"encryptionEnabled": {
"label": "Encryption Enabled",
"description": "Enable or disable MQTT encryption. Note: All messages are sent to the MQTT broker unencrypted if this option is not enabled, even when your uplink channels have encryption keys set. This includes position data."
},
"jsonEnabled": {
"label": "JSON Enabled",
"description": "Whether to send/consume JSON packets on MQTT"
},
"tlsEnabled": {
"label": "TLS Enabled",
"description": "Enable or disable TLS"
},
"root": {
"label": "Root topic",
"description": "MQTT root topic to use for default/custom servers"
},
"proxyToClientEnabled": {
"label": "MQTT Client Proxy Enabled",
"description": "Utilizes the network connection to proxy MQTT messages to the client."
},
"mapReportingEnabled": {
"label": "Map Reporting Enabled",
"description": "Your node will periodically send an unencrypted map report packet to the configured MQTT server, this includes id, short and long name, approximate location, hardware model, role, firmware version, LoRa region, modem preset and primary channel name."
},
"mapReportSettings": {
"publishIntervalSecs": {
"label": "Map Report Publish Interval (s)",
"description": "Interval in seconds to publish map reports"
},
"positionPrecision": {
"label": "Approximate Location",
"description": "Position shared will be accurate within this distance",
"options": {
"metric_km23": "Within 23 km",
"metric_km12": "Within 12 km",
"metric_km5_8": "Within 5.8 km",
"metric_km2_9": "Within 2.9 km",
"metric_km1_5": "Within 1.5 km",
"metric_m700": "Within 700 m",
"metric_m350": "Within 350 m",
"metric_m200": "Within 200 m",
"metric_m90": "Within 90 m",
"metric_m50": "Within 50 m",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
}
},
"neighborInfo": {
"title": "Neighbor Info Settings",
"description": "Settings for the Neighbor Info module",
"enabled": {
"label": "Enabled",
"description": "Enable or disable Neighbor Info Module"
},
"updateInterval": {
"label": "Update Interval",
"description": "Interval in seconds of how often we should try to send our Neighbor Info to the mesh"
}
},
"paxcounter": {
"title": "Paxcounter Settings",
"description": "Settings for the Paxcounter module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Paxcounter"
},
"paxcounterUpdateInterval": {
"label": "Update Interval (seconds)",
"description": "How long to wait between sending paxcounter packets"
},
"wifiThreshold": {
"label": "WiFi RSSI Threshold",
"description": "At what WiFi RSSI level should the counter increase. Defaults to -80."
},
"bleThreshold": {
"label": "BLE RSSI Threshold",
"description": "At what BLE RSSI level should the counter increase. Defaults to -80."
}
},
"rangeTest": {
"title": "Range Test Settings",
"description": "Settings for the Range Test module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Range Test"
},
"sender": {
"label": "Message Interval",
"description": "How long to wait between sending test packets"
},
"save": {
"label": "Save CSV to storage",
"description": "ESP32 Only"
}
},
"serial": {
"title": "Serial Settings",
"description": "Settings for the Serial module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Serial output"
},
"echo": {
"label": "Echo",
"description": "Any packets you send will be echoed back to your device"
},
"rxd": {
"label": "Receive Pin",
"description": "Set the GPIO pin to the RXD pin you have set up."
},
"txd": {
"label": "Transmit Pin",
"description": "Set the GPIO pin to the TXD pin you have set up."
},
"baud": {
"label": "Baud Rate",
"description": "The serial baud rate"
},
"timeout": {
"label": "Timeout",
"description": "Seconds to wait before we consider your packet as 'done'"
},
"mode": {
"label": "Mode",
"description": "Select Mode"
},
"overrideConsoleSerialPort": {
"label": "Override Console Serial Port",
"description": "If you have a serial port connected to the console, this will override it."
}
},
"storeForward": {
"title": "Store & Forward Settings",
"description": "Settings for the Store & Forward module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Store & Forward"
},
"heartbeat": {
"label": "Heartbeat Enabled",
"description": "Enable Store & Forward heartbeat"
},
"records": {
"label": "Number of records",
"description": "Number of records to store"
},
"historyReturnMax": {
"label": "History return max",
"description": "Max number of records to return"
},
"historyReturnWindow": {
"label": "History return window",
"description": "Max number of records to return"
}
},
"telemetry": {
"title": "Telemetry Settings",
"description": "Settings for the Telemetry module",
"deviceUpdateInterval": {
"label": "Device Metrics",
"description": "Device metrics update interval (seconds)"
},
"environmentUpdateInterval": {
"label": "Environment metrics update interval (seconds)",
"description": ""
},
"environmentMeasurementEnabled": {
"label": "Module Enabled",
"description": "Enable the Environment Telemetry"
},
"environmentScreenEnabled": {
"label": "Displayed on Screen",
"description": "Show the Telemetry Module on the OLED"
},
"environmentDisplayFahrenheit": {
"label": "Display Fahrenheit",
"description": "Display temp in Fahrenheit"
},
"airQualityEnabled": {
"label": "Air Quality Enabled",
"description": "Enable the Air Quality Telemetry"
},
"airQualityInterval": {
"label": "Air Quality Update Interval",
"description": "How often to send Air Quality data over the mesh"
},
"powerMeasurementEnabled": {
"label": "Power Measurement Enabled",
"description": "Enable the Power Measurement Telemetry"
},
"powerUpdateInterval": {
"label": "Power Update Interval",
"description": "How often to send Power data over the mesh"
},
"powerScreenEnabled": {
"label": "Power Screen Enabled",
"description": "Enable the Power Telemetry Screen"
}
}
}

View File

@@ -1,64 +1,64 @@
{
"nodeDetail": {
"publicKeyEnabled": {
"label": "Public Key Enabled"
},
"noPublicKey": {
"label": "No Public Key"
},
"directMessage": {
"label": "Direct Message {{shortName}}"
},
"favorite": {
"label": "Favorite",
"tooltip": "Add or remove this node from your favorites"
},
"notFavorite": {
"label": "Not a Favorite"
},
"error": {
"label": "Error",
"text": "An error occurred while fetching node details. Please try again later."
},
"status": {
"heard": "Heard",
"mqtt": "MQTT"
},
"elevation": {
"label": "Elevation"
},
"channelUtil": {
"label": "Channel Util"
},
"airtimeUtil": {
"label": "Airtime Util"
}
},
"nodesTable": {
"headings": {
"longName": "Long Name",
"connection": "Connection",
"lastHeard": "Last Heard",
"encryption": "Encryption",
"model": "Model",
"macAddress": "MAC Address"
},
"connectionStatus": {
"direct": "Direct",
"away": "away",
"unknown": "-",
"viaMqtt": ", via MQTT"
},
"lastHeardStatus": {
"never": "Never"
}
},
"nodeDetail": {
"publicKeyEnabled": {
"label": "Public Key Enabled"
},
"noPublicKey": {
"label": "No Public Key"
},
"directMessage": {
"label": "Direct Message {{shortName}}"
},
"favorite": {
"label": "Favorite",
"tooltip": "Add or remove this node from your favorites"
},
"notFavorite": {
"label": "Not a Favorite"
},
"error": {
"label": "Error",
"text": "An error occurred while fetching node details. Please try again later."
},
"status": {
"heard": "Heard",
"mqtt": "MQTT"
},
"elevation": {
"label": "Elevation"
},
"channelUtil": {
"label": "Channel Util"
},
"airtimeUtil": {
"label": "Airtime Util"
}
},
"nodesTable": {
"headings": {
"longName": "Long Name",
"connection": "Connection",
"lastHeard": "Last Heard",
"encryption": "Encryption",
"model": "Model",
"macAddress": "MAC Address"
},
"connectionStatus": {
"direct": "Direct",
"away": "away",
"unknown": "-",
"viaMqtt": ", via MQTT"
},
"lastHeardStatus": {
"never": "Never"
}
},
"actions": {
"added": "Added",
"removed": "Removed",
"ignoreNode": "Ignore Node",
"unignoreNode": "Unignore Node",
"requestPosition": "Request Position"
}
"actions": {
"added": "Added",
"removed": "Removed",
"ignoreNode": "Ignore Node",
"unignoreNode": "Unignore Node",
"requestPosition": "Request Position"
}
}

View File

@@ -1,214 +1,214 @@
{
"navigation": {
"title": "Navigation",
"messages": "Messages",
"map": "Map",
"config": "Config",
"radioConfig": "Radio Config",
"moduleConfig": "Module Config",
"channels": "Channels",
"nodes": "Nodes"
},
"app": {
"title": "Meshtastic",
"logo": "Meshtastic Logo"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Open sidebar",
"close": "Close sidebar"
}
},
"deviceInfo": {
"volts": "{{voltage}} volts",
"firmware": {
"title": "Firmware",
"version": "v{{version}}",
"buildDate": "Build date: {{date}}"
},
"deviceName": {
"title": "Device Name",
"changeName": "Change Device Name",
"placeholder": "Enter device name"
},
"editDeviceName": "Edit device name"
}
},
"batteryStatus": {
"charging": "{{level}}% charging",
"pluggedIn": "Plugged in",
"title": "Battery"
},
"search": {
"nodes": "Search nodes...",
"channels": "Search channels...",
"commandPalette": "Search commands..."
},
"toast": {
"positionRequestSent": { "title": "Position request sent." },
"requestingPosition": { "title": "Requesting position, please wait..." },
"sendingTraceroute": { "title": "Sending Traceroute, please wait..." },
"tracerouteSent": { "title": "Traceroute sent." },
"savedChannel": { "title": "Saved Channel: {{channelName}}" },
"messages": {
"pkiEncryption": { "title": "Chat is using PKI encryption." },
"pskEncryption": { "title": "Chat is using PSK encryption." }
},
"configSaveError": {
"title": "Error Saving Config",
"description": "An error occurred while saving the configuration."
},
"validationError": {
"title": "Config Errors Exist",
"description": "Please fix the configuration errors before saving."
},
"saveSuccess": {
"title": "Saving Config",
"description": "The configuration change {{case}} has been saved."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
}
},
"notifications": {
"copied": {
"label": "Copied!"
},
"copyToClipboard": {
"label": "Copy to clipboard"
},
"hidePassword": {
"label": "Hide password"
},
"showPassword": {
"label": "Show password"
},
"deliveryStatus": {
"delivered": "Delivered",
"failed": "Delivery Failed",
"waiting": "Waiting",
"unknown": "Unknown"
}
},
"general": {
"label": "General"
},
"hardware": {
"label": "Hardware"
},
"metrics": {
"label": "Metrics"
},
"role": {
"label": "Role"
},
"filter": {
"label": "Filter"
},
"advanced": {
"label": "Advanced"
},
"clearInput": {
"label": "Clear input"
},
"resetFilters": {
"label": "Reset Filters"
},
"nodeName": {
"label": "Node name/number",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Airtime Utilization (%)"
},
"batteryLevel": {
"label": "Battery level (%)",
"labelText": "Battery level (%): {{value}}"
},
"batteryVoltage": {
"label": "Battery voltage (V)",
"title": "Voltage"
},
"channelUtilization": {
"label": "Channel Utilization (%)"
},
"hops": {
"direct": "Direct",
"label": "Number of hops",
"text": "Number of hops: {{value}}"
},
"lastHeard": {
"label": "Last heard",
"labelText": "Last heard: {{value}}",
"nowLabel": "Now"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Favorites"
},
"hide": {
"label": "Hide"
},
"showOnly": {
"label": "Show Only"
},
"viaMqtt": {
"label": "Connected via MQTT"
},
"hopsUnknown": {
"label": "Unknown number of hops"
},
"showUnheard": {
"label": "Never heard"
},
"language": {
"label": "Language",
"changeLanguage": "Change Language"
},
"theme": {
"dark": "Dark",
"light": "Light",
"system": "Automatic",
"changeTheme": "Change Color Scheme"
},
"errorPage": {
"title": "This is a little embarrassing...",
"description1": "We are really sorry but an error occurred in the web client that caused it to crash. <br /> This is not supposed to happen, and we are working hard to fix it.",
"description2": "The best way to prevent this from happening again to you or anyone else is to report the issue to us.",
"reportInstructions": "Please include the following information in your report:",
"reportSteps": {
"step1": "What you were doing when the error occurred",
"step2": "What you expected to happen",
"step3": "What actually happened",
"step4": "Any other relevant information"
},
"reportLink": "You can report the issue to our <0>GitHub</0>",
"dashboardLink": "Return to the <0>dashboard</0>",
"detailsSummary": "Error Details",
"errorMessageLabel": "Error message:",
"stackTraceLabel": "Stack trace:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® is a registered trademark of Meshtastic LLC. | <1>Legal Information</1>",
"commitSha": "Commit SHA: {{sha}}"
}
"navigation": {
"title": "Navigation",
"messages": "Messages",
"map": "Map",
"config": "Config",
"radioConfig": "Radio Config",
"moduleConfig": "Module Config",
"channels": "Channels",
"nodes": "Nodes"
},
"app": {
"title": "Meshtastic",
"logo": "Meshtastic Logo"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Open sidebar",
"close": "Close sidebar"
}
},
"deviceInfo": {
"volts": "{{voltage}} volts",
"firmware": {
"title": "Firmware",
"version": "v{{version}}",
"buildDate": "Build date: {{date}}"
},
"deviceName": {
"title": "Device Name",
"changeName": "Change Device Name",
"placeholder": "Enter device name"
},
"editDeviceName": "Edit device name"
}
},
"batteryStatus": {
"charging": "{{level}}% charging",
"pluggedIn": "Plugged in",
"title": "Battery"
},
"search": {
"nodes": "Search nodes...",
"channels": "Search channels...",
"commandPalette": "Search commands..."
},
"toast": {
"positionRequestSent": { "title": "Position request sent." },
"requestingPosition": { "title": "Requesting position, please wait..." },
"sendingTraceroute": { "title": "Sending Traceroute, please wait..." },
"tracerouteSent": { "title": "Traceroute sent." },
"savedChannel": { "title": "Saved Channel: {{channelName}}" },
"messages": {
"pkiEncryption": { "title": "Chat is using PKI encryption." },
"pskEncryption": { "title": "Chat is using PSK encryption." }
},
"configSaveError": {
"title": "Error Saving Config",
"description": "An error occurred while saving the configuration."
},
"validationError": {
"title": "Config Errors Exist",
"description": "Please fix the configuration errors before saving."
},
"saveSuccess": {
"title": "Saving Config",
"description": "The configuration change {{case}} has been saved."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
}
},
"notifications": {
"copied": {
"label": "Copied!"
},
"copyToClipboard": {
"label": "Copy to clipboard"
},
"hidePassword": {
"label": "Hide password"
},
"showPassword": {
"label": "Show password"
},
"deliveryStatus": {
"delivered": "Delivered",
"failed": "Delivery Failed",
"waiting": "Waiting",
"unknown": "Unknown"
}
},
"general": {
"label": "General"
},
"hardware": {
"label": "Hardware"
},
"metrics": {
"label": "Metrics"
},
"role": {
"label": "Role"
},
"filter": {
"label": "Filter"
},
"advanced": {
"label": "Advanced"
},
"clearInput": {
"label": "Clear input"
},
"resetFilters": {
"label": "Reset Filters"
},
"nodeName": {
"label": "Node name/number",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Airtime Utilization (%)"
},
"batteryLevel": {
"label": "Battery level (%)",
"labelText": "Battery level (%): {{value}}"
},
"batteryVoltage": {
"label": "Battery voltage (V)",
"title": "Voltage"
},
"channelUtilization": {
"label": "Channel Utilization (%)"
},
"hops": {
"direct": "Direct",
"label": "Number of hops",
"text": "Number of hops: {{value}}"
},
"lastHeard": {
"label": "Last heard",
"labelText": "Last heard: {{value}}",
"nowLabel": "Now"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Favorites"
},
"hide": {
"label": "Hide"
},
"showOnly": {
"label": "Show Only"
},
"viaMqtt": {
"label": "Connected via MQTT"
},
"hopsUnknown": {
"label": "Unknown number of hops"
},
"showUnheard": {
"label": "Never heard"
},
"language": {
"label": "Language",
"changeLanguage": "Change Language"
},
"theme": {
"dark": "Dark",
"light": "Light",
"system": "Automatic",
"changeTheme": "Change Color Scheme"
},
"errorPage": {
"title": "This is a little embarrassing...",
"description1": "We are really sorry but an error occurred in the web client that caused it to crash. <br /> This is not supposed to happen, and we are working hard to fix it.",
"description2": "The best way to prevent this from happening again to you or anyone else is to report the issue to us.",
"reportInstructions": "Please include the following information in your report:",
"reportSteps": {
"step1": "What you were doing when the error occurred",
"step2": "What you expected to happen",
"step3": "What actually happened",
"step4": "Any other relevant information"
},
"reportLink": "You can report the issue to our <0>GitHub</0>",
"dashboardLink": "Return to the <0>dashboard</0>",
"detailsSummary": "Error Details",
"errorMessageLabel": "Error message:",
"stackTraceLabel": "Stack trace:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® is a registered trademark of Meshtastic LLC. | <1>Legal Information</1>",
"commitSha": "Commit SHA: {{sha}}"
}
}

View File

@@ -1,69 +1,69 @@
{
"page": {
"sectionLabel": "Canales",
"channelName": "Channel: {{channelName}}",
"broadcastLabel": "Primary",
"channelIndex": "Ch {{index}}"
},
"validation": {
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
},
"settings": {
"label": "Ajustes del canal",
"description": "Crypto, MQTT & misc settings"
},
"role": {
"label": "Role",
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
"options": {
"primary": "PRIMARY",
"disabled": "DISABLED",
"secondary": "SECONDARY"
}
},
"psk": {
"label": "Pre-Shared Key",
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
"generate": "Generate"
},
"name": {
"label": "Nombre",
"description": "A unique name for the channel <12 bytes, leave blank for default"
},
"uplinkEnabled": {
"label": "Uplink Enabled",
"description": "Send messages from the local mesh to MQTT"
},
"downlinkEnabled": {
"label": "Downlink Enabled",
"description": "Send messages from MQTT to the local mesh"
},
"positionPrecision": {
"label": "Location",
"description": "The precision of the location to share with the channel. Can be disabled.",
"options": {
"none": "Do not share location",
"precise": "Precise Location",
"metric_km23": "Within 23 kilometers",
"metric_km12": "Within 12 kilometers",
"metric_km5_8": "Within 5.8 kilometers",
"metric_km2_9": "Within 2.9 kilometers",
"metric_km1_5": "Within 1.5 kilometers",
"metric_m700": "Within 700 meters",
"metric_m350": "Within 350 meters",
"metric_m200": "Within 200 meters",
"metric_m90": "Within 90 meters",
"metric_m50": "Within 50 meters",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
"page": {
"sectionLabel": "Canales",
"channelName": "Channel: {{channelName}}",
"broadcastLabel": "Primary",
"channelIndex": "Ch {{index}}"
},
"validation": {
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
},
"settings": {
"label": "Ajustes del canal",
"description": "Crypto, MQTT & misc settings"
},
"role": {
"label": "Role",
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
"options": {
"primary": "PRIMARY",
"disabled": "DISABLED",
"secondary": "SECONDARY"
}
},
"psk": {
"label": "Pre-Shared Key",
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
"generate": "Generate"
},
"name": {
"label": "Nombre",
"description": "A unique name for the channel <12 bytes, leave blank for default"
},
"uplinkEnabled": {
"label": "Uplink Enabled",
"description": "Send messages from the local mesh to MQTT"
},
"downlinkEnabled": {
"label": "Downlink Enabled",
"description": "Send messages from MQTT to the local mesh"
},
"positionPrecision": {
"label": "Location",
"description": "The precision of the location to share with the channel. Can be disabled.",
"options": {
"none": "Do not share location",
"precise": "Precise Location",
"metric_km23": "Within 23 kilometers",
"metric_km12": "Within 12 kilometers",
"metric_km5_8": "Within 5.8 kilometers",
"metric_km2_9": "Within 2.9 kilometers",
"metric_km1_5": "Within 1.5 kilometers",
"metric_m700": "Within 700 meters",
"metric_m350": "Within 350 meters",
"metric_m200": "Within 200 meters",
"metric_m90": "Within 90 meters",
"metric_m50": "Within 50 meters",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
}

View File

@@ -1,50 +1,50 @@
{
"emptyState": "No results found.",
"page": {
"title": "Command Menu"
},
"pinGroup": {
"label": "Pin command group"
},
"unpinGroup": {
"label": "Unpin command group"
},
"goto": {
"label": "Goto",
"command": {
"messages": "Mensajes",
"map": "Mapa",
"config": "Config",
"channels": "Canales",
"nodes": "Nodes"
}
},
"manage": {
"label": "Manage",
"command": {
"switchNode": "Switch Node",
"connectNewNode": "Connect New Node"
}
},
"contextual": {
"label": "Contextual",
"command": {
"qrCode": "QR Code",
"qrGenerator": "Generator",
"qrImport": "Import",
"scheduleShutdown": "Schedule Shutdown",
"scheduleReboot": "Schedule Reboot",
"rebootToOtaMode": "Reboot To OTA Mode",
"resetNodeDb": "Reset Node DB",
"factoryResetDevice": "Factory Reset Device",
"factoryResetConfig": "Factory Reset Config"
}
},
"debug": {
"label": "Debug",
"command": {
"reconfigure": "Reconfigure",
"clearAllStoredMessages": "Clear All Stored Message"
}
}
"emptyState": "No results found.",
"page": {
"title": "Command Menu"
},
"pinGroup": {
"label": "Pin command group"
},
"unpinGroup": {
"label": "Unpin command group"
},
"goto": {
"label": "Goto",
"command": {
"messages": "Mensajes",
"map": "Mapa",
"config": "Config",
"channels": "Canales",
"nodes": "Nodes"
}
},
"manage": {
"label": "Manage",
"command": {
"switchNode": "Switch Node",
"connectNewNode": "Connect New Node"
}
},
"contextual": {
"label": "Contextual",
"command": {
"qrCode": "QR Code",
"qrGenerator": "Generator",
"qrImport": "Import",
"scheduleShutdown": "Schedule Shutdown",
"scheduleReboot": "Schedule Reboot",
"rebootToOtaMode": "Reboot To OTA Mode",
"resetNodeDb": "Reset Node DB",
"factoryResetDevice": "Factory Reset Device",
"factoryResetConfig": "Factory Reset Config"
}
},
"debug": {
"label": "Debug",
"command": {
"reconfigure": "Reconfigure",
"clearAllStoredMessages": "Clear All Stored Message"
}
}
}

View File

@@ -1,141 +1,141 @@
{
"button": {
"apply": "Aplique",
"backupKey": "Backup Key",
"cancel": "Cancelar",
"clearMessages": "Clear Messages",
"close": "Cerrar",
"confirm": "Confirm",
"delete": "Eliminar",
"dismiss": "Dismiss",
"download": "Download",
"export": "Export",
"generate": "Generate",
"regenerate": "Regenerate",
"import": "Import",
"message": "Mensaje",
"now": "Now",
"ok": "Vale",
"print": "Print",
"rebootOtaNow": "Reboot to OTA Mode Now",
"remove": "Quitar",
"requestNewKeys": "Request New Keys",
"requestPosition": "Request Position",
"reset": "Reiniciar",
"save": "Guardar",
"scanQr": "Scan QR Code",
"traceRoute": "Trace Route",
"submit": "Submit"
},
"app": {
"title": "Meshtastic",
"fullTitle": "Meshtastic Web Client"
},
"loading": "Loading...",
"unit": {
"cps": "CPS",
"dbm": "dBm",
"hertz": "Hz",
"hop": {
"one": "Hop",
"plural": "Hops"
},
"hopsAway": {
"one": "{{count}} hop away",
"plural": "{{count}} hops away",
"unknown": "Unknown hops away"
},
"megahertz": "MHz",
"raw": "raw",
"meter": {
"one": "Meter",
"plural": "Meters",
"suffix": "m"
},
"minute": {
"one": "Minute",
"plural": "Minutes"
},
"hour": {
"one": "Hour",
"plural": "Hours"
},
"millisecond": {
"one": "Millisecond",
"plural": "Milliseconds",
"suffix": "ms"
},
"second": {
"one": "Second",
"plural": "Seconds"
},
"day": {
"one": "Day",
"plural": "Days"
},
"month": {
"one": "Month",
"plural": "Months"
},
"year": {
"one": "Year",
"plural": "Years"
},
"snr": "SNR",
"volt": {
"one": "Volt",
"plural": "Volts",
"suffix": "V"
},
"record": {
"one": "Records",
"plural": "Records"
}
},
"security": {
"0bit": "Empty",
"8bit": "8 bit",
"128bit": "128 bit",
"256bit": "256 bit"
},
"unknown": {
"longName": "Unknown",
"shortName": "UNK",
"notAvailable": "N/A",
"num": "??"
},
"nodeUnknownPrefix": "!",
"unset": "UNSET",
"fallbackName": "Meshtastic {{last4}}",
"node": "Node",
"formValidation": {
"unsavedChanges": "Unsaved changes",
"tooBig": {
"string": "Too long, expected less than or equal to {{maximum}} characters.",
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
},
"tooSmall": {
"string": "Too short, expected more than or equal to {{minimum}} characters.",
"number": "Too small, expected a number larger than or equal to {{minimum}}."
},
"invalidFormat": {
"ipv4": "Invalid format, expected an IPv4 address.",
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
},
"invalidType": {
"number": "Invalid type, expected a number."
},
"pskLength": {
"0bit": "Key is required to be empty.",
"8bit": "Key is required to be an 8 bit pre-shared key (PSK).",
"128bit": "Key is required to be a 128 bit pre-shared key (PSK).",
"256bit": "Key is required to be a 256 bit pre-shared key (PSK)."
},
"required": {
"generic": "This field is required.",
"managed": "At least one admin key is requred if the node is managed.",
"key": "Key is required."
}
}
"button": {
"apply": "Aplique",
"backupKey": "Backup Key",
"cancel": "Cancelar",
"clearMessages": "Clear Messages",
"close": "Cerrar",
"confirm": "Confirm",
"delete": "Eliminar",
"dismiss": "Dismiss",
"download": "Download",
"export": "Export",
"generate": "Generate",
"regenerate": "Regenerate",
"import": "Import",
"message": "Mensaje",
"now": "Now",
"ok": "Vale",
"print": "Print",
"rebootOtaNow": "Reboot to OTA Mode Now",
"remove": "Quitar",
"requestNewKeys": "Request New Keys",
"requestPosition": "Request Position",
"reset": "Reiniciar",
"save": "Guardar",
"scanQr": "Scan QR Code",
"traceRoute": "Trace Route",
"submit": "Submit"
},
"app": {
"title": "Meshtastic",
"fullTitle": "Meshtastic Web Client"
},
"loading": "Loading...",
"unit": {
"cps": "CPS",
"dbm": "dBm",
"hertz": "Hz",
"hop": {
"one": "Hop",
"plural": "Hops"
},
"hopsAway": {
"one": "{{count}} hop away",
"plural": "{{count}} hops away",
"unknown": "Unknown hops away"
},
"megahertz": "MHz",
"raw": "raw",
"meter": {
"one": "Meter",
"plural": "Meters",
"suffix": "m"
},
"minute": {
"one": "Minute",
"plural": "Minutes"
},
"hour": {
"one": "Hour",
"plural": "Hours"
},
"millisecond": {
"one": "Millisecond",
"plural": "Milliseconds",
"suffix": "ms"
},
"second": {
"one": "Second",
"plural": "Seconds"
},
"day": {
"one": "Day",
"plural": "Days"
},
"month": {
"one": "Month",
"plural": "Months"
},
"year": {
"one": "Year",
"plural": "Years"
},
"snr": "SNR",
"volt": {
"one": "Volt",
"plural": "Volts",
"suffix": "V"
},
"record": {
"one": "Records",
"plural": "Records"
}
},
"security": {
"0bit": "Empty",
"8bit": "8 bit",
"128bit": "128 bit",
"256bit": "256 bit"
},
"unknown": {
"longName": "Unknown",
"shortName": "UNK",
"notAvailable": "N/A",
"num": "??"
},
"nodeUnknownPrefix": "!",
"unset": "UNSET",
"fallbackName": "Meshtastic {{last4}}",
"node": "Node",
"formValidation": {
"unsavedChanges": "Unsaved changes",
"tooBig": {
"string": "Too long, expected less than or equal to {{maximum}} characters.",
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
},
"tooSmall": {
"string": "Too short, expected more than or equal to {{minimum}} characters.",
"number": "Too small, expected a number larger than or equal to {{minimum}}."
},
"invalidFormat": {
"ipv4": "Invalid format, expected an IPv4 address.",
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
},
"invalidType": {
"number": "Invalid type, expected a number."
},
"pskLength": {
"0bit": "Key is required to be empty.",
"8bit": "Key is required to be an 8 bit pre-shared key (PSK).",
"128bit": "Key is required to be a 128 bit pre-shared key (PSK).",
"256bit": "Key is required to be a 256 bit pre-shared key (PSK)."
},
"required": {
"generic": "This field is required.",
"managed": "At least one admin key is requred if the node is managed.",
"key": "Key is required."
}
}
}

View File

@@ -1,12 +1,12 @@
{
"dashboard": {
"title": "Connected Devices",
"description": "Manage your connected Meshtastic devices.",
"connectionType_ble": "BLE",
"connectionType_serial": "Serial",
"connectionType_network": "Red",
"noDevicesTitle": "No devices connected",
"noDevicesDescription": "Connect a new device to get started.",
"button_newConnection": "New Connection"
}
"dashboard": {
"title": "Connected Devices",
"description": "Manage your connected Meshtastic devices.",
"connectionType_ble": "BLE",
"connectionType_serial": "Serial",
"connectionType_network": "Red",
"noDevicesTitle": "No devices connected",
"noDevicesDescription": "Connect a new device to get started.",
"button_newConnection": "New Connection"
}
}

View File

@@ -1,428 +1,428 @@
{
"page": {
"title": "Configuration",
"tabBluetooth": "Bluetooth",
"tabDevice": "Dispositivo",
"tabDisplay": "Pantalla",
"tabLora": "LoRa",
"tabNetwork": "Red",
"tabPosition": "Posición",
"tabPower": "Energía",
"tabSecurity": "Seguridad"
},
"sidebar": {
"label": "Modules"
},
"device": {
"title": "Device Settings",
"description": "Settings for the device",
"buttonPin": {
"description": "Button pin override",
"label": "Button Pin"
},
"buzzerPin": {
"description": "Buzzer pin override",
"label": "Buzzer Pin"
},
"disableTripleClick": {
"description": "Disable triple click",
"label": "Disable Triple Click"
},
"doubleTapAsButtonPress": {
"description": "Treat double tap as button press",
"label": "Double Tap as Button Press"
},
"ledHeartbeatDisabled": {
"description": "Disable default blinking LED",
"label": "LED Heartbeat Disabled"
},
"nodeInfoBroadcastInterval": {
"description": "How often to broadcast node info",
"label": "Node Info Broadcast Interval"
},
"posixTimezone": {
"description": "The POSIX timezone string for the device",
"label": "POSIX Timezone"
},
"rebroadcastMode": {
"description": "How to handle rebroadcasting",
"label": "Rebroadcast Mode"
},
"role": {
"description": "What role the device performs on the mesh",
"label": "Role"
}
},
"bluetooth": {
"title": "Bluetooth Settings",
"description": "Settings for the Bluetooth module",
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
"enabled": {
"description": "Enable or disable Bluetooth",
"label": "Enabled"
},
"pairingMode": {
"description": "Pin selection behaviour.",
"label": "Modo de emparejamiento"
},
"pin": {
"description": "Pin to use when pairing",
"label": "Pin"
}
},
"display": {
"description": "Settings for the device display",
"title": "Display Settings",
"headingBold": {
"description": "Bolden the heading text",
"label": "Bold Heading"
},
"carouselDelay": {
"description": "How fast to cycle through windows",
"label": "Carousel Delay"
},
"compassNorthTop": {
"description": "Fix north to the top of compass",
"label": "Compass North Top"
},
"displayMode": {
"description": "Screen layout variant",
"label": "Display Mode"
},
"displayUnits": {
"description": "Display metric or imperial units",
"label": "Display Units"
},
"flipScreen": {
"description": "Flip display 180 degrees",
"label": "Flip Screen"
},
"gpsDisplayUnits": {
"description": "Coordinate display format",
"label": "GPS Display Units"
},
"oledType": {
"description": "Type of OLED screen attached to the device",
"label": "OLED Type"
},
"screenTimeout": {
"description": "Turn off the display after this long",
"label": "Screen Timeout"
},
"twelveHourClock": {
"description": "Use 12-hour clock format",
"label": "12-Hour Clock"
},
"wakeOnTapOrMotion": {
"description": "Wake the device on tap or motion",
"label": "Wake on Tap or Motion"
}
},
"lora": {
"title": "Mesh Settings",
"description": "Settings for the LoRa mesh",
"bandwidth": {
"description": "Channel bandwidth in MHz",
"label": "Bandwidth"
},
"boostedRxGain": {
"description": "Boosted RX gain",
"label": "Boosted RX Gain"
},
"codingRate": {
"description": "The denominator of the coding rate",
"label": "Coding Rate"
},
"frequencyOffset": {
"description": "Frequency offset to correct for crystal calibration errors",
"label": "Frequency Offset"
},
"frequencySlot": {
"description": "LoRa frequency channel number",
"label": "Frequency Slot"
},
"hopLimit": {
"description": "Maximum number of hops",
"label": "Hop Limit"
},
"ignoreMqtt": {
"description": "Don't forward MQTT messages over the mesh",
"label": "Ignore MQTT"
},
"modemPreset": {
"description": "Modem preset to use",
"label": "Modem Preset"
},
"okToMqtt": {
"description": "When set to true, this configuration indicates that the user approves the packet to be uploaded to MQTT. If set to false, remote nodes are requested not to forward packets to MQTT",
"label": "OK to MQTT"
},
"overrideDutyCycle": {
"description": "Override Duty Cycle",
"label": "Override Duty Cycle"
},
"overrideFrequency": {
"description": "Override frequency",
"label": "Override Frequency"
},
"region": {
"description": "Sets the region for your node",
"label": "Región"
},
"spreadingFactor": {
"description": "Indicates the number of chirps per symbol",
"label": "Spreading Factor"
},
"transmitEnabled": {
"description": "Enable/Disable transmit (TX) from the LoRa radio",
"label": "Transmit Enabled"
},
"transmitPower": {
"description": "Max transmit power",
"label": "Transmit Power"
},
"usePreset": {
"description": "Use one of the predefined modem presets",
"label": "Use Preset"
},
"meshSettings": {
"description": "Settings for the LoRa mesh",
"label": "Mesh Settings"
},
"waveformSettings": {
"description": "Settings for the LoRa waveform",
"label": "Waveform Settings"
},
"radioSettings": {
"label": "Radio Settings",
"description": "Settings for the LoRa radio"
}
},
"network": {
"title": "WiFi Config",
"description": "WiFi radio configuration",
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
"addressMode": {
"description": "Address assignment selection",
"label": "Address Mode"
},
"dns": {
"description": "DNS Server",
"label": "DNS"
},
"ethernetEnabled": {
"description": "Enable or disable the Ethernet port",
"label": "Enabled"
},
"gateway": {
"description": "Default Gateway",
"label": "Gateway"
},
"ip": {
"description": "IP Address",
"label": "IP"
},
"psk": {
"description": "Network password",
"label": "PSK"
},
"ssid": {
"description": "Network name",
"label": "SSID"
},
"subnet": {
"description": "Subnet Mask",
"label": "Subnet"
},
"wifiEnabled": {
"description": "Enable or disable the WiFi radio",
"label": "Enabled"
},
"meshViaUdp": {
"label": "Mesh via UDP"
},
"ntpServer": {
"label": "NTP Server"
},
"rsyslogServer": {
"label": "Rsyslog Server"
},
"ethernetConfigSettings": {
"description": "Ethernet port configuration",
"label": "Ethernet Config"
},
"ipConfigSettings": {
"description": "IP configuration",
"label": "IP Config"
},
"ntpConfigSettings": {
"description": "NTP configuration",
"label": "NTP Config"
},
"rsyslogConfigSettings": {
"description": "Rsyslog configuration",
"label": "Rsyslog Config"
},
"udpConfigSettings": {
"description": "UDP over Mesh configuration",
"label": "Configuración UDP"
}
},
"position": {
"title": "Position Settings",
"description": "Settings for the position module",
"broadcastInterval": {
"description": "How often your position is sent out over the mesh",
"label": "Broadcast Interval"
},
"enablePin": {
"description": "GPS module enable pin override",
"label": "Enable Pin"
},
"fixedPosition": {
"description": "Don't report GPS position, but a manually-specified one",
"label": "Fixed Position"
},
"gpsMode": {
"description": "Configure whether device GPS is Enabled, Disabled, or Not Present",
"label": "GPS Mode"
},
"gpsUpdateInterval": {
"description": "How often a GPS fix should be acquired",
"label": "GPS Update Interval"
},
"positionFlags": {
"description": "Optional fields to include when assembling position messages. The more fields are selected, the larger the message will be leading to longer airtime usage and a higher risk of packet loss.",
"label": "Position Flags"
},
"receivePin": {
"description": "GPS module RX pin override",
"label": "Receive Pin"
},
"smartPositionEnabled": {
"description": "Only send position when there has been a meaningful change in location",
"label": "Enable Smart Position"
},
"smartPositionMinDistance": {
"description": "Minimum distance (in meters) that must be traveled before a position update is sent",
"label": "Smart Position Minimum Distance"
},
"smartPositionMinInterval": {
"description": "Minimum interval (in seconds) that must pass before a position update is sent",
"label": "Smart Position Minimum Interval"
},
"transmitPin": {
"description": "GPS module TX pin override",
"label": "Transmit Pin"
},
"intervalsSettings": {
"description": "How often to send position updates",
"label": "Intervals"
},
"flags": {
"placeholder": "Select position flags...",
"altitude": "Altitude",
"altitudeGeoidalSeparation": "Altitude Geoidal Separation",
"altitudeMsl": "Altitude is Mean Sea Level",
"dop": "Dilution of precision (DOP) PDOP used by default",
"hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP",
"numSatellites": "Number of satellites",
"sequenceNumber": "Sequence number",
"timestamp": "Timestamp",
"unset": "Sin configurar",
"vehicleHeading": "Vehicle heading",
"vehicleSpeed": "Vehicle speed"
}
},
"power": {
"adcMultiplierOverride": {
"description": "Used for tweaking battery voltage reading",
"label": "ADC Multiplier Override ratio"
},
"ina219Address": {
"description": "Address of the INA219 battery monitor",
"label": "INA219 Address"
},
"lightSleepDuration": {
"description": "How long the device will be in light sleep for",
"label": "Light Sleep Duration"
},
"minimumWakeTime": {
"description": "Minimum amount of time the device will stay awake for after receiving a packet",
"label": "Minimum Wake Time"
},
"noConnectionBluetoothDisabled": {
"description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long",
"label": "No Connection Bluetooth Disabled"
},
"powerSavingEnabled": {
"description": "Select if powered from a low-current source (i.e. solar), to minimize power consumption as much as possible.",
"label": "Enable power saving mode"
},
"shutdownOnBatteryDelay": {
"description": "Automatically shutdown node after this long when on battery, 0 for indefinite",
"label": "Shutdown on battery delay"
},
"superDeepSleepDuration": {
"description": "How long the device will be in super deep sleep for",
"label": "Super Deep Sleep Duration"
},
"powerConfigSettings": {
"description": "Settings for the power module",
"label": "Power Config"
},
"sleepSettings": {
"description": "Sleep settings for the power module",
"label": "Sleep Settings"
}
},
"security": {
"description": "Settings for the Security configuration",
"title": "Security Settings",
"button_backupKey": "Backup Key",
"adminChannelEnabled": {
"description": "Allow incoming device control over the insecure legacy admin channel",
"label": "Allow Legacy Admin"
},
"enableDebugLogApi": {
"description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth",
"label": "Enable Debug Log API"
},
"managed": {
"description": "If enabled, device configuration options are only able to be changed remotely by a Remote Admin node via admin messages. Do not enable this option unless at least one suitable Remote Admin node has been setup, and the public key is stored in one of the fields above.",
"label": "Managed"
},
"privateKey": {
"description": "Used to create a shared key with a remote device",
"label": "Clave privada"
},
"publicKey": {
"description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key",
"label": "Clave Pública"
},
"primaryAdminKey": {
"description": "The primary public key authorized to send admin messages to this node",
"label": "Primary Admin Key"
},
"secondaryAdminKey": {
"description": "The secondary public key authorized to send admin messages to this node",
"label": "Secondary Admin Key"
},
"serialOutputEnabled": {
"description": "Serial Console over the Stream API",
"label": "Serial Output Enabled"
},
"tertiaryAdminKey": {
"description": "The tertiary public key authorized to send admin messages to this node",
"label": "Tertiary Admin Key"
},
"adminSettings": {
"description": "Settings for Admin",
"label": "Admin Settings"
},
"loggingSettings": {
"description": "Settings for Logging",
"label": "Logging Settings"
}
}
"page": {
"title": "Configuration",
"tabBluetooth": "Bluetooth",
"tabDevice": "Dispositivo",
"tabDisplay": "Pantalla",
"tabLora": "LoRa",
"tabNetwork": "Red",
"tabPosition": "Posición",
"tabPower": "Energía",
"tabSecurity": "Seguridad"
},
"sidebar": {
"label": "Modules"
},
"device": {
"title": "Device Settings",
"description": "Settings for the device",
"buttonPin": {
"description": "Button pin override",
"label": "Button Pin"
},
"buzzerPin": {
"description": "Buzzer pin override",
"label": "Buzzer Pin"
},
"disableTripleClick": {
"description": "Disable triple click",
"label": "Disable Triple Click"
},
"doubleTapAsButtonPress": {
"description": "Treat double tap as button press",
"label": "Double Tap as Button Press"
},
"ledHeartbeatDisabled": {
"description": "Disable default blinking LED",
"label": "LED Heartbeat Disabled"
},
"nodeInfoBroadcastInterval": {
"description": "How often to broadcast node info",
"label": "Node Info Broadcast Interval"
},
"posixTimezone": {
"description": "The POSIX timezone string for the device",
"label": "POSIX Timezone"
},
"rebroadcastMode": {
"description": "How to handle rebroadcasting",
"label": "Rebroadcast Mode"
},
"role": {
"description": "What role the device performs on the mesh",
"label": "Role"
}
},
"bluetooth": {
"title": "Bluetooth Settings",
"description": "Settings for the Bluetooth module",
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
"enabled": {
"description": "Enable or disable Bluetooth",
"label": "Enabled"
},
"pairingMode": {
"description": "Pin selection behaviour.",
"label": "Modo de emparejamiento"
},
"pin": {
"description": "Pin to use when pairing",
"label": "Pin"
}
},
"display": {
"description": "Settings for the device display",
"title": "Display Settings",
"headingBold": {
"description": "Bolden the heading text",
"label": "Bold Heading"
},
"carouselDelay": {
"description": "How fast to cycle through windows",
"label": "Carousel Delay"
},
"compassNorthTop": {
"description": "Fix north to the top of compass",
"label": "Compass North Top"
},
"displayMode": {
"description": "Screen layout variant",
"label": "Display Mode"
},
"displayUnits": {
"description": "Display metric or imperial units",
"label": "Display Units"
},
"flipScreen": {
"description": "Flip display 180 degrees",
"label": "Flip Screen"
},
"gpsDisplayUnits": {
"description": "Coordinate display format",
"label": "GPS Display Units"
},
"oledType": {
"description": "Type of OLED screen attached to the device",
"label": "OLED Type"
},
"screenTimeout": {
"description": "Turn off the display after this long",
"label": "Screen Timeout"
},
"twelveHourClock": {
"description": "Use 12-hour clock format",
"label": "12-Hour Clock"
},
"wakeOnTapOrMotion": {
"description": "Wake the device on tap or motion",
"label": "Wake on Tap or Motion"
}
},
"lora": {
"title": "Mesh Settings",
"description": "Settings for the LoRa mesh",
"bandwidth": {
"description": "Channel bandwidth in MHz",
"label": "Bandwidth"
},
"boostedRxGain": {
"description": "Boosted RX gain",
"label": "Boosted RX Gain"
},
"codingRate": {
"description": "The denominator of the coding rate",
"label": "Coding Rate"
},
"frequencyOffset": {
"description": "Frequency offset to correct for crystal calibration errors",
"label": "Frequency Offset"
},
"frequencySlot": {
"description": "LoRa frequency channel number",
"label": "Frequency Slot"
},
"hopLimit": {
"description": "Maximum number of hops",
"label": "Hop Limit"
},
"ignoreMqtt": {
"description": "Don't forward MQTT messages over the mesh",
"label": "Ignore MQTT"
},
"modemPreset": {
"description": "Modem preset to use",
"label": "Modem Preset"
},
"okToMqtt": {
"description": "When set to true, this configuration indicates that the user approves the packet to be uploaded to MQTT. If set to false, remote nodes are requested not to forward packets to MQTT",
"label": "OK to MQTT"
},
"overrideDutyCycle": {
"description": "Override Duty Cycle",
"label": "Override Duty Cycle"
},
"overrideFrequency": {
"description": "Override frequency",
"label": "Override Frequency"
},
"region": {
"description": "Sets the region for your node",
"label": "Región"
},
"spreadingFactor": {
"description": "Indicates the number of chirps per symbol",
"label": "Spreading Factor"
},
"transmitEnabled": {
"description": "Enable/Disable transmit (TX) from the LoRa radio",
"label": "Transmit Enabled"
},
"transmitPower": {
"description": "Max transmit power",
"label": "Transmit Power"
},
"usePreset": {
"description": "Use one of the predefined modem presets",
"label": "Use Preset"
},
"meshSettings": {
"description": "Settings for the LoRa mesh",
"label": "Mesh Settings"
},
"waveformSettings": {
"description": "Settings for the LoRa waveform",
"label": "Waveform Settings"
},
"radioSettings": {
"label": "Radio Settings",
"description": "Settings for the LoRa radio"
}
},
"network": {
"title": "WiFi Config",
"description": "WiFi radio configuration",
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
"addressMode": {
"description": "Address assignment selection",
"label": "Address Mode"
},
"dns": {
"description": "DNS Server",
"label": "DNS"
},
"ethernetEnabled": {
"description": "Enable or disable the Ethernet port",
"label": "Enabled"
},
"gateway": {
"description": "Default Gateway",
"label": "Gateway"
},
"ip": {
"description": "IP Address",
"label": "IP"
},
"psk": {
"description": "Network password",
"label": "PSK"
},
"ssid": {
"description": "Network name",
"label": "SSID"
},
"subnet": {
"description": "Subnet Mask",
"label": "Subnet"
},
"wifiEnabled": {
"description": "Enable or disable the WiFi radio",
"label": "Enabled"
},
"meshViaUdp": {
"label": "Mesh via UDP"
},
"ntpServer": {
"label": "NTP Server"
},
"rsyslogServer": {
"label": "Rsyslog Server"
},
"ethernetConfigSettings": {
"description": "Ethernet port configuration",
"label": "Ethernet Config"
},
"ipConfigSettings": {
"description": "IP configuration",
"label": "IP Config"
},
"ntpConfigSettings": {
"description": "NTP configuration",
"label": "NTP Config"
},
"rsyslogConfigSettings": {
"description": "Rsyslog configuration",
"label": "Rsyslog Config"
},
"udpConfigSettings": {
"description": "UDP over Mesh configuration",
"label": "Configuración UDP"
}
},
"position": {
"title": "Position Settings",
"description": "Settings for the position module",
"broadcastInterval": {
"description": "How often your position is sent out over the mesh",
"label": "Broadcast Interval"
},
"enablePin": {
"description": "GPS module enable pin override",
"label": "Enable Pin"
},
"fixedPosition": {
"description": "Don't report GPS position, but a manually-specified one",
"label": "Fixed Position"
},
"gpsMode": {
"description": "Configure whether device GPS is Enabled, Disabled, or Not Present",
"label": "GPS Mode"
},
"gpsUpdateInterval": {
"description": "How often a GPS fix should be acquired",
"label": "GPS Update Interval"
},
"positionFlags": {
"description": "Optional fields to include when assembling position messages. The more fields are selected, the larger the message will be leading to longer airtime usage and a higher risk of packet loss.",
"label": "Position Flags"
},
"receivePin": {
"description": "GPS module RX pin override",
"label": "Receive Pin"
},
"smartPositionEnabled": {
"description": "Only send position when there has been a meaningful change in location",
"label": "Enable Smart Position"
},
"smartPositionMinDistance": {
"description": "Minimum distance (in meters) that must be traveled before a position update is sent",
"label": "Smart Position Minimum Distance"
},
"smartPositionMinInterval": {
"description": "Minimum interval (in seconds) that must pass before a position update is sent",
"label": "Smart Position Minimum Interval"
},
"transmitPin": {
"description": "GPS module TX pin override",
"label": "Transmit Pin"
},
"intervalsSettings": {
"description": "How often to send position updates",
"label": "Intervals"
},
"flags": {
"placeholder": "Select position flags...",
"altitude": "Altitude",
"altitudeGeoidalSeparation": "Altitude Geoidal Separation",
"altitudeMsl": "Altitude is Mean Sea Level",
"dop": "Dilution of precision (DOP) PDOP used by default",
"hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP",
"numSatellites": "Number of satellites",
"sequenceNumber": "Sequence number",
"timestamp": "Timestamp",
"unset": "Sin configurar",
"vehicleHeading": "Vehicle heading",
"vehicleSpeed": "Vehicle speed"
}
},
"power": {
"adcMultiplierOverride": {
"description": "Used for tweaking battery voltage reading",
"label": "ADC Multiplier Override ratio"
},
"ina219Address": {
"description": "Address of the INA219 battery monitor",
"label": "INA219 Address"
},
"lightSleepDuration": {
"description": "How long the device will be in light sleep for",
"label": "Light Sleep Duration"
},
"minimumWakeTime": {
"description": "Minimum amount of time the device will stay awake for after receiving a packet",
"label": "Minimum Wake Time"
},
"noConnectionBluetoothDisabled": {
"description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long",
"label": "No Connection Bluetooth Disabled"
},
"powerSavingEnabled": {
"description": "Select if powered from a low-current source (i.e. solar), to minimize power consumption as much as possible.",
"label": "Enable power saving mode"
},
"shutdownOnBatteryDelay": {
"description": "Automatically shutdown node after this long when on battery, 0 for indefinite",
"label": "Shutdown on battery delay"
},
"superDeepSleepDuration": {
"description": "How long the device will be in super deep sleep for",
"label": "Super Deep Sleep Duration"
},
"powerConfigSettings": {
"description": "Settings for the power module",
"label": "Power Config"
},
"sleepSettings": {
"description": "Sleep settings for the power module",
"label": "Sleep Settings"
}
},
"security": {
"description": "Settings for the Security configuration",
"title": "Security Settings",
"button_backupKey": "Backup Key",
"adminChannelEnabled": {
"description": "Allow incoming device control over the insecure legacy admin channel",
"label": "Allow Legacy Admin"
},
"enableDebugLogApi": {
"description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth",
"label": "Enable Debug Log API"
},
"managed": {
"description": "If enabled, device configuration options are only able to be changed remotely by a Remote Admin node via admin messages. Do not enable this option unless at least one suitable Remote Admin node has been setup, and the public key is stored in one of the fields above.",
"label": "Managed"
},
"privateKey": {
"description": "Used to create a shared key with a remote device",
"label": "Clave privada"
},
"publicKey": {
"description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key",
"label": "Clave Pública"
},
"primaryAdminKey": {
"description": "The primary public key authorized to send admin messages to this node",
"label": "Primary Admin Key"
},
"secondaryAdminKey": {
"description": "The secondary public key authorized to send admin messages to this node",
"label": "Secondary Admin Key"
},
"serialOutputEnabled": {
"description": "Serial Console over the Stream API",
"label": "Serial Output Enabled"
},
"tertiaryAdminKey": {
"description": "The tertiary public key authorized to send admin messages to this node",
"label": "Tertiary Admin Key"
},
"adminSettings": {
"description": "Settings for Admin",
"label": "Admin Settings"
},
"loggingSettings": {
"description": "Settings for Logging",
"label": "Logging Settings"
}
}
}

View File

@@ -1,171 +1,171 @@
{
"deleteMessages": {
"description": "This action will clear all message history. This cannot be undone. Are you sure you want to continue?",
"title": "Clear All Messages"
},
"deviceName": {
"description": "The Device will restart once the config is saved.",
"longName": "Long Name",
"shortName": "Short Name",
"title": "Change Device Name"
},
"import": {
"description": "The current LoRa configuration will be overridden.",
"error": {
"invalidUrl": "Invalid Meshtastic URL"
},
"channelPrefix": "Channel: ",
"channelSetUrl": "Channel Set/QR Code URL",
"channels": "Channels:",
"usePreset": "Use Preset?",
"title": "Import Channel Set"
},
"locationResponse": {
"altitude": "Altitude: ",
"coordinates": "Coordinates: ",
"title": "Location: {{identifier}}"
},
"pkiRegenerateDialog": {
"title": "Regenerate Pre-Shared Key?",
"description": "Are you sure you want to regenerate the pre-shared key?",
"regenerate": "Regenerate"
},
"newDeviceDialog": {
"title": "Connect New Device",
"https": "https",
"http": "http",
"tabHttp": "HTTP",
"tabBluetooth": "Bluetooth",
"tabSerial": "Serial",
"useHttps": "Use HTTPS",
"connecting": "Connecting...",
"connect": "Connect",
"connectionFailedAlert": {
"title": "Connection Failed",
"descriptionPrefix": "Could not connect to the device. ",
"httpsHint": "If using HTTPS, you may need to accept a self-signed certificate first. ",
"openLinkPrefix": "Please open ",
"openLinkSuffix": " in a new tab",
"acceptTlsWarningSuffix": ", accept any TLS warnings if prompted, then try again",
"learnMoreLink": "Learn more"
},
"httpConnection": {
"label": "IP Address/Hostname",
"placeholder": "000.000.000.000 / meshtastic.local"
},
"serialConnection": {
"noDevicesPaired": "No devices paired yet.",
"newDeviceButton": "New device",
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
},
"bluetoothConnection": {
"noDevicesPaired": "No devices paired yet.",
"newDeviceButton": "New device"
},
"validation": {
"requiresWebBluetooth": "This connection type requires <0>Web Bluetooth</0>. Please use a supported browser, like Chrome or Edge.",
"requiresWebSerial": "This connection type requires <0>Web Serial</0>. Please use a supported browser, like Chrome or Edge.",
"requiresSecureContext": "This application requires a <0>secure context</0>. Please connect using HTTPS or localhost.",
"additionallyRequiresSecureContext": "Additionally, it requires a <0>secure context</0>. Please connect using HTTPS or localhost."
}
},
"nodeDetails": {
"message": "Mensaje",
"requestPosition": "Request Position",
"traceRoute": "Trace Route",
"airTxUtilization": "Air TX utilization",
"allRawMetrics": "All Raw Metrics:",
"batteryLevel": "Battery level",
"channelUtilization": "Channel utilization",
"details": "Details:",
"deviceMetrics": "Device Metrics:",
"hardware": "Hardware: ",
"lastHeard": "Last Heard: ",
"nodeHexPrefix": "Node Hex: !",
"nodeNumber": "Node Number: ",
"position": "Position:",
"role": "Role: ",
"uptime": "Uptime: ",
"voltage": "Tensión",
"title": "Node Details for {{identifier}}",
"ignoreNode": "Ignore node",
"removeNode": "Remove node",
"unignoreNode": "Unignore node"
},
"pkiBackup": {
"loseKeysWarning": "If you lose your keys, you will need to reset your device.",
"secureBackup": "Its important to backup your public and private keys and store your backup securely!",
"footer": "=== END OF KEYS ===",
"header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===",
"privateKey": "Private Key:",
"publicKey": "Public Key:",
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
"title": "Backup Keys"
},
"pkiBackupReminder": {
"description": "We recommend backing up your key data regularly. Would you like to back up now?",
"title": "Backup Reminder",
"remindLaterPrefix": "Remind me in",
"remindNever": "Never remind me",
"backupNow": "Back up now"
},
"pkiRegenerate": {
"description": "Are you sure you want to regenerate key pair?",
"title": "Regenerate Key Pair"
},
"qr": {
"addChannels": "Add Channels",
"replaceChannels": "Replace Channels",
"description": "The current LoRa configuration will also be shared.",
"sharableUrl": "Sharable URL",
"title": "Generate QR Code"
},
"rebootOta": {
"title": "Schedule Reboot",
"description": "Reboot the connected node after a delay into OTA (Over-the-Air) mode.",
"enterDelay": "Enter delay (sec)",
"scheduled": "Reboot has been scheduled"
},
"reboot": {
"title": "Schedule Reboot",
"description": "Reboot the connected node after x minutes."
},
"refreshKeys": {
"description": {
"acceptNewKeys": "This will remove the node from device and request new keys.",
"keyMismatchReasonSuffix": ". This is due to the remote node's current public key does not match the previously stored key for this node.",
"unableToSendDmPrefix": "Your node is unable to send a direct message to node: "
},
"acceptNewKeys": "Accept New Keys",
"title": "Keys Mismatch - {{identifier}}"
},
"removeNode": {
"description": "Are you sure you want to remove this Node?",
"title": "Remove Node?"
},
"shutdown": {
"title": "Schedule Shutdown",
"description": "Turn off the connected node after x minutes."
},
"traceRoute": {
"routeToDestination": "Route to destination:",
"routeBack": "Route back:"
},
"tracerouteResponse": {
"title": "Traceroute: {{identifier}}"
},
"unsafeRoles": {
"confirmUnderstanding": "Yes, I know what I'm doing",
"conjunction": " and the blog post about ",
"postamble": " and understand the implications of changing the role.",
"preamble": "I have read the ",
"choosingRightDeviceRole": "Choosing The Right Device Role",
"deviceRoleDocumentation": "Device Role Documentation",
"title": "¿Estás seguro?"
},
"managedMode": {
"confirmUnderstanding": "Yes, I know what I'm doing",
"title": "¿Estás seguro?",
"description": "Enabling Managed Mode blocks client applications (including the web client) from writing configurations to a radio. Once enabled, radio configurations can <bold>only</bold> be changed through Remote Admin messages. This setting is not required for remote node administration."
}
"deleteMessages": {
"description": "This action will clear all message history. This cannot be undone. Are you sure you want to continue?",
"title": "Clear All Messages"
},
"deviceName": {
"description": "The Device will restart once the config is saved.",
"longName": "Long Name",
"shortName": "Short Name",
"title": "Change Device Name"
},
"import": {
"description": "The current LoRa configuration will be overridden.",
"error": {
"invalidUrl": "Invalid Meshtastic URL"
},
"channelPrefix": "Channel: ",
"channelSetUrl": "Channel Set/QR Code URL",
"channels": "Channels:",
"usePreset": "Use Preset?",
"title": "Import Channel Set"
},
"locationResponse": {
"altitude": "Altitude: ",
"coordinates": "Coordinates: ",
"title": "Location: {{identifier}}"
},
"pkiRegenerateDialog": {
"title": "Regenerate Pre-Shared Key?",
"description": "Are you sure you want to regenerate the pre-shared key?",
"regenerate": "Regenerate"
},
"newDeviceDialog": {
"title": "Connect New Device",
"https": "https",
"http": "http",
"tabHttp": "HTTP",
"tabBluetooth": "Bluetooth",
"tabSerial": "Serial",
"useHttps": "Use HTTPS",
"connecting": "Connecting...",
"connect": "Connect",
"connectionFailedAlert": {
"title": "Connection Failed",
"descriptionPrefix": "Could not connect to the device. ",
"httpsHint": "If using HTTPS, you may need to accept a self-signed certificate first. ",
"openLinkPrefix": "Please open ",
"openLinkSuffix": " in a new tab",
"acceptTlsWarningSuffix": ", accept any TLS warnings if prompted, then try again",
"learnMoreLink": "Learn more"
},
"httpConnection": {
"label": "IP Address/Hostname",
"placeholder": "000.000.000.000 / meshtastic.local"
},
"serialConnection": {
"noDevicesPaired": "No devices paired yet.",
"newDeviceButton": "New device",
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
},
"bluetoothConnection": {
"noDevicesPaired": "No devices paired yet.",
"newDeviceButton": "New device"
},
"validation": {
"requiresWebBluetooth": "This connection type requires <0>Web Bluetooth</0>. Please use a supported browser, like Chrome or Edge.",
"requiresWebSerial": "This connection type requires <0>Web Serial</0>. Please use a supported browser, like Chrome or Edge.",
"requiresSecureContext": "This application requires a <0>secure context</0>. Please connect using HTTPS or localhost.",
"additionallyRequiresSecureContext": "Additionally, it requires a <0>secure context</0>. Please connect using HTTPS or localhost."
}
},
"nodeDetails": {
"message": "Mensaje",
"requestPosition": "Request Position",
"traceRoute": "Trace Route",
"airTxUtilization": "Air TX utilization",
"allRawMetrics": "All Raw Metrics:",
"batteryLevel": "Battery level",
"channelUtilization": "Channel utilization",
"details": "Details:",
"deviceMetrics": "Device Metrics:",
"hardware": "Hardware: ",
"lastHeard": "Last Heard: ",
"nodeHexPrefix": "Node Hex: !",
"nodeNumber": "Node Number: ",
"position": "Position:",
"role": "Role: ",
"uptime": "Uptime: ",
"voltage": "Tensión",
"title": "Node Details for {{identifier}}",
"ignoreNode": "Ignore node",
"removeNode": "Remove node",
"unignoreNode": "Unignore node"
},
"pkiBackup": {
"loseKeysWarning": "If you lose your keys, you will need to reset your device.",
"secureBackup": "Its important to backup your public and private keys and store your backup securely!",
"footer": "=== END OF KEYS ===",
"header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===",
"privateKey": "Private Key:",
"publicKey": "Public Key:",
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
"title": "Backup Keys"
},
"pkiBackupReminder": {
"description": "We recommend backing up your key data regularly. Would you like to back up now?",
"title": "Backup Reminder",
"remindLaterPrefix": "Remind me in",
"remindNever": "Never remind me",
"backupNow": "Back up now"
},
"pkiRegenerate": {
"description": "Are you sure you want to regenerate key pair?",
"title": "Regenerate Key Pair"
},
"qr": {
"addChannels": "Add Channels",
"replaceChannels": "Replace Channels",
"description": "The current LoRa configuration will also be shared.",
"sharableUrl": "Sharable URL",
"title": "Generate QR Code"
},
"rebootOta": {
"title": "Schedule Reboot",
"description": "Reboot the connected node after a delay into OTA (Over-the-Air) mode.",
"enterDelay": "Enter delay (sec)",
"scheduled": "Reboot has been scheduled"
},
"reboot": {
"title": "Schedule Reboot",
"description": "Reboot the connected node after x minutes."
},
"refreshKeys": {
"description": {
"acceptNewKeys": "This will remove the node from device and request new keys.",
"keyMismatchReasonSuffix": ". This is due to the remote node's current public key does not match the previously stored key for this node.",
"unableToSendDmPrefix": "Your node is unable to send a direct message to node: "
},
"acceptNewKeys": "Accept New Keys",
"title": "Keys Mismatch - {{identifier}}"
},
"removeNode": {
"description": "Are you sure you want to remove this Node?",
"title": "Remove Node?"
},
"shutdown": {
"title": "Schedule Shutdown",
"description": "Turn off the connected node after x minutes."
},
"traceRoute": {
"routeToDestination": "Route to destination:",
"routeBack": "Route back:"
},
"tracerouteResponse": {
"title": "Traceroute: {{identifier}}"
},
"unsafeRoles": {
"confirmUnderstanding": "Yes, I know what I'm doing",
"conjunction": " and the blog post about ",
"postamble": " and understand the implications of changing the role.",
"preamble": "I have read the ",
"choosingRightDeviceRole": "Choosing The Right Device Role",
"deviceRoleDocumentation": "Device Role Documentation",
"title": "¿Estás seguro?"
},
"managedMode": {
"confirmUnderstanding": "Yes, I know what I'm doing",
"title": "¿Estás seguro?",
"description": "Enabling Managed Mode blocks client applications (including the web client) from writing configurations to a radio. Once enabled, radio configurations can <bold>only</bold> be changed through Remote Admin messages. This setting is not required for remote node administration."
}
}

View File

@@ -1,39 +1,39 @@
{
"page": {
"title": "Messages: {{chatName}}",
"placeholder": "Enter Message"
},
"emptyState": {
"title": "Select a Chat",
"text": "No messages yet."
},
"selectChatPrompt": {
"text": "Select a channel or node to start messaging."
},
"sendMessage": {
"placeholder": "Enter your message here...",
"sendButton": "Enviar"
},
"actionsMenu": {
"addReactionLabel": "Add Reaction",
"replyLabel": "Reply"
},
"deliveryStatus": {
"delivered": {
"label": "Message delivered",
"displayText": "Message delivered"
},
"failed": {
"label": "Message delivery failed",
"displayText": "Delivery failed"
},
"unknown": {
"label": "Message status unknown",
"displayText": "Unknown state"
},
"waiting": {
"label": "Sending message",
"displayText": "Waiting for delivery"
}
}
"page": {
"title": "Messages: {{chatName}}",
"placeholder": "Enter Message"
},
"emptyState": {
"title": "Select a Chat",
"text": "No messages yet."
},
"selectChatPrompt": {
"text": "Select a channel or node to start messaging."
},
"sendMessage": {
"placeholder": "Enter your message here...",
"sendButton": "Enviar"
},
"actionsMenu": {
"addReactionLabel": "Add Reaction",
"replyLabel": "Reply"
},
"deliveryStatus": {
"delivered": {
"label": "Message delivered",
"displayText": "Message delivered"
},
"failed": {
"label": "Message delivery failed",
"displayText": "Delivery failed"
},
"unknown": {
"label": "Message status unknown",
"displayText": "Unknown state"
},
"waiting": {
"label": "Sending message",
"displayText": "Waiting for delivery"
}
}
}

View File

@@ -1,448 +1,448 @@
{
"page": {
"tabAmbientLighting": "Ambient Lighting",
"tabAudio": "Audio",
"tabCannedMessage": "Canned",
"tabDetectionSensor": "Detection Sensor",
"tabExternalNotification": "Ext Notif",
"tabMqtt": "MQTT",
"tabNeighborInfo": "Neighbor Info",
"tabPaxcounter": "Paxcounter",
"tabRangeTest": "Range Test",
"tabSerial": "Serial",
"tabStoreAndForward": "S&F",
"tabTelemetry": "Telemetry"
},
"ambientLighting": {
"title": "Ambient Lighting Settings",
"description": "Settings for the Ambient Lighting module",
"ledState": {
"label": "LED State",
"description": "Sets LED to on or off"
},
"current": {
"label": "Intensidad",
"description": "Sets the current for the LED output. Default is 10"
},
"red": {
"label": "Red",
"description": "Sets the red LED level. Values are 0-255"
},
"green": {
"label": "Green",
"description": "Sets the green LED level. Values are 0-255"
},
"blue": {
"label": "Blue",
"description": "Sets the blue LED level. Values are 0-255"
}
},
"audio": {
"title": "Audio Settings",
"description": "Settings for the Audio module",
"codec2Enabled": {
"label": "Codec 2 Enabled",
"description": "Enable Codec 2 audio encoding"
},
"pttPin": {
"label": "PTT Pin",
"description": "GPIO pin to use for PTT"
},
"bitrate": {
"label": "Bitrate",
"description": "Bitrate to use for audio encoding"
},
"i2sWs": {
"label": "i2S WS",
"description": "GPIO pin to use for i2S WS"
},
"i2sSd": {
"label": "i2S SD",
"description": "GPIO pin to use for i2S SD"
},
"i2sDin": {
"label": "i2S DIN",
"description": "GPIO pin to use for i2S DIN"
},
"i2sSck": {
"label": "i2S SCK",
"description": "GPIO pin to use for i2S SCK"
}
},
"cannedMessage": {
"title": "Canned Message Settings",
"description": "Settings for the Canned Message module",
"moduleEnabled": {
"label": "Module Enabled",
"description": "Enable Canned Message"
},
"rotary1Enabled": {
"label": "Rotary Encoder #1 Enabled",
"description": "Enable the rotary encoder"
},
"inputbrokerPinA": {
"label": "Encoder Pin A",
"description": "GPIO Pin Value (1-39) For encoder port A"
},
"inputbrokerPinB": {
"label": "Encoder Pin B",
"description": "GPIO Pin Value (1-39) For encoder port B"
},
"inputbrokerPinPress": {
"label": "Encoder Pin Press",
"description": "GPIO Pin Value (1-39) For encoder Press"
},
"inputbrokerEventCw": {
"label": "Clockwise event",
"description": "Select input event."
},
"inputbrokerEventCcw": {
"label": "Counter Clockwise event",
"description": "Select input event."
},
"inputbrokerEventPress": {
"label": "Press event",
"description": "Select input event"
},
"updown1Enabled": {
"label": "Up Down enabled",
"description": "Enable the up / down encoder"
},
"allowInputSource": {
"label": "Allow Input Source",
"description": "Select from: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
},
"sendBell": {
"label": "Send Bell",
"description": "Sends a bell character with each message"
}
},
"detectionSensor": {
"title": "Detection Sensor Settings",
"description": "Settings for the Detection Sensor module",
"enabled": {
"label": "Enabled",
"description": "Enable or disable Detection Sensor Module"
},
"minimumBroadcastSecs": {
"label": "Minimum Broadcast Seconds",
"description": "The interval in seconds of how often we can send a message to the mesh when a state change is detected"
},
"stateBroadcastSecs": {
"label": "State Broadcast Seconds",
"description": "The interval in seconds of how often we should send a message to the mesh with the current state regardless of changes"
},
"sendBell": {
"label": "Send Bell",
"description": "Send ASCII bell with alert message"
},
"name": {
"label": "Friendly Name",
"description": "Used to format the message sent to mesh, max 20 Characters"
},
"monitorPin": {
"label": "Monitor Pin",
"description": "The GPIO pin to monitor for state changes"
},
"detectionTriggerType": {
"label": "Detection Triggered Type",
"description": "The type of trigger event to be used"
},
"usePullup": {
"label": "Use Pullup",
"description": "Whether or not use INPUT_PULLUP mode for GPIO pin"
}
},
"externalNotification": {
"title": "External Notification Settings",
"description": "Configure the external notification module",
"enabled": {
"label": "Module Enabled",
"description": "Enable External Notification"
},
"outputMs": {
"label": "Output MS",
"description": "Output MS"
},
"output": {
"label": "Output",
"description": "Output"
},
"outputVibra": {
"label": "Output Vibrate",
"description": "Output Vibrate"
},
"outputBuzzer": {
"label": "Output Buzzer",
"description": "Output Buzzer"
},
"active": {
"label": "Active",
"description": "Active"
},
"alertMessage": {
"label": "Alert Message",
"description": "Alert Message"
},
"alertMessageVibra": {
"label": "Alert Message Vibrate",
"description": "Alert Message Vibrate"
},
"alertMessageBuzzer": {
"label": "Alert Message Buzzer",
"description": "Alert Message Buzzer"
},
"alertBell": {
"label": "Alert Bell",
"description": "Should an alert be triggered when receiving an incoming bell?"
},
"alertBellVibra": {
"label": "Alert Bell Vibrate",
"description": "Alert Bell Vibrate"
},
"alertBellBuzzer": {
"label": "Alert Bell Buzzer",
"description": "Alert Bell Buzzer"
},
"usePwm": {
"label": "Use PWM",
"description": "Use PWM"
},
"nagTimeout": {
"label": "Nag Timeout",
"description": "Nag Timeout"
},
"useI2sAsBuzzer": {
"label": "Use I²S Pin as Buzzer",
"description": "Designate I²S Pin as Buzzer Output"
}
},
"mqtt": {
"title": "MQTT Settings",
"description": "Settings for the MQTT module",
"enabled": {
"label": "Enabled",
"description": "Enable or disable MQTT"
},
"address": {
"label": "MQTT Server Address",
"description": "MQTT server address to use for default/custom servers"
},
"username": {
"label": "MQTT Username",
"description": "MQTT username to use for default/custom servers"
},
"password": {
"label": "MQTT Password",
"description": "MQTT password to use for default/custom servers"
},
"encryptionEnabled": {
"label": "Encryption Enabled",
"description": "Enable or disable MQTT encryption. Note: All messages are sent to the MQTT broker unencrypted if this option is not enabled, even when your uplink channels have encryption keys set. This includes position data."
},
"jsonEnabled": {
"label": "JSON Enabled",
"description": "Whether to send/consume JSON packets on MQTT"
},
"tlsEnabled": {
"label": "TLS Enabled",
"description": "Enable or disable TLS"
},
"root": {
"label": "Root topic",
"description": "MQTT root topic to use for default/custom servers"
},
"proxyToClientEnabled": {
"label": "MQTT Client Proxy Enabled",
"description": "Utilizes the network connection to proxy MQTT messages to the client."
},
"mapReportingEnabled": {
"label": "Map Reporting Enabled",
"description": "Your node will periodically send an unencrypted map report packet to the configured MQTT server, this includes id, short and long name, approximate location, hardware model, role, firmware version, LoRa region, modem preset and primary channel name."
},
"mapReportSettings": {
"publishIntervalSecs": {
"label": "Map Report Publish Interval (s)",
"description": "Interval in seconds to publish map reports"
},
"positionPrecision": {
"label": "Approximate Location",
"description": "Position shared will be accurate within this distance",
"options": {
"metric_km23": "Within 23 km",
"metric_km12": "Within 12 km",
"metric_km5_8": "Within 5.8 km",
"metric_km2_9": "Within 2.9 km",
"metric_km1_5": "Within 1.5 km",
"metric_m700": "Within 700 m",
"metric_m350": "Within 350 m",
"metric_m200": "Within 200 m",
"metric_m90": "Within 90 m",
"metric_m50": "Within 50 m",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
}
},
"neighborInfo": {
"title": "Neighbor Info Settings",
"description": "Settings for the Neighbor Info module",
"enabled": {
"label": "Enabled",
"description": "Enable or disable Neighbor Info Module"
},
"updateInterval": {
"label": "Update Interval",
"description": "Interval in seconds of how often we should try to send our Neighbor Info to the mesh"
}
},
"paxcounter": {
"title": "Paxcounter Settings",
"description": "Settings for the Paxcounter module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Paxcounter"
},
"paxcounterUpdateInterval": {
"label": "Update Interval (seconds)",
"description": "How long to wait between sending paxcounter packets"
},
"wifiThreshold": {
"label": "WiFi RSSI Threshold",
"description": "At what WiFi RSSI level should the counter increase. Defaults to -80."
},
"bleThreshold": {
"label": "BLE RSSI Threshold",
"description": "At what BLE RSSI level should the counter increase. Defaults to -80."
}
},
"rangeTest": {
"title": "Range Test Settings",
"description": "Settings for the Range Test module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Range Test"
},
"sender": {
"label": "Message Interval",
"description": "How long to wait between sending test packets"
},
"save": {
"label": "Save CSV to storage",
"description": "ESP32 Only"
}
},
"serial": {
"title": "Serial Settings",
"description": "Settings for the Serial module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Serial output"
},
"echo": {
"label": "Echo",
"description": "Any packets you send will be echoed back to your device"
},
"rxd": {
"label": "Receive Pin",
"description": "Set the GPIO pin to the RXD pin you have set up."
},
"txd": {
"label": "Transmit Pin",
"description": "Set the GPIO pin to the TXD pin you have set up."
},
"baud": {
"label": "Baud Rate",
"description": "The serial baud rate"
},
"timeout": {
"label": "Tiempo agotado",
"description": "Seconds to wait before we consider your packet as 'done'"
},
"mode": {
"label": "Mode",
"description": "Select Mode"
},
"overrideConsoleSerialPort": {
"label": "Override Console Serial Port",
"description": "If you have a serial port connected to the console, this will override it."
}
},
"storeForward": {
"title": "Store & Forward Settings",
"description": "Settings for the Store & Forward module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Store & Forward"
},
"heartbeat": {
"label": "Heartbeat Enabled",
"description": "Enable Store & Forward heartbeat"
},
"records": {
"label": "Number of records",
"description": "Number of records to store"
},
"historyReturnMax": {
"label": "History return max",
"description": "Max number of records to return"
},
"historyReturnWindow": {
"label": "History return window",
"description": "Max number of records to return"
}
},
"telemetry": {
"title": "Telemetry Settings",
"description": "Settings for the Telemetry module",
"deviceUpdateInterval": {
"label": "Device Metrics",
"description": "Device metrics update interval (seconds)"
},
"environmentUpdateInterval": {
"label": "Environment metrics update interval (seconds)",
"description": ""
},
"environmentMeasurementEnabled": {
"label": "Module Enabled",
"description": "Enable the Environment Telemetry"
},
"environmentScreenEnabled": {
"label": "Displayed on Screen",
"description": "Show the Telemetry Module on the OLED"
},
"environmentDisplayFahrenheit": {
"label": "Display Fahrenheit",
"description": "Display temp in Fahrenheit"
},
"airQualityEnabled": {
"label": "Air Quality Enabled",
"description": "Enable the Air Quality Telemetry"
},
"airQualityInterval": {
"label": "Air Quality Update Interval",
"description": "How often to send Air Quality data over the mesh"
},
"powerMeasurementEnabled": {
"label": "Power Measurement Enabled",
"description": "Enable the Power Measurement Telemetry"
},
"powerUpdateInterval": {
"label": "Power Update Interval",
"description": "How often to send Power data over the mesh"
},
"powerScreenEnabled": {
"label": "Power Screen Enabled",
"description": "Enable the Power Telemetry Screen"
}
}
"page": {
"tabAmbientLighting": "Ambient Lighting",
"tabAudio": "Audio",
"tabCannedMessage": "Canned",
"tabDetectionSensor": "Detection Sensor",
"tabExternalNotification": "Ext Notif",
"tabMqtt": "MQTT",
"tabNeighborInfo": "Neighbor Info",
"tabPaxcounter": "Paxcounter",
"tabRangeTest": "Range Test",
"tabSerial": "Serial",
"tabStoreAndForward": "S&F",
"tabTelemetry": "Telemetry"
},
"ambientLighting": {
"title": "Ambient Lighting Settings",
"description": "Settings for the Ambient Lighting module",
"ledState": {
"label": "LED State",
"description": "Sets LED to on or off"
},
"current": {
"label": "Intensidad",
"description": "Sets the current for the LED output. Default is 10"
},
"red": {
"label": "Red",
"description": "Sets the red LED level. Values are 0-255"
},
"green": {
"label": "Green",
"description": "Sets the green LED level. Values are 0-255"
},
"blue": {
"label": "Blue",
"description": "Sets the blue LED level. Values are 0-255"
}
},
"audio": {
"title": "Audio Settings",
"description": "Settings for the Audio module",
"codec2Enabled": {
"label": "Codec 2 Enabled",
"description": "Enable Codec 2 audio encoding"
},
"pttPin": {
"label": "PTT Pin",
"description": "GPIO pin to use for PTT"
},
"bitrate": {
"label": "Bitrate",
"description": "Bitrate to use for audio encoding"
},
"i2sWs": {
"label": "i2S WS",
"description": "GPIO pin to use for i2S WS"
},
"i2sSd": {
"label": "i2S SD",
"description": "GPIO pin to use for i2S SD"
},
"i2sDin": {
"label": "i2S DIN",
"description": "GPIO pin to use for i2S DIN"
},
"i2sSck": {
"label": "i2S SCK",
"description": "GPIO pin to use for i2S SCK"
}
},
"cannedMessage": {
"title": "Canned Message Settings",
"description": "Settings for the Canned Message module",
"moduleEnabled": {
"label": "Module Enabled",
"description": "Enable Canned Message"
},
"rotary1Enabled": {
"label": "Rotary Encoder #1 Enabled",
"description": "Enable the rotary encoder"
},
"inputbrokerPinA": {
"label": "Encoder Pin A",
"description": "GPIO Pin Value (1-39) For encoder port A"
},
"inputbrokerPinB": {
"label": "Encoder Pin B",
"description": "GPIO Pin Value (1-39) For encoder port B"
},
"inputbrokerPinPress": {
"label": "Encoder Pin Press",
"description": "GPIO Pin Value (1-39) For encoder Press"
},
"inputbrokerEventCw": {
"label": "Clockwise event",
"description": "Select input event."
},
"inputbrokerEventCcw": {
"label": "Counter Clockwise event",
"description": "Select input event."
},
"inputbrokerEventPress": {
"label": "Press event",
"description": "Select input event"
},
"updown1Enabled": {
"label": "Up Down enabled",
"description": "Enable the up / down encoder"
},
"allowInputSource": {
"label": "Allow Input Source",
"description": "Select from: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
},
"sendBell": {
"label": "Send Bell",
"description": "Sends a bell character with each message"
}
},
"detectionSensor": {
"title": "Detection Sensor Settings",
"description": "Settings for the Detection Sensor module",
"enabled": {
"label": "Enabled",
"description": "Enable or disable Detection Sensor Module"
},
"minimumBroadcastSecs": {
"label": "Minimum Broadcast Seconds",
"description": "The interval in seconds of how often we can send a message to the mesh when a state change is detected"
},
"stateBroadcastSecs": {
"label": "State Broadcast Seconds",
"description": "The interval in seconds of how often we should send a message to the mesh with the current state regardless of changes"
},
"sendBell": {
"label": "Send Bell",
"description": "Send ASCII bell with alert message"
},
"name": {
"label": "Friendly Name",
"description": "Used to format the message sent to mesh, max 20 Characters"
},
"monitorPin": {
"label": "Monitor Pin",
"description": "The GPIO pin to monitor for state changes"
},
"detectionTriggerType": {
"label": "Detection Triggered Type",
"description": "The type of trigger event to be used"
},
"usePullup": {
"label": "Use Pullup",
"description": "Whether or not use INPUT_PULLUP mode for GPIO pin"
}
},
"externalNotification": {
"title": "External Notification Settings",
"description": "Configure the external notification module",
"enabled": {
"label": "Module Enabled",
"description": "Enable External Notification"
},
"outputMs": {
"label": "Output MS",
"description": "Output MS"
},
"output": {
"label": "Output",
"description": "Output"
},
"outputVibra": {
"label": "Output Vibrate",
"description": "Output Vibrate"
},
"outputBuzzer": {
"label": "Output Buzzer",
"description": "Output Buzzer"
},
"active": {
"label": "Active",
"description": "Active"
},
"alertMessage": {
"label": "Alert Message",
"description": "Alert Message"
},
"alertMessageVibra": {
"label": "Alert Message Vibrate",
"description": "Alert Message Vibrate"
},
"alertMessageBuzzer": {
"label": "Alert Message Buzzer",
"description": "Alert Message Buzzer"
},
"alertBell": {
"label": "Alert Bell",
"description": "Should an alert be triggered when receiving an incoming bell?"
},
"alertBellVibra": {
"label": "Alert Bell Vibrate",
"description": "Alert Bell Vibrate"
},
"alertBellBuzzer": {
"label": "Alert Bell Buzzer",
"description": "Alert Bell Buzzer"
},
"usePwm": {
"label": "Use PWM",
"description": "Use PWM"
},
"nagTimeout": {
"label": "Nag Timeout",
"description": "Nag Timeout"
},
"useI2sAsBuzzer": {
"label": "Use I²S Pin as Buzzer",
"description": "Designate I²S Pin as Buzzer Output"
}
},
"mqtt": {
"title": "MQTT Settings",
"description": "Settings for the MQTT module",
"enabled": {
"label": "Enabled",
"description": "Enable or disable MQTT"
},
"address": {
"label": "MQTT Server Address",
"description": "MQTT server address to use for default/custom servers"
},
"username": {
"label": "MQTT Username",
"description": "MQTT username to use for default/custom servers"
},
"password": {
"label": "MQTT Password",
"description": "MQTT password to use for default/custom servers"
},
"encryptionEnabled": {
"label": "Encryption Enabled",
"description": "Enable or disable MQTT encryption. Note: All messages are sent to the MQTT broker unencrypted if this option is not enabled, even when your uplink channels have encryption keys set. This includes position data."
},
"jsonEnabled": {
"label": "JSON Enabled",
"description": "Whether to send/consume JSON packets on MQTT"
},
"tlsEnabled": {
"label": "TLS Enabled",
"description": "Enable or disable TLS"
},
"root": {
"label": "Root topic",
"description": "MQTT root topic to use for default/custom servers"
},
"proxyToClientEnabled": {
"label": "MQTT Client Proxy Enabled",
"description": "Utilizes the network connection to proxy MQTT messages to the client."
},
"mapReportingEnabled": {
"label": "Map Reporting Enabled",
"description": "Your node will periodically send an unencrypted map report packet to the configured MQTT server, this includes id, short and long name, approximate location, hardware model, role, firmware version, LoRa region, modem preset and primary channel name."
},
"mapReportSettings": {
"publishIntervalSecs": {
"label": "Map Report Publish Interval (s)",
"description": "Interval in seconds to publish map reports"
},
"positionPrecision": {
"label": "Approximate Location",
"description": "Position shared will be accurate within this distance",
"options": {
"metric_km23": "Within 23 km",
"metric_km12": "Within 12 km",
"metric_km5_8": "Within 5.8 km",
"metric_km2_9": "Within 2.9 km",
"metric_km1_5": "Within 1.5 km",
"metric_m700": "Within 700 m",
"metric_m350": "Within 350 m",
"metric_m200": "Within 200 m",
"metric_m90": "Within 90 m",
"metric_m50": "Within 50 m",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
}
},
"neighborInfo": {
"title": "Neighbor Info Settings",
"description": "Settings for the Neighbor Info module",
"enabled": {
"label": "Enabled",
"description": "Enable or disable Neighbor Info Module"
},
"updateInterval": {
"label": "Update Interval",
"description": "Interval in seconds of how often we should try to send our Neighbor Info to the mesh"
}
},
"paxcounter": {
"title": "Paxcounter Settings",
"description": "Settings for the Paxcounter module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Paxcounter"
},
"paxcounterUpdateInterval": {
"label": "Update Interval (seconds)",
"description": "How long to wait between sending paxcounter packets"
},
"wifiThreshold": {
"label": "WiFi RSSI Threshold",
"description": "At what WiFi RSSI level should the counter increase. Defaults to -80."
},
"bleThreshold": {
"label": "BLE RSSI Threshold",
"description": "At what BLE RSSI level should the counter increase. Defaults to -80."
}
},
"rangeTest": {
"title": "Range Test Settings",
"description": "Settings for the Range Test module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Range Test"
},
"sender": {
"label": "Message Interval",
"description": "How long to wait between sending test packets"
},
"save": {
"label": "Save CSV to storage",
"description": "ESP32 Only"
}
},
"serial": {
"title": "Serial Settings",
"description": "Settings for the Serial module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Serial output"
},
"echo": {
"label": "Echo",
"description": "Any packets you send will be echoed back to your device"
},
"rxd": {
"label": "Receive Pin",
"description": "Set the GPIO pin to the RXD pin you have set up."
},
"txd": {
"label": "Transmit Pin",
"description": "Set the GPIO pin to the TXD pin you have set up."
},
"baud": {
"label": "Baud Rate",
"description": "The serial baud rate"
},
"timeout": {
"label": "Tiempo agotado",
"description": "Seconds to wait before we consider your packet as 'done'"
},
"mode": {
"label": "Mode",
"description": "Select Mode"
},
"overrideConsoleSerialPort": {
"label": "Override Console Serial Port",
"description": "If you have a serial port connected to the console, this will override it."
}
},
"storeForward": {
"title": "Store & Forward Settings",
"description": "Settings for the Store & Forward module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Store & Forward"
},
"heartbeat": {
"label": "Heartbeat Enabled",
"description": "Enable Store & Forward heartbeat"
},
"records": {
"label": "Number of records",
"description": "Number of records to store"
},
"historyReturnMax": {
"label": "History return max",
"description": "Max number of records to return"
},
"historyReturnWindow": {
"label": "History return window",
"description": "Max number of records to return"
}
},
"telemetry": {
"title": "Telemetry Settings",
"description": "Settings for the Telemetry module",
"deviceUpdateInterval": {
"label": "Device Metrics",
"description": "Device metrics update interval (seconds)"
},
"environmentUpdateInterval": {
"label": "Environment metrics update interval (seconds)",
"description": ""
},
"environmentMeasurementEnabled": {
"label": "Module Enabled",
"description": "Enable the Environment Telemetry"
},
"environmentScreenEnabled": {
"label": "Displayed on Screen",
"description": "Show the Telemetry Module on the OLED"
},
"environmentDisplayFahrenheit": {
"label": "Display Fahrenheit",
"description": "Display temp in Fahrenheit"
},
"airQualityEnabled": {
"label": "Air Quality Enabled",
"description": "Enable the Air Quality Telemetry"
},
"airQualityInterval": {
"label": "Air Quality Update Interval",
"description": "How often to send Air Quality data over the mesh"
},
"powerMeasurementEnabled": {
"label": "Power Measurement Enabled",
"description": "Enable the Power Measurement Telemetry"
},
"powerUpdateInterval": {
"label": "Power Update Interval",
"description": "How often to send Power data over the mesh"
},
"powerScreenEnabled": {
"label": "Power Screen Enabled",
"description": "Enable the Power Telemetry Screen"
}
}
}

View File

@@ -1,63 +1,63 @@
{
"nodeDetail": {
"publicKeyEnabled": {
"label": "Public Key Enabled"
},
"noPublicKey": {
"label": "No Public Key"
},
"directMessage": {
"label": "Direct Message {{shortName}}"
},
"favorite": {
"label": "Favorito",
"tooltip": "Add or remove this node from your favorites"
},
"notFavorite": {
"label": "Not a Favorite"
},
"error": {
"label": "Error",
"text": "An error occurred while fetching node details. Please try again later."
},
"status": {
"heard": "Heard",
"mqtt": "MQTT"
},
"elevation": {
"label": "Elevation"
},
"channelUtil": {
"label": "Channel Util"
},
"airtimeUtil": {
"label": "Airtime Util"
}
},
"nodesTable": {
"headings": {
"longName": "Long Name",
"connection": "Connection",
"lastHeard": "Last Heard",
"encryption": "Encryption",
"model": "Model",
"macAddress": "MAC Address"
},
"connectionStatus": {
"direct": "Directo",
"away": "away",
"unknown": "-",
"viaMqtt": ", via MQTT"
},
"lastHeardStatus": {
"never": "Never"
}
},
"actions": {
"added": "Added",
"removed": "Removed",
"ignoreNode": "Ignore Node",
"unignoreNode": "Unignore Node",
"requestPosition": "Request Position"
}
"nodeDetail": {
"publicKeyEnabled": {
"label": "Public Key Enabled"
},
"noPublicKey": {
"label": "No Public Key"
},
"directMessage": {
"label": "Direct Message {{shortName}}"
},
"favorite": {
"label": "Favorito",
"tooltip": "Add or remove this node from your favorites"
},
"notFavorite": {
"label": "Not a Favorite"
},
"error": {
"label": "Error",
"text": "An error occurred while fetching node details. Please try again later."
},
"status": {
"heard": "Heard",
"mqtt": "MQTT"
},
"elevation": {
"label": "Elevation"
},
"channelUtil": {
"label": "Channel Util"
},
"airtimeUtil": {
"label": "Airtime Util"
}
},
"nodesTable": {
"headings": {
"longName": "Long Name",
"connection": "Connection",
"lastHeard": "Last Heard",
"encryption": "Encryption",
"model": "Model",
"macAddress": "MAC Address"
},
"connectionStatus": {
"direct": "Directo",
"away": "away",
"unknown": "-",
"viaMqtt": ", via MQTT"
},
"lastHeardStatus": {
"never": "Never"
}
},
"actions": {
"added": "Added",
"removed": "Removed",
"ignoreNode": "Ignore Node",
"unignoreNode": "Unignore Node",
"requestPosition": "Request Position"
}
}

View File

@@ -1,228 +1,228 @@
{
"navigation": {
"title": "Navigation",
"messages": "Mensajes",
"map": "Mapa",
"config": "Config",
"radioConfig": "Radio Config",
"moduleConfig": "Module Config",
"channels": "Canales",
"nodes": "Nodes"
},
"app": {
"title": "Meshtastic",
"logo": "Meshtastic Logo"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Open sidebar",
"close": "Close sidebar"
}
},
"deviceInfo": {
"volts": "{{voltage}} volts",
"firmware": {
"title": "Firmware",
"version": "v{{version}}",
"buildDate": "Build date: {{date}}"
},
"deviceName": {
"title": "Device Name",
"changeName": "Change Device Name",
"placeholder": "Enter device name"
},
"editDeviceName": "Edit device name"
}
},
"batteryStatus": {
"charging": "{{level}}% charging",
"pluggedIn": "Plugged in",
"title": "Batería"
},
"search": {
"nodes": "Search nodes...",
"channels": "Search channels...",
"commandPalette": "Search commands..."
},
"toast": {
"positionRequestSent": {
"title": "Position request sent."
},
"requestingPosition": {
"title": "Requesting position, please wait..."
},
"sendingTraceroute": {
"title": "Sending Traceroute, please wait..."
},
"tracerouteSent": {
"title": "Traceroute sent."
},
"savedChannel": {
"title": "Saved Channel: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Chat is using PKI encryption."
},
"pskEncryption": {
"title": "Chat is using PSK encryption."
}
},
"configSaveError": {
"title": "Error Saving Config",
"description": "An error occurred while saving the configuration."
},
"validationError": {
"title": "Config Errors Exist",
"description": "Please fix the configuration errors before saving."
},
"saveSuccess": {
"title": "Saving Config",
"description": "The configuration change {{case}} has been saved."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
}
},
"notifications": {
"copied": {
"label": "Copied!"
},
"copyToClipboard": {
"label": "Copy to clipboard"
},
"hidePassword": {
"label": "Hide password"
},
"showPassword": {
"label": "Mostrar contraseña"
},
"deliveryStatus": {
"delivered": "Delivered",
"failed": "Delivery Failed",
"waiting": "Waiting",
"unknown": "Unknown"
}
},
"general": {
"label": "General"
},
"hardware": {
"label": "Hardware"
},
"metrics": {
"label": "Metrics"
},
"role": {
"label": "Role"
},
"filter": {
"label": "Filtro"
},
"advanced": {
"label": "Advanced"
},
"clearInput": {
"label": "Clear input"
},
"resetFilters": {
"label": "Reset Filters"
},
"nodeName": {
"label": "Node name/number",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Airtime Utilization (%)"
},
"batteryLevel": {
"label": "Battery level (%)",
"labelText": "Battery level (%): {{value}}"
},
"batteryVoltage": {
"label": "Battery voltage (V)",
"title": "Tensión"
},
"channelUtilization": {
"label": "Channel Utilization (%)"
},
"hops": {
"direct": "Directo",
"label": "Number of hops",
"text": "Number of hops: {{value}}"
},
"lastHeard": {
"label": "Última escucha",
"labelText": "Last heard: {{value}}",
"nowLabel": "Now"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Favorites"
},
"hide": {
"label": "Hide"
},
"showOnly": {
"label": "Show Only"
},
"viaMqtt": {
"label": "Connected via MQTT"
},
"hopsUnknown": {
"label": "Unknown number of hops"
},
"showUnheard": {
"label": "Never heard"
},
"language": {
"label": "Idioma",
"changeLanguage": "Change Language"
},
"theme": {
"dark": "Oscuro",
"light": "Claro",
"system": "Automatic",
"changeTheme": "Change Color Scheme"
},
"errorPage": {
"title": "This is a little embarrassing...",
"description1": "We are really sorry but an error occurred in the web client that caused it to crash. <br /> This is not supposed to happen, and we are working hard to fix it.",
"description2": "The best way to prevent this from happening again to you or anyone else is to report the issue to us.",
"reportInstructions": "Please include the following information in your report:",
"reportSteps": {
"step1": "What you were doing when the error occurred",
"step2": "What you expected to happen",
"step3": "What actually happened",
"step4": "Any other relevant information"
},
"reportLink": "You can report the issue to our <0>GitHub</0>",
"dashboardLink": "Return to the <0>dashboard</0>",
"detailsSummary": "Error Details",
"errorMessageLabel": "Error message:",
"stackTraceLabel": "Stack trace:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® is a registered trademark of Meshtastic LLC. | <1>Legal Information</1>",
"commitSha": "Commit SHA: {{sha}}"
}
"navigation": {
"title": "Navigation",
"messages": "Mensajes",
"map": "Mapa",
"config": "Config",
"radioConfig": "Radio Config",
"moduleConfig": "Module Config",
"channels": "Canales",
"nodes": "Nodes"
},
"app": {
"title": "Meshtastic",
"logo": "Meshtastic Logo"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Open sidebar",
"close": "Close sidebar"
}
},
"deviceInfo": {
"volts": "{{voltage}} volts",
"firmware": {
"title": "Firmware",
"version": "v{{version}}",
"buildDate": "Build date: {{date}}"
},
"deviceName": {
"title": "Device Name",
"changeName": "Change Device Name",
"placeholder": "Enter device name"
},
"editDeviceName": "Edit device name"
}
},
"batteryStatus": {
"charging": "{{level}}% charging",
"pluggedIn": "Plugged in",
"title": "Batería"
},
"search": {
"nodes": "Search nodes...",
"channels": "Search channels...",
"commandPalette": "Search commands..."
},
"toast": {
"positionRequestSent": {
"title": "Position request sent."
},
"requestingPosition": {
"title": "Requesting position, please wait..."
},
"sendingTraceroute": {
"title": "Sending Traceroute, please wait..."
},
"tracerouteSent": {
"title": "Traceroute sent."
},
"savedChannel": {
"title": "Saved Channel: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Chat is using PKI encryption."
},
"pskEncryption": {
"title": "Chat is using PSK encryption."
}
},
"configSaveError": {
"title": "Error Saving Config",
"description": "An error occurred while saving the configuration."
},
"validationError": {
"title": "Config Errors Exist",
"description": "Please fix the configuration errors before saving."
},
"saveSuccess": {
"title": "Saving Config",
"description": "The configuration change {{case}} has been saved."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
}
},
"notifications": {
"copied": {
"label": "Copied!"
},
"copyToClipboard": {
"label": "Copy to clipboard"
},
"hidePassword": {
"label": "Hide password"
},
"showPassword": {
"label": "Mostrar contraseña"
},
"deliveryStatus": {
"delivered": "Delivered",
"failed": "Delivery Failed",
"waiting": "Waiting",
"unknown": "Unknown"
}
},
"general": {
"label": "General"
},
"hardware": {
"label": "Hardware"
},
"metrics": {
"label": "Metrics"
},
"role": {
"label": "Role"
},
"filter": {
"label": "Filtro"
},
"advanced": {
"label": "Advanced"
},
"clearInput": {
"label": "Clear input"
},
"resetFilters": {
"label": "Reset Filters"
},
"nodeName": {
"label": "Node name/number",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Airtime Utilization (%)"
},
"batteryLevel": {
"label": "Battery level (%)",
"labelText": "Battery level (%): {{value}}"
},
"batteryVoltage": {
"label": "Battery voltage (V)",
"title": "Tensión"
},
"channelUtilization": {
"label": "Channel Utilization (%)"
},
"hops": {
"direct": "Directo",
"label": "Number of hops",
"text": "Number of hops: {{value}}"
},
"lastHeard": {
"label": "Última escucha",
"labelText": "Last heard: {{value}}",
"nowLabel": "Now"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Favorites"
},
"hide": {
"label": "Hide"
},
"showOnly": {
"label": "Show Only"
},
"viaMqtt": {
"label": "Connected via MQTT"
},
"hopsUnknown": {
"label": "Unknown number of hops"
},
"showUnheard": {
"label": "Never heard"
},
"language": {
"label": "Idioma",
"changeLanguage": "Change Language"
},
"theme": {
"dark": "Oscuro",
"light": "Claro",
"system": "Automatic",
"changeTheme": "Change Color Scheme"
},
"errorPage": {
"title": "This is a little embarrassing...",
"description1": "We are really sorry but an error occurred in the web client that caused it to crash. <br /> This is not supposed to happen, and we are working hard to fix it.",
"description2": "The best way to prevent this from happening again to you or anyone else is to report the issue to us.",
"reportInstructions": "Please include the following information in your report:",
"reportSteps": {
"step1": "What you were doing when the error occurred",
"step2": "What you expected to happen",
"step3": "What actually happened",
"step4": "Any other relevant information"
},
"reportLink": "You can report the issue to our <0>GitHub</0>",
"dashboardLink": "Return to the <0>dashboard</0>",
"detailsSummary": "Error Details",
"errorMessageLabel": "Error message:",
"stackTraceLabel": "Stack trace:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® is a registered trademark of Meshtastic LLC. | <1>Legal Information</1>",
"commitSha": "Commit SHA: {{sha}}"
}
}

View File

@@ -1,69 +1,69 @@
{
"page": {
"sectionLabel": "Kanavat",
"channelName": "Kanava: {{channelName}}",
"broadcastLabel": "Ensisijainen",
"channelIndex": "Ch {{index}}"
},
"validation": {
"pskInvalid": "Syötä kelvollinen {{bits}} bittinen PSK."
},
"settings": {
"label": "Kanava-asetukset",
"description": "Crypto, MQTT ja muut asetukset"
},
"role": {
"label": "Rooli",
"description": "Laitteen telemetriatiedot lähetetään ENSISIJAISEN kanavan kautta. Vain yksi ENSISIJAINEN kanava sallitaan",
"options": {
"primary": "ENSISIJAISEN",
"disabled": "POIS KÄYTÖSTÄ",
"secondary": "TOISIJAINEN"
}
},
"psk": {
"label": "Esijaettu avain",
"description": "Tuetut PSK-pituudet: 256-bit, 128-bit, 8-bit, tyhjät (0-bit)",
"generate": "Luo"
},
"name": {
"label": "Nimi",
"description": "Kanavan yksilöllinen nimi (alle 12 merkkiä), jätä tyhjäksi käyttääksesi oletusta"
},
"uplinkEnabled": {
"label": "Lähetys käytössä",
"description": "Lähetä viestejä paikallisesta verkosta MQTT-verkkoon"
},
"downlinkEnabled": {
"label": "Vastaanotto käytössä",
"description": "Lähetä viestejä MQTT:stä paikalliseen verkkoon"
},
"positionPrecision": {
"label": "Sijainti",
"description": "Kanavalle jaettavan sijainnin tarkkuus. Voi poistaa käytöstä.",
"options": {
"none": "Älä jaa sijaintia",
"precise": "Tarkka Sijainti",
"metric_km23": "23 kilometrin säteellä",
"metric_km12": "12 kilometrin säteellä",
"metric_km5_8": "5,8 kilometrin säteellä",
"metric_km2_9": "2,9 kilometrin säteellä",
"metric_km1_5": "1,5 kilometrin säteellä",
"metric_m700": "700 metrin säteellä",
"metric_m350": "350 metrin säteellä",
"metric_m200": "200 metrin säteellä",
"metric_m90": "90 metrin säteellä",
"metric_m50": "50 metrin säteellä",
"imperial_mi15": "15 mailin säteellä",
"imperial_mi7_3": "7,3 mailin säteellä",
"imperial_mi3_6": "3,6 mailin säteellä",
"imperial_mi1_8": "1,8 mailin säteellä",
"imperial_mi0_9": "0,9 mailin säteellä",
"imperial_mi0_5": "0,5 mailin säteellä",
"imperial_mi0_2": "0,2 mailin säteellä",
"imperial_ft600": "600 jalan säteellä",
"imperial_ft300": "300 jalan säteellä",
"imperial_ft150": "150 jalan säteellä"
}
}
"page": {
"sectionLabel": "Kanavat",
"channelName": "Kanava: {{channelName}}",
"broadcastLabel": "Ensisijainen",
"channelIndex": "Ch {{index}}"
},
"validation": {
"pskInvalid": "Syötä kelvollinen {{bits}} bittinen PSK."
},
"settings": {
"label": "Kanava-asetukset",
"description": "Crypto, MQTT ja muut asetukset"
},
"role": {
"label": "Rooli",
"description": "Laitteen telemetriatiedot lähetetään ENSISIJAISEN kanavan kautta. Vain yksi ENSISIJAINEN kanava sallitaan",
"options": {
"primary": "ENSISIJAISEN",
"disabled": "POIS KÄYTÖSTÄ",
"secondary": "TOISIJAINEN"
}
},
"psk": {
"label": "Esijaettu avain",
"description": "Tuetut PSK-pituudet: 256-bit, 128-bit, 8-bit, tyhjät (0-bit)",
"generate": "Luo"
},
"name": {
"label": "Nimi",
"description": "Kanavan yksilöllinen nimi (alle 12 merkkiä), jätä tyhjäksi käyttääksesi oletusta"
},
"uplinkEnabled": {
"label": "Lähetys käytössä",
"description": "Lähetä viestejä paikallisesta verkosta MQTT-verkkoon"
},
"downlinkEnabled": {
"label": "Vastaanotto käytössä",
"description": "Lähetä viestejä MQTT:stä paikalliseen verkkoon"
},
"positionPrecision": {
"label": "Sijainti",
"description": "Kanavalle jaettavan sijainnin tarkkuus. Voi poistaa käytöstä.",
"options": {
"none": "Älä jaa sijaintia",
"precise": "Tarkka Sijainti",
"metric_km23": "23 kilometrin säteellä",
"metric_km12": "12 kilometrin säteellä",
"metric_km5_8": "5,8 kilometrin säteellä",
"metric_km2_9": "2,9 kilometrin säteellä",
"metric_km1_5": "1,5 kilometrin säteellä",
"metric_m700": "700 metrin säteellä",
"metric_m350": "350 metrin säteellä",
"metric_m200": "200 metrin säteellä",
"metric_m90": "90 metrin säteellä",
"metric_m50": "50 metrin säteellä",
"imperial_mi15": "15 mailin säteellä",
"imperial_mi7_3": "7,3 mailin säteellä",
"imperial_mi3_6": "3,6 mailin säteellä",
"imperial_mi1_8": "1,8 mailin säteellä",
"imperial_mi0_9": "0,9 mailin säteellä",
"imperial_mi0_5": "0,5 mailin säteellä",
"imperial_mi0_2": "0,2 mailin säteellä",
"imperial_ft600": "600 jalan säteellä",
"imperial_ft300": "300 jalan säteellä",
"imperial_ft150": "150 jalan säteellä"
}
}
}

View File

@@ -1,50 +1,50 @@
{
"emptyState": "Tuloksia ei löytynyt.",
"page": {
"title": "Komentovalikko"
},
"pinGroup": {
"label": "Kiinnitä komentoryhmä"
},
"unpinGroup": {
"label": "Irroita komentoryhmä"
},
"goto": {
"label": "Siirry",
"command": {
"messages": "Viestit",
"map": "Kartta",
"config": "Asetukset",
"channels": "Kanavat",
"nodes": "Laitteet"
}
},
"manage": {
"label": "Hallinnoi",
"command": {
"switchNode": "Vaihda laitetta",
"connectNewNode": "Yhdistä uusi laite"
}
},
"contextual": {
"label": "Kontekstin mukainen",
"command": {
"qrCode": "QR-koodi",
"qrGenerator": "QR-koodigeneraattori",
"qrImport": "Tuo",
"scheduleShutdown": "Ajasta sammutus",
"scheduleReboot": "Ajasta uudelleenkäynnistys",
"rebootToOtaMode": "Uudelleenkäynnistä OTA-tilaan",
"resetNodeDb": "Nollaa laitteen DB-tietokanta",
"factoryResetDevice": "Palauta tehdasasetukset",
"factoryResetConfig": "Tehdasasetusten palautusasetukset"
}
},
"debug": {
"label": "Vianetsintä",
"command": {
"reconfigure": "Määritä uudelleen",
"clearAllStoredMessages": "Tyhjennä kaikki tallennetut viesti"
}
}
"emptyState": "Tuloksia ei löytynyt.",
"page": {
"title": "Komentovalikko"
},
"pinGroup": {
"label": "Kiinnitä komentoryhmä"
},
"unpinGroup": {
"label": "Irroita komentoryhmä"
},
"goto": {
"label": "Siirry",
"command": {
"messages": "Viestit",
"map": "Kartta",
"config": "Asetukset",
"channels": "Kanavat",
"nodes": "Laitteet"
}
},
"manage": {
"label": "Hallinnoi",
"command": {
"switchNode": "Vaihda laitetta",
"connectNewNode": "Yhdistä uusi laite"
}
},
"contextual": {
"label": "Kontekstin mukainen",
"command": {
"qrCode": "QR-koodi",
"qrGenerator": "QR-koodigeneraattori",
"qrImport": "Tuo",
"scheduleShutdown": "Ajasta sammutus",
"scheduleReboot": "Ajasta uudelleenkäynnistys",
"rebootToOtaMode": "Uudelleenkäynnistä OTA-tilaan",
"resetNodeDb": "Nollaa laitteen DB-tietokanta",
"factoryResetDevice": "Palauta tehdasasetukset",
"factoryResetConfig": "Tehdasasetusten palautusasetukset"
}
},
"debug": {
"label": "Vianetsintä",
"command": {
"reconfigure": "Määritä uudelleen",
"clearAllStoredMessages": "Tyhjennä kaikki tallennetut viesti"
}
}
}

View File

@@ -1,141 +1,141 @@
{
"button": {
"apply": "Hyväksy",
"backupKey": "Varmuuskopioi avain",
"cancel": "Peruuta",
"clearMessages": "Tyhjennä viestit",
"close": "Sulje",
"confirm": "Vahvista",
"delete": "Poista",
"dismiss": "Hylkää",
"download": "Lataa",
"export": "Vie",
"generate": "Luo",
"regenerate": "Luo uudelleen",
"import": "Tuo",
"message": "Viesti",
"now": "Nyt",
"ok": "OK",
"print": "Tulosta",
"rebootOtaNow": "Käynnistä uudelleen OTA-tilaan nyt",
"remove": "Poista",
"requestNewKeys": "Pyydä uudet avaimet",
"requestPosition": "Pyydä sijaintia",
"reset": "Palauta",
"save": "Tallenna",
"scanQr": "Skannaa QR-koodi",
"traceRoute": "Reitinselvitys",
"submit": "Lähetä"
},
"app": {
"title": "Meshtastic",
"fullTitle": "Meshtastic Web Client"
},
"loading": "Ladataan...",
"unit": {
"cps": "CPS",
"dbm": "dBm",
"hertz": "Hz",
"hop": {
"one": "Hyppy",
"plural": "Hyppyä"
},
"hopsAway": {
"one": "{{count}} hypyn päässä",
"plural": "{{count}} hypyn päässä",
"unknown": "Hyppyjen määrä tuntematon"
},
"megahertz": "MHz",
"raw": "raakatieto",
"meter": {
"one": "Metri",
"plural": "Metriä",
"suffix": "m"
},
"minute": {
"one": "Minuutti",
"plural": "Minuuttia"
},
"hour": {
"one": "Tunti",
"plural": "Tuntia"
},
"millisecond": {
"one": "Millisekunti",
"plural": "Millisekuntia",
"suffix": "ms"
},
"second": {
"one": "Sekunti",
"plural": "Sekuntia"
},
"day": {
"one": "Päivä",
"plural": "Päivää"
},
"month": {
"one": "Kuukausi",
"plural": "Kuukautta"
},
"year": {
"one": "Vuosi",
"plural": "Vuotta"
},
"snr": "SNR",
"volt": {
"one": "Voltti",
"plural": "Voltit",
"suffix": "V"
},
"record": {
"one": "Tiedot",
"plural": "Tiedot"
}
},
"security": {
"0bit": "Tyhjä",
"8bit": "8-bittiä",
"128bit": "128-bittiä",
"256bit": "256 bittiä"
},
"unknown": {
"longName": "Tuntematon",
"shortName": "UNK",
"notAvailable": "N/A",
"num": "??"
},
"nodeUnknownPrefix": "!",
"unset": "EI ASETETTU",
"fallbackName": "Meshtastic {{last4}}",
"node": "Laite",
"formValidation": {
"unsavedChanges": "Tallentamattomat muutokset",
"tooBig": {
"string": "Teksti on liian pitkä sallittu enimmäispituus on {{maximum}} merkkiä.",
"number": "Arvo on liian suuri sallittu enimmäisarvo on {{maximum}}.",
"bytes": "Liian suuri koko sallittu enimmäismäärä on {{params.maximum}} tavua."
},
"tooSmall": {
"string": "Teksti on liian lyhyt vähimmäispituus on {{minimum}} merkkiä.",
"number": "Arvo on liian pieni pienin sallittu arvo on {{minimum}}."
},
"invalidFormat": {
"ipv4": "Virheellinen muoto odotettu muoto on IPv4-osoite.",
"key": "Virheellinen muoto odotettu muoto on Base64-koodattu jaettu avain (PSK)."
},
"invalidType": {
"number": "Virheellinen tyyppi arvon tulee olla numero."
},
"pskLength": {
"0bit": "Avainkentän on oltava tyhjä.",
"8bit": "Avaimen on oltava 8-bittinen jaettu avain (PSK).",
"128bit": "Avaimen on oltava 128-bittinen jaettu avain (PSK).",
"256bit": "Avaimen on oltava 256-bittinen jaettu avain (PSK)."
},
"required": {
"generic": "Tämä kenttä on pakollinen.",
"managed": "Vähintään yksi hallinta-avain vaaditaan, jos laitetta hallitaan.",
"key": "Avain on pakollinen."
}
}
"button": {
"apply": "Hyväksy",
"backupKey": "Varmuuskopioi avain",
"cancel": "Peruuta",
"clearMessages": "Tyhjennä viestit",
"close": "Sulje",
"confirm": "Vahvista",
"delete": "Poista",
"dismiss": "Hylkää",
"download": "Lataa",
"export": "Vie",
"generate": "Luo",
"regenerate": "Luo uudelleen",
"import": "Tuo",
"message": "Viesti",
"now": "Nyt",
"ok": "OK",
"print": "Tulosta",
"rebootOtaNow": "Käynnistä uudelleen OTA-tilaan nyt",
"remove": "Poista",
"requestNewKeys": "Pyydä uudet avaimet",
"requestPosition": "Pyydä sijaintia",
"reset": "Palauta",
"save": "Tallenna",
"scanQr": "Skannaa QR-koodi",
"traceRoute": "Reitinselvitys",
"submit": "Lähetä"
},
"app": {
"title": "Meshtastic",
"fullTitle": "Meshtastic Web Client"
},
"loading": "Ladataan...",
"unit": {
"cps": "CPS",
"dbm": "dBm",
"hertz": "Hz",
"hop": {
"one": "Hyppy",
"plural": "Hyppyä"
},
"hopsAway": {
"one": "{{count}} hypyn päässä",
"plural": "{{count}} hypyn päässä",
"unknown": "Hyppyjen määrä tuntematon"
},
"megahertz": "MHz",
"raw": "raakatieto",
"meter": {
"one": "Metri",
"plural": "Metriä",
"suffix": "m"
},
"minute": {
"one": "Minuutti",
"plural": "Minuuttia"
},
"hour": {
"one": "Tunti",
"plural": "Tuntia"
},
"millisecond": {
"one": "Millisekunti",
"plural": "Millisekuntia",
"suffix": "ms"
},
"second": {
"one": "Sekunti",
"plural": "Sekuntia"
},
"day": {
"one": "Päivä",
"plural": "Päivää"
},
"month": {
"one": "Kuukausi",
"plural": "Kuukautta"
},
"year": {
"one": "Vuosi",
"plural": "Vuotta"
},
"snr": "SNR",
"volt": {
"one": "Voltti",
"plural": "Voltit",
"suffix": "V"
},
"record": {
"one": "Tiedot",
"plural": "Tiedot"
}
},
"security": {
"0bit": "Tyhjä",
"8bit": "8-bittiä",
"128bit": "128-bittiä",
"256bit": "256 bittiä"
},
"unknown": {
"longName": "Tuntematon",
"shortName": "UNK",
"notAvailable": "N/A",
"num": "??"
},
"nodeUnknownPrefix": "!",
"unset": "EI ASETETTU",
"fallbackName": "Meshtastic {{last4}}",
"node": "Laite",
"formValidation": {
"unsavedChanges": "Tallentamattomat muutokset",
"tooBig": {
"string": "Teksti on liian pitkä sallittu enimmäispituus on {{maximum}} merkkiä.",
"number": "Arvo on liian suuri sallittu enimmäisarvo on {{maximum}}.",
"bytes": "Liian suuri koko sallittu enimmäismäärä on {{params.maximum}} tavua."
},
"tooSmall": {
"string": "Teksti on liian lyhyt vähimmäispituus on {{minimum}} merkkiä.",
"number": "Arvo on liian pieni pienin sallittu arvo on {{minimum}}."
},
"invalidFormat": {
"ipv4": "Virheellinen muoto odotettu muoto on IPv4-osoite.",
"key": "Virheellinen muoto odotettu muoto on Base64-koodattu jaettu avain (PSK)."
},
"invalidType": {
"number": "Virheellinen tyyppi arvon tulee olla numero."
},
"pskLength": {
"0bit": "Avainkentän on oltava tyhjä.",
"8bit": "Avaimen on oltava 8-bittinen jaettu avain (PSK).",
"128bit": "Avaimen on oltava 128-bittinen jaettu avain (PSK).",
"256bit": "Avaimen on oltava 256-bittinen jaettu avain (PSK)."
},
"required": {
"generic": "Tämä kenttä on pakollinen.",
"managed": "Vähintään yksi hallinta-avain vaaditaan, jos laitetta hallitaan.",
"key": "Avain on pakollinen."
}
}
}

View File

@@ -1,12 +1,12 @@
{
"dashboard": {
"title": "Yhdistetyt laitteet",
"description": "Hallitse yhdistettyjä Meshtastic laitteitasi.",
"connectionType_ble": "BLE",
"connectionType_serial": "Sarjaliitäntä",
"connectionType_network": "Verkko",
"noDevicesTitle": "Ei laitteita yhdistettynä",
"noDevicesDescription": "Yhdistä uusi laite aloittaaksesi.",
"button_newConnection": "Uusi yhteys"
}
"dashboard": {
"title": "Yhdistetyt laitteet",
"description": "Hallitse yhdistettyjä Meshtastic laitteitasi.",
"connectionType_ble": "BLE",
"connectionType_serial": "Sarjaliitäntä",
"connectionType_network": "Verkko",
"noDevicesTitle": "Ei laitteita yhdistettynä",
"noDevicesDescription": "Yhdistä uusi laite aloittaaksesi.",
"button_newConnection": "Uusi yhteys"
}
}

View File

@@ -1,428 +1,428 @@
{
"page": {
"title": "Asetukset",
"tabBluetooth": "Bluetooth",
"tabDevice": "Laite",
"tabDisplay": "Näyttö",
"tabLora": "LoRa",
"tabNetwork": "Verkko",
"tabPosition": "Sijainti",
"tabPower": "Virta",
"tabSecurity": "Turvallisuus"
},
"sidebar": {
"label": "Moduulit"
},
"device": {
"title": "Laitteen asetukset",
"description": "Laitteen asetukset",
"buttonPin": {
"description": "Painikkeen pinnin ohitus",
"label": "Painikkeen pinni"
},
"buzzerPin": {
"description": "Summerin pinnin ohitus",
"label": "Summerin pinni"
},
"disableTripleClick": {
"description": "Poista kolmoisklikkaus käytöstä",
"label": "Poista kolmoisklikkaus käytöstä"
},
"doubleTapAsButtonPress": {
"description": "Käsittele kaksoisnapautus painikkeen painalluksena",
"label": "Kaksoisnapautus painikkeen painalluksena"
},
"ledHeartbeatDisabled": {
"description": "Poista ledin vilkkuminen käytöstä",
"label": "Ledin vilkkuminen poistettu käytöstä"
},
"nodeInfoBroadcastInterval": {
"description": "Kuinka usein laitteen tiedot lähetetään verkkoon",
"label": "Laitteen tietojen lähetyksen aikaväli"
},
"posixTimezone": {
"description": "POSIX-aikavyöhykkeen merkkijono laitetta varten",
"label": "POSIX-aikavyöhyke"
},
"rebroadcastMode": {
"description": "Kuinka uudelleenlähetyksiä käsitellään",
"label": "Uudelleenlähetyksen tila"
},
"role": {
"description": "Mikä rooli laitteella on mesh-verkossa",
"label": "Rooli"
}
},
"bluetooth": {
"title": "Bluetooth asetukset",
"description": "Bluetooth moduulin asetukset",
"note": "Huomautus: Jotkin laitteet (ESP32) eivät voi käyttää bluetoothia sekä WiFiä samanaikaisesti.",
"enabled": {
"description": "Ota Bluetooth käyttöön tai poista käytöstä",
"label": "Käytössä"
},
"pairingMode": {
"description": "PIN-koodin valinnan käyttäytyminen.",
"label": "Paritustila"
},
"pin": {
"description": "Bluetooth PIN-koodi, jota käytetään pariliitettäessä",
"label": "PIN"
}
},
"display": {
"description": "Laitteen näytön asetukset",
"title": "Näyttöasetukset",
"headingBold": {
"description": "Lihavoi otsikkoteksti",
"label": "Lihavoitu otsikko"
},
"carouselDelay": {
"description": "Kuinka nopeasti ikkunat kulkevat",
"label": "Karusellin Viive"
},
"compassNorthTop": {
"description": "Kiinnitä pohjoinen kompassin yläreunaan",
"label": "Kompassin pohjoinen ylhäällä"
},
"displayMode": {
"description": "Näytön asettelun vaihtoehdot",
"label": "Näyttötila"
},
"displayUnits": {
"description": "Näytä metriset tai imperiaaliset yksiköt",
"label": "Näyttöyksiköt"
},
"flipScreen": {
"description": "Käännä näyttöä 180 astetta",
"label": "Käännä näyttö"
},
"gpsDisplayUnits": {
"description": "Koordinaattien näyttömuoto",
"label": "GPS näyttöyksiköt"
},
"oledType": {
"description": "Laitteeseen liitetyn OLED-näytön tyyppi",
"label": "OLED-tyyppi"
},
"screenTimeout": {
"description": "Sammuta näyttö tämän ajan jälkeen",
"label": "Näytön aikakatkaisu"
},
"twelveHourClock": {
"description": "Käytä 12 tunnin kelloa",
"label": "12 tunnin kello"
},
"wakeOnTapOrMotion": {
"description": "Herätä laite napauttamalla tai liikkeestä",
"label": "Herätä napauttamalla tai liikkeellä"
}
},
"lora": {
"title": "Mesh-verkon asetukset",
"description": "LoRa-verkon asetukset",
"bandwidth": {
"description": "Kanavan kaistanleveys MHz",
"label": "Kaistanleveys"
},
"boostedRxGain": {
"description": "RX tehostettu vahvistus",
"label": "RX tehostettu vahvistus"
},
"codingRate": {
"description": "Koodausnopeuden nimittäjä",
"label": "Koodausnopeus"
},
"frequencyOffset": {
"description": "Taajuuskorjaus kalibrointivirheiden korjaamiseksi",
"label": "Taajuuspoikkeama"
},
"frequencySlot": {
"description": "LoRa-taajuuden kanavanumero",
"label": "Taajuuspaikka"
},
"hopLimit": {
"description": "Maksimimäärä hyppyjä",
"label": "Hyppyraja"
},
"ignoreMqtt": {
"description": "Älä välitä MQTT-viestejä mesh-verkon yli",
"label": "Ohita MQTT"
},
"modemPreset": {
"description": "Käytössä olevan modeemin esiasetus",
"label": "Modeemin esiasetus"
},
"okToMqtt": {
"description": "Kun asetetaan arvoksi true, tämä asetus tarkoittaa, että käyttäjä hyväksyy paketin lähettämisen MQTT:lle. Jos asetetaan arvoksi false, etälaitteita pyydetään olemaan välittämättä paketteja MQTT:lle",
"label": "MQTT päällä"
},
"overrideDutyCycle": {
"description": "Ohita käyttöaste (Duty Cycle)",
"label": "Ohita käyttöaste (Duty Cycle)"
},
"overrideFrequency": {
"description": "Käytä mukautettua taajuutta",
"label": "Mukautettu taajuus"
},
"region": {
"description": "Asettaa alueen laitteelle",
"label": "Alue"
},
"spreadingFactor": {
"description": "Ilmaisee symbolia kohden lähetettävien taajuuksien määrän",
"label": "Levennyskerroin"
},
"transmitEnabled": {
"description": "LoRa-radion lähetyksen (TX) käyttöönotto tai poiskytkentä",
"label": "Lähetys käytössä"
},
"transmitPower": {
"description": "Suurin lähetysteho",
"label": "Lähetysteho"
},
"usePreset": {
"description": "Käytä ennalta määriteltyä modeemin esiasetusta",
"label": "Käytä esiasetusta"
},
"meshSettings": {
"description": "LoRa-verkon asetukset",
"label": "Mesh-verkon asetukset"
},
"waveformSettings": {
"description": "LoRa-aaltomuodon asetukset",
"label": "Signaalimuodon asetukset"
},
"radioSettings": {
"label": "Radioasetukset",
"description": "LoRa-laitteen asetukset"
}
},
"network": {
"title": "WiFi-asetukset",
"description": "WiFi-radion asetukset",
"note": "Huomautus: Jotkin laitteet (ESP32) eivät voi käyttää sekä Bluetoothia että WiFiä samanaikaisesti.",
"addressMode": {
"description": "Osoitteen määrityksen valinta",
"label": "Osoitetila"
},
"dns": {
"description": "DNS-palvelin",
"label": "DNS"
},
"ethernetEnabled": {
"description": "Ota käyttöön tai poista käytöstä ethernet-portti",
"label": "Käytössä"
},
"gateway": {
"description": "Oletusyhdyskäytävä",
"label": "Yhdyskäytävä"
},
"ip": {
"description": "IP-osoite",
"label": "IP"
},
"psk": {
"description": "Verkon salasana",
"label": "PSK"
},
"ssid": {
"description": "Verkon nimi",
"label": "SSID"
},
"subnet": {
"description": "Aliverkon peite",
"label": "Aliverkko"
},
"wifiEnabled": {
"description": "Ota WiFi käyttöön tai poista se käytöstä",
"label": "Käytössä"
},
"meshViaUdp": {
"label": "Mesh UDP:n kautta"
},
"ntpServer": {
"label": "NTP-palvelin"
},
"rsyslogServer": {
"label": "Rsyslog-palvelin"
},
"ethernetConfigSettings": {
"description": "Ethernet-portin asetukset",
"label": "Ethernet-asetukset"
},
"ipConfigSettings": {
"description": "IP-osoitteen asetukset",
"label": "IP-osoitteen asetukset"
},
"ntpConfigSettings": {
"description": "NTP-asetukset",
"label": "NTP-asetukset"
},
"rsyslogConfigSettings": {
"description": "Rsyslog määritykset",
"label": "Rsyslog määritykset"
},
"udpConfigSettings": {
"description": "UDP-yhdeyden asetukset",
"label": "UDP-asetukset"
}
},
"position": {
"title": "Sijainnin asetukset",
"description": "Sijaintimoduulin asetukset",
"broadcastInterval": {
"description": "Kuinka usein sijainti lähetetään mesh-verkon yli",
"label": "Lähetyksen aikaväli"
},
"enablePin": {
"description": "GPS-moduulin käyttöönottopinnin korvaus",
"label": "Ota pinni käytöön"
},
"fixedPosition": {
"description": "Älä raportoi GPS-sijaintia, vaan käytä manuaalisesti määritettyä sijaintia",
"label": "Kiinteä sijainti"
},
"gpsMode": {
"description": "Määritä, onko laitteen GPS käytössä, pois päältä vai puuttuuko se kokonaan",
"label": "GSP-tila"
},
"gpsUpdateInterval": {
"description": "Kuinka usein GPS-paikannus suoritetaan",
"label": "GPS-päivitysväli"
},
"positionFlags": {
"description": "Valinnaiset kentät, jotka voidaan sisällyttää sijaintiviesteihin. Mitä enemmän kenttiä valitaan, sitä suurempi viesti on, mikä johtaa pidempään lähetysaikaan ja suurempaan pakettihäviöriskiin.",
"label": "Sijaintimerkinnät"
},
"receivePin": {
"description": "GPS-moduulin käyttöönottopinnin korvaus",
"label": "Vastaanoton pinni"
},
"smartPositionEnabled": {
"description": "Lähetä sijainti vain, kun sijainnissa on tapahtunut merkittävä muutos",
"label": "Ota älykäs sijainti käyttöön"
},
"smartPositionMinDistance": {
"description": "Vähimmäisetäisyys (metreinä), joka on kuljettava ennen sijaintipäivityksen lähettämistä",
"label": "Älykkään sijainnin minimietäisyys"
},
"smartPositionMinInterval": {
"description": "Lyhin aikaväli (sekunteina), joka on kuluttava ennen sijaintipäivityksen lähettämistä",
"label": "Älykkään sijainnin vähimmäisetäisyys"
},
"transmitPin": {
"description": "GPS-moduulin käyttöönottopinnin korvaus",
"label": "Lähetyksen pinni"
},
"intervalsSettings": {
"description": "Kuinka usein sijaintipäivitykset lähetetään",
"label": "Aikaväli"
},
"flags": {
"placeholder": "Valitse sijaintiasetukset...",
"altitude": "Korkeus",
"altitudeGeoidalSeparation": "Korkeuden geoidinen erotus",
"altitudeMsl": "Korkeus on mitattu merenpinnan tasosta",
"dop": "Tarkkuuden heikkenemä (DOP), oletuksena käytetään PDOP-arvoa",
"hdopVdop": "Jos DOP on asetettu, käytä HDOP- ja VDOP-arvoja PDOP:n sijaan",
"numSatellites": "Satelliittien määrä",
"sequenceNumber": "Sekvenssinumero",
"timestamp": "Aikaleima",
"unset": "Ei yhdistetty",
"vehicleHeading": "Ajoneuvon suunta",
"vehicleSpeed": "Ajoneuvon nopeus"
}
},
"power": {
"adcMultiplierOverride": {
"description": "Käytetään akun jännitteen lukeman säätämiseen",
"label": "Korvaava AD-muuntimen kerroin"
},
"ina219Address": {
"description": "Akkunäytön INA219 osoite",
"label": "INA219 Osoite"
},
"lightSleepDuration": {
"description": "Kuinka kauan laite on kevyessä lepotilassa",
"label": "Kevyen lepotilan kesto"
},
"minimumWakeTime": {
"description": "Vähimmäisaika, jonka laite pysyy hereillä paketin vastaanoton jälkeen",
"label": "Minimi heräämisaika"
},
"noConnectionBluetoothDisabled": {
"description": "Jos laite ei saa Bluetooth-yhteyttä, BLE-radio poistetaan käytöstä tämän ajan kuluttua",
"label": "Ei yhteyttä. Bluetooth on pois käytöstä"
},
"powerSavingEnabled": {
"description": "Valitse, jos laite saa virtaa matalavirtalähteestä (esim. aurinkopaneeli), jolloin virrankulutusta minimoidaan mahdollisimman paljon.",
"label": "Ota virransäästötila käyttöön"
},
"shutdownOnBatteryDelay": {
"description": "Sammuta laite automaattisesti tämän ajan kuluttua akkukäytöllä, 0 tarkoittaa toistaiseksi päällä",
"label": "Viive laitteen sammuttamisessa akkukäytöllä"
},
"superDeepSleepDuration": {
"description": "Kuinka pitkään laite on supersyvässä lepotilassa",
"label": "Supersyvän lepotilan kesto"
},
"powerConfigSettings": {
"description": "Virtamoduulin asetukset",
"label": "Virran asetukset"
},
"sleepSettings": {
"description": "Virtamoduulin lepotila-asetukset",
"label": "Lepotilan asetukset"
}
},
"security": {
"description": "Turvallisuuskokoonpanon asetukset",
"title": "Turvallisuusasetukset",
"button_backupKey": "Varmuuskopioi avain",
"adminChannelEnabled": {
"description": "Salli saapuva laitteen ohjaus suojaamattoman vanhan admin-kanavan kautta",
"label": "Salli vanha admin ylläpitäjä"
},
"enableDebugLogApi": {
"description": "Lähetä reaaliaikainen debug-loki sarjaportin kautta, katso ja vie laitteen lokitiedostot, joista sijaintitiedot on poistettu, Bluetoothin kautta",
"label": "Ota käyttöön virheenkorjauslokin API-rajapinta"
},
"managed": {
"description": "Jos tämä on käytössä, laitteen asetuksia voi muuttaa vain etäadmin-laitteen hallintaviestien kautta. Älä ota tätä käyttöön, ellei vähintään yhtä sopivaa etäadmin-laitetta ole määritetty ja julkinen avain ei ole tallennettu johonkin yllä olevista kentistä.",
"label": "Hallinnoitu"
},
"privateKey": {
"description": "Käytetään jaetun avaimen luomiseen etälaitteen kanssa",
"label": "Yksityinen avain"
},
"publicKey": {
"description": "Lähetetään muille mesh-verkon laitteille, jotta ne voivat laskea jaetun salaisen avaimen",
"label": "Julkinen avain"
},
"primaryAdminKey": {
"description": "Ensisijainen julkinen avain, jolla on oikeus lähettää hallintaviestejä tälle laitteelle",
"label": "Ensisijainen järjestelmänvalvojan avain"
},
"secondaryAdminKey": {
"description": "Toissijainen julkinen avain, jolla on oikeus lähettää hallintaviestejä tälle laitteelle",
"label": "Toissijainen järjestelmänvalvojan avain"
},
"serialOutputEnabled": {
"description": "Sarjakonsoli Stream API:n yli",
"label": "Sarjaulostulo Käytössä"
},
"tertiaryAdminKey": {
"description": "Kolmas julkinen avain, jolla on oikeus lähettää hallintaviestejä tälle laitteelle",
"label": "Kolmas järjestelmänvalvojan hallinta-avain"
},
"adminSettings": {
"description": "Järjestelmänvalvojan asetukset",
"label": "Ylläpitäjän asetukset"
},
"loggingSettings": {
"description": "Kirjautumisen asetukset",
"label": "Kirjautumisen asetukset"
}
}
"page": {
"title": "Asetukset",
"tabBluetooth": "Bluetooth",
"tabDevice": "Laite",
"tabDisplay": "Näyttö",
"tabLora": "LoRa",
"tabNetwork": "Verkko",
"tabPosition": "Sijainti",
"tabPower": "Virta",
"tabSecurity": "Turvallisuus"
},
"sidebar": {
"label": "Moduulit"
},
"device": {
"title": "Laitteen asetukset",
"description": "Laitteen asetukset",
"buttonPin": {
"description": "Painikkeen pinnin ohitus",
"label": "Painikkeen pinni"
},
"buzzerPin": {
"description": "Summerin pinnin ohitus",
"label": "Summerin pinni"
},
"disableTripleClick": {
"description": "Poista kolmoisklikkaus käytöstä",
"label": "Poista kolmoisklikkaus käytöstä"
},
"doubleTapAsButtonPress": {
"description": "Käsittele kaksoisnapautus painikkeen painalluksena",
"label": "Kaksoisnapautus painikkeen painalluksena"
},
"ledHeartbeatDisabled": {
"description": "Poista ledin vilkkuminen käytöstä",
"label": "Ledin vilkkuminen poistettu käytöstä"
},
"nodeInfoBroadcastInterval": {
"description": "Kuinka usein laitteen tiedot lähetetään verkkoon",
"label": "Laitteen tietojen lähetyksen aikaväli"
},
"posixTimezone": {
"description": "POSIX-aikavyöhykkeen merkkijono laitetta varten",
"label": "POSIX-aikavyöhyke"
},
"rebroadcastMode": {
"description": "Kuinka uudelleenlähetyksiä käsitellään",
"label": "Uudelleenlähetyksen tila"
},
"role": {
"description": "Mikä rooli laitteella on mesh-verkossa",
"label": "Rooli"
}
},
"bluetooth": {
"title": "Bluetooth asetukset",
"description": "Bluetooth moduulin asetukset",
"note": "Huomautus: Jotkin laitteet (ESP32) eivät voi käyttää bluetoothia sekä WiFiä samanaikaisesti.",
"enabled": {
"description": "Ota Bluetooth käyttöön tai poista käytöstä",
"label": "Käytössä"
},
"pairingMode": {
"description": "PIN-koodin valinnan käyttäytyminen.",
"label": "Paritustila"
},
"pin": {
"description": "Bluetooth PIN-koodi, jota käytetään pariliitettäessä",
"label": "PIN"
}
},
"display": {
"description": "Laitteen näytön asetukset",
"title": "Näyttöasetukset",
"headingBold": {
"description": "Lihavoi otsikkoteksti",
"label": "Lihavoitu otsikko"
},
"carouselDelay": {
"description": "Kuinka nopeasti ikkunat kulkevat",
"label": "Karusellin Viive"
},
"compassNorthTop": {
"description": "Kiinnitä pohjoinen kompassin yläreunaan",
"label": "Kompassin pohjoinen ylhäällä"
},
"displayMode": {
"description": "Näytön asettelun vaihtoehdot",
"label": "Näyttötila"
},
"displayUnits": {
"description": "Näytä metriset tai imperiaaliset yksiköt",
"label": "Näyttöyksiköt"
},
"flipScreen": {
"description": "Käännä näyttöä 180 astetta",
"label": "Käännä näyttö"
},
"gpsDisplayUnits": {
"description": "Koordinaattien näyttömuoto",
"label": "GPS näyttöyksiköt"
},
"oledType": {
"description": "Laitteeseen liitetyn OLED-näytön tyyppi",
"label": "OLED-tyyppi"
},
"screenTimeout": {
"description": "Sammuta näyttö tämän ajan jälkeen",
"label": "Näytön aikakatkaisu"
},
"twelveHourClock": {
"description": "Käytä 12 tunnin kelloa",
"label": "12 tunnin kello"
},
"wakeOnTapOrMotion": {
"description": "Herätä laite napauttamalla tai liikkeestä",
"label": "Herätä napauttamalla tai liikkeellä"
}
},
"lora": {
"title": "Mesh-verkon asetukset",
"description": "LoRa-verkon asetukset",
"bandwidth": {
"description": "Kanavan kaistanleveys MHz",
"label": "Kaistanleveys"
},
"boostedRxGain": {
"description": "RX tehostettu vahvistus",
"label": "RX tehostettu vahvistus"
},
"codingRate": {
"description": "Koodausnopeuden nimittäjä",
"label": "Koodausnopeus"
},
"frequencyOffset": {
"description": "Taajuuskorjaus kalibrointivirheiden korjaamiseksi",
"label": "Taajuuspoikkeama"
},
"frequencySlot": {
"description": "LoRa-taajuuden kanavanumero",
"label": "Taajuuspaikka"
},
"hopLimit": {
"description": "Maksimimäärä hyppyjä",
"label": "Hyppyraja"
},
"ignoreMqtt": {
"description": "Älä välitä MQTT-viestejä mesh-verkon yli",
"label": "Ohita MQTT"
},
"modemPreset": {
"description": "Käytössä olevan modeemin esiasetus",
"label": "Modeemin esiasetus"
},
"okToMqtt": {
"description": "Kun asetetaan arvoksi true, tämä asetus tarkoittaa, että käyttäjä hyväksyy paketin lähettämisen MQTT:lle. Jos asetetaan arvoksi false, etälaitteita pyydetään olemaan välittämättä paketteja MQTT:lle",
"label": "MQTT päällä"
},
"overrideDutyCycle": {
"description": "Ohita käyttöaste (Duty Cycle)",
"label": "Ohita käyttöaste (Duty Cycle)"
},
"overrideFrequency": {
"description": "Käytä mukautettua taajuutta",
"label": "Mukautettu taajuus"
},
"region": {
"description": "Asettaa alueen laitteelle",
"label": "Alue"
},
"spreadingFactor": {
"description": "Ilmaisee symbolia kohden lähetettävien taajuuksien määrän",
"label": "Levennyskerroin"
},
"transmitEnabled": {
"description": "LoRa-radion lähetyksen (TX) käyttöönotto tai poiskytkentä",
"label": "Lähetys käytössä"
},
"transmitPower": {
"description": "Suurin lähetysteho",
"label": "Lähetysteho"
},
"usePreset": {
"description": "Käytä ennalta määriteltyä modeemin esiasetusta",
"label": "Käytä esiasetusta"
},
"meshSettings": {
"description": "LoRa-verkon asetukset",
"label": "Mesh-verkon asetukset"
},
"waveformSettings": {
"description": "LoRa-aaltomuodon asetukset",
"label": "Signaalimuodon asetukset"
},
"radioSettings": {
"label": "Radioasetukset",
"description": "LoRa-laitteen asetukset"
}
},
"network": {
"title": "WiFi-asetukset",
"description": "WiFi-radion asetukset",
"note": "Huomautus: Jotkin laitteet (ESP32) eivät voi käyttää sekä Bluetoothia että WiFiä samanaikaisesti.",
"addressMode": {
"description": "Osoitteen määrityksen valinta",
"label": "Osoitetila"
},
"dns": {
"description": "DNS-palvelin",
"label": "DNS"
},
"ethernetEnabled": {
"description": "Ota käyttöön tai poista käytöstä ethernet-portti",
"label": "Käytössä"
},
"gateway": {
"description": "Oletusyhdyskäytävä",
"label": "Yhdyskäytävä"
},
"ip": {
"description": "IP-osoite",
"label": "IP"
},
"psk": {
"description": "Verkon salasana",
"label": "PSK"
},
"ssid": {
"description": "Verkon nimi",
"label": "SSID"
},
"subnet": {
"description": "Aliverkon peite",
"label": "Aliverkko"
},
"wifiEnabled": {
"description": "Ota WiFi käyttöön tai poista se käytöstä",
"label": "Käytössä"
},
"meshViaUdp": {
"label": "Mesh UDP:n kautta"
},
"ntpServer": {
"label": "NTP-palvelin"
},
"rsyslogServer": {
"label": "Rsyslog-palvelin"
},
"ethernetConfigSettings": {
"description": "Ethernet-portin asetukset",
"label": "Ethernet-asetukset"
},
"ipConfigSettings": {
"description": "IP-osoitteen asetukset",
"label": "IP-osoitteen asetukset"
},
"ntpConfigSettings": {
"description": "NTP-asetukset",
"label": "NTP-asetukset"
},
"rsyslogConfigSettings": {
"description": "Rsyslog määritykset",
"label": "Rsyslog määritykset"
},
"udpConfigSettings": {
"description": "UDP-yhdeyden asetukset",
"label": "UDP-asetukset"
}
},
"position": {
"title": "Sijainnin asetukset",
"description": "Sijaintimoduulin asetukset",
"broadcastInterval": {
"description": "Kuinka usein sijainti lähetetään mesh-verkon yli",
"label": "Lähetyksen aikaväli"
},
"enablePin": {
"description": "GPS-moduulin käyttöönottopinnin korvaus",
"label": "Ota pinni käytöön"
},
"fixedPosition": {
"description": "Älä raportoi GPS-sijaintia, vaan käytä manuaalisesti määritettyä sijaintia",
"label": "Kiinteä sijainti"
},
"gpsMode": {
"description": "Määritä, onko laitteen GPS käytössä, pois päältä vai puuttuuko se kokonaan",
"label": "GSP-tila"
},
"gpsUpdateInterval": {
"description": "Kuinka usein GPS-paikannus suoritetaan",
"label": "GPS-päivitysväli"
},
"positionFlags": {
"description": "Valinnaiset kentät, jotka voidaan sisällyttää sijaintiviesteihin. Mitä enemmän kenttiä valitaan, sitä suurempi viesti on, mikä johtaa pidempään lähetysaikaan ja suurempaan pakettihäviöriskiin.",
"label": "Sijaintimerkinnät"
},
"receivePin": {
"description": "GPS-moduulin käyttöönottopinnin korvaus",
"label": "Vastaanoton pinni"
},
"smartPositionEnabled": {
"description": "Lähetä sijainti vain, kun sijainnissa on tapahtunut merkittävä muutos",
"label": "Ota älykäs sijainti käyttöön"
},
"smartPositionMinDistance": {
"description": "Vähimmäisetäisyys (metreinä), joka on kuljettava ennen sijaintipäivityksen lähettämistä",
"label": "Älykkään sijainnin minimietäisyys"
},
"smartPositionMinInterval": {
"description": "Lyhin aikaväli (sekunteina), joka on kuluttava ennen sijaintipäivityksen lähettämistä",
"label": "Älykkään sijainnin vähimmäisetäisyys"
},
"transmitPin": {
"description": "GPS-moduulin käyttöönottopinnin korvaus",
"label": "Lähetyksen pinni"
},
"intervalsSettings": {
"description": "Kuinka usein sijaintipäivitykset lähetetään",
"label": "Aikaväli"
},
"flags": {
"placeholder": "Valitse sijaintiasetukset...",
"altitude": "Korkeus",
"altitudeGeoidalSeparation": "Korkeuden geoidinen erotus",
"altitudeMsl": "Korkeus on mitattu merenpinnan tasosta",
"dop": "Tarkkuuden heikkenemä (DOP), oletuksena käytetään PDOP-arvoa",
"hdopVdop": "Jos DOP on asetettu, käytä HDOP- ja VDOP-arvoja PDOP:n sijaan",
"numSatellites": "Satelliittien määrä",
"sequenceNumber": "Sekvenssinumero",
"timestamp": "Aikaleima",
"unset": "Ei yhdistetty",
"vehicleHeading": "Ajoneuvon suunta",
"vehicleSpeed": "Ajoneuvon nopeus"
}
},
"power": {
"adcMultiplierOverride": {
"description": "Käytetään akun jännitteen lukeman säätämiseen",
"label": "Korvaava AD-muuntimen kerroin"
},
"ina219Address": {
"description": "Akkunäytön INA219 osoite",
"label": "INA219 Osoite"
},
"lightSleepDuration": {
"description": "Kuinka kauan laite on kevyessä lepotilassa",
"label": "Kevyen lepotilan kesto"
},
"minimumWakeTime": {
"description": "Vähimmäisaika, jonka laite pysyy hereillä paketin vastaanoton jälkeen",
"label": "Minimi heräämisaika"
},
"noConnectionBluetoothDisabled": {
"description": "Jos laite ei saa Bluetooth-yhteyttä, BLE-radio poistetaan käytöstä tämän ajan kuluttua",
"label": "Ei yhteyttä. Bluetooth on pois käytöstä"
},
"powerSavingEnabled": {
"description": "Valitse, jos laite saa virtaa matalavirtalähteestä (esim. aurinkopaneeli), jolloin virrankulutusta minimoidaan mahdollisimman paljon.",
"label": "Ota virransäästötila käyttöön"
},
"shutdownOnBatteryDelay": {
"description": "Sammuta laite automaattisesti tämän ajan kuluttua akkukäytöllä, 0 tarkoittaa toistaiseksi päällä",
"label": "Viive laitteen sammuttamisessa akkukäytöllä"
},
"superDeepSleepDuration": {
"description": "Kuinka pitkään laite on supersyvässä lepotilassa",
"label": "Supersyvän lepotilan kesto"
},
"powerConfigSettings": {
"description": "Virtamoduulin asetukset",
"label": "Virran asetukset"
},
"sleepSettings": {
"description": "Virtamoduulin lepotila-asetukset",
"label": "Lepotilan asetukset"
}
},
"security": {
"description": "Turvallisuuskokoonpanon asetukset",
"title": "Turvallisuusasetukset",
"button_backupKey": "Varmuuskopioi avain",
"adminChannelEnabled": {
"description": "Salli saapuva laitteen ohjaus suojaamattoman vanhan admin-kanavan kautta",
"label": "Salli vanha admin ylläpitäjä"
},
"enableDebugLogApi": {
"description": "Lähetä reaaliaikainen debug-loki sarjaportin kautta, katso ja vie laitteen lokitiedostot, joista sijaintitiedot on poistettu, Bluetoothin kautta",
"label": "Ota käyttöön virheenkorjauslokin API-rajapinta"
},
"managed": {
"description": "Jos tämä on käytössä, laitteen asetuksia voi muuttaa vain etäadmin-laitteen hallintaviestien kautta. Älä ota tätä käyttöön, ellei vähintään yhtä sopivaa etäadmin-laitetta ole määritetty ja julkinen avain ei ole tallennettu johonkin yllä olevista kentistä.",
"label": "Hallinnoitu"
},
"privateKey": {
"description": "Käytetään jaetun avaimen luomiseen etälaitteen kanssa",
"label": "Yksityinen avain"
},
"publicKey": {
"description": "Lähetetään muille mesh-verkon laitteille, jotta ne voivat laskea jaetun salaisen avaimen",
"label": "Julkinen avain"
},
"primaryAdminKey": {
"description": "Ensisijainen julkinen avain, jolla on oikeus lähettää hallintaviestejä tälle laitteelle",
"label": "Ensisijainen järjestelmänvalvojan avain"
},
"secondaryAdminKey": {
"description": "Toissijainen julkinen avain, jolla on oikeus lähettää hallintaviestejä tälle laitteelle",
"label": "Toissijainen järjestelmänvalvojan avain"
},
"serialOutputEnabled": {
"description": "Sarjakonsoli Stream API:n yli",
"label": "Sarjaulostulo Käytössä"
},
"tertiaryAdminKey": {
"description": "Kolmas julkinen avain, jolla on oikeus lähettää hallintaviestejä tälle laitteelle",
"label": "Kolmas järjestelmänvalvojan hallinta-avain"
},
"adminSettings": {
"description": "Järjestelmänvalvojan asetukset",
"label": "Ylläpitäjän asetukset"
},
"loggingSettings": {
"description": "Kirjautumisen asetukset",
"label": "Kirjautumisen asetukset"
}
}
}

View File

@@ -1,171 +1,171 @@
{
"deleteMessages": {
"description": "Tämä toiminto poistaa kaiken viestihistorian. Toimintoa ei voi perua. Haluatko varmasti jatkaa?",
"title": "Tyhjennä kaikki viestit"
},
"deviceName": {
"description": "Laite käynnistyy uudelleen, kun asetus on tallennettu.",
"longName": "Pitkä nimi",
"shortName": "Lyhytnimi",
"title": "Vaihda laitteen nimi"
},
"import": {
"description": "Nykyinen LoRa-asetus ylikirjoitetaan.",
"error": {
"invalidUrl": "Virheellinen Meshtastic verkko-osoite"
},
"channelPrefix": "Kanava: ",
"channelSetUrl": "Kanavan asetus / QR-koodin URL-osoite",
"channels": "Kanavat:",
"usePreset": "Käytä esiasetusta?",
"title": "Tuo kanava-asetukset"
},
"locationResponse": {
"altitude": "Korkeus: ",
"coordinates": "Koordinaatit: ",
"title": "Sijainti: {{identifier}}"
},
"pkiRegenerateDialog": {
"title": "Luodaanko ennalta jaettu avain uudelleen?",
"description": "Haluatko varmasti luoda ennalta jaetun avaimen uudelleen?",
"regenerate": "Luo uudelleen"
},
"newDeviceDialog": {
"title": "Yhdistä uuteen laitteeseen",
"https": "https",
"http": "http",
"tabHttp": "HTTP",
"tabBluetooth": "Bluetooth",
"tabSerial": "Sarjaliitäntä",
"useHttps": "Käytä HTTPS",
"connecting": "Yhdistetään...",
"connect": "Yhdistä",
"connectionFailedAlert": {
"title": "Yhteys epäonnistui",
"descriptionPrefix": "Laitteeseen ei saatu yhteyttä. ",
"httpsHint": "Jos käytät HTTPS:ää, sinun on ehkä ensin hyväksyttävä itse allekirjoitettu varmenne. ",
"openLinkPrefix": "Avaa ",
"openLinkSuffix": " uuteen välilehteen",
"acceptTlsWarningSuffix": ", hyväksy mahdolliset TLS-varoitukset, jos niitä ilmenee ja yritä sitten uudelleen.",
"learnMoreLink": "Lue lisää"
},
"httpConnection": {
"label": "IP-osoite / isäntänimi",
"placeholder": "000.000.000 / meshtastinen.paikallinen"
},
"serialConnection": {
"noDevicesPaired": "Yhtään laitetta ei ole vielä yhdistetty.",
"newDeviceButton": "Uusi laite",
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
},
"bluetoothConnection": {
"noDevicesPaired": "Yhtään laitetta ei ole vielä yhdistetty.",
"newDeviceButton": "Uusi laite"
},
"validation": {
"requiresWebBluetooth": "Tämä yhteystyyppi vaatii <0>Web-sarjaportti bluetooth</0> -tuen. Käytä tuettua selainta, kuten Chromea tai Edgeä.",
"requiresWebSerial": "Tämä yhteystyyppi vaatii <0>Web-sarjaportti</0> -tuen. Käytä tuettua selainta, kuten Chromea tai Edgeä.",
"requiresSecureContext": "Tämä sovellus vaatii <0>suojatun yhteyden</0>. Yhdistä käyttämällä HTTPS:ää tai localhostia.",
"additionallyRequiresSecureContext": "Lisäksi se vaatii <0>suojatun yhteyden</0>. Yhdistä käyttämällä HTTPS:ää tai localhostia."
}
},
"nodeDetails": {
"message": "Viesti",
"requestPosition": "Pyydä sijaintia",
"traceRoute": "Reitinselvitys",
"airTxUtilization": "Ilmatien TX käyttöaste",
"allRawMetrics": "Kaikki raakatiedot:",
"batteryLevel": "Akun varaus",
"channelUtilization": "Kanavan käyttöaste",
"details": "Tiedot:",
"deviceMetrics": "Laitteen mittausloki:",
"hardware": "Laitteisto: ",
"lastHeard": "Viimeksi kuultu: ",
"nodeHexPrefix": "Laitteen Hex: !",
"nodeNumber": "Laitteen numero: ",
"position": "Sijainti:",
"role": "Rooli: ",
"uptime": "Käyttöaika: ",
"voltage": "Jännite",
"title": "Tiedot laitteelle {{identifier}}",
"ignoreNode": "Älä huomioi laitetta",
"removeNode": "Poista laite",
"unignoreNode": "Poista laitteen ohitus käytöstä"
},
"pkiBackup": {
"loseKeysWarning": "Jos menetät avaimesi, sinun täytyy palauttaa laite tehdasasetuksiin.",
"secureBackup": "On tärkeää varmuuskopioida julkiset ja yksityiset avaimet ja säilyttää niiden varmuuskopioita turvallisesti!",
"footer": "=== AVAIMIEN LOPPU ===",
"header": "=== MESHTASTIC AVAIMET {{longName}} ({{shortName}}) LAITTEELLE ===",
"privateKey": "Yksityinen avain:",
"publicKey": "Julkinen avain:",
"fileName": "meshtastic_avaimet_{{longName}}_{{shortName}}.txt",
"title": "Varmuuskopioi avaimet"
},
"pkiBackupReminder": {
"description": "Suosittelemme avaintietojen säännöllistä varmuuskopiointia. Haluatko varmuuskopioida nyt?",
"title": "Varmuuskopion Muistutus",
"remindLaterPrefix": "Muistuta minua",
"remindNever": "Älä muistuta minua koskaan",
"backupNow": "Varmuuskopioi nyt"
},
"pkiRegenerate": {
"description": "Haluatko varmasti luoda avainparin uudelleen?",
"title": "Luo avainpari uudelleen"
},
"qr": {
"addChannels": "Lisää kanavia",
"replaceChannels": "Korvaa kanavia",
"description": "Nykyinen LoRa-kokoonpano tullaan myös jakamaan.",
"sharableUrl": "Jaettava URL",
"title": "Generoi QR-koodi"
},
"rebootOta": {
"title": "Ajasta uudelleenkäynnistys",
"description": "Käynnistä yhdistetty laite uudelleen viiveen jälkeen OTA-tilaan (langaton päivitys).",
"enterDelay": "Anna viive (sekuntia)",
"scheduled": "Uudelleenkäynnistys on ajastettu"
},
"reboot": {
"title": "Ajasta uudelleenkäynnistys",
"description": "Käynnistä yhdistetty laite x minuutin jälkeen."
},
"refreshKeys": {
"description": {
"acceptNewKeys": "Tämä poistaa laitteen laitteesta ja pyytää uusia avaimia.",
"keyMismatchReasonSuffix": ". Tämä johtuu siitä, että etälaitteen nykyinen julkinen avain ei vastaa aiemmin tallennettua avainta tälle laitteelle.",
"unableToSendDmPrefix": "Laitteesi ei pysty lähettämään suoraa viestiä laitteelle: "
},
"acceptNewKeys": "Hyväksy uudet avaimet",
"title": "Avaimet eivät täsmää - {{identifier}}"
},
"removeNode": {
"description": "Haluatko varmasti poistaa tämän laitteen?",
"title": "Poista laite?"
},
"shutdown": {
"title": "Ajasta sammutus",
"description": "Sammuta yhdistetty laite x minuutin päästä."
},
"traceRoute": {
"routeToDestination": "Reitin määränpää:",
"routeBack": "Reitti takaisin:"
},
"tracerouteResponse": {
"title": "Reitinselvitys: {{identifier}}"
},
"unsafeRoles": {
"confirmUnderstanding": "Kyllä, tiedän mitä teen",
"conjunction": " ja blogikirjoitukset ",
"postamble": " ja ymmärrän roolin muuttamisen vaikutukset.",
"preamble": "Olen lukenut ",
"choosingRightDeviceRole": "Valitse laitteelle oikea rooli",
"deviceRoleDocumentation": "Roolien dokumentaatio laitteelle",
"title": "Oletko varma?"
},
"managedMode": {
"confirmUnderstanding": "Kyllä, tiedän mitä teen",
"title": "Oletko varma?",
"description": "Hallintatilan käyttöönotto estää asiakassovelluksia (mukaan lukien verkkosovellus) kirjoittamasta asetuksia radioon. Kun tila on otettu käyttöön, radion asetuksia voidaan muuttaa <bold>vain</bold> etähallintaviestien kautta. Tämä asetus ei ole pakollinen etähallittavien laitteiden hallintaan."
}
"deleteMessages": {
"description": "Tämä toiminto poistaa kaiken viestihistorian. Toimintoa ei voi perua. Haluatko varmasti jatkaa?",
"title": "Tyhjennä kaikki viestit"
},
"deviceName": {
"description": "Laite käynnistyy uudelleen, kun asetus on tallennettu.",
"longName": "Pitkä nimi",
"shortName": "Lyhytnimi",
"title": "Vaihda laitteen nimi"
},
"import": {
"description": "Nykyinen LoRa-asetus ylikirjoitetaan.",
"error": {
"invalidUrl": "Virheellinen Meshtastic verkko-osoite"
},
"channelPrefix": "Kanava: ",
"channelSetUrl": "Kanavan asetus / QR-koodin URL-osoite",
"channels": "Kanavat:",
"usePreset": "Käytä esiasetusta?",
"title": "Tuo kanava-asetukset"
},
"locationResponse": {
"altitude": "Korkeus: ",
"coordinates": "Koordinaatit: ",
"title": "Sijainti: {{identifier}}"
},
"pkiRegenerateDialog": {
"title": "Luodaanko ennalta jaettu avain uudelleen?",
"description": "Haluatko varmasti luoda ennalta jaetun avaimen uudelleen?",
"regenerate": "Luo uudelleen"
},
"newDeviceDialog": {
"title": "Yhdistä uuteen laitteeseen",
"https": "https",
"http": "http",
"tabHttp": "HTTP",
"tabBluetooth": "Bluetooth",
"tabSerial": "Sarjaliitäntä",
"useHttps": "Käytä HTTPS",
"connecting": "Yhdistetään...",
"connect": "Yhdistä",
"connectionFailedAlert": {
"title": "Yhteys epäonnistui",
"descriptionPrefix": "Laitteeseen ei saatu yhteyttä. ",
"httpsHint": "Jos käytät HTTPS:ää, sinun on ehkä ensin hyväksyttävä itse allekirjoitettu varmenne. ",
"openLinkPrefix": "Avaa ",
"openLinkSuffix": " uuteen välilehteen",
"acceptTlsWarningSuffix": ", hyväksy mahdolliset TLS-varoitukset, jos niitä ilmenee ja yritä sitten uudelleen.",
"learnMoreLink": "Lue lisää"
},
"httpConnection": {
"label": "IP-osoite / isäntänimi",
"placeholder": "000.000.000 / meshtastinen.paikallinen"
},
"serialConnection": {
"noDevicesPaired": "Yhtään laitetta ei ole vielä yhdistetty.",
"newDeviceButton": "Uusi laite",
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
},
"bluetoothConnection": {
"noDevicesPaired": "Yhtään laitetta ei ole vielä yhdistetty.",
"newDeviceButton": "Uusi laite"
},
"validation": {
"requiresWebBluetooth": "Tämä yhteystyyppi vaatii <0>Web-sarjaportti bluetooth</0> -tuen. Käytä tuettua selainta, kuten Chromea tai Edgeä.",
"requiresWebSerial": "Tämä yhteystyyppi vaatii <0>Web-sarjaportti</0> -tuen. Käytä tuettua selainta, kuten Chromea tai Edgeä.",
"requiresSecureContext": "Tämä sovellus vaatii <0>suojatun yhteyden</0>. Yhdistä käyttämällä HTTPS:ää tai localhostia.",
"additionallyRequiresSecureContext": "Lisäksi se vaatii <0>suojatun yhteyden</0>. Yhdistä käyttämällä HTTPS:ää tai localhostia."
}
},
"nodeDetails": {
"message": "Viesti",
"requestPosition": "Pyydä sijaintia",
"traceRoute": "Reitinselvitys",
"airTxUtilization": "Ilmatien TX käyttöaste",
"allRawMetrics": "Kaikki raakatiedot:",
"batteryLevel": "Akun varaus",
"channelUtilization": "Kanavan käyttöaste",
"details": "Tiedot:",
"deviceMetrics": "Laitteen mittausloki:",
"hardware": "Laitteisto: ",
"lastHeard": "Viimeksi kuultu: ",
"nodeHexPrefix": "Laitteen Hex: !",
"nodeNumber": "Laitteen numero: ",
"position": "Sijainti:",
"role": "Rooli: ",
"uptime": "Käyttöaika: ",
"voltage": "Jännite",
"title": "Tiedot laitteelle {{identifier}}",
"ignoreNode": "Älä huomioi laitetta",
"removeNode": "Poista laite",
"unignoreNode": "Poista laitteen ohitus käytöstä"
},
"pkiBackup": {
"loseKeysWarning": "Jos menetät avaimesi, sinun täytyy palauttaa laite tehdasasetuksiin.",
"secureBackup": "On tärkeää varmuuskopioida julkiset ja yksityiset avaimet ja säilyttää niiden varmuuskopioita turvallisesti!",
"footer": "=== AVAIMIEN LOPPU ===",
"header": "=== MESHTASTIC AVAIMET {{longName}} ({{shortName}}) LAITTEELLE ===",
"privateKey": "Yksityinen avain:",
"publicKey": "Julkinen avain:",
"fileName": "meshtastic_avaimet_{{longName}}_{{shortName}}.txt",
"title": "Varmuuskopioi avaimet"
},
"pkiBackupReminder": {
"description": "Suosittelemme avaintietojen säännöllistä varmuuskopiointia. Haluatko varmuuskopioida nyt?",
"title": "Varmuuskopion Muistutus",
"remindLaterPrefix": "Muistuta minua",
"remindNever": "Älä muistuta minua koskaan",
"backupNow": "Varmuuskopioi nyt"
},
"pkiRegenerate": {
"description": "Haluatko varmasti luoda avainparin uudelleen?",
"title": "Luo avainpari uudelleen"
},
"qr": {
"addChannels": "Lisää kanavia",
"replaceChannels": "Korvaa kanavia",
"description": "Nykyinen LoRa-kokoonpano tullaan myös jakamaan.",
"sharableUrl": "Jaettava URL",
"title": "Generoi QR-koodi"
},
"rebootOta": {
"title": "Ajasta uudelleenkäynnistys",
"description": "Käynnistä yhdistetty laite uudelleen viiveen jälkeen OTA-tilaan (langaton päivitys).",
"enterDelay": "Anna viive (sekuntia)",
"scheduled": "Uudelleenkäynnistys on ajastettu"
},
"reboot": {
"title": "Ajasta uudelleenkäynnistys",
"description": "Käynnistä yhdistetty laite x minuutin jälkeen."
},
"refreshKeys": {
"description": {
"acceptNewKeys": "Tämä poistaa laitteen laitteesta ja pyytää uusia avaimia.",
"keyMismatchReasonSuffix": ". Tämä johtuu siitä, että etälaitteen nykyinen julkinen avain ei vastaa aiemmin tallennettua avainta tälle laitteelle.",
"unableToSendDmPrefix": "Laitteesi ei pysty lähettämään suoraa viestiä laitteelle: "
},
"acceptNewKeys": "Hyväksy uudet avaimet",
"title": "Avaimet eivät täsmää - {{identifier}}"
},
"removeNode": {
"description": "Haluatko varmasti poistaa tämän laitteen?",
"title": "Poista laite?"
},
"shutdown": {
"title": "Ajasta sammutus",
"description": "Sammuta yhdistetty laite x minuutin päästä."
},
"traceRoute": {
"routeToDestination": "Reitin määränpää:",
"routeBack": "Reitti takaisin:"
},
"tracerouteResponse": {
"title": "Reitinselvitys: {{identifier}}"
},
"unsafeRoles": {
"confirmUnderstanding": "Kyllä, tiedän mitä teen",
"conjunction": " ja blogikirjoitukset ",
"postamble": " ja ymmärrän roolin muuttamisen vaikutukset.",
"preamble": "Olen lukenut ",
"choosingRightDeviceRole": "Valitse laitteelle oikea rooli",
"deviceRoleDocumentation": "Roolien dokumentaatio laitteelle",
"title": "Oletko varma?"
},
"managedMode": {
"confirmUnderstanding": "Kyllä, tiedän mitä teen",
"title": "Oletko varma?",
"description": "Hallintatilan käyttöönotto estää asiakassovelluksia (mukaan lukien verkkosovellus) kirjoittamasta asetuksia radioon. Kun tila on otettu käyttöön, radion asetuksia voidaan muuttaa <bold>vain</bold> etähallintaviestien kautta. Tämä asetus ei ole pakollinen etähallittavien laitteiden hallintaan."
}
}

View File

@@ -1,39 +1,39 @@
{
"page": {
"title": "Viestit: {{chatName}}",
"placeholder": "Kirjoita viesti"
},
"emptyState": {
"title": "Valitse keskustelu",
"text": "Ei vielä viestejä."
},
"selectChatPrompt": {
"text": "Valitse kanava tai laite aloittaaksesi viestinnän."
},
"sendMessage": {
"placeholder": "Kirjoita viesti tähän...",
"sendButton": "Lähetä"
},
"actionsMenu": {
"addReactionLabel": "Lisää reaktio",
"replyLabel": "Vastaa"
},
"deliveryStatus": {
"delivered": {
"label": "Viesti toimitettu",
"displayText": "Viesti toimitettu"
},
"failed": {
"label": "Viestin toimitus epäonnistui",
"displayText": "Toimitus epäonnistui"
},
"unknown": {
"label": "Viestin tila tuntematon",
"displayText": "Tuntematon tila"
},
"waiting": {
"label": "Lähetetään viestiä",
"displayText": "Odottaa toimitusta"
}
}
"page": {
"title": "Viestit: {{chatName}}",
"placeholder": "Kirjoita viesti"
},
"emptyState": {
"title": "Valitse keskustelu",
"text": "Ei vielä viestejä."
},
"selectChatPrompt": {
"text": "Valitse kanava tai laite aloittaaksesi viestinnän."
},
"sendMessage": {
"placeholder": "Kirjoita viesti tähän...",
"sendButton": "Lähetä"
},
"actionsMenu": {
"addReactionLabel": "Lisää reaktio",
"replyLabel": "Vastaa"
},
"deliveryStatus": {
"delivered": {
"label": "Viesti toimitettu",
"displayText": "Viesti toimitettu"
},
"failed": {
"label": "Viestin toimitus epäonnistui",
"displayText": "Toimitus epäonnistui"
},
"unknown": {
"label": "Viestin tila tuntematon",
"displayText": "Tuntematon tila"
},
"waiting": {
"label": "Lähetetään viestiä",
"displayText": "Odottaa toimitusta"
}
}
}

View File

@@ -1,448 +1,448 @@
{
"page": {
"tabAmbientLighting": "Ympäristövalaistus",
"tabAudio": "Ääni",
"tabCannedMessage": "Ennalta asetettu",
"tabDetectionSensor": "Havaitsemisanturi",
"tabExternalNotification": "Ext-ilmoitus",
"tabMqtt": "MQTT",
"tabNeighborInfo": "Naapuritieto",
"tabPaxcounter": "PAX-laskuri",
"tabRangeTest": "Kuuluvuustesti",
"tabSerial": "Sarjaliitäntä",
"tabStoreAndForward": "S&V",
"tabTelemetry": "Telemetria"
},
"ambientLighting": {
"title": "Ympäristövalaistuksen asetukset",
"description": "Ympäristövalaistuksen moduulin asetukset",
"ledState": {
"label": "Ledin tila",
"description": "Aseta ledi päälle tai pois päältä"
},
"current": {
"label": "Virta",
"description": "Asettaa nykyisen ledin ulostulon. Oletus on 10"
},
"red": {
"label": "Punainen",
"description": "Asettaa punaisen ledin tason. Arvot ovat 0-255"
},
"green": {
"label": "Vihreä",
"description": "Asettaa vihreän ledin tason. Arvot ovat 0-255"
},
"blue": {
"label": "Sininen",
"description": "Asettaa sinisen ledin tason. Arvot ovat 0-255"
}
},
"audio": {
"title": "Ääniasetukset",
"description": "Äänimoduulin asetukset",
"codec2Enabled": {
"label": "Codec 2 käytössä",
"description": "Ota Codec 2 äänenkoodaus käyttöön"
},
"pttPin": {
"label": "PTT pinni",
"description": "PTT:lle käytettävä GPIO-pinni"
},
"bitrate": {
"label": "Tiedonsiirtonopeus",
"description": "Tiedonsiirtonopeus äänenkoodaukselle"
},
"i2sWs": {
"label": "i2S WS",
"description": "GPIO-pinni jota käytetään i2S WS:ssä"
},
"i2sSd": {
"label": "i2S SD",
"description": "GPIO-pinni jota käytetään i2S SD:ssä"
},
"i2sDin": {
"label": "i2S DIN",
"description": "GPIO-pinni jota käytetään i2S DIN:ssä"
},
"i2sSck": {
"label": "i2S SD",
"description": "GPIO-pinni jota käytetään i2S SCK:ssa"
}
},
"cannedMessage": {
"title": "Välitettyjen viestien asetukset",
"description": "Asetukset välitettyjen viestien moduulissa",
"moduleEnabled": {
"label": "Moduuli Käytössä",
"description": "Ota käyttöön välitetyt viestit"
},
"rotary1Enabled": {
"label": "Kiertovalitsin #1 käytössä",
"description": "Ota kiertovalitsimen kooderi käyttöön"
},
"inputbrokerPinA": {
"label": "Kooderin pinni A",
"description": "GPIO-pinni (139) kooderin portille A"
},
"inputbrokerPinB": {
"label": "Kooderin pinni B",
"description": "GPIO-pinni (139) kooderin portille B"
},
"inputbrokerPinPress": {
"label": "Kooderin pinni painallukselle",
"description": "GPIO-pinni (139) kooderin painallukselle"
},
"inputbrokerEventCw": {
"label": "Myötäpäiväinen liike",
"description": "Valitse syöttötapahtuma."
},
"inputbrokerEventCcw": {
"label": "Myötäpäiväisen liikkeen laskuri",
"description": "Valitse syöttötapahtuma."
},
"inputbrokerEventPress": {
"label": "Painamisen tapahtuma",
"description": "Valitse syöttötapahtuma"
},
"updown1Enabled": {
"label": "Ylös alas käytössä",
"description": "Ota käyttöön ylös / alas-suuntaa tunnistava kooderi"
},
"allowInputSource": {
"label": "Salli syöttölaitteen lähde",
"description": "Valitse '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
},
"sendBell": {
"label": "Lähetä äänimerkki",
"description": "Lähettää äänimerkkimerkin jokaisen viestin mukana"
}
},
"detectionSensor": {
"title": "Tunnistinsensorin asetukset",
"description": "Tunnistinsensori-moduulin asetukset",
"enabled": {
"label": "Käytössä",
"description": "Ota käyttöön tai poista käytöstä tunnistinsensorin moduuli"
},
"minimumBroadcastSecs": {
"label": "Minimilähetys (sekuntia)",
"description": "Aikaväli sekunteina kuinka usein viestejä voi lähettää mesh-verkkoon tilamuutoksen havaitsemisen jälkeen"
},
"stateBroadcastSecs": {
"label": "Tilatiedon lähetys (sekuntia)",
"description": "Kuinka usein sekunteina lähetetään viesti mesh-verkkoon nykytilasta, vaikka tilassa ei olisi muutoksia"
},
"sendBell": {
"label": "Lähetä äänimerkki",
"description": "Lähetä ASCII-äänimerkki hälytyssanoman mukana"
},
"name": {
"label": "Käyttäjäystävälinen nimi",
"description": "Käytetään muotoilemaan mesh-verkkoon lähetettävä viesti, enintään 20 merkkiä"
},
"monitorPin": {
"label": "Valvonta pinni",
"description": "GPIO-pinni valvonnan tilan muutoksien seurantaan"
},
"detectionTriggerType": {
"label": "Tunnistuksen havaintotyyppi",
"description": "Käytettävän tunnistustapahtuman tyyppi"
},
"usePullup": {
"label": "Käytä vetokytkintä (pullup)",
"description": "Käytetäänkö GPIO-pinnin INPUT_PULLUP-tilaa"
}
},
"externalNotification": {
"title": "Ulkoisten ilmoituksien asetukset",
"description": "Määritä ulkoisten ilmoitusten moduulin asetukset",
"enabled": {
"label": "Moduuli käytössä",
"description": "Ota ulkoiset ilmoitukset käyttöön"
},
"outputMs": {
"label": "Ulostulo MS",
"description": "Ulostulo MS"
},
"output": {
"label": "Ulostulo",
"description": "Ulostulo"
},
"outputVibra": {
"label": "Värinän ulostulo",
"description": "Värinän ulostulo"
},
"outputBuzzer": {
"label": "Summerin ulostulo",
"description": "Summerin ulostulo"
},
"active": {
"label": "Käytössä",
"description": "Käytössä"
},
"alertMessage": {
"label": "Hälytysviesti",
"description": "Hälytysviesti"
},
"alertMessageVibra": {
"label": "Hälytysviestin värinä",
"description": "Hälytysviestin värinä"
},
"alertMessageBuzzer": {
"label": "Hälytysviestin summeri",
"description": "Hälytysviestin summeri"
},
"alertBell": {
"label": "Hälytysääni",
"description": "Pitäisikö hälytyksen aktivoitua, kun vastaanotetaan äänimerkki?"
},
"alertBellVibra": {
"label": "Hälytysäänen värinä",
"description": "Hälytysäänen värinä"
},
"alertBellBuzzer": {
"label": "Hälytysäänen summeri",
"description": "Hälytysäänen summeri"
},
"usePwm": {
"label": "Käytä PWM",
"description": "Käytä PWM"
},
"nagTimeout": {
"label": "Toistokehotuksen aikakatkaisu",
"description": "Toistokehotuksen aikakatkaisu"
},
"useI2sAsBuzzer": {
"label": "Use I²S pinniä summerille",
"description": "Määritä I²S-pinni summerin ulostuloon"
}
},
"mqtt": {
"title": "MQTT-asetukset",
"description": "MQTT-moduulin asetukset",
"enabled": {
"label": "Käytössä",
"description": "Ota MQTT käyttöön tai poista se käytöstä"
},
"address": {
"label": "MQTT-palvelimen osoite",
"description": "MQTT-palvelimen osoite, jota käytetään oletus- tai mukautetuissa palvelimissa"
},
"username": {
"label": "MQTT käyttäjänimi",
"description": "MQTT käyttäjänimi, jota käytetään oletus- tai mukautetuissa palvelimissa"
},
"password": {
"label": "MQTT salasana",
"description": "MQTT salasana, jota käytetään oletus- tai mukautetuissa palvelimissa"
},
"encryptionEnabled": {
"label": "Salaus käytössä",
"description": "Ota MQTT-salaus käyttöön tai pois käytöstä. Huom: Jos tämä asetus ei ole käytössä, kaikki viestit lähetetään MQTT-välittäjälle salaamattomina, vaikka lähetyskanavillasi olisi salausavaimet asetettuna. Tämä koskee myös sijaintitietoja."
},
"jsonEnabled": {
"label": "JSON käytössä",
"description": "Lähetetäänkö / otetaanko vastaan JSON-paketteja MQTT:llä"
},
"tlsEnabled": {
"label": "TLS käytössä",
"description": "Ota TLS käyttöön tai poista se käytöstä"
},
"root": {
"label": "Palvelimen osoite (root topic)",
"description": "MQTT-palvelimen osoite, jota käytetään oletus- tai mukautetuissa palvelimissa"
},
"proxyToClientEnabled": {
"label": "MQTT-välityspalvelin käytössä",
"description": "Käyttää verkkoyhteyttä välittämään MQTT-viestejä asiakkaalle."
},
"mapReportingEnabled": {
"label": "Karttaraportointi käytössä",
"description": "Laitteesi lähettää säännöllisin väliajoin salaamattoman karttaraporttipaketin määritettyyn MQTT-palvelimeen. Paketti sisältää tunnisteen, lyhyen ja pitkän nimen, likimääräisen sijainnin, laitteistomallin, roolin, laiteohjelmistoversion, LoRa-alueen, modeemin esiasetukset sekä ensisijaisen kanavan nimen."
},
"mapReportSettings": {
"publishIntervalSecs": {
"label": "Karttaraportoinnin aikaväli (s)",
"description": "Aikaväli sekunneissa karttaraporttien julkaisemiseksi"
},
"positionPrecision": {
"label": "Arvioitu sijainti",
"description": "Jaetun sijainnin tarkkuus on tämän etäisyyden rajoissa",
"options": {
"metric_km23": "23 kilometrin säteellä",
"metric_km12": "12 kilometrin säteellä",
"metric_km5_8": "5,8 kilometrin säteellä",
"metric_km2_9": "2,9 kilometrin säteellä",
"metric_km1_5": "1,5 kilometrin säteellä",
"metric_m700": "700 metrin säteellä",
"metric_m350": "350 metrin säteellä",
"metric_m200": "200 metrin säteellä",
"metric_m90": "90 metrin säteellä",
"metric_m50": "50 metrin säteellä",
"imperial_mi15": "15 mailin säteellä",
"imperial_mi7_3": "7,3 mailin säteellä",
"imperial_mi3_6": "3,6 mailin säteellä",
"imperial_mi1_8": "1,8 mailin säteellä",
"imperial_mi0_9": "0,9 mailin säteellä",
"imperial_mi0_5": "0,5 mailin säteellä",
"imperial_mi0_2": "0,2 mailin säteellä",
"imperial_ft600": "600 jalan säteellä",
"imperial_ft300": "300 jalan säteellä",
"imperial_ft150": "150 jalan säteellä"
}
}
}
},
"neighborInfo": {
"title": "Naapuritiedon asetukset",
"description": "Naapuritietojen moduulin asetukset",
"enabled": {
"label": "Käytössä",
"description": "Ota käyttöön tai poista käytöstä naapuruustietomoduuli"
},
"updateInterval": {
"label": "Päivitysväli",
"description": "Aikaväli sekunneissa siitä, kuinka usein mesh-verkossa lähetetään naapuritietoja verkkoon"
}
},
"paxcounter": {
"title": "Pax-laskurin asetukset",
"description": "Pax-laskurin moduulin asetukset",
"enabled": {
"label": "Moduuli käytössä",
"description": "Ota pax-laskuri käyttöön"
},
"paxcounterUpdateInterval": {
"label": "Päivityksen aikaväli (sekuntia)",
"description": "Kuinka kauan odotetaan pax-laskurin pakettien lähettämisen välillä"
},
"wifiThreshold": {
"label": "WiFi-RSSI kynnysarvo",
"description": "Millä WiFi RSSI tasolla laskurin täytyisi kasvaa. Oletus on -80."
},
"bleThreshold": {
"label": "WiFi-RSSI kynnysarvo",
"description": "Millä BLE RSSI-arvolla laskuri kasvaa. Oletus: -80."
}
},
"rangeTest": {
"title": "Kuuluvuustestin asetukset",
"description": "Kuuluvuustesti moduulin asetukset",
"enabled": {
"label": "Moduuli käytössä",
"description": "Ota kuuluvuustesti käytöön"
},
"sender": {
"label": "Viestin aikaväli",
"description": "Kuinka kauan odotetaan testipakettien lähettämisen välillä"
},
"save": {
"label": "Tallenna CSV tallennustilaan",
"description": "Vain ESP32"
}
},
"serial": {
"title": "Sarjaliitännän asetukset",
"description": "Sarjaliitäntä-moduulin asetukset",
"enabled": {
"label": "Sarjaliitäntä käytössä",
"description": "Ota sarjaliitäntä käyttöön"
},
"echo": {
"label": "Toista",
"description": "Kaikki lähettämäsi paketit toistetaan takaisin laitteellesi"
},
"rxd": {
"label": "Vastaanota PIN-koodi",
"description": "Määritä GPIO-pinni käyttämään aiemmin asetettua RXD-pinniä."
},
"txd": {
"label": "Lähetä PIN-koodi",
"description": "Määritä GPIO-pinni käyttämään aiemmin asetettua TXD-pinniä."
},
"baud": {
"label": "Baud-siirtonopeus",
"description": "Sarjaliitännän baud-siirtonopeus"
},
"timeout": {
"label": "Aikakatkaisu",
"description": "Kuinka monta sekuntia odotetaan, ennen kuin paketti merkitään valmiiksi"
},
"mode": {
"label": "Tila",
"description": "Valitse tila"
},
"overrideConsoleSerialPort": {
"label": "Ohita konsolin sarjaliitännän portti",
"description": "Jos sinulla on sarjaportti kytkettynä konsoliin, tämä ohittaa sen."
}
},
"storeForward": {
"title": "Varastoi & välitä asetukset",
"description": "Varastoi & välitä moduulin asetukset",
"enabled": {
"label": "Moduuli käytössä",
"description": "Ota varastoi & välitä käyttöön"
},
"heartbeat": {
"label": "Heartbeat käytössä",
"description": "Ota varastoi & välitä heartbeat käyttöön"
},
"records": {
"label": "Kirjausten määrä",
"description": "Tallennettavien tietueiden määrä"
},
"historyReturnMax": {
"label": "Historian maksimimäärä",
"description": "Enimmäismäärä tietueita palautettaviksi"
},
"historyReturnWindow": {
"label": "Historian aikamäärä",
"description": "Enimmäismäärä tietueita palautettaviksi"
}
},
"telemetry": {
"title": "Telemetrian asetukset",
"description": "Telemetria-moduulin asetukset",
"deviceUpdateInterval": {
"label": "Laitteen mittausloki",
"description": "Laitteen mittaustietojen päivitysväli (sekuntia)"
},
"environmentUpdateInterval": {
"label": "Ympäristötietojen päivitysväli (sekuntia)",
"description": ""
},
"environmentMeasurementEnabled": {
"label": "Moduuli käytössä",
"description": "Ota käyttöön ympäristön telemetria"
},
"environmentScreenEnabled": {
"label": "Näytetään näytöllä",
"description": "Näytä moduulin telemetriatiedot OLED-näytöllä"
},
"environmentDisplayFahrenheit": {
"label": "Näytä fahrenheitissa",
"description": "Näytä lämpötila fahrenheitissa"
},
"airQualityEnabled": {
"label": "Ilmanlaatu käytössä",
"description": "Ota ilmanlaadun telemetria käyttöön"
},
"airQualityInterval": {
"label": "Ilmanlaadun päivitysväli",
"description": "Kuinka usein ilmanlaadun tiedot lähetetään mesh-verkon kautta"
},
"powerMeasurementEnabled": {
"label": "Tehomittaus käytössä",
"description": "Ota tehomittauksen telemetria käyttöön"
},
"powerUpdateInterval": {
"label": "Tehomittauksen päivitysväli",
"description": "Kuinka usein tehomittauksen tiedot lähetetään mesh-verkon kautta"
},
"powerScreenEnabled": {
"label": "Tehomittauksen näyttö käytössä",
"description": "Ota tehomittauksen telemetrian näyttö käyttöön"
}
}
"page": {
"tabAmbientLighting": "Ympäristövalaistus",
"tabAudio": "Ääni",
"tabCannedMessage": "Ennalta asetettu",
"tabDetectionSensor": "Havaitsemisanturi",
"tabExternalNotification": "Ext-ilmoitus",
"tabMqtt": "MQTT",
"tabNeighborInfo": "Naapuritieto",
"tabPaxcounter": "PAX-laskuri",
"tabRangeTest": "Kuuluvuustesti",
"tabSerial": "Sarjaliitäntä",
"tabStoreAndForward": "S&V",
"tabTelemetry": "Telemetria"
},
"ambientLighting": {
"title": "Ympäristövalaistuksen asetukset",
"description": "Ympäristövalaistuksen moduulin asetukset",
"ledState": {
"label": "Ledin tila",
"description": "Aseta ledi päälle tai pois päältä"
},
"current": {
"label": "Virta",
"description": "Asettaa nykyisen ledin ulostulon. Oletus on 10"
},
"red": {
"label": "Punainen",
"description": "Asettaa punaisen ledin tason. Arvot ovat 0-255"
},
"green": {
"label": "Vihreä",
"description": "Asettaa vihreän ledin tason. Arvot ovat 0-255"
},
"blue": {
"label": "Sininen",
"description": "Asettaa sinisen ledin tason. Arvot ovat 0-255"
}
},
"audio": {
"title": "Ääniasetukset",
"description": "Äänimoduulin asetukset",
"codec2Enabled": {
"label": "Codec 2 käytössä",
"description": "Ota Codec 2 äänenkoodaus käyttöön"
},
"pttPin": {
"label": "PTT pinni",
"description": "PTT:lle käytettävä GPIO-pinni"
},
"bitrate": {
"label": "Tiedonsiirtonopeus",
"description": "Tiedonsiirtonopeus äänenkoodaukselle"
},
"i2sWs": {
"label": "i2S WS",
"description": "GPIO-pinni jota käytetään i2S WS:ssä"
},
"i2sSd": {
"label": "i2S SD",
"description": "GPIO-pinni jota käytetään i2S SD:ssä"
},
"i2sDin": {
"label": "i2S DIN",
"description": "GPIO-pinni jota käytetään i2S DIN:ssä"
},
"i2sSck": {
"label": "i2S SD",
"description": "GPIO-pinni jota käytetään i2S SCK:ssa"
}
},
"cannedMessage": {
"title": "Välitettyjen viestien asetukset",
"description": "Asetukset välitettyjen viestien moduulissa",
"moduleEnabled": {
"label": "Moduuli Käytössä",
"description": "Ota käyttöön välitetyt viestit"
},
"rotary1Enabled": {
"label": "Kiertovalitsin #1 käytössä",
"description": "Ota kiertovalitsimen kooderi käyttöön"
},
"inputbrokerPinA": {
"label": "Kooderin pinni A",
"description": "GPIO-pinni (139) kooderin portille A"
},
"inputbrokerPinB": {
"label": "Kooderin pinni B",
"description": "GPIO-pinni (139) kooderin portille B"
},
"inputbrokerPinPress": {
"label": "Kooderin pinni painallukselle",
"description": "GPIO-pinni (139) kooderin painallukselle"
},
"inputbrokerEventCw": {
"label": "Myötäpäiväinen liike",
"description": "Valitse syöttötapahtuma."
},
"inputbrokerEventCcw": {
"label": "Myötäpäiväisen liikkeen laskuri",
"description": "Valitse syöttötapahtuma."
},
"inputbrokerEventPress": {
"label": "Painamisen tapahtuma",
"description": "Valitse syöttötapahtuma"
},
"updown1Enabled": {
"label": "Ylös alas käytössä",
"description": "Ota käyttöön ylös / alas-suuntaa tunnistava kooderi"
},
"allowInputSource": {
"label": "Salli syöttölaitteen lähde",
"description": "Valitse '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
},
"sendBell": {
"label": "Lähetä äänimerkki",
"description": "Lähettää äänimerkkimerkin jokaisen viestin mukana"
}
},
"detectionSensor": {
"title": "Tunnistinsensorin asetukset",
"description": "Tunnistinsensori-moduulin asetukset",
"enabled": {
"label": "Käytössä",
"description": "Ota käyttöön tai poista käytöstä tunnistinsensorin moduuli"
},
"minimumBroadcastSecs": {
"label": "Minimilähetys (sekuntia)",
"description": "Aikaväli sekunteina kuinka usein viestejä voi lähettää mesh-verkkoon tilamuutoksen havaitsemisen jälkeen"
},
"stateBroadcastSecs": {
"label": "Tilatiedon lähetys (sekuntia)",
"description": "Kuinka usein sekunteina lähetetään viesti mesh-verkkoon nykytilasta, vaikka tilassa ei olisi muutoksia"
},
"sendBell": {
"label": "Lähetä äänimerkki",
"description": "Lähetä ASCII-äänimerkki hälytyssanoman mukana"
},
"name": {
"label": "Käyttäjäystävälinen nimi",
"description": "Käytetään muotoilemaan mesh-verkkoon lähetettävä viesti, enintään 20 merkkiä"
},
"monitorPin": {
"label": "Valvonta pinni",
"description": "GPIO-pinni valvonnan tilan muutoksien seurantaan"
},
"detectionTriggerType": {
"label": "Tunnistuksen havaintotyyppi",
"description": "Käytettävän tunnistustapahtuman tyyppi"
},
"usePullup": {
"label": "Käytä vetokytkintä (pullup)",
"description": "Käytetäänkö GPIO-pinnin INPUT_PULLUP-tilaa"
}
},
"externalNotification": {
"title": "Ulkoisten ilmoituksien asetukset",
"description": "Määritä ulkoisten ilmoitusten moduulin asetukset",
"enabled": {
"label": "Moduuli käytössä",
"description": "Ota ulkoiset ilmoitukset käyttöön"
},
"outputMs": {
"label": "Ulostulo MS",
"description": "Ulostulo MS"
},
"output": {
"label": "Ulostulo",
"description": "Ulostulo"
},
"outputVibra": {
"label": "Värinän ulostulo",
"description": "Värinän ulostulo"
},
"outputBuzzer": {
"label": "Summerin ulostulo",
"description": "Summerin ulostulo"
},
"active": {
"label": "Käytössä",
"description": "Käytössä"
},
"alertMessage": {
"label": "Hälytysviesti",
"description": "Hälytysviesti"
},
"alertMessageVibra": {
"label": "Hälytysviestin värinä",
"description": "Hälytysviestin värinä"
},
"alertMessageBuzzer": {
"label": "Hälytysviestin summeri",
"description": "Hälytysviestin summeri"
},
"alertBell": {
"label": "Hälytysääni",
"description": "Pitäisikö hälytyksen aktivoitua, kun vastaanotetaan äänimerkki?"
},
"alertBellVibra": {
"label": "Hälytysäänen värinä",
"description": "Hälytysäänen värinä"
},
"alertBellBuzzer": {
"label": "Hälytysäänen summeri",
"description": "Hälytysäänen summeri"
},
"usePwm": {
"label": "Käytä PWM",
"description": "Käytä PWM"
},
"nagTimeout": {
"label": "Toistokehotuksen aikakatkaisu",
"description": "Toistokehotuksen aikakatkaisu"
},
"useI2sAsBuzzer": {
"label": "Use I²S pinniä summerille",
"description": "Määritä I²S-pinni summerin ulostuloon"
}
},
"mqtt": {
"title": "MQTT-asetukset",
"description": "MQTT-moduulin asetukset",
"enabled": {
"label": "Käytössä",
"description": "Ota MQTT käyttöön tai poista se käytöstä"
},
"address": {
"label": "MQTT-palvelimen osoite",
"description": "MQTT-palvelimen osoite, jota käytetään oletus- tai mukautetuissa palvelimissa"
},
"username": {
"label": "MQTT käyttäjänimi",
"description": "MQTT käyttäjänimi, jota käytetään oletus- tai mukautetuissa palvelimissa"
},
"password": {
"label": "MQTT salasana",
"description": "MQTT salasana, jota käytetään oletus- tai mukautetuissa palvelimissa"
},
"encryptionEnabled": {
"label": "Salaus käytössä",
"description": "Ota MQTT-salaus käyttöön tai pois käytöstä. Huom: Jos tämä asetus ei ole käytössä, kaikki viestit lähetetään MQTT-välittäjälle salaamattomina, vaikka lähetyskanavillasi olisi salausavaimet asetettuna. Tämä koskee myös sijaintitietoja."
},
"jsonEnabled": {
"label": "JSON käytössä",
"description": "Lähetetäänkö / otetaanko vastaan JSON-paketteja MQTT:llä"
},
"tlsEnabled": {
"label": "TLS käytössä",
"description": "Ota TLS käyttöön tai poista se käytöstä"
},
"root": {
"label": "Palvelimen osoite (root topic)",
"description": "MQTT-palvelimen osoite, jota käytetään oletus- tai mukautetuissa palvelimissa"
},
"proxyToClientEnabled": {
"label": "MQTT-välityspalvelin käytössä",
"description": "Käyttää verkkoyhteyttä välittämään MQTT-viestejä asiakkaalle."
},
"mapReportingEnabled": {
"label": "Karttaraportointi käytössä",
"description": "Laitteesi lähettää säännöllisin väliajoin salaamattoman karttaraporttipaketin määritettyyn MQTT-palvelimeen. Paketti sisältää tunnisteen, lyhyen ja pitkän nimen, likimääräisen sijainnin, laitteistomallin, roolin, laiteohjelmistoversion, LoRa-alueen, modeemin esiasetukset sekä ensisijaisen kanavan nimen."
},
"mapReportSettings": {
"publishIntervalSecs": {
"label": "Karttaraportoinnin aikaväli (s)",
"description": "Aikaväli sekunneissa karttaraporttien julkaisemiseksi"
},
"positionPrecision": {
"label": "Arvioitu sijainti",
"description": "Jaetun sijainnin tarkkuus on tämän etäisyyden rajoissa",
"options": {
"metric_km23": "23 kilometrin säteellä",
"metric_km12": "12 kilometrin säteellä",
"metric_km5_8": "5,8 kilometrin säteellä",
"metric_km2_9": "2,9 kilometrin säteellä",
"metric_km1_5": "1,5 kilometrin säteellä",
"metric_m700": "700 metrin säteellä",
"metric_m350": "350 metrin säteellä",
"metric_m200": "200 metrin säteellä",
"metric_m90": "90 metrin säteellä",
"metric_m50": "50 metrin säteellä",
"imperial_mi15": "15 mailin säteellä",
"imperial_mi7_3": "7,3 mailin säteellä",
"imperial_mi3_6": "3,6 mailin säteellä",
"imperial_mi1_8": "1,8 mailin säteellä",
"imperial_mi0_9": "0,9 mailin säteellä",
"imperial_mi0_5": "0,5 mailin säteellä",
"imperial_mi0_2": "0,2 mailin säteellä",
"imperial_ft600": "600 jalan säteellä",
"imperial_ft300": "300 jalan säteellä",
"imperial_ft150": "150 jalan säteellä"
}
}
}
},
"neighborInfo": {
"title": "Naapuritiedon asetukset",
"description": "Naapuritietojen moduulin asetukset",
"enabled": {
"label": "Käytössä",
"description": "Ota käyttöön tai poista käytöstä naapuruustietomoduuli"
},
"updateInterval": {
"label": "Päivitysväli",
"description": "Aikaväli sekunneissa siitä, kuinka usein mesh-verkossa lähetetään naapuritietoja verkkoon"
}
},
"paxcounter": {
"title": "Pax-laskurin asetukset",
"description": "Pax-laskurin moduulin asetukset",
"enabled": {
"label": "Moduuli käytössä",
"description": "Ota pax-laskuri käyttöön"
},
"paxcounterUpdateInterval": {
"label": "Päivityksen aikaväli (sekuntia)",
"description": "Kuinka kauan odotetaan pax-laskurin pakettien lähettämisen välillä"
},
"wifiThreshold": {
"label": "WiFi-RSSI kynnysarvo",
"description": "Millä WiFi RSSI tasolla laskurin täytyisi kasvaa. Oletus on -80."
},
"bleThreshold": {
"label": "WiFi-RSSI kynnysarvo",
"description": "Millä BLE RSSI-arvolla laskuri kasvaa. Oletus: -80."
}
},
"rangeTest": {
"title": "Kuuluvuustestin asetukset",
"description": "Kuuluvuustesti moduulin asetukset",
"enabled": {
"label": "Moduuli käytössä",
"description": "Ota kuuluvuustesti käytöön"
},
"sender": {
"label": "Viestin aikaväli",
"description": "Kuinka kauan odotetaan testipakettien lähettämisen välillä"
},
"save": {
"label": "Tallenna CSV tallennustilaan",
"description": "Vain ESP32"
}
},
"serial": {
"title": "Sarjaliitännän asetukset",
"description": "Sarjaliitäntä-moduulin asetukset",
"enabled": {
"label": "Sarjaliitäntä käytössä",
"description": "Ota sarjaliitäntä käyttöön"
},
"echo": {
"label": "Toista",
"description": "Kaikki lähettämäsi paketit toistetaan takaisin laitteellesi"
},
"rxd": {
"label": "Vastaanota PIN-koodi",
"description": "Määritä GPIO-pinni käyttämään aiemmin asetettua RXD-pinniä."
},
"txd": {
"label": "Lähetä PIN-koodi",
"description": "Määritä GPIO-pinni käyttämään aiemmin asetettua TXD-pinniä."
},
"baud": {
"label": "Baud-siirtonopeus",
"description": "Sarjaliitännän baud-siirtonopeus"
},
"timeout": {
"label": "Aikakatkaisu",
"description": "Kuinka monta sekuntia odotetaan, ennen kuin paketti merkitään valmiiksi"
},
"mode": {
"label": "Tila",
"description": "Valitse tila"
},
"overrideConsoleSerialPort": {
"label": "Ohita konsolin sarjaliitännän portti",
"description": "Jos sinulla on sarjaportti kytkettynä konsoliin, tämä ohittaa sen."
}
},
"storeForward": {
"title": "Varastoi & välitä asetukset",
"description": "Varastoi & välitä moduulin asetukset",
"enabled": {
"label": "Moduuli käytössä",
"description": "Ota varastoi & välitä käyttöön"
},
"heartbeat": {
"label": "Heartbeat käytössä",
"description": "Ota varastoi & välitä heartbeat käyttöön"
},
"records": {
"label": "Kirjausten määrä",
"description": "Tallennettavien tietueiden määrä"
},
"historyReturnMax": {
"label": "Historian maksimimäärä",
"description": "Enimmäismäärä tietueita palautettaviksi"
},
"historyReturnWindow": {
"label": "Historian aikamäärä",
"description": "Enimmäismäärä tietueita palautettaviksi"
}
},
"telemetry": {
"title": "Telemetrian asetukset",
"description": "Telemetria-moduulin asetukset",
"deviceUpdateInterval": {
"label": "Laitteen mittausloki",
"description": "Laitteen mittaustietojen päivitysväli (sekuntia)"
},
"environmentUpdateInterval": {
"label": "Ympäristötietojen päivitysväli (sekuntia)",
"description": ""
},
"environmentMeasurementEnabled": {
"label": "Moduuli käytössä",
"description": "Ota käyttöön ympäristön telemetria"
},
"environmentScreenEnabled": {
"label": "Näytetään näytöllä",
"description": "Näytä moduulin telemetriatiedot OLED-näytöllä"
},
"environmentDisplayFahrenheit": {
"label": "Näytä fahrenheitissa",
"description": "Näytä lämpötila fahrenheitissa"
},
"airQualityEnabled": {
"label": "Ilmanlaatu käytössä",
"description": "Ota ilmanlaadun telemetria käyttöön"
},
"airQualityInterval": {
"label": "Ilmanlaadun päivitysväli",
"description": "Kuinka usein ilmanlaadun tiedot lähetetään mesh-verkon kautta"
},
"powerMeasurementEnabled": {
"label": "Tehomittaus käytössä",
"description": "Ota tehomittauksen telemetria käyttöön"
},
"powerUpdateInterval": {
"label": "Tehomittauksen päivitysväli",
"description": "Kuinka usein tehomittauksen tiedot lähetetään mesh-verkon kautta"
},
"powerScreenEnabled": {
"label": "Tehomittauksen näyttö käytössä",
"description": "Ota tehomittauksen telemetrian näyttö käyttöön"
}
}
}

View File

@@ -1,63 +1,63 @@
{
"nodeDetail": {
"publicKeyEnabled": {
"label": "Julkinen avain käytössä"
},
"noPublicKey": {
"label": "Ei julkinen avain"
},
"directMessage": {
"label": "Suora Viesti {{shortName}}"
},
"favorite": {
"label": "Suosikki",
"tooltip": "Lisää tai poista tämä laite suosikeistasi"
},
"notFavorite": {
"label": "Ei suosikki"
},
"error": {
"label": "Virhe",
"text": "Tapahtui virhe haettaessa laitteen tietoja. Yritä uudelleen myöhemmin."
},
"status": {
"heard": "Kuultu",
"mqtt": "MQTT"
},
"elevation": {
"label": "Korkeus"
},
"channelUtil": {
"label": "Kanavan käyttö"
},
"airtimeUtil": {
"label": "Lähetysajan käyttö"
}
},
"nodesTable": {
"headings": {
"longName": "Pitkä nimi",
"connection": "Yhteys",
"lastHeard": "Viimeksi kuultu",
"encryption": "Salaus",
"model": "Malli",
"macAddress": "MAC-osoite"
},
"connectionStatus": {
"direct": "Suora",
"away": "poissa",
"unknown": "-",
"viaMqtt": ", MQTT välityksellä"
},
"lastHeardStatus": {
"never": "Ei koskaan"
}
},
"actions": {
"added": "Lisätty",
"removed": "Poistettu",
"ignoreNode": "Älä huomioi laitetta",
"unignoreNode": "Huomioi laite uudelleen",
"requestPosition": "Pyydä sijaintia"
}
"nodeDetail": {
"publicKeyEnabled": {
"label": "Julkinen avain käytössä"
},
"noPublicKey": {
"label": "Ei julkinen avain"
},
"directMessage": {
"label": "Suora Viesti {{shortName}}"
},
"favorite": {
"label": "Suosikki",
"tooltip": "Lisää tai poista tämä laite suosikeistasi"
},
"notFavorite": {
"label": "Ei suosikki"
},
"error": {
"label": "Virhe",
"text": "Tapahtui virhe haettaessa laitteen tietoja. Yritä uudelleen myöhemmin."
},
"status": {
"heard": "Kuultu",
"mqtt": "MQTT"
},
"elevation": {
"label": "Korkeus"
},
"channelUtil": {
"label": "Kanavan käyttö"
},
"airtimeUtil": {
"label": "Lähetysajan käyttö"
}
},
"nodesTable": {
"headings": {
"longName": "Pitkä nimi",
"connection": "Yhteys",
"lastHeard": "Viimeksi kuultu",
"encryption": "Salaus",
"model": "Malli",
"macAddress": "MAC-osoite"
},
"connectionStatus": {
"direct": "Suora",
"away": "poissa",
"unknown": "-",
"viaMqtt": ", MQTT välityksellä"
},
"lastHeardStatus": {
"never": "Ei koskaan"
}
},
"actions": {
"added": "Lisätty",
"removed": "Poistettu",
"ignoreNode": "Älä huomioi laitetta",
"unignoreNode": "Huomioi laite uudelleen",
"requestPosition": "Pyydä sijaintia"
}
}

View File

@@ -1,228 +1,228 @@
{
"navigation": {
"title": "Navigointi",
"messages": "Viestit",
"map": "Kartta",
"config": "Asetukset",
"radioConfig": "Radion asetukset",
"moduleConfig": "Moduulin asetukset",
"channels": "Kanavat",
"nodes": "Laitteet"
},
"app": {
"title": "Meshtastic",
"logo": "Meshtastic Logo"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Avaa sivupalkki",
"close": "Sulje sivupalkki"
}
},
"deviceInfo": {
"volts": "{{voltage}} volttia",
"firmware": {
"title": "Laiteohjelmisto",
"version": "v{{version}}",
"buildDate": "Koontipäivä: {{date}}"
},
"deviceName": {
"title": "Laitteen nimi",
"changeName": "Vaihda laitteen nimi",
"placeholder": "Anna laitteelle nimi"
},
"editDeviceName": "Muokkaa laitteen nimeä"
}
},
"batteryStatus": {
"charging": "{{level}}% latauksessa",
"pluggedIn": "Kytketty verkkovirtaan",
"title": "Akku"
},
"search": {
"nodes": "Etsi laitteita...",
"channels": "Etsi kanavia...",
"commandPalette": "Etsi komentoja..."
},
"toast": {
"positionRequestSent": {
"title": "Sijaintipyyntö lähetetty."
},
"requestingPosition": {
"title": "Pyydetään sijaintia, odota..."
},
"sendingTraceroute": {
"title": "Reitinselvitys lähetetty, odota..."
},
"tracerouteSent": {
"title": "Reitinselvitys lähetetty."
},
"savedChannel": {
"title": "Tallennettu Kanava: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Keskustelu käyttää PKI-salausta."
},
"pskEncryption": {
"title": "Keskustelu käyttää PKI-salausta."
}
},
"configSaveError": {
"title": "Virhe asetusten tallentamisessa",
"description": "Asetusten tallennuksessa tapahtui virhe."
},
"validationError": {
"title": "Asetuksissa on virheitä",
"description": "Ole hyvä ja korjaa asetusvirheet ennen tallentamista."
},
"saveSuccess": {
"title": "Tallennetaan asetukset",
"description": "Asetuksien muutos {{case}} on tallennettu."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} suosikit.",
"action": {
"added": "Lisätty",
"removed": "Poistettu",
"to": "saakka",
"from": "alkaen"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} estolista",
"action": {
"added": "Lisätty",
"removed": "Poistettu",
"to": "saakka",
"from": "alkaen"
}
}
},
"notifications": {
"copied": {
"label": "Kopioitu!"
},
"copyToClipboard": {
"label": "Kopioi leikepöydälle"
},
"hidePassword": {
"label": "Piilota salasana"
},
"showPassword": {
"label": "Näytä salasana"
},
"deliveryStatus": {
"delivered": "Toimitettu",
"failed": "Toimitus epäonnistui",
"waiting": "Odottaa",
"unknown": "Tuntematon"
}
},
"general": {
"label": "Yleinen"
},
"hardware": {
"label": "Laite"
},
"metrics": {
"label": "Mittaustiedot"
},
"role": {
"label": "Rooli"
},
"filter": {
"label": "Suodatus"
},
"advanced": {
"label": "Lisäasetukset"
},
"clearInput": {
"label": "Tyhjennä kenttä"
},
"resetFilters": {
"label": "Tyhjennä suodattimet"
},
"nodeName": {
"label": "Laitteen nimi tai numero",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Ajan käyttöaste (%)"
},
"batteryLevel": {
"label": "Akun varaus (%)",
"labelText": "Akun varaus (%): {{value}}"
},
"batteryVoltage": {
"label": "Akun jännite (V)",
"title": "Jännite"
},
"channelUtilization": {
"label": "Kanavan käyttö (%)"
},
"hops": {
"direct": "Suora",
"label": "Hyppyjen määrä",
"text": "Hyppyjen määrä: {{value}}"
},
"lastHeard": {
"label": "Viimeksi kuultu",
"labelText": "Viimeksi kuultu: {{value}}",
"nowLabel": "Nyt"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Suosikit"
},
"hide": {
"label": "Piilota"
},
"showOnly": {
"label": "Näytä pelkästään"
},
"viaMqtt": {
"label": "Yhdistetty MQTT-yhteydellä"
},
"hopsUnknown": {
"label": "Tuntematon määrä hyppyjä"
},
"showUnheard": {
"label": "Ei koskaan kuultu"
},
"language": {
"label": "Kieli",
"changeLanguage": "Vaihda kieli"
},
"theme": {
"dark": "Tumma",
"light": "Vaalea",
"system": "Automaattinen",
"changeTheme": "Vaihda väriteema"
},
"errorPage": {
"title": "Tämä on hieman noloa...",
"description1": "Pahoittelemme, mutta verkkosovelluksessa tapahtui virhe, joka aiheutti kaatumisen. <br /> \nTällaista ei pitäisi tapahtua ja me työskentelemme ahkerasti ongelman korjaamiseksi.",
"description2": "Paras tapa estää tämän tapahtuminen uudelleen sinulle tai kenellekään muulle, on ilmoittaa meille ongelmasta.",
"reportInstructions": "Lisääthän raporttiisi seuraavat tiedot:",
"reportSteps": {
"step1": "Mitä olit tekemässä virheen tapahtuessa",
"step2": "Mitä odotit tapahtuvan",
"step3": "Mitä todellisuudessa tapahtui",
"step4": "Muut mahdollisesti oleelliset tiedot"
},
"reportLink": "Voit raportoida ongelmasta <0>GitHubissa</0>",
"dashboardLink": "Palaa takaisin <0>hallintapaneeliin</0>",
"detailsSummary": "Virheen tiedot",
"errorMessageLabel": "Virheilmoitus:",
"stackTraceLabel": "Virheen jäljityslista:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® on Meshtastic LLC:n rekisteröity tavaramerkki. | <1>Oikeudelliset tiedot</1>",
"commitSha": "Ohjelmistokehitysversion SHA-tunniste: {{sha}}"
}
"navigation": {
"title": "Navigointi",
"messages": "Viestit",
"map": "Kartta",
"config": "Asetukset",
"radioConfig": "Radion asetukset",
"moduleConfig": "Moduulin asetukset",
"channels": "Kanavat",
"nodes": "Laitteet"
},
"app": {
"title": "Meshtastic",
"logo": "Meshtastic Logo"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Avaa sivupalkki",
"close": "Sulje sivupalkki"
}
},
"deviceInfo": {
"volts": "{{voltage}} volttia",
"firmware": {
"title": "Laiteohjelmisto",
"version": "v{{version}}",
"buildDate": "Koontipäivä: {{date}}"
},
"deviceName": {
"title": "Laitteen nimi",
"changeName": "Vaihda laitteen nimi",
"placeholder": "Anna laitteelle nimi"
},
"editDeviceName": "Muokkaa laitteen nimeä"
}
},
"batteryStatus": {
"charging": "{{level}}% latauksessa",
"pluggedIn": "Kytketty verkkovirtaan",
"title": "Akku"
},
"search": {
"nodes": "Etsi laitteita...",
"channels": "Etsi kanavia...",
"commandPalette": "Etsi komentoja..."
},
"toast": {
"positionRequestSent": {
"title": "Sijaintipyyntö lähetetty."
},
"requestingPosition": {
"title": "Pyydetään sijaintia, odota..."
},
"sendingTraceroute": {
"title": "Reitinselvitys lähetetty, odota..."
},
"tracerouteSent": {
"title": "Reitinselvitys lähetetty."
},
"savedChannel": {
"title": "Tallennettu Kanava: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Keskustelu käyttää PKI-salausta."
},
"pskEncryption": {
"title": "Keskustelu käyttää PKI-salausta."
}
},
"configSaveError": {
"title": "Virhe asetusten tallentamisessa",
"description": "Asetusten tallennuksessa tapahtui virhe."
},
"validationError": {
"title": "Asetuksissa on virheitä",
"description": "Ole hyvä ja korjaa asetusvirheet ennen tallentamista."
},
"saveSuccess": {
"title": "Tallennetaan asetukset",
"description": "Asetuksien muutos {{case}} on tallennettu."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} suosikit.",
"action": {
"added": "Lisätty",
"removed": "Poistettu",
"to": "saakka",
"from": "alkaen"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} estolista",
"action": {
"added": "Lisätty",
"removed": "Poistettu",
"to": "saakka",
"from": "alkaen"
}
}
},
"notifications": {
"copied": {
"label": "Kopioitu!"
},
"copyToClipboard": {
"label": "Kopioi leikepöydälle"
},
"hidePassword": {
"label": "Piilota salasana"
},
"showPassword": {
"label": "Näytä salasana"
},
"deliveryStatus": {
"delivered": "Toimitettu",
"failed": "Toimitus epäonnistui",
"waiting": "Odottaa",
"unknown": "Tuntematon"
}
},
"general": {
"label": "Yleinen"
},
"hardware": {
"label": "Laite"
},
"metrics": {
"label": "Mittaustiedot"
},
"role": {
"label": "Rooli"
},
"filter": {
"label": "Suodatus"
},
"advanced": {
"label": "Lisäasetukset"
},
"clearInput": {
"label": "Tyhjennä kenttä"
},
"resetFilters": {
"label": "Tyhjennä suodattimet"
},
"nodeName": {
"label": "Laitteen nimi tai numero",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Ajan käyttöaste (%)"
},
"batteryLevel": {
"label": "Akun varaus (%)",
"labelText": "Akun varaus (%): {{value}}"
},
"batteryVoltage": {
"label": "Akun jännite (V)",
"title": "Jännite"
},
"channelUtilization": {
"label": "Kanavan käyttö (%)"
},
"hops": {
"direct": "Suora",
"label": "Hyppyjen määrä",
"text": "Hyppyjen määrä: {{value}}"
},
"lastHeard": {
"label": "Viimeksi kuultu",
"labelText": "Viimeksi kuultu: {{value}}",
"nowLabel": "Nyt"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Suosikit"
},
"hide": {
"label": "Piilota"
},
"showOnly": {
"label": "Näytä pelkästään"
},
"viaMqtt": {
"label": "Yhdistetty MQTT-yhteydellä"
},
"hopsUnknown": {
"label": "Tuntematon määrä hyppyjä"
},
"showUnheard": {
"label": "Ei koskaan kuultu"
},
"language": {
"label": "Kieli",
"changeLanguage": "Vaihda kieli"
},
"theme": {
"dark": "Tumma",
"light": "Vaalea",
"system": "Automaattinen",
"changeTheme": "Vaihda väriteema"
},
"errorPage": {
"title": "Tämä on hieman noloa...",
"description1": "Pahoittelemme, mutta verkkosovelluksessa tapahtui virhe, joka aiheutti kaatumisen. <br /> \nTällaista ei pitäisi tapahtua ja me työskentelemme ahkerasti ongelman korjaamiseksi.",
"description2": "Paras tapa estää tämän tapahtuminen uudelleen sinulle tai kenellekään muulle, on ilmoittaa meille ongelmasta.",
"reportInstructions": "Lisääthän raporttiisi seuraavat tiedot:",
"reportSteps": {
"step1": "Mitä olit tekemässä virheen tapahtuessa",
"step2": "Mitä odotit tapahtuvan",
"step3": "Mitä todellisuudessa tapahtui",
"step4": "Muut mahdollisesti oleelliset tiedot"
},
"reportLink": "Voit raportoida ongelmasta <0>GitHubissa</0>",
"dashboardLink": "Palaa takaisin <0>hallintapaneeliin</0>",
"detailsSummary": "Virheen tiedot",
"errorMessageLabel": "Virheilmoitus:",
"stackTraceLabel": "Virheen jäljityslista:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® on Meshtastic LLC:n rekisteröity tavaramerkki. | <1>Oikeudelliset tiedot</1>",
"commitSha": "Ohjelmistokehitysversion SHA-tunniste: {{sha}}"
}
}

View File

@@ -1,69 +1,69 @@
{
"page": {
"sectionLabel": "Canaux",
"channelName": "Channel: {{channelName}}",
"broadcastLabel": "Principal",
"channelIndex": "Ch {{index}}"
},
"validation": {
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
},
"settings": {
"label": "Paramètres du canal",
"description": "Crypto, MQTT & misc settings"
},
"role": {
"label": "Rôle",
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
"options": {
"primary": "PRIMARY",
"disabled": "DISABLED",
"secondary": "SECONDARY"
}
},
"psk": {
"label": "Pre-Shared Key",
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
"generate": "Generate"
},
"name": {
"label": "Nom",
"description": "A unique name for the channel <12 bytes, leave blank for default"
},
"uplinkEnabled": {
"label": "Uplink Enabled",
"description": "Send messages from the local mesh to MQTT"
},
"downlinkEnabled": {
"label": "Downlink Enabled",
"description": "Send messages from MQTT to the local mesh"
},
"positionPrecision": {
"label": "Location",
"description": "The precision of the location to share with the channel. Can be disabled.",
"options": {
"none": "Do not share location",
"precise": "Precise Location",
"metric_km23": "Within 23 kilometers",
"metric_km12": "Within 12 kilometers",
"metric_km5_8": "Within 5.8 kilometers",
"metric_km2_9": "Within 2.9 kilometers",
"metric_km1_5": "Within 1.5 kilometers",
"metric_m700": "Within 700 meters",
"metric_m350": "Within 350 meters",
"metric_m200": "Within 200 meters",
"metric_m90": "Within 90 meters",
"metric_m50": "Within 50 meters",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
"page": {
"sectionLabel": "Canaux",
"channelName": "Channel: {{channelName}}",
"broadcastLabel": "Principal",
"channelIndex": "Ch {{index}}"
},
"validation": {
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
},
"settings": {
"label": "Paramètres du canal",
"description": "Crypto, MQTT & misc settings"
},
"role": {
"label": "Rôle",
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
"options": {
"primary": "PRIMARY",
"disabled": "DISABLED",
"secondary": "SECONDARY"
}
},
"psk": {
"label": "Pre-Shared Key",
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
"generate": "Generate"
},
"name": {
"label": "Nom",
"description": "A unique name for the channel <12 bytes, leave blank for default"
},
"uplinkEnabled": {
"label": "Uplink Enabled",
"description": "Send messages from the local mesh to MQTT"
},
"downlinkEnabled": {
"label": "Downlink Enabled",
"description": "Send messages from MQTT to the local mesh"
},
"positionPrecision": {
"label": "Location",
"description": "The precision of the location to share with the channel. Can be disabled.",
"options": {
"none": "Do not share location",
"precise": "Precise Location",
"metric_km23": "Within 23 kilometers",
"metric_km12": "Within 12 kilometers",
"metric_km5_8": "Within 5.8 kilometers",
"metric_km2_9": "Within 2.9 kilometers",
"metric_km1_5": "Within 1.5 kilometers",
"metric_m700": "Within 700 meters",
"metric_m350": "Within 350 meters",
"metric_m200": "Within 200 meters",
"metric_m90": "Within 90 meters",
"metric_m50": "Within 50 meters",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
}

View File

@@ -1,50 +1,50 @@
{
"emptyState": "No results found.",
"page": {
"title": "Command Menu"
},
"pinGroup": {
"label": "Pin command group"
},
"unpinGroup": {
"label": "Unpin command group"
},
"goto": {
"label": "Goto",
"command": {
"messages": "Messages",
"map": "Carte",
"config": "Config",
"channels": "Canaux",
"nodes": "Noeuds"
}
},
"manage": {
"label": "Manage",
"command": {
"switchNode": "Switch Node",
"connectNewNode": "Connect New Node"
}
},
"contextual": {
"label": "Contextual",
"command": {
"qrCode": "QR Code",
"qrGenerator": "Generator",
"qrImport": "Import",
"scheduleShutdown": "Schedule Shutdown",
"scheduleReboot": "Schedule Reboot",
"rebootToOtaMode": "Reboot To OTA Mode",
"resetNodeDb": "Reset Node DB",
"factoryResetDevice": "Factory Reset Device",
"factoryResetConfig": "Factory Reset Config"
}
},
"debug": {
"label": "Debug",
"command": {
"reconfigure": "Reconfigure",
"clearAllStoredMessages": "Clear All Stored Message"
}
}
"emptyState": "No results found.",
"page": {
"title": "Command Menu"
},
"pinGroup": {
"label": "Pin command group"
},
"unpinGroup": {
"label": "Unpin command group"
},
"goto": {
"label": "Goto",
"command": {
"messages": "Messages",
"map": "Carte",
"config": "Config",
"channels": "Canaux",
"nodes": "Noeuds"
}
},
"manage": {
"label": "Manage",
"command": {
"switchNode": "Switch Node",
"connectNewNode": "Connect New Node"
}
},
"contextual": {
"label": "Contextual",
"command": {
"qrCode": "QR Code",
"qrGenerator": "Generator",
"qrImport": "Import",
"scheduleShutdown": "Schedule Shutdown",
"scheduleReboot": "Schedule Reboot",
"rebootToOtaMode": "Reboot To OTA Mode",
"resetNodeDb": "Reset Node DB",
"factoryResetDevice": "Factory Reset Device",
"factoryResetConfig": "Factory Reset Config"
}
},
"debug": {
"label": "Debug",
"command": {
"reconfigure": "Reconfigure",
"clearAllStoredMessages": "Clear All Stored Message"
}
}
}

View File

@@ -1,141 +1,141 @@
{
"button": {
"apply": "Appliquer",
"backupKey": "Backup Key",
"cancel": "Annuler",
"clearMessages": "Clear Messages",
"close": "Fermer",
"confirm": "Confirm",
"delete": "Effacer",
"dismiss": "Annuler",
"download": "Download",
"export": "Export",
"generate": "Generate",
"regenerate": "Regenerate",
"import": "Import",
"message": "Message",
"now": "Now",
"ok": "D'accord",
"print": "Print",
"rebootOtaNow": "Reboot to OTA Mode Now",
"remove": "Supprimer",
"requestNewKeys": "Request New Keys",
"requestPosition": "Request Position",
"reset": "Réinitialiser",
"save": "Sauvegarder",
"scanQr": "Scan QR Code",
"traceRoute": "Trace Route",
"submit": "Submit"
},
"app": {
"title": "Meshtastic",
"fullTitle": "Meshtastic Web Client"
},
"loading": "Loading...",
"unit": {
"cps": "CPS",
"dbm": "dBm",
"hertz": "Hz",
"hop": {
"one": "Hop",
"plural": "Hops"
},
"hopsAway": {
"one": "{{count}} hop away",
"plural": "{{count}} hops away",
"unknown": "Unknown hops away"
},
"megahertz": "MHz",
"raw": "raw",
"meter": {
"one": "Meter",
"plural": "Meters",
"suffix": "m"
},
"minute": {
"one": "Minute",
"plural": "Minutes"
},
"hour": {
"one": "Hour",
"plural": "Hours"
},
"millisecond": {
"one": "Millisecond",
"plural": "Milliseconds",
"suffix": "ms"
},
"second": {
"one": "Second",
"plural": "Seconds"
},
"day": {
"one": "Day",
"plural": "Days"
},
"month": {
"one": "Month",
"plural": "Months"
},
"year": {
"one": "Year",
"plural": "Years"
},
"snr": "SNR",
"volt": {
"one": "Volt",
"plural": "Volts",
"suffix": "V"
},
"record": {
"one": "Records",
"plural": "Records"
}
},
"security": {
"0bit": "Empty",
"8bit": "8 bit",
"128bit": "128 bit",
"256bit": "256 bit"
},
"unknown": {
"longName": "Inconnu",
"shortName": "UNK",
"notAvailable": "N/A",
"num": "??"
},
"nodeUnknownPrefix": "!",
"unset": "UNSET",
"fallbackName": "Meshtastic {{last4}}",
"node": "Node",
"formValidation": {
"unsavedChanges": "Unsaved changes",
"tooBig": {
"string": "Too long, expected less than or equal to {{maximum}} characters.",
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
},
"tooSmall": {
"string": "Too short, expected more than or equal to {{minimum}} characters.",
"number": "Too small, expected a number larger than or equal to {{minimum}}."
},
"invalidFormat": {
"ipv4": "Invalid format, expected an IPv4 address.",
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
},
"invalidType": {
"number": "Invalid type, expected a number."
},
"pskLength": {
"0bit": "Key is required to be empty.",
"8bit": "Key is required to be an 8 bit pre-shared key (PSK).",
"128bit": "Key is required to be a 128 bit pre-shared key (PSK).",
"256bit": "Key is required to be a 256 bit pre-shared key (PSK)."
},
"required": {
"generic": "This field is required.",
"managed": "At least one admin key is requred if the node is managed.",
"key": "Key is required."
}
}
"button": {
"apply": "Appliquer",
"backupKey": "Backup Key",
"cancel": "Annuler",
"clearMessages": "Clear Messages",
"close": "Fermer",
"confirm": "Confirm",
"delete": "Effacer",
"dismiss": "Annuler",
"download": "Download",
"export": "Export",
"generate": "Generate",
"regenerate": "Regenerate",
"import": "Import",
"message": "Message",
"now": "Now",
"ok": "D'accord",
"print": "Print",
"rebootOtaNow": "Reboot to OTA Mode Now",
"remove": "Supprimer",
"requestNewKeys": "Request New Keys",
"requestPosition": "Request Position",
"reset": "Réinitialiser",
"save": "Sauvegarder",
"scanQr": "Scan QR Code",
"traceRoute": "Trace Route",
"submit": "Submit"
},
"app": {
"title": "Meshtastic",
"fullTitle": "Meshtastic Web Client"
},
"loading": "Loading...",
"unit": {
"cps": "CPS",
"dbm": "dBm",
"hertz": "Hz",
"hop": {
"one": "Hop",
"plural": "Hops"
},
"hopsAway": {
"one": "{{count}} hop away",
"plural": "{{count}} hops away",
"unknown": "Unknown hops away"
},
"megahertz": "MHz",
"raw": "raw",
"meter": {
"one": "Meter",
"plural": "Meters",
"suffix": "m"
},
"minute": {
"one": "Minute",
"plural": "Minutes"
},
"hour": {
"one": "Hour",
"plural": "Hours"
},
"millisecond": {
"one": "Millisecond",
"plural": "Milliseconds",
"suffix": "ms"
},
"second": {
"one": "Second",
"plural": "Seconds"
},
"day": {
"one": "Day",
"plural": "Days"
},
"month": {
"one": "Month",
"plural": "Months"
},
"year": {
"one": "Year",
"plural": "Years"
},
"snr": "SNR",
"volt": {
"one": "Volt",
"plural": "Volts",
"suffix": "V"
},
"record": {
"one": "Records",
"plural": "Records"
}
},
"security": {
"0bit": "Empty",
"8bit": "8 bit",
"128bit": "128 bit",
"256bit": "256 bit"
},
"unknown": {
"longName": "Inconnu",
"shortName": "UNK",
"notAvailable": "N/A",
"num": "??"
},
"nodeUnknownPrefix": "!",
"unset": "UNSET",
"fallbackName": "Meshtastic {{last4}}",
"node": "Node",
"formValidation": {
"unsavedChanges": "Unsaved changes",
"tooBig": {
"string": "Too long, expected less than or equal to {{maximum}} characters.",
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
},
"tooSmall": {
"string": "Too short, expected more than or equal to {{minimum}} characters.",
"number": "Too small, expected a number larger than or equal to {{minimum}}."
},
"invalidFormat": {
"ipv4": "Invalid format, expected an IPv4 address.",
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
},
"invalidType": {
"number": "Invalid type, expected a number."
},
"pskLength": {
"0bit": "Key is required to be empty.",
"8bit": "Key is required to be an 8 bit pre-shared key (PSK).",
"128bit": "Key is required to be a 128 bit pre-shared key (PSK).",
"256bit": "Key is required to be a 256 bit pre-shared key (PSK)."
},
"required": {
"generic": "This field is required.",
"managed": "At least one admin key is requred if the node is managed.",
"key": "Key is required."
}
}
}

Some files were not shown because too many files have changed in this diff Show More