refactor: switch to using Bun (#718)
This commit is contained in:
@@ -9,4 +9,4 @@ if [ -f "$SIMPLE_GIT_HOOKS_RC" ]; then
|
|||||||
. "$SIMPLE_GIT_HOOKS_RC"
|
. "$SIMPLE_GIT_HOOKS_RC"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd packages/web && deno task lint:fix && deno task format
|
# cd packages/web && bun run lint && bun run format
|
||||||
+14
-14
@@ -16,29 +16,29 @@ jobs:
|
|||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup Deno
|
- name: Setup Bun
|
||||||
uses: denoland/setup-deno@v2
|
uses: oven-sh/setup-bun@v2
|
||||||
with:
|
with:
|
||||||
deno-version: v2.x
|
bun-version: latest
|
||||||
|
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: deno install
|
run: bun install
|
||||||
|
|
||||||
- name: Cache Deno dependencies
|
- name: Cache Bun dependencies
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
~/.cache/deno
|
~/.bun/install/cache
|
||||||
packages/web/deno.lock
|
packages/web/node_modules
|
||||||
key: ${{ runner.os }}-deno-${{ hashFiles('packages/web/deno.lock') }}
|
key: ${{ runner.os }}-bun-${{ hashFiles('packages/web/bun.lockb') }}
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-deno-
|
${{ runner.os }}-bun-
|
||||||
|
|
||||||
- name: Run linter
|
# - name: Run linter
|
||||||
run: deno lint
|
# run: bun run lint
|
||||||
|
|
||||||
- name: Check formatter
|
# - name: Check formatter
|
||||||
run: deno fmt --check
|
# run: bun run check
|
||||||
|
|
||||||
- name: Build Package
|
- name: Build Package
|
||||||
run: deno task --filter web build
|
run: bun run build
|
||||||
|
|||||||
@@ -15,18 +15,20 @@ jobs:
|
|||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup Deno
|
- name: Setup Bun
|
||||||
uses: denoland/setup-deno@v2
|
uses: oven-sh/setup-bun@v2
|
||||||
with:
|
with:
|
||||||
deno-version: v2.x
|
bun-version: latest
|
||||||
|
|
||||||
- name: Cache Deno dependencies
|
- name: Cache Bun dependencies
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.setup-deno.outputs.deno-cache-path }}
|
path: |
|
||||||
key: deno-cache-${{ runner.os }}-${{ hashFiles('**/deno.lock') }}
|
~/.bun/install/cache
|
||||||
|
packages/web/node_modules
|
||||||
|
key: ${{ runner.os }}-bun-${{ hashFiles('packages/web/bun.lockb') }}
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
deno-cache-${{ runner.os }}-*
|
${{ runner.os }}-bun-
|
||||||
|
|
||||||
# - name: Run tests
|
# - name: Run tests
|
||||||
# working-directory: packages/web
|
# working-directory: packages/web
|
||||||
@@ -34,15 +36,15 @@ jobs:
|
|||||||
|
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
working-directory: packages/web
|
working-directory: packages/web
|
||||||
run: deno install
|
run: bun install
|
||||||
|
|
||||||
- name: Build Package
|
- name: Build Package
|
||||||
working-directory: packages/web
|
working-directory: packages/web
|
||||||
run: deno task build
|
run: bun run build
|
||||||
|
|
||||||
- name: Package Output
|
- name: Package Output
|
||||||
working-directory: packages/web
|
working-directory: packages/web
|
||||||
run: deno task package
|
run: bun run package
|
||||||
|
|
||||||
- name: Archive compressed build
|
- name: Archive compressed build
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
|
|||||||
+16
-16
@@ -13,34 +13,34 @@ jobs:
|
|||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup Deno
|
- name: Setup Bun
|
||||||
uses: denoland/setup-deno@v2
|
uses: oven-sh/setup-bun@v2
|
||||||
with:
|
with:
|
||||||
deno-version: v2.x
|
bun-version: latest
|
||||||
|
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
# Commands will run from 'packages/web'
|
# Commands will run from 'packages/web'
|
||||||
working-directory: packages/web
|
working-directory: packages/web
|
||||||
run: deno install
|
run: bun install
|
||||||
|
|
||||||
- name: Cache Deno dependencies
|
- name: Cache Bun dependencies
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
~/.cache/deno
|
~/.bun/install/cache
|
||||||
packages/web/deno.lock
|
packages/web/node_modules
|
||||||
key: ${{ runner.os }}-deno-${{ hashFiles('packages/web/deno.lock') }}
|
key: ${{ runner.os }}-bun-${{ hashFiles('packages/web/bun.lockb') }}
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-deno-
|
${{ runner.os }}-bun-
|
||||||
|
|
||||||
- name: Run linter
|
# - name: Run linter
|
||||||
working-directory: packages/web
|
# working-directory: packages/web
|
||||||
run: deno lint
|
# run: bun run lint
|
||||||
|
|
||||||
- name: Check formatter
|
# - name: Check formatter
|
||||||
working-directory: packages/web
|
# working-directory: packages/web
|
||||||
run: deno fmt --check
|
# run: bun run check
|
||||||
|
|
||||||
- name: Build Package
|
- name: Build Package
|
||||||
working-directory: packages/web
|
working-directory: packages/web
|
||||||
run: deno task --filter web build
|
run: bun run build
|
||||||
|
|||||||
@@ -19,19 +19,27 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
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
|
- name: Setup Deno
|
||||||
uses: denoland/setup-deno@v2
|
uses: denoland/setup-deno@v2
|
||||||
with:
|
with:
|
||||||
deno-version: v2.x
|
deno-version: v2.x
|
||||||
|
|
||||||
- name: Cache Deno Dependencies
|
- name: Cache Bun Dependencies
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: ~/.cache/deno
|
path: |
|
||||||
key: ${{ runner.os }}-deno-${{ hashFiles('**/deno.lock') }}
|
~/.bun/install/cache
|
||||||
|
packages/web/node_modules
|
||||||
|
key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lockb') }}
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-deno-
|
${{ runner.os }}-bun-
|
||||||
|
|
||||||
# --- Determine Changed Packages ---
|
# --- Determine Changed Packages ---
|
||||||
- name: Get Changed Package Directories
|
- name: Get Changed Package Directories
|
||||||
@@ -98,12 +106,12 @@ jobs:
|
|||||||
- name: Run Web App Tests
|
- name: Run Web App Tests
|
||||||
if: steps.web_changes.outputs.web_changed == 'true'
|
if: steps.web_changes.outputs.web_changed == 'true'
|
||||||
working-directory: packages/web
|
working-directory: packages/web
|
||||||
run: deno task test
|
run: bun run test
|
||||||
|
|
||||||
- name: Create Web App Release Archive
|
- name: Create Web App Release Archive
|
||||||
if: steps.web_changes.outputs.web_changed == 'true'
|
if: steps.web_changes.outputs.web_changed == 'true'
|
||||||
working-directory: packages/web
|
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
|
- name: Upload Web App Archive
|
||||||
if: steps.web_changes.outputs.web_changed == 'true'
|
if: steps.web_changes.outputs.web_changed == 'true'
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"recommendations": ["bradlc.vscode-tailwindcss", "denoland.vscode-deno"]
|
"recommendations": ["bradlc.vscode-tailwindcss", "denoland.vscode-deno"]
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+2
-5
@@ -1,9 +1,6 @@
|
|||||||
{
|
{
|
||||||
"deno.enable": true,
|
|
||||||
"deno.suggest.imports.autoDiscover": true,
|
|
||||||
"editor.formatOnSave": true,
|
"editor.formatOnSave": true,
|
||||||
"editor.defaultFormatter": "denoland.vscode-deno",
|
"editor.codeActionsOnSave": {
|
||||||
"[typescript]": {
|
"source.fixAll.biome": "explicit",
|
||||||
"editor.defaultFormatter": "denoland.vscode-deno"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ All `Meshtastic JS` packages (core and transports) are published both to
|
|||||||
|
|
||||||
This monorepo leverages the following technologies:
|
This monorepo leverages the following technologies:
|
||||||
|
|
||||||
- **Runtime:** Deno
|
- **Runtime:** Bun
|
||||||
- **Web Client:** React.js
|
- **Web Client:** React.js
|
||||||
- **Styling:** Tailwind CSS
|
- **Styling:** Tailwind CSS
|
||||||
- **Bundling:** Vite
|
- **Bundling:** Vite
|
||||||
@@ -56,7 +56,7 @@ This monorepo leverages the following technologies:
|
|||||||
|
|
||||||
### Prerequisites
|
### 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.
|
monorepo. Follow the installation instructions on their home page.
|
||||||
|
|
||||||
### Development Setup
|
### Development Setup
|
||||||
@@ -68,7 +68,7 @@ monorepo. Follow the installation instructions on their home page.
|
|||||||
```
|
```
|
||||||
2. **Install dependencies for all packages:**
|
2. **Install dependencies for all packages:**
|
||||||
```bash
|
```bash
|
||||||
deno task install:all
|
bun install
|
||||||
```
|
```
|
||||||
This command installs all necessary dependencies for all packages within the
|
This command installs all necessary dependencies for all packages within the
|
||||||
monorepo.
|
monorepo.
|
||||||
@@ -80,7 +80,7 @@ monorepo. Follow the installation instructions on their home page.
|
|||||||
To start the development server for the web client:
|
To start the development server for the web client:
|
||||||
|
|
||||||
```bash
|
```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
|
This will typically run the web client on http://localhost:3000 and requires a
|
||||||
@@ -89,11 +89,11 @@ Chromium browser
|
|||||||
## Meshtastic JS Packages
|
## Meshtastic JS Packages
|
||||||
|
|
||||||
While the js packages are primarily libraries, you can run their tests or
|
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:
|
example, to run tests for a specific package:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
deno task --filter core test
|
bun run --filter core test
|
||||||
```
|
```
|
||||||
|
|
||||||
### Feedback
|
### 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
|
[issues tracker](https://github.com/meshtastic/web/issues). Your feedback helps
|
||||||
improve the stability of future releases
|
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:
|
reasons:
|
||||||
|
|
||||||
- **Built-in Security**: Deno's security-first approach requires explicit
|
- **Fast Performance**: Bun is built from the ground up for speed, offering
|
||||||
permissions for file, network, and environment access, reducing vulnerability
|
significantly faster package installation and bundling compared to other
|
||||||
risks.
|
JavaScript runtimes.
|
||||||
- **TypeScript Support**: Native TypeScript support without additional
|
- **TypeScript Support**: Native TypeScript support without additional
|
||||||
configuration, enhancing code quality and developer experience.
|
configuration, enhancing code quality and developer experience.
|
||||||
- **Modern JavaScript**: First-class support for ESM imports, top-level await,
|
- **Modern JavaScript**: First-class support for ESM imports, top-level await,
|
||||||
and other modern JavaScript features.
|
and other modern JavaScript features.
|
||||||
- **Simplified Tooling**: Built-in formatter, linter, test runner, and bundler
|
- **All-in-One Tooling**: Built-in package manager, bundler, test runner, and
|
||||||
eliminate the need for multiple third-party tools.
|
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
|
- **Reproducible Builds**: Lockfile ensures consistent builds across all
|
||||||
environments.
|
environments.
|
||||||
- **Web Standard APIs**: Uses browser-compatible APIs, making code more portable
|
|
||||||
between server and client environments.
|
|
||||||
|
|
||||||
### Contributing
|
### Contributing
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"name": "@meshtastic/core",
|
"name": "@meshtastic/core",
|
||||||
"version": "2.6.4",
|
"version": "2.6.4",
|
||||||
"description": "Core functionalities for Meshtastic web applications.",
|
"description": "Core functionalities for Meshtastic web applications.",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./mod.ts"
|
".": "./mod.ts"
|
||||||
},
|
},
|
||||||
"imports": {
|
"imports": {
|
||||||
"crc": "npm:crc@^4.3.2"
|
"crc": "npm:crc@^4.3.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,6 @@ const broadcastNum = 0xffffffff;
|
|||||||
const minFwVer = 2.2;
|
const minFwVer = 2.2;
|
||||||
|
|
||||||
export const Constants = {
|
export const Constants = {
|
||||||
broadcastNum,
|
broadcastNum,
|
||||||
minFwVer,
|
minFwVer,
|
||||||
};
|
};
|
||||||
|
|||||||
+1150
-1173
File diff suppressed because it is too large
Load Diff
+84
-84
@@ -1,45 +1,45 @@
|
|||||||
import type * as Protobuf from "@meshtastic/protobufs";
|
import type * as Protobuf from "@meshtastic/protobufs";
|
||||||
|
|
||||||
interface Packet {
|
interface Packet {
|
||||||
type: "packet";
|
type: "packet";
|
||||||
data: Uint8Array;
|
data: Uint8Array;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface DebugLog {
|
interface DebugLog {
|
||||||
type: "debug";
|
type: "debug";
|
||||||
data: string;
|
data: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type DeviceOutput = Packet | DebugLog;
|
export type DeviceOutput = Packet | DebugLog;
|
||||||
|
|
||||||
export interface Transport {
|
export interface Transport {
|
||||||
toDevice: WritableStream<Uint8Array>;
|
toDevice: WritableStream<Uint8Array>;
|
||||||
fromDevice: ReadableStream<DeviceOutput>;
|
fromDevice: ReadableStream<DeviceOutput>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface QueueItem {
|
export interface QueueItem {
|
||||||
id: number;
|
id: number;
|
||||||
data: Uint8Array;
|
data: Uint8Array;
|
||||||
sent: boolean;
|
sent: boolean;
|
||||||
added: Date;
|
added: Date;
|
||||||
promise: Promise<number>;
|
promise: Promise<number>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface HttpRetryConfig {
|
export interface HttpRetryConfig {
|
||||||
maxRetries: number;
|
maxRetries: number;
|
||||||
initialDelayMs: number;
|
initialDelayMs: number;
|
||||||
maxDelayMs: number;
|
maxDelayMs: number;
|
||||||
backoffFactor: number;
|
backoffFactor: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum DeviceStatusEnum {
|
export enum DeviceStatusEnum {
|
||||||
DeviceRestarting = 1,
|
DeviceRestarting = 1,
|
||||||
DeviceDisconnected = 2,
|
DeviceDisconnected = 2,
|
||||||
DeviceConnecting = 3,
|
DeviceConnecting = 3,
|
||||||
DeviceReconnecting = 4,
|
DeviceReconnecting = 4,
|
||||||
DeviceConnected = 5,
|
DeviceConnected = 5,
|
||||||
DeviceConfiguring = 6,
|
DeviceConfiguring = 6,
|
||||||
DeviceConfigured = 7,
|
DeviceConfigured = 7,
|
||||||
}
|
}
|
||||||
|
|
||||||
export type LogEventPacket = LogEvent & { date: Date };
|
export type LogEventPacket = LogEvent & { date: Date };
|
||||||
@@ -47,83 +47,83 @@ export type LogEventPacket = LogEvent & { date: Date };
|
|||||||
export type PacketDestination = "broadcast" | "direct";
|
export type PacketDestination = "broadcast" | "direct";
|
||||||
|
|
||||||
export interface PacketMetadata<T> {
|
export interface PacketMetadata<T> {
|
||||||
id: number;
|
id: number;
|
||||||
rxTime: Date;
|
rxTime: Date;
|
||||||
type: PacketDestination;
|
type: PacketDestination;
|
||||||
from: number;
|
from: number;
|
||||||
to: number;
|
to: number;
|
||||||
channel: ChannelNumber;
|
channel: ChannelNumber;
|
||||||
data: T;
|
data: T;
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum EmitterScope {
|
export enum EmitterScope {
|
||||||
MeshDevice = 1,
|
MeshDevice = 1,
|
||||||
SerialConnection = 2,
|
SerialConnection = 2,
|
||||||
NodeSerialConnection = 3,
|
NodeSerialConnection = 3,
|
||||||
BleConnection = 4,
|
BleConnection = 4,
|
||||||
HttpConnection = 5,
|
HttpConnection = 5,
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum Emitter {
|
export enum Emitter {
|
||||||
Constructor = 0,
|
Constructor = 0,
|
||||||
SendText = 1,
|
SendText = 1,
|
||||||
SendWaypoint = 2,
|
SendWaypoint = 2,
|
||||||
SendPacket = 3,
|
SendPacket = 3,
|
||||||
SendRaw = 4,
|
SendRaw = 4,
|
||||||
SetConfig = 5,
|
SetConfig = 5,
|
||||||
SetModuleConfig = 6,
|
SetModuleConfig = 6,
|
||||||
ConfirmSetConfig = 7,
|
ConfirmSetConfig = 7,
|
||||||
SetOwner = 8,
|
SetOwner = 8,
|
||||||
SetChannel = 9,
|
SetChannel = 9,
|
||||||
ConfirmSetChannel = 10,
|
ConfirmSetChannel = 10,
|
||||||
ClearChannel = 11,
|
ClearChannel = 11,
|
||||||
GetChannel = 12,
|
GetChannel = 12,
|
||||||
GetAllChannels = 13,
|
GetAllChannels = 13,
|
||||||
GetConfig = 14,
|
GetConfig = 14,
|
||||||
GetModuleConfig = 15,
|
GetModuleConfig = 15,
|
||||||
GetOwner = 16,
|
GetOwner = 16,
|
||||||
Configure = 17,
|
Configure = 17,
|
||||||
HandleFromRadio = 18,
|
HandleFromRadio = 18,
|
||||||
HandleMeshPacket = 19,
|
HandleMeshPacket = 19,
|
||||||
Connect = 20,
|
Connect = 20,
|
||||||
Ping = 21,
|
Ping = 21,
|
||||||
ReadFromRadio = 22,
|
ReadFromRadio = 22,
|
||||||
WriteToRadio = 23,
|
WriteToRadio = 23,
|
||||||
SetDebugMode = 24,
|
SetDebugMode = 24,
|
||||||
GetMetadata = 25,
|
GetMetadata = 25,
|
||||||
ResetNodes = 26,
|
ResetNodes = 26,
|
||||||
Shutdown = 27,
|
Shutdown = 27,
|
||||||
Reboot = 28,
|
Reboot = 28,
|
||||||
RebootOta = 29,
|
RebootOta = 29,
|
||||||
FactoryReset = 30,
|
FactoryReset = 30,
|
||||||
EnterDfuMode = 31,
|
EnterDfuMode = 31,
|
||||||
RemoveNodeByNum = 32,
|
RemoveNodeByNum = 32,
|
||||||
SetCannedMessages = 33,
|
SetCannedMessages = 33,
|
||||||
Disconnect = 34,
|
Disconnect = 34,
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface LogEvent {
|
export interface LogEvent {
|
||||||
scope: EmitterScope;
|
scope: EmitterScope;
|
||||||
emitter: Emitter;
|
emitter: Emitter;
|
||||||
message: string;
|
message: string;
|
||||||
level: Protobuf.Mesh.LogRecord_Level;
|
level: Protobuf.Mesh.LogRecord_Level;
|
||||||
packet?: Uint8Array;
|
packet?: Uint8Array;
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum ChannelNumber {
|
export enum ChannelNumber {
|
||||||
Primary = 0,
|
Primary = 0,
|
||||||
Channel1 = 1,
|
Channel1 = 1,
|
||||||
Channel2 = 2,
|
Channel2 = 2,
|
||||||
Channel3 = 3,
|
Channel3 = 3,
|
||||||
Channel4 = 4,
|
Channel4 = 4,
|
||||||
Channel5 = 5,
|
Channel5 = 5,
|
||||||
Channel6 = 6,
|
Channel6 = 6,
|
||||||
Admin = 7,
|
Admin = 7,
|
||||||
}
|
}
|
||||||
|
|
||||||
export type Destination = number | "self" | "broadcast";
|
export type Destination = number | "self" | "broadcast";
|
||||||
|
|
||||||
export interface PacketError {
|
export interface PacketError {
|
||||||
id: number;
|
id: number;
|
||||||
error: Protobuf.Mesh.Routing_Error;
|
error: Protobuf.Mesh.Routing_Error;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,467 +1,381 @@
|
|||||||
import { SimpleEventDispatcher } from "ste-simple-events";
|
|
||||||
import type * as Protobuf from "@meshtastic/protobufs";
|
import type * as Protobuf from "@meshtastic/protobufs";
|
||||||
|
import { SimpleEventDispatcher } from "ste-simple-events";
|
||||||
import type { PacketMetadata } from "../types.ts";
|
import type { PacketMetadata } from "../types.ts";
|
||||||
import type * as Types from "../types.ts";
|
import type * as Types from "../types.ts";
|
||||||
|
|
||||||
export class EventSystem {
|
export class EventSystem {
|
||||||
/**
|
/**
|
||||||
* Fires when a new FromRadio message has been received from the device
|
* Fires when a new FromRadio message has been received from the device
|
||||||
*
|
*
|
||||||
* @event onLogEvent
|
* @event onLogEvent
|
||||||
*/
|
*/
|
||||||
public readonly onLogEvent: SimpleEventDispatcher<
|
public readonly onLogEvent: SimpleEventDispatcher<Types.LogEventPacket> =
|
||||||
Types.LogEventPacket
|
new SimpleEventDispatcher<Types.LogEventPacket>();
|
||||||
> = new SimpleEventDispatcher<
|
|
||||||
Types.LogEventPacket
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new FromRadio message has been received from the device
|
* Fires when a new FromRadio message has been received from the device
|
||||||
*
|
*
|
||||||
* @event onFromRadio
|
* @event onFromRadio
|
||||||
*/
|
*/
|
||||||
public readonly onFromRadio: SimpleEventDispatcher<
|
public readonly onFromRadio: SimpleEventDispatcher<Protobuf.Mesh.FromRadio> =
|
||||||
Protobuf.Mesh.FromRadio
|
new SimpleEventDispatcher<Protobuf.Mesh.FromRadio>();
|
||||||
> = new SimpleEventDispatcher<
|
|
||||||
Protobuf.Mesh.FromRadio
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new FromRadio message containing a Data packet has been
|
* Fires when a new FromRadio message containing a Data packet has been
|
||||||
* received from the device
|
* received from the device
|
||||||
*
|
*
|
||||||
* @event onMeshPacket
|
* @event onMeshPacket
|
||||||
*/
|
*/
|
||||||
public readonly onMeshPacket: SimpleEventDispatcher<
|
public readonly onMeshPacket: SimpleEventDispatcher<Protobuf.Mesh.MeshPacket> =
|
||||||
Protobuf.Mesh.MeshPacket
|
new SimpleEventDispatcher<Protobuf.Mesh.MeshPacket>();
|
||||||
> = new SimpleEventDispatcher<
|
|
||||||
Protobuf.Mesh.MeshPacket
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MyNodeInfo message has been received from the device
|
* Fires when a new MyNodeInfo message has been received from the device
|
||||||
*
|
*
|
||||||
* @event onMyNodeInfo
|
* @event onMyNodeInfo
|
||||||
*/
|
*/
|
||||||
public readonly onMyNodeInfo: SimpleEventDispatcher<
|
public readonly onMyNodeInfo: SimpleEventDispatcher<Protobuf.Mesh.MyNodeInfo> =
|
||||||
Protobuf.Mesh.MyNodeInfo
|
new SimpleEventDispatcher<Protobuf.Mesh.MyNodeInfo>();
|
||||||
> = new SimpleEventDispatcher<
|
|
||||||
Protobuf.Mesh.MyNodeInfo
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing a NodeInfo packet has been
|
* Fires when a new MeshPacket message containing a NodeInfo packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onNodeInfoPacket
|
* @event onNodeInfoPacket
|
||||||
*/
|
*/
|
||||||
public readonly onNodeInfoPacket: SimpleEventDispatcher<
|
public readonly onNodeInfoPacket: SimpleEventDispatcher<Protobuf.Mesh.NodeInfo> =
|
||||||
Protobuf.Mesh.NodeInfo
|
new SimpleEventDispatcher<Protobuf.Mesh.NodeInfo>();
|
||||||
> = new SimpleEventDispatcher<
|
|
||||||
Protobuf.Mesh.NodeInfo
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new Channel message is received
|
* Fires when a new Channel message is received
|
||||||
*
|
*
|
||||||
* @event onChannelPacket
|
* @event onChannelPacket
|
||||||
*/
|
*/
|
||||||
public readonly onChannelPacket: SimpleEventDispatcher<
|
public readonly onChannelPacket: SimpleEventDispatcher<Protobuf.Channel.Channel> =
|
||||||
Protobuf.Channel.Channel
|
new SimpleEventDispatcher<Protobuf.Channel.Channel>();
|
||||||
> = new SimpleEventDispatcher<
|
|
||||||
Protobuf.Channel.Channel
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new Config message is received
|
* Fires when a new Config message is received
|
||||||
*
|
*
|
||||||
* @event onConfigPacket
|
* @event onConfigPacket
|
||||||
*/
|
*/
|
||||||
public readonly onConfigPacket: SimpleEventDispatcher<
|
public readonly onConfigPacket: SimpleEventDispatcher<Protobuf.Config.Config> =
|
||||||
Protobuf.Config.Config
|
new SimpleEventDispatcher<Protobuf.Config.Config>();
|
||||||
> = new SimpleEventDispatcher<
|
|
||||||
Protobuf.Config.Config
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new ModuleConfig message is received
|
* Fires when a new ModuleConfig message is received
|
||||||
*
|
*
|
||||||
* @event onModuleConfigPacket
|
* @event onModuleConfigPacket
|
||||||
*/
|
*/
|
||||||
public readonly onModuleConfigPacket: SimpleEventDispatcher<
|
public readonly onModuleConfigPacket: SimpleEventDispatcher<Protobuf.ModuleConfig.ModuleConfig> =
|
||||||
Protobuf.ModuleConfig.ModuleConfig
|
new SimpleEventDispatcher<Protobuf.ModuleConfig.ModuleConfig>();
|
||||||
> = new SimpleEventDispatcher<
|
|
||||||
Protobuf.ModuleConfig.ModuleConfig
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing a ATAK packet has been
|
* Fires when a new MeshPacket message containing a ATAK packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onAtakPacket
|
* @event onAtakPacket
|
||||||
*/
|
*/
|
||||||
public readonly onAtakPacket: SimpleEventDispatcher<
|
public readonly onAtakPacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Uint8Array>
|
PacketMetadata<Uint8Array>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
|
||||||
PacketMetadata<Uint8Array>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing a Text packet has been
|
* Fires when a new MeshPacket message containing a Text packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onMessagePacket
|
* @event onMessagePacket
|
||||||
*/
|
*/
|
||||||
public readonly onMessagePacket: SimpleEventDispatcher<
|
public readonly onMessagePacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<string>
|
PacketMetadata<string>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<string>>();
|
||||||
PacketMetadata<string>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing a Remote Hardware packet has
|
* Fires when a new MeshPacket message containing a Remote Hardware packet has
|
||||||
* been received from device
|
* been received from device
|
||||||
*
|
*
|
||||||
* @event onRemoteHardwarePacket
|
* @event onRemoteHardwarePacket
|
||||||
*/
|
*/
|
||||||
public readonly onRemoteHardwarePacket: SimpleEventDispatcher<
|
public readonly onRemoteHardwarePacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Protobuf.RemoteHardware.HardwareMessage>
|
PacketMetadata<Protobuf.RemoteHardware.HardwareMessage>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<
|
||||||
PacketMetadata<Protobuf.RemoteHardware.HardwareMessage>
|
PacketMetadata<Protobuf.RemoteHardware.HardwareMessage>
|
||||||
>();
|
>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing a Position packet has been
|
* Fires when a new MeshPacket message containing a Position packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onPositionPacket
|
* @event onPositionPacket
|
||||||
*/
|
*/
|
||||||
public readonly onPositionPacket: SimpleEventDispatcher<
|
public readonly onPositionPacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Protobuf.Mesh.Position>
|
PacketMetadata<Protobuf.Mesh.Position>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Protobuf.Mesh.Position>>();
|
||||||
PacketMetadata<Protobuf.Mesh.Position>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing a User packet has been
|
* Fires when a new MeshPacket message containing a User packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onUserPacket
|
* @event onUserPacket
|
||||||
*/
|
*/
|
||||||
public readonly onUserPacket: SimpleEventDispatcher<
|
public readonly onUserPacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Protobuf.Mesh.User>
|
PacketMetadata<Protobuf.Mesh.User>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Protobuf.Mesh.User>>();
|
||||||
PacketMetadata<Protobuf.Mesh.User>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing a Routing packet has been
|
* Fires when a new MeshPacket message containing a Routing packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onRoutingPacket
|
* @event onRoutingPacket
|
||||||
*/
|
*/
|
||||||
public readonly onRoutingPacket: SimpleEventDispatcher<
|
public readonly onRoutingPacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Protobuf.Mesh.Routing>
|
PacketMetadata<Protobuf.Mesh.Routing>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Protobuf.Mesh.Routing>>();
|
||||||
PacketMetadata<Protobuf.Mesh.Routing>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when the device receives a Metadata packet
|
* Fires when the device receives a Metadata packet
|
||||||
*
|
*
|
||||||
* @event onDeviceMetadataPacket
|
* @event onDeviceMetadataPacket
|
||||||
*/
|
*/
|
||||||
public readonly onDeviceMetadataPacket: SimpleEventDispatcher<
|
public readonly onDeviceMetadataPacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Protobuf.Mesh.DeviceMetadata>
|
PacketMetadata<Protobuf.Mesh.DeviceMetadata>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Protobuf.Mesh.DeviceMetadata>>();
|
||||||
PacketMetadata<Protobuf.Mesh.DeviceMetadata>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when the device receives a Canned Message Module message packet
|
* Fires when the device receives a Canned Message Module message packet
|
||||||
*
|
*
|
||||||
* @event onCannedMessageModulePacket
|
* @event onCannedMessageModulePacket
|
||||||
*/
|
*/
|
||||||
public readonly onCannedMessageModulePacket: SimpleEventDispatcher<
|
public readonly onCannedMessageModulePacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<string>
|
PacketMetadata<string>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<string>>();
|
||||||
PacketMetadata<string>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing a Waypoint packet has been
|
* Fires when a new MeshPacket message containing a Waypoint packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onWaypointPacket
|
* @event onWaypointPacket
|
||||||
*/
|
*/
|
||||||
public readonly onWaypointPacket: SimpleEventDispatcher<
|
public readonly onWaypointPacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Protobuf.Mesh.Waypoint>
|
PacketMetadata<Protobuf.Mesh.Waypoint>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Protobuf.Mesh.Waypoint>>();
|
||||||
PacketMetadata<Protobuf.Mesh.Waypoint>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing an Audio packet has been
|
* Fires when a new MeshPacket message containing an Audio packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onAudioPacket
|
* @event onAudioPacket
|
||||||
*/
|
*/
|
||||||
public readonly onAudioPacket: SimpleEventDispatcher<
|
public readonly onAudioPacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Uint8Array>
|
PacketMetadata<Uint8Array>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
|
||||||
PacketMetadata<Uint8Array>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing a Detection Sensor packet has been
|
* Fires when a new MeshPacket message containing a Detection Sensor packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onDetectionSensorPacket
|
* @event onDetectionSensorPacket
|
||||||
*/
|
*/
|
||||||
public readonly onDetectionSensorPacket: SimpleEventDispatcher<
|
public readonly onDetectionSensorPacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Uint8Array>
|
PacketMetadata<Uint8Array>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
|
||||||
PacketMetadata<Uint8Array>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing a Ping packet has been
|
* Fires when a new MeshPacket message containing a Ping packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onPingPacket
|
* @event onPingPacket
|
||||||
*/
|
*/
|
||||||
public readonly onPingPacket: SimpleEventDispatcher<
|
public readonly onPingPacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Uint8Array>
|
PacketMetadata<Uint8Array>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
|
||||||
PacketMetadata<Uint8Array>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing a IP Tunnel packet has been
|
* Fires when a new MeshPacket message containing a IP Tunnel packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onIpTunnelPacket
|
* @event onIpTunnelPacket
|
||||||
*/
|
*/
|
||||||
public readonly onIpTunnelPacket: SimpleEventDispatcher<
|
public readonly onIpTunnelPacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Uint8Array>
|
PacketMetadata<Uint8Array>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
|
||||||
PacketMetadata<Uint8Array>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing a Paxcounter packet has been
|
* Fires when a new MeshPacket message containing a Paxcounter packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onPaxcounterPacket
|
* @event onPaxcounterPacket
|
||||||
*/
|
*/
|
||||||
public readonly onPaxcounterPacket: SimpleEventDispatcher<
|
public readonly onPaxcounterPacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Protobuf.PaxCount.Paxcount>
|
PacketMetadata<Protobuf.PaxCount.Paxcount>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Protobuf.PaxCount.Paxcount>>();
|
||||||
PacketMetadata<Protobuf.PaxCount.Paxcount>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing a Serial packet has been
|
* Fires when a new MeshPacket message containing a Serial packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onSerialPacket
|
* @event onSerialPacket
|
||||||
*/
|
*/
|
||||||
public readonly onSerialPacket: SimpleEventDispatcher<
|
public readonly onSerialPacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Uint8Array>
|
PacketMetadata<Uint8Array>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
|
||||||
PacketMetadata<Uint8Array>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing a Store and Forward packet
|
* Fires when a new MeshPacket message containing a Store and Forward packet
|
||||||
* has been received from device
|
* has been received from device
|
||||||
*
|
*
|
||||||
* @event onStoreForwardPacket
|
* @event onStoreForwardPacket
|
||||||
*/
|
*/
|
||||||
public readonly onStoreForwardPacket: SimpleEventDispatcher<
|
public readonly onStoreForwardPacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Uint8Array>
|
PacketMetadata<Uint8Array>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
|
||||||
PacketMetadata<Uint8Array>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing a Store and Forward packet
|
* Fires when a new MeshPacket message containing a Store and Forward packet
|
||||||
* has been received from device
|
* has been received from device
|
||||||
*
|
*
|
||||||
* @event onRangeTestPacket
|
* @event onRangeTestPacket
|
||||||
*/
|
*/
|
||||||
public readonly onRangeTestPacket: SimpleEventDispatcher<
|
public readonly onRangeTestPacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Uint8Array>
|
PacketMetadata<Uint8Array>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
|
||||||
PacketMetadata<Uint8Array>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing a Telemetry packet has been
|
* Fires when a new MeshPacket message containing a Telemetry packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onTelemetryPacket
|
* @event onTelemetryPacket
|
||||||
*/
|
*/
|
||||||
public readonly onTelemetryPacket: SimpleEventDispatcher<
|
public readonly onTelemetryPacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Protobuf.Telemetry.Telemetry>
|
PacketMetadata<Protobuf.Telemetry.Telemetry>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Protobuf.Telemetry.Telemetry>>();
|
||||||
PacketMetadata<Protobuf.Telemetry.Telemetry>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing a ZPS packet has been
|
* Fires when a new MeshPacket message containing a ZPS packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onZPSPacket
|
* @event onZPSPacket
|
||||||
*/
|
*/
|
||||||
public readonly onZpsPacket: SimpleEventDispatcher<
|
public readonly onZpsPacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Uint8Array>
|
PacketMetadata<Uint8Array>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
|
||||||
PacketMetadata<Uint8Array>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing a Simulator packet has been
|
* Fires when a new MeshPacket message containing a Simulator packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onSimulatorPacket
|
* @event onSimulatorPacket
|
||||||
*/
|
*/
|
||||||
public readonly onSimulatorPacket: SimpleEventDispatcher<
|
public readonly onSimulatorPacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Uint8Array>
|
PacketMetadata<Uint8Array>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
|
||||||
PacketMetadata<Uint8Array>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing a Trace Route packet has been
|
* Fires when a new MeshPacket message containing a Trace Route packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onTraceRoutePacket
|
* @event onTraceRoutePacket
|
||||||
*/
|
*/
|
||||||
public readonly onTraceRoutePacket: SimpleEventDispatcher<
|
public readonly onTraceRoutePacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Protobuf.Mesh.RouteDiscovery>
|
PacketMetadata<Protobuf.Mesh.RouteDiscovery>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Protobuf.Mesh.RouteDiscovery>>();
|
||||||
PacketMetadata<Protobuf.Mesh.RouteDiscovery>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing a Neighbor Info packet has been
|
* Fires when a new MeshPacket message containing a Neighbor Info packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onNeighborInfoPacket
|
* @event onNeighborInfoPacket
|
||||||
*/
|
*/
|
||||||
public readonly onNeighborInfoPacket: SimpleEventDispatcher<
|
public readonly onNeighborInfoPacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Protobuf.Mesh.NeighborInfo>
|
PacketMetadata<Protobuf.Mesh.NeighborInfo>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Protobuf.Mesh.NeighborInfo>>();
|
||||||
PacketMetadata<Protobuf.Mesh.NeighborInfo>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing an ATAK packet has been
|
* Fires when a new MeshPacket message containing an ATAK packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onAtakPluginPacket
|
* @event onAtakPluginPacket
|
||||||
*/
|
*/
|
||||||
public readonly onAtakPluginPacket: SimpleEventDispatcher<
|
public readonly onAtakPluginPacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Uint8Array>
|
PacketMetadata<Uint8Array>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
|
||||||
PacketMetadata<Uint8Array>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing a Map Report packet has been
|
* Fires when a new MeshPacket message containing a Map Report packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onMapReportPacket
|
* @event onMapReportPacket
|
||||||
*/
|
*/
|
||||||
public readonly onMapReportPacket: SimpleEventDispatcher<
|
public readonly onMapReportPacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Uint8Array>
|
PacketMetadata<Uint8Array>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
|
||||||
PacketMetadata<Uint8Array>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing a Private packet has been
|
* Fires when a new MeshPacket message containing a Private packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onPrivatePacket
|
* @event onPrivatePacket
|
||||||
*/
|
*/
|
||||||
public readonly onPrivatePacket: SimpleEventDispatcher<
|
public readonly onPrivatePacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Uint8Array>
|
PacketMetadata<Uint8Array>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
|
||||||
PacketMetadata<Uint8Array>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new MeshPacket message containing an ATAK Forwarder packet has been
|
* Fires when a new MeshPacket message containing an ATAK Forwarder packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onAtakForwarderPacket
|
* @event onAtakForwarderPacket
|
||||||
*/
|
*/
|
||||||
public readonly onAtakForwarderPacket: SimpleEventDispatcher<
|
public readonly onAtakForwarderPacket: SimpleEventDispatcher<
|
||||||
PacketMetadata<Uint8Array>
|
PacketMetadata<Uint8Array>
|
||||||
> = new SimpleEventDispatcher<
|
> = new SimpleEventDispatcher<PacketMetadata<Uint8Array>>();
|
||||||
PacketMetadata<Uint8Array>
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when the devices connection or configuration status changes
|
* Fires when the devices connection or configuration status changes
|
||||||
*
|
*
|
||||||
* @event onDeviceStatus
|
* @event onDeviceStatus
|
||||||
*/
|
*/
|
||||||
public readonly onDeviceStatus: SimpleEventDispatcher<
|
public readonly onDeviceStatus: SimpleEventDispatcher<Types.DeviceStatusEnum> =
|
||||||
Types.DeviceStatusEnum
|
new SimpleEventDispatcher<Types.DeviceStatusEnum>();
|
||||||
> = new SimpleEventDispatcher<
|
|
||||||
Types.DeviceStatusEnum
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a new FromRadio message containing a LogRecord packet has been
|
* Fires when a new FromRadio message containing a LogRecord packet has been
|
||||||
* received from device
|
* received from device
|
||||||
*
|
*
|
||||||
* @event onLogRecord
|
* @event onLogRecord
|
||||||
*/
|
*/
|
||||||
public readonly onLogRecord: SimpleEventDispatcher<
|
public readonly onLogRecord: SimpleEventDispatcher<Protobuf.Mesh.LogRecord> =
|
||||||
Protobuf.Mesh.LogRecord
|
new SimpleEventDispatcher<Protobuf.Mesh.LogRecord>();
|
||||||
> = new SimpleEventDispatcher<
|
|
||||||
Protobuf.Mesh.LogRecord
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when the device receives a meshPacket, returns a timestamp
|
* Fires when the device receives a meshPacket, returns a timestamp
|
||||||
*
|
*
|
||||||
* @event onMeshHeartbeat
|
* @event onMeshHeartbeat
|
||||||
*/
|
*/
|
||||||
public readonly onMeshHeartbeat: SimpleEventDispatcher<Date> =
|
public readonly onMeshHeartbeat: SimpleEventDispatcher<Date> =
|
||||||
new SimpleEventDispatcher<Date>();
|
new SimpleEventDispatcher<Date>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Outputs any debug log data (currently serial connections only)
|
* Outputs any debug log data (currently serial connections only)
|
||||||
*
|
*
|
||||||
* @event onDeviceDebugLog
|
* @event onDeviceDebugLog
|
||||||
*/
|
*/
|
||||||
public readonly onDeviceDebugLog: SimpleEventDispatcher<Uint8Array> =
|
public readonly onDeviceDebugLog: SimpleEventDispatcher<Uint8Array> =
|
||||||
new SimpleEventDispatcher<Uint8Array>();
|
new SimpleEventDispatcher<Uint8Array>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Outputs status of pending settings changes
|
* Outputs status of pending settings changes
|
||||||
*
|
*
|
||||||
* @event onpendingSettingsChange
|
* @event onpendingSettingsChange
|
||||||
*/
|
*/
|
||||||
public readonly onPendingSettingsChange: SimpleEventDispatcher<
|
public readonly onPendingSettingsChange: SimpleEventDispatcher<boolean> =
|
||||||
boolean
|
new SimpleEventDispatcher<boolean>();
|
||||||
> = new SimpleEventDispatcher<
|
|
||||||
boolean
|
|
||||||
>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires when a QueueStatus message is generated
|
* Fires when a QueueStatus message is generated
|
||||||
*
|
*
|
||||||
* @event onQueueStatus
|
* @event onQueueStatus
|
||||||
*/
|
*/
|
||||||
public readonly onQueueStatus: SimpleEventDispatcher<
|
public readonly onQueueStatus: SimpleEventDispatcher<Protobuf.Mesh.QueueStatus> =
|
||||||
Protobuf.Mesh.QueueStatus
|
new SimpleEventDispatcher<Protobuf.Mesh.QueueStatus>();
|
||||||
> = new SimpleEventDispatcher<
|
|
||||||
Protobuf.Mesh.QueueStatus
|
|
||||||
>();
|
|
||||||
}
|
}
|
||||||
|
|||||||
+101
-101
@@ -1,119 +1,119 @@
|
|||||||
import { SimpleEventDispatcher } from "ste-simple-events";
|
|
||||||
import { fromBinary } from "@bufbuild/protobuf";
|
import { fromBinary } from "@bufbuild/protobuf";
|
||||||
import * as Protobuf from "@meshtastic/protobufs";
|
import * as Protobuf from "@meshtastic/protobufs";
|
||||||
|
import { SimpleEventDispatcher } from "ste-simple-events";
|
||||||
import type { PacketError, QueueItem } from "../types.ts";
|
import type { PacketError, QueueItem } from "../types.ts";
|
||||||
|
|
||||||
export class Queue {
|
export class Queue {
|
||||||
private queue: QueueItem[] = [];
|
private queue: QueueItem[] = [];
|
||||||
private lock = false;
|
private lock = false;
|
||||||
private ackNotifier = new SimpleEventDispatcher<number>();
|
private ackNotifier = new SimpleEventDispatcher<number>();
|
||||||
private errorNotifier = new SimpleEventDispatcher<PacketError>();
|
private errorNotifier = new SimpleEventDispatcher<PacketError>();
|
||||||
private timeout: number;
|
private timeout: number;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.timeout = 60000;
|
this.timeout = 60000;
|
||||||
}
|
}
|
||||||
|
|
||||||
public getState(): QueueItem[] {
|
public getState(): QueueItem[] {
|
||||||
return this.queue;
|
return this.queue;
|
||||||
}
|
}
|
||||||
|
|
||||||
public clear(): void {
|
public clear(): void {
|
||||||
this.queue = [];
|
this.queue = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
public push(item: Omit<QueueItem, "promise" | "sent" | "added">): void {
|
public push(item: Omit<QueueItem, "promise" | "sent" | "added">): void {
|
||||||
const queueItem: QueueItem = {
|
const queueItem: QueueItem = {
|
||||||
...item,
|
...item,
|
||||||
sent: false,
|
sent: false,
|
||||||
added: new Date(),
|
added: new Date(),
|
||||||
promise: new Promise<number>((resolve, reject) => {
|
promise: new Promise<number>((resolve, reject) => {
|
||||||
this.ackNotifier.subscribe((id) => {
|
this.ackNotifier.subscribe((id) => {
|
||||||
if (item.id === id) {
|
if (item.id === id) {
|
||||||
this.remove(item.id);
|
this.remove(item.id);
|
||||||
resolve(id);
|
resolve(id);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
this.errorNotifier.subscribe((e) => {
|
this.errorNotifier.subscribe((e) => {
|
||||||
if (item.id === e.id) {
|
if (item.id === e.id) {
|
||||||
this.remove(item.id);
|
this.remove(item.id);
|
||||||
reject(e);
|
reject(e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
if (this.queue.findIndex((qi) => qi.id === item.id) !== -1) {
|
if (this.queue.findIndex((qi) => qi.id === item.id) !== -1) {
|
||||||
this.remove(item.id);
|
this.remove(item.id);
|
||||||
const decoded = fromBinary(Protobuf.Mesh.ToRadioSchema, item.data);
|
const decoded = fromBinary(Protobuf.Mesh.ToRadioSchema, item.data);
|
||||||
console.warn(
|
console.warn(
|
||||||
`Packet ${item.id} of type ${decoded.payloadVariant.case} timed out`,
|
`Packet ${item.id} of type ${decoded.payloadVariant.case} timed out`,
|
||||||
);
|
);
|
||||||
|
|
||||||
reject({
|
reject({
|
||||||
id: item.id,
|
id: item.id,
|
||||||
error: Protobuf.Mesh.Routing_Error.TIMEOUT,
|
error: Protobuf.Mesh.Routing_Error.TIMEOUT,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, this.timeout);
|
}, this.timeout);
|
||||||
}),
|
}),
|
||||||
};
|
};
|
||||||
this.queue.push(queueItem);
|
this.queue.push(queueItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
public remove(id: number): void {
|
public remove(id: number): void {
|
||||||
if (this.lock) {
|
if (this.lock) {
|
||||||
setTimeout(() => this.remove(id), 100);
|
setTimeout(() => this.remove(id), 100);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.queue = this.queue.filter((item) => item.id !== id);
|
this.queue = this.queue.filter((item) => item.id !== id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public processAck(id: number): void {
|
public processAck(id: number): void {
|
||||||
this.ackNotifier.dispatch(id);
|
this.ackNotifier.dispatch(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public processError(e: PacketError): void {
|
public processError(e: PacketError): void {
|
||||||
console.error(
|
console.error(
|
||||||
`Error received for packet ${e.id}: ${
|
`Error received for packet ${e.id}: ${
|
||||||
Protobuf.Mesh.Routing_Error[e.error]
|
Protobuf.Mesh.Routing_Error[e.error]
|
||||||
}`,
|
}`,
|
||||||
);
|
);
|
||||||
this.errorNotifier.dispatch(e);
|
this.errorNotifier.dispatch(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
public wait(id: number): Promise<number> {
|
public wait(id: number): Promise<number> {
|
||||||
const queueItem = this.queue.find((qi) => qi.id === id);
|
const queueItem = this.queue.find((qi) => qi.id === id);
|
||||||
if (!queueItem) {
|
if (!queueItem) {
|
||||||
throw new Error("Packet does not exist");
|
throw new Error("Packet does not exist");
|
||||||
}
|
}
|
||||||
return queueItem.promise;
|
return queueItem.promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async processQueue(
|
public async processQueue(
|
||||||
outputStream: WritableStream<Uint8Array>,
|
outputStream: WritableStream<Uint8Array>,
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
if (this.lock) {
|
if (this.lock) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.lock = true;
|
this.lock = true;
|
||||||
const writer = outputStream.getWriter();
|
const writer = outputStream.getWriter();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
while (this.queue.filter((p) => !p.sent).length > 0) {
|
while (this.queue.filter((p) => !p.sent).length > 0) {
|
||||||
const item = this.queue.filter((p) => !p.sent)[0];
|
const item = this.queue.filter((p) => !p.sent)[0];
|
||||||
if (item) {
|
if (item) {
|
||||||
await new Promise((resolve) => setTimeout(resolve, 200));
|
await new Promise((resolve) => setTimeout(resolve, 200));
|
||||||
try {
|
try {
|
||||||
await writer.write(item.data);
|
await writer.write(item.data);
|
||||||
item.sent = true;
|
item.sent = true;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(`Error sending packet ${item.id}`, error);
|
console.error(`Error sending packet ${item.id}`, error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
writer.releaseLock();
|
writer.releaseLock();
|
||||||
this.lock = false;
|
this.lock = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,222 +1,222 @@
|
|||||||
import { fromBinary } from "@bufbuild/protobuf";
|
import { fromBinary } from "@bufbuild/protobuf";
|
||||||
import type { DeviceOutput } from "../../types.ts";
|
|
||||||
import { Constants, Protobuf, Types } from "../../../mod.ts";
|
import { Constants, Protobuf, Types } from "../../../mod.ts";
|
||||||
import type { MeshDevice } from "../../../mod.ts";
|
import type { MeshDevice } from "../../../mod.ts";
|
||||||
|
import type { DeviceOutput } from "../../types.ts";
|
||||||
|
|
||||||
export const decodePacket = (device: MeshDevice) =>
|
export const decodePacket = (device: MeshDevice) =>
|
||||||
new WritableStream<DeviceOutput>({
|
new WritableStream<DeviceOutput>({
|
||||||
write(chunk) {
|
write(chunk) {
|
||||||
switch (chunk.type) {
|
switch (chunk.type) {
|
||||||
case "debug": {
|
case "debug": {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "packet": {
|
case "packet": {
|
||||||
const decodedMessage = fromBinary(
|
const decodedMessage = fromBinary(
|
||||||
Protobuf.Mesh.FromRadioSchema,
|
Protobuf.Mesh.FromRadioSchema,
|
||||||
chunk.data,
|
chunk.data,
|
||||||
);
|
);
|
||||||
device.events.onFromRadio.dispatch(decodedMessage);
|
device.events.onFromRadio.dispatch(decodedMessage);
|
||||||
|
|
||||||
/** @todo Add map here when `all=true` gets fixed. */
|
/** @todo Add map here when `all=true` gets fixed. */
|
||||||
switch (decodedMessage.payloadVariant.case) {
|
switch (decodedMessage.payloadVariant.case) {
|
||||||
case "packet": {
|
case "packet": {
|
||||||
device.handleMeshPacket(decodedMessage.payloadVariant.value);
|
device.handleMeshPacket(decodedMessage.payloadVariant.value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case "myInfo": {
|
case "myInfo": {
|
||||||
device.events.onMyNodeInfo.dispatch(
|
device.events.onMyNodeInfo.dispatch(
|
||||||
decodedMessage.payloadVariant.value,
|
decodedMessage.payloadVariant.value,
|
||||||
);
|
);
|
||||||
device.log.info(
|
device.log.info(
|
||||||
Types.Emitter[Types.Emitter.HandleFromRadio],
|
Types.Emitter[Types.Emitter.HandleFromRadio],
|
||||||
"📱 Received Node info for this device",
|
"📱 Received Node info for this device",
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case "nodeInfo": {
|
case "nodeInfo": {
|
||||||
device.log.info(
|
device.log.info(
|
||||||
Types.Emitter[Types.Emitter.HandleFromRadio],
|
Types.Emitter[Types.Emitter.HandleFromRadio],
|
||||||
`📱 Received Node Info packet for node: ${decodedMessage.payloadVariant.value.num}`,
|
`📱 Received Node Info packet for node: ${decodedMessage.payloadVariant.value.num}`,
|
||||||
);
|
);
|
||||||
|
|
||||||
device.events.onNodeInfoPacket.dispatch(
|
device.events.onNodeInfoPacket.dispatch(
|
||||||
decodedMessage.payloadVariant.value,
|
decodedMessage.payloadVariant.value,
|
||||||
);
|
);
|
||||||
|
|
||||||
//TODO: HERE
|
//TODO: HERE
|
||||||
if (decodedMessage.payloadVariant.value.position) {
|
if (decodedMessage.payloadVariant.value.position) {
|
||||||
device.events.onPositionPacket.dispatch({
|
device.events.onPositionPacket.dispatch({
|
||||||
id: decodedMessage.id,
|
id: decodedMessage.id,
|
||||||
rxTime: new Date(),
|
rxTime: new Date(),
|
||||||
from: decodedMessage.payloadVariant.value.num,
|
from: decodedMessage.payloadVariant.value.num,
|
||||||
to: decodedMessage.payloadVariant.value.num,
|
to: decodedMessage.payloadVariant.value.num,
|
||||||
type: "direct",
|
type: "direct",
|
||||||
channel: Types.ChannelNumber.Primary,
|
channel: Types.ChannelNumber.Primary,
|
||||||
data: decodedMessage.payloadVariant.value.position,
|
data: decodedMessage.payloadVariant.value.position,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: HERE
|
//TODO: HERE
|
||||||
if (decodedMessage.payloadVariant.value.user) {
|
if (decodedMessage.payloadVariant.value.user) {
|
||||||
device.events.onUserPacket.dispatch({
|
device.events.onUserPacket.dispatch({
|
||||||
id: decodedMessage.id,
|
id: decodedMessage.id,
|
||||||
rxTime: new Date(),
|
rxTime: new Date(),
|
||||||
from: decodedMessage.payloadVariant.value.num,
|
from: decodedMessage.payloadVariant.value.num,
|
||||||
to: decodedMessage.payloadVariant.value.num,
|
to: decodedMessage.payloadVariant.value.num,
|
||||||
type: "direct",
|
type: "direct",
|
||||||
channel: Types.ChannelNumber.Primary,
|
channel: Types.ChannelNumber.Primary,
|
||||||
data: decodedMessage.payloadVariant.value.user,
|
data: decodedMessage.payloadVariant.value.user,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case "config": {
|
case "config": {
|
||||||
if (decodedMessage.payloadVariant.value.payloadVariant.case) {
|
if (decodedMessage.payloadVariant.value.payloadVariant.case) {
|
||||||
device.log.trace(
|
device.log.trace(
|
||||||
Types.Emitter[Types.Emitter.HandleFromRadio],
|
Types.Emitter[Types.Emitter.HandleFromRadio],
|
||||||
`💾 Received Config packet of variant: ${decodedMessage.payloadVariant.value.payloadVariant.case}`,
|
`💾 Received Config packet of variant: ${decodedMessage.payloadVariant.value.payloadVariant.case}`,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
device.log.warn(
|
device.log.warn(
|
||||||
Types.Emitter[Types.Emitter.HandleFromRadio],
|
Types.Emitter[Types.Emitter.HandleFromRadio],
|
||||||
`⚠️ Received Config packet of variant: ${"UNK"}`,
|
`⚠️ Received Config packet of variant: ${"UNK"}`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
device.events.onConfigPacket.dispatch(
|
device.events.onConfigPacket.dispatch(
|
||||||
decodedMessage.payloadVariant.value,
|
decodedMessage.payloadVariant.value,
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case "logRecord": {
|
case "logRecord": {
|
||||||
device.log.trace(
|
device.log.trace(
|
||||||
Types.Emitter[Types.Emitter.HandleFromRadio],
|
Types.Emitter[Types.Emitter.HandleFromRadio],
|
||||||
"Received onLogRecord",
|
"Received onLogRecord",
|
||||||
);
|
);
|
||||||
device.events.onLogRecord.dispatch(
|
device.events.onLogRecord.dispatch(
|
||||||
decodedMessage.payloadVariant.value,
|
decodedMessage.payloadVariant.value,
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case "configCompleteId": {
|
case "configCompleteId": {
|
||||||
if (decodedMessage.payloadVariant.value !== device.configId) {
|
if (decodedMessage.payloadVariant.value !== device.configId) {
|
||||||
device.log.error(
|
device.log.error(
|
||||||
Types.Emitter[Types.Emitter.HandleFromRadio],
|
Types.Emitter[Types.Emitter.HandleFromRadio],
|
||||||
`❌ Invalid config id received from device, expected ${device.configId} but received ${decodedMessage.payloadVariant.value}`,
|
`❌ Invalid config id received from device, expected ${device.configId} but received ${decodedMessage.payloadVariant.value}`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
device.log.info(
|
device.log.info(
|
||||||
Types.Emitter[Types.Emitter.HandleFromRadio],
|
Types.Emitter[Types.Emitter.HandleFromRadio],
|
||||||
`⚙️ Valid config id received from device: ${device.configId}`,
|
`⚙️ Valid config id received from device: ${device.configId}`,
|
||||||
);
|
);
|
||||||
|
|
||||||
device.updateDeviceStatus(
|
device.updateDeviceStatus(
|
||||||
Types.DeviceStatusEnum.DeviceConfigured,
|
Types.DeviceStatusEnum.DeviceConfigured,
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case "rebooted": {
|
case "rebooted": {
|
||||||
device.configure().catch(() => {
|
device.configure().catch(() => {
|
||||||
// TODO: FIX, workaround for `wantConfigId` not getting acks.
|
// TODO: FIX, workaround for `wantConfigId` not getting acks.
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case "moduleConfig": {
|
case "moduleConfig": {
|
||||||
if (decodedMessage.payloadVariant.value.payloadVariant.case) {
|
if (decodedMessage.payloadVariant.value.payloadVariant.case) {
|
||||||
device.log.trace(
|
device.log.trace(
|
||||||
Types.Emitter[Types.Emitter.HandleFromRadio],
|
Types.Emitter[Types.Emitter.HandleFromRadio],
|
||||||
`💾 Received Module Config packet of variant: ${decodedMessage.payloadVariant.value.payloadVariant.case}`,
|
`💾 Received Module Config packet of variant: ${decodedMessage.payloadVariant.value.payloadVariant.case}`,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
device.log.warn(
|
device.log.warn(
|
||||||
Types.Emitter[Types.Emitter.HandleFromRadio],
|
Types.Emitter[Types.Emitter.HandleFromRadio],
|
||||||
"⚠️ Received Module Config packet of variant: UNK",
|
"⚠️ Received Module Config packet of variant: UNK",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
device.events.onModuleConfigPacket.dispatch(
|
device.events.onModuleConfigPacket.dispatch(
|
||||||
decodedMessage.payloadVariant.value,
|
decodedMessage.payloadVariant.value,
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case "channel": {
|
case "channel": {
|
||||||
device.log.trace(
|
device.log.trace(
|
||||||
Types.Emitter[Types.Emitter.HandleFromRadio],
|
Types.Emitter[Types.Emitter.HandleFromRadio],
|
||||||
`🔐 Received Channel: ${decodedMessage.payloadVariant.value.index}`,
|
`🔐 Received Channel: ${decodedMessage.payloadVariant.value.index}`,
|
||||||
);
|
);
|
||||||
|
|
||||||
device.events.onChannelPacket.dispatch(
|
device.events.onChannelPacket.dispatch(
|
||||||
decodedMessage.payloadVariant.value,
|
decodedMessage.payloadVariant.value,
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case "queueStatus": {
|
case "queueStatus": {
|
||||||
device.log.trace(
|
device.log.trace(
|
||||||
Types.Emitter[Types.Emitter.HandleFromRadio],
|
Types.Emitter[Types.Emitter.HandleFromRadio],
|
||||||
`🚧 Received Queue Status: ${decodedMessage.payloadVariant.value}`,
|
`🚧 Received Queue Status: ${decodedMessage.payloadVariant.value}`,
|
||||||
);
|
);
|
||||||
|
|
||||||
device.events.onQueueStatus.dispatch(
|
device.events.onQueueStatus.dispatch(
|
||||||
decodedMessage.payloadVariant.value,
|
decodedMessage.payloadVariant.value,
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case "xmodemPacket": {
|
case "xmodemPacket": {
|
||||||
device.xModem.handlePacket(decodedMessage.payloadVariant.value);
|
device.xModem.handlePacket(decodedMessage.payloadVariant.value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case "metadata": {
|
case "metadata": {
|
||||||
if (
|
if (
|
||||||
Number.parseFloat(
|
Number.parseFloat(
|
||||||
decodedMessage.payloadVariant.value.firmwareVersion,
|
decodedMessage.payloadVariant.value.firmwareVersion,
|
||||||
) < Constants.minFwVer
|
) < Constants.minFwVer
|
||||||
) {
|
) {
|
||||||
device.log.fatal(
|
device.log.fatal(
|
||||||
Types.Emitter[Types.Emitter.HandleFromRadio],
|
Types.Emitter[Types.Emitter.HandleFromRadio],
|
||||||
`Device firmware outdated. Min supported: ${Constants.minFwVer} got : ${decodedMessage.payloadVariant.value.firmwareVersion}`,
|
`Device firmware outdated. Min supported: ${Constants.minFwVer} got : ${decodedMessage.payloadVariant.value.firmwareVersion}`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
device.log.debug(
|
device.log.debug(
|
||||||
Types.Emitter[Types.Emitter.GetMetadata],
|
Types.Emitter[Types.Emitter.GetMetadata],
|
||||||
"🏷️ Received metadata packet",
|
"🏷️ Received metadata packet",
|
||||||
);
|
);
|
||||||
|
|
||||||
device.events.onDeviceMetadataPacket.dispatch({
|
device.events.onDeviceMetadataPacket.dispatch({
|
||||||
id: decodedMessage.id,
|
id: decodedMessage.id,
|
||||||
rxTime: new Date(),
|
rxTime: new Date(),
|
||||||
from: 0,
|
from: 0,
|
||||||
to: 0,
|
to: 0,
|
||||||
type: "direct",
|
type: "direct",
|
||||||
channel: Types.ChannelNumber.Primary,
|
channel: Types.ChannelNumber.Primary,
|
||||||
data: decodedMessage.payloadVariant.value,
|
data: decodedMessage.payloadVariant.value,
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case "mqttClientProxyMessage": {
|
case "mqttClientProxyMessage": {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
device.log.warn(
|
device.log.warn(
|
||||||
Types.Emitter[Types.Emitter.HandleFromRadio],
|
Types.Emitter[Types.Emitter.HandleFromRadio],
|
||||||
`⚠️ Unhandled payload variant: ${decodedMessage.payloadVariant.case}`,
|
`⚠️ Unhandled payload variant: ${decodedMessage.payloadVariant.case}`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,73 +1,71 @@
|
|||||||
import type { DeviceOutput } from "../../types.ts";
|
import type { DeviceOutput } from "../../types.ts";
|
||||||
|
|
||||||
export const fromDeviceStream: () => TransformStream<Uint8Array, DeviceOutput> =
|
export const fromDeviceStream: () => TransformStream<Uint8Array, DeviceOutput> =
|
||||||
(
|
(
|
||||||
// onReleaseEvent: SimpleEventDispatcher<boolean>,
|
// onReleaseEvent: SimpleEventDispatcher<boolean>,
|
||||||
) => {
|
) => {
|
||||||
let byteBuffer = new Uint8Array([]);
|
let byteBuffer = new Uint8Array([]);
|
||||||
const textDecoder = new TextDecoder();
|
const textDecoder = new TextDecoder();
|
||||||
return new TransformStream<Uint8Array, DeviceOutput>({
|
return new TransformStream<Uint8Array, DeviceOutput>({
|
||||||
transform(chunk: Uint8Array, controller): void {
|
transform(chunk: Uint8Array, controller): void {
|
||||||
// onReleaseEvent.subscribe(() => {
|
// onReleaseEvent.subscribe(() => {
|
||||||
// controller.terminate();
|
// controller.terminate();
|
||||||
// });
|
// });
|
||||||
byteBuffer = new Uint8Array([...byteBuffer, ...chunk]);
|
byteBuffer = new Uint8Array([...byteBuffer, ...chunk]);
|
||||||
let processingExhausted = false;
|
let processingExhausted = false;
|
||||||
while (byteBuffer.length !== 0 && !processingExhausted) {
|
while (byteBuffer.length !== 0 && !processingExhausted) {
|
||||||
const framingIndex = byteBuffer.findIndex((byte) => byte === 0x94);
|
const framingIndex = byteBuffer.findIndex((byte) => byte === 0x94);
|
||||||
const framingByte2 = byteBuffer[framingIndex + 1];
|
const framingByte2 = byteBuffer[framingIndex + 1];
|
||||||
if (framingByte2 === 0xc3) {
|
if (framingByte2 === 0xc3) {
|
||||||
if (byteBuffer.subarray(0, framingIndex).length) {
|
if (byteBuffer.subarray(0, framingIndex).length) {
|
||||||
controller.enqueue({
|
controller.enqueue({
|
||||||
type: "debug",
|
type: "debug",
|
||||||
data: textDecoder.decode(byteBuffer.subarray(0, framingIndex)),
|
data: textDecoder.decode(byteBuffer.subarray(0, framingIndex)),
|
||||||
});
|
});
|
||||||
byteBuffer = byteBuffer.subarray(framingIndex);
|
byteBuffer = byteBuffer.subarray(framingIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
const msb = byteBuffer[2];
|
const msb = byteBuffer[2];
|
||||||
const lsb = byteBuffer[3];
|
const lsb = byteBuffer[3];
|
||||||
|
|
||||||
if (
|
if (
|
||||||
msb !== undefined &&
|
msb !== undefined &&
|
||||||
lsb !== undefined &&
|
lsb !== undefined &&
|
||||||
byteBuffer.length >= 4 + (msb << 8) + lsb
|
byteBuffer.length >= 4 + (msb << 8) + lsb
|
||||||
) {
|
) {
|
||||||
const packet = byteBuffer.subarray(4, 4 + (msb << 8) + lsb);
|
const packet = byteBuffer.subarray(4, 4 + (msb << 8) + lsb);
|
||||||
|
|
||||||
const malformedDetectorIndex = packet.findIndex(
|
const malformedDetectorIndex = packet.findIndex(
|
||||||
(byte) => byte === 0x94,
|
(byte) => byte === 0x94,
|
||||||
);
|
);
|
||||||
if (
|
if (
|
||||||
malformedDetectorIndex !== -1 &&
|
malformedDetectorIndex !== -1 &&
|
||||||
packet[malformedDetectorIndex + 1] === 0xc3
|
packet[malformedDetectorIndex + 1] === 0xc3
|
||||||
) {
|
) {
|
||||||
console.warn(
|
console.warn(
|
||||||
`⚠️ Malformed packet found, discarding: ${
|
`⚠️ Malformed packet found, discarding: ${byteBuffer
|
||||||
byteBuffer
|
.subarray(0, malformedDetectorIndex - 1)
|
||||||
.subarray(0, malformedDetectorIndex - 1)
|
.toString()}`,
|
||||||
.toString()
|
);
|
||||||
}`,
|
|
||||||
);
|
|
||||||
|
|
||||||
byteBuffer = byteBuffer.subarray(malformedDetectorIndex);
|
byteBuffer = byteBuffer.subarray(malformedDetectorIndex);
|
||||||
} else {
|
} else {
|
||||||
byteBuffer = byteBuffer.subarray(3 + (msb << 8) + lsb + 1);
|
byteBuffer = byteBuffer.subarray(3 + (msb << 8) + lsb + 1);
|
||||||
|
|
||||||
controller.enqueue({
|
controller.enqueue({
|
||||||
type: "packet",
|
type: "packet",
|
||||||
data: packet,
|
data: packet,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/** Only partioal message in buffer, wait for the rest */
|
/** Only partioal message in buffer, wait for the rest */
|
||||||
processingExhausted = true;
|
processingExhausted = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/** Message not complete, only 1 byte in buffer */
|
/** Message not complete, only 1 byte in buffer */
|
||||||
processingExhausted = true;
|
processingExhausted = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,15 +2,15 @@
|
|||||||
* Pads packets with appropriate framing information before writing to the output stream.
|
* Pads packets with appropriate framing information before writing to the output stream.
|
||||||
*/
|
*/
|
||||||
export const toDeviceStream: TransformStream<Uint8Array, Uint8Array> =
|
export const toDeviceStream: TransformStream<Uint8Array, Uint8Array> =
|
||||||
new TransformStream<Uint8Array, Uint8Array>({
|
new TransformStream<Uint8Array, Uint8Array>({
|
||||||
transform(chunk: Uint8Array, controller): void {
|
transform(chunk: Uint8Array, controller): void {
|
||||||
const bufLen = chunk.length;
|
const bufLen = chunk.length;
|
||||||
const header = new Uint8Array([
|
const header = new Uint8Array([
|
||||||
0x94,
|
0x94,
|
||||||
0xC3,
|
0xc3,
|
||||||
(bufLen >> 8) & 0xFF,
|
(bufLen >> 8) & 0xff,
|
||||||
bufLen & 0xFF,
|
bufLen & 0xff,
|
||||||
]);
|
]);
|
||||||
controller.enqueue(new Uint8Array([...header, ...chunk]));
|
controller.enqueue(new Uint8Array([...header, ...chunk]));
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
+117
-117
@@ -1,135 +1,135 @@
|
|||||||
import crc16ccitt from "crc/calculators/crc16ccitt";
|
|
||||||
import { create, toBinary } from "@bufbuild/protobuf";
|
import { create, toBinary } from "@bufbuild/protobuf";
|
||||||
import * as Protobuf from "@meshtastic/protobufs";
|
import * as Protobuf from "@meshtastic/protobufs";
|
||||||
|
import crc16ccitt from "crc/calculators/crc16ccitt";
|
||||||
|
|
||||||
//if counter > 35 then reset counter/clear/error/reject promise
|
//if counter > 35 then reset counter/clear/error/reject promise
|
||||||
type XmodemProps = (toRadio: Uint8Array, id?: number) => Promise<number>;
|
type XmodemProps = (toRadio: Uint8Array, id?: number) => Promise<number>;
|
||||||
|
|
||||||
export class Xmodem {
|
export class Xmodem {
|
||||||
private sendRaw: XmodemProps;
|
private sendRaw: XmodemProps;
|
||||||
private rxBuffer: Uint8Array[];
|
private rxBuffer: Uint8Array[];
|
||||||
private txBuffer: Uint8Array[];
|
private txBuffer: Uint8Array[];
|
||||||
private textEncoder: TextEncoder;
|
private textEncoder: TextEncoder;
|
||||||
private counter: number;
|
private counter: number;
|
||||||
|
|
||||||
constructor(sendRaw: XmodemProps) {
|
constructor(sendRaw: XmodemProps) {
|
||||||
this.sendRaw = sendRaw;
|
this.sendRaw = sendRaw;
|
||||||
this.rxBuffer = [];
|
this.rxBuffer = [];
|
||||||
this.txBuffer = [];
|
this.txBuffer = [];
|
||||||
this.textEncoder = new TextEncoder();
|
this.textEncoder = new TextEncoder();
|
||||||
this.counter = 0;
|
this.counter = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
async downloadFile(filename: string): Promise<number> {
|
async downloadFile(filename: string): Promise<number> {
|
||||||
return await this.sendCommand(
|
return await this.sendCommand(
|
||||||
Protobuf.Xmodem.XModem_Control.STX,
|
Protobuf.Xmodem.XModem_Control.STX,
|
||||||
this.textEncoder.encode(filename),
|
this.textEncoder.encode(filename),
|
||||||
0,
|
0,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
async uploadFile(filename: string, data: Uint8Array): Promise<number> {
|
async uploadFile(filename: string, data: Uint8Array): Promise<number> {
|
||||||
for (let i = 0; i < data.length; i += 128) {
|
for (let i = 0; i < data.length; i += 128) {
|
||||||
this.txBuffer.push(data.slice(i, i + 128));
|
this.txBuffer.push(data.slice(i, i + 128));
|
||||||
}
|
}
|
||||||
|
|
||||||
return await this.sendCommand(
|
return await this.sendCommand(
|
||||||
Protobuf.Xmodem.XModem_Control.SOH,
|
Protobuf.Xmodem.XModem_Control.SOH,
|
||||||
this.textEncoder.encode(filename),
|
this.textEncoder.encode(filename),
|
||||||
0,
|
0,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
async sendCommand(
|
async sendCommand(
|
||||||
command: Protobuf.Xmodem.XModem_Control,
|
command: Protobuf.Xmodem.XModem_Control,
|
||||||
buffer?: Uint8Array,
|
buffer?: Uint8Array,
|
||||||
sequence?: number,
|
sequence?: number,
|
||||||
crc16?: number,
|
crc16?: number,
|
||||||
): Promise<number> {
|
): Promise<number> {
|
||||||
const toRadio = create(Protobuf.Mesh.ToRadioSchema, {
|
const toRadio = create(Protobuf.Mesh.ToRadioSchema, {
|
||||||
payloadVariant: {
|
payloadVariant: {
|
||||||
case: "xmodemPacket",
|
case: "xmodemPacket",
|
||||||
value: {
|
value: {
|
||||||
buffer,
|
buffer,
|
||||||
control: command,
|
control: command,
|
||||||
seq: sequence,
|
seq: sequence,
|
||||||
crc16: crc16,
|
crc16: crc16,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
return await this.sendRaw(toBinary(Protobuf.Mesh.ToRadioSchema, toRadio));
|
return await this.sendRaw(toBinary(Protobuf.Mesh.ToRadioSchema, toRadio));
|
||||||
}
|
}
|
||||||
|
|
||||||
async handlePacket(packet: Protobuf.Xmodem.XModem): Promise<number> {
|
async handlePacket(packet: Protobuf.Xmodem.XModem): Promise<number> {
|
||||||
await new Promise((resolve) => setTimeout(resolve, 100));
|
await new Promise((resolve) => setTimeout(resolve, 100));
|
||||||
|
|
||||||
switch (packet.control) {
|
switch (packet.control) {
|
||||||
case Protobuf.Xmodem.XModem_Control.NUL: {
|
case Protobuf.Xmodem.XModem_Control.NUL: {
|
||||||
// nothing
|
// nothing
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Protobuf.Xmodem.XModem_Control.SOH: {
|
case Protobuf.Xmodem.XModem_Control.SOH: {
|
||||||
this.counter = packet.seq;
|
this.counter = packet.seq;
|
||||||
if (this.validateCrc16(packet)) {
|
if (this.validateCrc16(packet)) {
|
||||||
this.rxBuffer[this.counter] = packet.buffer;
|
this.rxBuffer[this.counter] = packet.buffer;
|
||||||
return this.sendCommand(Protobuf.Xmodem.XModem_Control.ACK);
|
return this.sendCommand(Protobuf.Xmodem.XModem_Control.ACK);
|
||||||
}
|
}
|
||||||
return await this.sendCommand(
|
return await this.sendCommand(
|
||||||
Protobuf.Xmodem.XModem_Control.NAK,
|
Protobuf.Xmodem.XModem_Control.NAK,
|
||||||
undefined,
|
undefined,
|
||||||
packet.seq,
|
packet.seq,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
case Protobuf.Xmodem.XModem_Control.STX: {
|
case Protobuf.Xmodem.XModem_Control.STX: {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Protobuf.Xmodem.XModem_Control.EOT: {
|
case Protobuf.Xmodem.XModem_Control.EOT: {
|
||||||
// end of transmission
|
// end of transmission
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Protobuf.Xmodem.XModem_Control.ACK: {
|
case Protobuf.Xmodem.XModem_Control.ACK: {
|
||||||
this.counter++;
|
this.counter++;
|
||||||
if (this.txBuffer[this.counter - 1]) {
|
if (this.txBuffer[this.counter - 1]) {
|
||||||
return this.sendCommand(
|
return this.sendCommand(
|
||||||
Protobuf.Xmodem.XModem_Control.SOH,
|
Protobuf.Xmodem.XModem_Control.SOH,
|
||||||
this.txBuffer[this.counter - 1],
|
this.txBuffer[this.counter - 1],
|
||||||
this.counter,
|
this.counter,
|
||||||
crc16ccitt(this.txBuffer[this.counter - 1] ?? new Uint8Array()),
|
crc16ccitt(this.txBuffer[this.counter - 1] ?? new Uint8Array()),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (this.counter === this.txBuffer.length + 1) {
|
if (this.counter === this.txBuffer.length + 1) {
|
||||||
return this.sendCommand(Protobuf.Xmodem.XModem_Control.EOT);
|
return this.sendCommand(Protobuf.Xmodem.XModem_Control.EOT);
|
||||||
}
|
}
|
||||||
this.clear();
|
this.clear();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Protobuf.Xmodem.XModem_Control.NAK: {
|
case Protobuf.Xmodem.XModem_Control.NAK: {
|
||||||
return this.sendCommand(
|
return this.sendCommand(
|
||||||
Protobuf.Xmodem.XModem_Control.SOH,
|
Protobuf.Xmodem.XModem_Control.SOH,
|
||||||
this.txBuffer[this.counter],
|
this.txBuffer[this.counter],
|
||||||
this.counter,
|
this.counter,
|
||||||
crc16ccitt(this.txBuffer[this.counter - 1] ?? new Uint8Array()),
|
crc16ccitt(this.txBuffer[this.counter - 1] ?? new Uint8Array()),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
case Protobuf.Xmodem.XModem_Control.CAN: {
|
case Protobuf.Xmodem.XModem_Control.CAN: {
|
||||||
this.clear();
|
this.clear();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Protobuf.Xmodem.XModem_Control.CTRLZ: {
|
case Protobuf.Xmodem.XModem_Control.CTRLZ: {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Promise.resolve(0);
|
return Promise.resolve(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
validateCrc16(packet: Protobuf.Xmodem.XModem): boolean {
|
validateCrc16(packet: Protobuf.Xmodem.XModem): boolean {
|
||||||
return crc16ccitt(packet.buffer) === packet.crc16;
|
return crc16ccitt(packet.buffer) === packet.crc16;
|
||||||
}
|
}
|
||||||
|
|
||||||
clear() {
|
clear() {
|
||||||
this.counter = 0;
|
this.counter = 0;
|
||||||
this.rxBuffer = [];
|
this.rxBuffer = [];
|
||||||
this.txBuffer = [];
|
this.txBuffer = [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "@meshtastic/transport-deno",
|
"name": "@meshtastic/transport-deno",
|
||||||
"version": "0.1.1",
|
"version": "0.1.1",
|
||||||
"description": "Deno-specific transport layer for Meshtastic web applications.",
|
"description": "Deno-specific transport layer for Meshtastic web applications.",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./mod.ts"
|
".": "./mod.ts"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,31 +2,31 @@ import { Utils } from "@meshtastic/core";
|
|||||||
import type { Types } from "@meshtastic/core";
|
import type { Types } from "@meshtastic/core";
|
||||||
|
|
||||||
export class TransportDeno implements Types.Transport {
|
export class TransportDeno implements Types.Transport {
|
||||||
private _toDevice: WritableStream<Uint8Array>;
|
private _toDevice: WritableStream<Uint8Array>;
|
||||||
private _fromDevice: ReadableStream<Types.DeviceOutput>;
|
private _fromDevice: ReadableStream<Types.DeviceOutput>;
|
||||||
|
|
||||||
public static async create(hostname: string): Promise<TransportDeno> {
|
public static async create(hostname: string): Promise<TransportDeno> {
|
||||||
const connection = await Deno.connect({
|
const connection = await Deno.connect({
|
||||||
hostname,
|
hostname,
|
||||||
port: 4403,
|
port: 4403,
|
||||||
});
|
});
|
||||||
return new TransportDeno(connection);
|
return new TransportDeno(connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(connection: Deno.Conn) {
|
constructor(connection: Deno.Conn) {
|
||||||
Utils.toDeviceStream.readable.pipeTo(connection.writable);
|
Utils.toDeviceStream.readable.pipeTo(connection.writable);
|
||||||
|
|
||||||
this._toDevice = Utils.toDeviceStream.writable;
|
this._toDevice = Utils.toDeviceStream.writable;
|
||||||
this._fromDevice = connection.readable.pipeThrough(
|
this._fromDevice = connection.readable.pipeThrough(
|
||||||
Utils.fromDeviceStream(),
|
Utils.fromDeviceStream(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
get toDevice(): WritableStream<Uint8Array> {
|
get toDevice(): WritableStream<Uint8Array> {
|
||||||
return this._toDevice;
|
return this._toDevice;
|
||||||
}
|
}
|
||||||
|
|
||||||
get fromDevice(): ReadableStream<Types.DeviceOutput> {
|
get fromDevice(): ReadableStream<Types.DeviceOutput> {
|
||||||
return this._fromDevice;
|
return this._fromDevice;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "@meshtastic/transport-http",
|
"name": "@meshtastic/transport-http",
|
||||||
"version": "0.2.1",
|
"version": "0.2.1",
|
||||||
"description": "A transport layer for Meshtastic applications using HTTP.",
|
"description": "A transport layer for Meshtastic applications using HTTP.",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./mod.ts"
|
".": "./mod.ts"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,89 +1,89 @@
|
|||||||
import type { Types } from "@meshtastic/core";
|
import type { Types } from "@meshtastic/core";
|
||||||
|
|
||||||
export class TransportHTTP implements Types.Transport {
|
export class TransportHTTP implements Types.Transport {
|
||||||
private _toDevice: WritableStream<Uint8Array>;
|
private _toDevice: WritableStream<Uint8Array>;
|
||||||
private _fromDevice: ReadableStream<Types.DeviceOutput>;
|
private _fromDevice: ReadableStream<Types.DeviceOutput>;
|
||||||
private url: string;
|
private url: string;
|
||||||
private receiveBatchRequests: boolean;
|
private receiveBatchRequests: boolean;
|
||||||
private fetchInterval: number;
|
private fetchInterval: number;
|
||||||
|
|
||||||
public static async create(
|
public static async create(
|
||||||
address: string,
|
address: string,
|
||||||
tls?: boolean,
|
tls?: boolean,
|
||||||
): Promise<TransportHTTP> {
|
): Promise<TransportHTTP> {
|
||||||
const connectionUrl = `${tls ? "https" : "http"}://${address}`;
|
const connectionUrl = `${tls ? "https" : "http"}://${address}`;
|
||||||
await fetch(`${connectionUrl}/json/report`);
|
await fetch(`${connectionUrl}/json/report`);
|
||||||
await Promise.resolve();
|
await Promise.resolve();
|
||||||
return new TransportHTTP(connectionUrl);
|
return new TransportHTTP(connectionUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(url: string) {
|
constructor(url: string) {
|
||||||
this.url = url;
|
this.url = url;
|
||||||
this.receiveBatchRequests = false;
|
this.receiveBatchRequests = false;
|
||||||
this.fetchInterval = 3000;
|
this.fetchInterval = 3000;
|
||||||
|
|
||||||
this._toDevice = new WritableStream<Uint8Array>({
|
this._toDevice = new WritableStream<Uint8Array>({
|
||||||
write: async (chunk) => {
|
write: async (chunk) => {
|
||||||
await this.writeToRadio(chunk);
|
await this.writeToRadio(chunk);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
let controller: ReadableStreamDefaultController<Types.DeviceOutput>;
|
let controller: ReadableStreamDefaultController<Types.DeviceOutput>;
|
||||||
|
|
||||||
this._fromDevice = new ReadableStream<Types.DeviceOutput>({
|
this._fromDevice = new ReadableStream<Types.DeviceOutput>({
|
||||||
start: (ctrl) => {
|
start: (ctrl) => {
|
||||||
controller = ctrl;
|
controller = ctrl;
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
setInterval(async () => {
|
setInterval(async () => {
|
||||||
await this.readFromRadio(controller);
|
await this.readFromRadio(controller);
|
||||||
}, this.fetchInterval);
|
}, this.fetchInterval);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async readFromRadio(
|
private async readFromRadio(
|
||||||
controller: ReadableStreamDefaultController<Types.DeviceOutput>,
|
controller: ReadableStreamDefaultController<Types.DeviceOutput>,
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
let readBuffer = new ArrayBuffer(1);
|
let readBuffer = new ArrayBuffer(1);
|
||||||
while (readBuffer.byteLength > 0) {
|
while (readBuffer.byteLength > 0) {
|
||||||
const response = await fetch(
|
const response = await fetch(
|
||||||
`${this.url}/api/v1/fromradio?all=${
|
`${this.url}/api/v1/fromradio?all=${
|
||||||
this.receiveBatchRequests ? "true" : "false"
|
this.receiveBatchRequests ? "true" : "false"
|
||||||
}`,
|
}`,
|
||||||
{
|
{
|
||||||
method: "GET",
|
method: "GET",
|
||||||
headers: {
|
headers: {
|
||||||
Accept: "application/x-protobuf",
|
Accept: "application/x-protobuf",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
readBuffer = await response.arrayBuffer();
|
readBuffer = await response.arrayBuffer();
|
||||||
|
|
||||||
if (readBuffer.byteLength > 0) {
|
if (readBuffer.byteLength > 0) {
|
||||||
controller.enqueue({
|
controller.enqueue({
|
||||||
type: "packet",
|
type: "packet",
|
||||||
data: new Uint8Array(readBuffer),
|
data: new Uint8Array(readBuffer),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async writeToRadio(data: Uint8Array): Promise<void> {
|
private async writeToRadio(data: Uint8Array): Promise<void> {
|
||||||
await fetch(`${this.url}/api/v1/toradio`, {
|
await fetch(`${this.url}/api/v1/toradio`, {
|
||||||
method: "PUT",
|
method: "PUT",
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Type": "application/x-protobuf",
|
"Content-Type": "application/x-protobuf",
|
||||||
},
|
},
|
||||||
body: data,
|
body: data,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
get toDevice(): WritableStream<Uint8Array> {
|
get toDevice(): WritableStream<Uint8Array> {
|
||||||
return this._toDevice;
|
return this._toDevice;
|
||||||
}
|
}
|
||||||
|
|
||||||
get fromDevice(): ReadableStream<Types.DeviceOutput> {
|
get fromDevice(): ReadableStream<Types.DeviceOutput> {
|
||||||
return this._fromDevice;
|
return this._fromDevice;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "@meshtastic/transport-node",
|
"name": "@meshtastic/transport-node",
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"description": "NodeJS-specific transport layer for Meshtastic web applications.",
|
"description": "NodeJS-specific transport layer for Meshtastic web applications.",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./mod.ts"
|
".": "./mod.ts"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,77 +1,76 @@
|
|||||||
import { Utils } from "@meshtastic/core";
|
|
||||||
import type { Types } from "@meshtastic/core";
|
|
||||||
import { Socket } from "node:net";
|
import { Socket } from "node:net";
|
||||||
import { Readable, Writable } from "node:stream";
|
import { Readable, Writable } from "node:stream";
|
||||||
|
import { Utils } from "@meshtastic/core";
|
||||||
|
import type { Types } from "@meshtastic/core";
|
||||||
|
|
||||||
export class TransportNode implements Types.Transport {
|
export class TransportNode implements Types.Transport {
|
||||||
private readonly _toDevice: WritableStream<Uint8Array>;
|
private readonly _toDevice: WritableStream<Uint8Array>;
|
||||||
private readonly _fromDevice: ReadableStream<Types.DeviceOutput>;
|
private readonly _fromDevice: ReadableStream<Types.DeviceOutput>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates and connects a new TransportNode instance.
|
* Creates and connects a new TransportNode instance.
|
||||||
* @param hostname - The IP address or hostname of the Meshtastic device.
|
* @param hostname - The IP address or hostname of the Meshtastic device.
|
||||||
* @param port - The port number for the TCP connection (defaults to 4403).
|
* @param port - The port number for the TCP connection (defaults to 4403).
|
||||||
* @returns A promise that resolves with a connected TransportNode instance.
|
* @returns A promise that resolves with a connected TransportNode instance.
|
||||||
*/
|
*/
|
||||||
public static create(hostname: string, port = 4403): Promise<TransportNode> {
|
public static create(hostname: string, port = 4403): Promise<TransportNode> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const socket = new Socket();
|
const socket = new Socket();
|
||||||
|
|
||||||
const onError = (err: Error) => {
|
const onError = (err: Error) => {
|
||||||
socket.destroy();
|
socket.destroy();
|
||||||
reject(err);
|
reject(err);
|
||||||
};
|
};
|
||||||
|
|
||||||
socket.once("error", onError);
|
socket.once("error", onError);
|
||||||
|
|
||||||
socket.connect(port, hostname, () => {
|
socket.connect(port, hostname, () => {
|
||||||
socket.removeListener("error", onError);
|
socket.removeListener("error", onError);
|
||||||
resolve(new TransportNode(socket));
|
resolve(new TransportNode(socket));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a new TransportNode.
|
* Constructs a new TransportNode.
|
||||||
* @param connection - An active Node.js net.Socket connection.
|
* @param connection - An active Node.js net.Socket connection.
|
||||||
*/
|
*/
|
||||||
constructor(connection: Socket) {
|
constructor(connection: Socket) {
|
||||||
connection.on("error", (err) => {
|
connection.on("error", (err) => {
|
||||||
console.error("Socket connection error:", err);
|
console.error("Socket connection error:", err);
|
||||||
});
|
});
|
||||||
|
|
||||||
const fromDeviceSource = Readable.toWeb(connection) as ReadableStream<
|
const fromDeviceSource = Readable.toWeb(
|
||||||
Uint8Array
|
connection,
|
||||||
>;
|
) as ReadableStream<Uint8Array>;
|
||||||
this._fromDevice = fromDeviceSource.pipeThrough(Utils.fromDeviceStream());
|
this._fromDevice = fromDeviceSource.pipeThrough(Utils.fromDeviceStream());
|
||||||
|
|
||||||
// Stream for data going FROM the application TO the Meshtastic device.
|
// Stream for data going FROM the application TO the Meshtastic device.
|
||||||
const toDeviceTransform = new TransformStream<Uint8Array, Uint8Array>();
|
const toDeviceTransform = new TransformStream<Uint8Array, Uint8Array>();
|
||||||
this._toDevice = toDeviceTransform.writable;
|
this._toDevice = toDeviceTransform.writable;
|
||||||
|
|
||||||
// The readable end of the transform is then piped to the Node.js socket.
|
// 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 similar assertion is needed here because `Writable.toWeb` also returns
|
||||||
// a generically typed stream (`WritableStream<any>`).
|
// a generically typed stream (`WritableStream<any>`).
|
||||||
toDeviceTransform.readable.pipeTo(
|
toDeviceTransform.readable
|
||||||
Writable.toWeb(connection) as WritableStream<Uint8Array>,
|
.pipeTo(Writable.toWeb(connection) as WritableStream<Uint8Array>)
|
||||||
)
|
.catch((err) => {
|
||||||
.catch((err) => {
|
console.error("Error piping data to socket:", err);
|
||||||
console.error("Error piping data to socket:", err);
|
connection.destroy(err as Error);
|
||||||
connection.destroy(err as Error);
|
});
|
||||||
});
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The WritableStream to send data to the Meshtastic device.
|
* The WritableStream to send data to the Meshtastic device.
|
||||||
*/
|
*/
|
||||||
public get toDevice(): WritableStream<Uint8Array> {
|
public get toDevice(): WritableStream<Uint8Array> {
|
||||||
return this._toDevice;
|
return this._toDevice;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The ReadableStream to receive data from the Meshtastic device.
|
* The ReadableStream to receive data from the Meshtastic device.
|
||||||
*/
|
*/
|
||||||
public get fromDevice(): ReadableStream<Types.DeviceOutput> {
|
public get fromDevice(): ReadableStream<Types.DeviceOutput> {
|
||||||
return this._fromDevice;
|
return this._fromDevice;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,14 @@
|
|||||||
{
|
{
|
||||||
"name": "@meshtastic/transport-web-bluetooth",
|
"name": "@meshtastic/transport-web-bluetooth",
|
||||||
"version": "0.1.2",
|
"version": "0.1.2",
|
||||||
"description": "A transport layer for Meshtastic applications using Web Bluetooth.",
|
"description": "A transport layer for Meshtastic applications using Web Bluetooth.",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./mod.ts"
|
".": "./mod.ts"
|
||||||
},
|
},
|
||||||
"imports": {
|
"imports": {
|
||||||
"@types/web-bluetooth": "npm:@types/web-bluetooth@^0.0.20"
|
"@types/web-bluetooth": "npm:@types/web-bluetooth@^0.0.20"
|
||||||
},
|
},
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"types": [
|
"types": ["@types/web-bluetooth"]
|
||||||
"@types/web-bluetooth"
|
}
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,134 +1,133 @@
|
|||||||
import type { Types } from "@meshtastic/core";
|
import type { Types } from "@meshtastic/core";
|
||||||
|
|
||||||
export class TransportWebBluetooth implements Types.Transport {
|
export class TransportWebBluetooth implements Types.Transport {
|
||||||
private _toDevice: WritableStream<Uint8Array>;
|
private _toDevice: WritableStream<Uint8Array>;
|
||||||
private _fromDevice: ReadableStream<Types.DeviceOutput>;
|
private _fromDevice: ReadableStream<Types.DeviceOutput>;
|
||||||
private _fromDeviceController?: ReadableStreamDefaultController<
|
private _fromDeviceController?: ReadableStreamDefaultController<Types.DeviceOutput>;
|
||||||
Types.DeviceOutput
|
private _isFirstWrite = true;
|
||||||
>;
|
|
||||||
private _isFirstWrite = true;
|
|
||||||
|
|
||||||
private toRadioCharacteristic: BluetoothRemoteGATTCharacteristic;
|
private toRadioCharacteristic: BluetoothRemoteGATTCharacteristic;
|
||||||
private fromRadioCharacteristic: BluetoothRemoteGATTCharacteristic;
|
private fromRadioCharacteristic: BluetoothRemoteGATTCharacteristic;
|
||||||
private fromNumCharacteristic: BluetoothRemoteGATTCharacteristic;
|
private fromNumCharacteristic: BluetoothRemoteGATTCharacteristic;
|
||||||
|
|
||||||
static ToRadioUuid = "f75c76d2-129e-4dad-a1dd-7866124401e7";
|
static ToRadioUuid = "f75c76d2-129e-4dad-a1dd-7866124401e7";
|
||||||
static FromRadioUuid = "2c55e69e-4993-11ed-b878-0242ac120002";
|
static FromRadioUuid = "2c55e69e-4993-11ed-b878-0242ac120002";
|
||||||
static FromNumUuid = "ed9da18c-a800-4f66-a670-aa7547e34453";
|
static FromNumUuid = "ed9da18c-a800-4f66-a670-aa7547e34453";
|
||||||
static ServiceUuid = "6ba1b218-15a8-461f-9fa8-5dcae273eafd";
|
static ServiceUuid = "6ba1b218-15a8-461f-9fa8-5dcae273eafd";
|
||||||
|
|
||||||
public static async create(): Promise<TransportWebBluetooth> {
|
public static async create(): Promise<TransportWebBluetooth> {
|
||||||
const device = await navigator.bluetooth.requestDevice({
|
const device = await navigator.bluetooth.requestDevice({
|
||||||
filters: [{ services: [this.ServiceUuid] }],
|
filters: [{ services: [this.ServiceUuid] }],
|
||||||
});
|
});
|
||||||
return await this.prepareConnection(device);
|
return await this.prepareConnection(device);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async createFromDevice(
|
public static async createFromDevice(
|
||||||
device: BluetoothDevice,
|
device: BluetoothDevice,
|
||||||
): Promise<TransportWebBluetooth> {
|
): Promise<TransportWebBluetooth> {
|
||||||
return await this.prepareConnection(device);
|
return await this.prepareConnection(device);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async prepareConnection(
|
public static async prepareConnection(
|
||||||
device: BluetoothDevice,
|
device: BluetoothDevice,
|
||||||
): Promise<TransportWebBluetooth> {
|
): Promise<TransportWebBluetooth> {
|
||||||
const gattServer = await device.gatt?.connect();
|
const gattServer = await device.gatt?.connect();
|
||||||
|
|
||||||
if (!gattServer) {
|
if (!gattServer) {
|
||||||
throw new Error("Failed to connect to GATT server");
|
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(
|
const toRadioCharacteristic = await service.getCharacteristic(
|
||||||
this.ToRadioUuid,
|
this.ToRadioUuid,
|
||||||
);
|
);
|
||||||
const fromRadioCharacteristic = await service.getCharacteristic(
|
const fromRadioCharacteristic = await service.getCharacteristic(
|
||||||
this.FromRadioUuid,
|
this.FromRadioUuid,
|
||||||
);
|
);
|
||||||
const fromNumCharacteristic = await service.getCharacteristic(
|
const fromNumCharacteristic = await service.getCharacteristic(
|
||||||
this.FromNumUuid,
|
this.FromNumUuid,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
!toRadioCharacteristic || !fromRadioCharacteristic ||
|
!toRadioCharacteristic ||
|
||||||
!fromNumCharacteristic
|
!fromRadioCharacteristic ||
|
||||||
) {
|
!fromNumCharacteristic
|
||||||
throw new Error("Failed to find required characteristics");
|
) {
|
||||||
}
|
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(
|
return new TransportWebBluetooth(
|
||||||
toRadioCharacteristic,
|
toRadioCharacteristic,
|
||||||
fromRadioCharacteristic,
|
fromRadioCharacteristic,
|
||||||
fromNumCharacteristic,
|
fromNumCharacteristic,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
toRadioCharacteristic: BluetoothRemoteGATTCharacteristic,
|
toRadioCharacteristic: BluetoothRemoteGATTCharacteristic,
|
||||||
fromRadioCharacteristic: BluetoothRemoteGATTCharacteristic,
|
fromRadioCharacteristic: BluetoothRemoteGATTCharacteristic,
|
||||||
fromNumCharacteristic: BluetoothRemoteGATTCharacteristic,
|
fromNumCharacteristic: BluetoothRemoteGATTCharacteristic,
|
||||||
) {
|
) {
|
||||||
this.toRadioCharacteristic = toRadioCharacteristic;
|
this.toRadioCharacteristic = toRadioCharacteristic;
|
||||||
this.fromRadioCharacteristic = fromRadioCharacteristic;
|
this.fromRadioCharacteristic = fromRadioCharacteristic;
|
||||||
this.fromNumCharacteristic = fromNumCharacteristic;
|
this.fromNumCharacteristic = fromNumCharacteristic;
|
||||||
|
|
||||||
this._fromDevice = new ReadableStream({
|
this._fromDevice = new ReadableStream({
|
||||||
start: (ctrl) => {
|
start: (ctrl) => {
|
||||||
this._fromDeviceController = ctrl;
|
this._fromDeviceController = ctrl;
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
this._toDevice = new WritableStream({
|
this._toDevice = new WritableStream({
|
||||||
write: async (chunk) => {
|
write: async (chunk) => {
|
||||||
await this.toRadioCharacteristic.writeValue(chunk);
|
await this.toRadioCharacteristic.writeValue(chunk);
|
||||||
|
|
||||||
if (this._isFirstWrite && this._fromDeviceController) {
|
if (this._isFirstWrite && this._fromDeviceController) {
|
||||||
this._isFirstWrite = false;
|
this._isFirstWrite = false;
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.readFromRadio(this._fromDeviceController!);
|
this.readFromRadio(this._fromDeviceController!);
|
||||||
}, 50);
|
}, 50);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
this.fromNumCharacteristic.addEventListener(
|
this.fromNumCharacteristic.addEventListener(
|
||||||
"characteristicvaluechanged",
|
"characteristicvaluechanged",
|
||||||
() => {
|
() => {
|
||||||
if (this._fromDeviceController) {
|
if (this._fromDeviceController) {
|
||||||
this.readFromRadio(this._fromDeviceController);
|
this.readFromRadio(this._fromDeviceController);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
this.fromNumCharacteristic.startNotifications();
|
this.fromNumCharacteristic.startNotifications();
|
||||||
}
|
}
|
||||||
|
|
||||||
get toDevice(): WritableStream<Uint8Array> {
|
get toDevice(): WritableStream<Uint8Array> {
|
||||||
return this._toDevice;
|
return this._toDevice;
|
||||||
}
|
}
|
||||||
|
|
||||||
get fromDevice(): ReadableStream<Types.DeviceOutput> {
|
get fromDevice(): ReadableStream<Types.DeviceOutput> {
|
||||||
return this._fromDevice;
|
return this._fromDevice;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async readFromRadio(
|
protected async readFromRadio(
|
||||||
controller: ReadableStreamDefaultController<Types.DeviceOutput>,
|
controller: ReadableStreamDefaultController<Types.DeviceOutput>,
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
let hasMoreData = true;
|
let hasMoreData = true;
|
||||||
while (hasMoreData && this.fromRadioCharacteristic) {
|
while (hasMoreData && this.fromRadioCharacteristic) {
|
||||||
const value = await this.fromRadioCharacteristic.readValue();
|
const value = await this.fromRadioCharacteristic.readValue();
|
||||||
if (value.byteLength === 0) {
|
if (value.byteLength === 0) {
|
||||||
hasMoreData = false;
|
hasMoreData = false;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
controller.enqueue({
|
controller.enqueue({
|
||||||
type: "packet",
|
type: "packet",
|
||||||
data: new Uint8Array(value.buffer),
|
data: new Uint8Array(value.buffer),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,14 @@
|
|||||||
{
|
{
|
||||||
"name": "@meshtastic/transport-web-serial",
|
"name": "@meshtastic/transport-web-serial",
|
||||||
"version": "0.2.1",
|
"version": "0.2.1",
|
||||||
"description": "A transport layer for Meshtastic applications using Web Serial API.",
|
"description": "A transport layer for Meshtastic applications using Web Serial API.",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./mod.ts"
|
".": "./mod.ts"
|
||||||
},
|
},
|
||||||
"imports": {
|
"imports": {
|
||||||
"@types/w3c-web-serial": "npm:@types/w3c-web-serial@^1.0.7"
|
"@types/w3c-web-serial": "npm:@types/w3c-web-serial@^1.0.7"
|
||||||
},
|
},
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"types": [
|
"types": ["@types/w3c-web-serial"]
|
||||||
"@types/w3c-web-serial"
|
}
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,41 +2,41 @@ import { Utils } from "@meshtastic/core";
|
|||||||
import type { Types } from "@meshtastic/core";
|
import type { Types } from "@meshtastic/core";
|
||||||
|
|
||||||
export class TransportWebSerial implements Types.Transport {
|
export class TransportWebSerial implements Types.Transport {
|
||||||
private _toDevice: WritableStream<Uint8Array>;
|
private _toDevice: WritableStream<Uint8Array>;
|
||||||
private _fromDevice: ReadableStream<Types.DeviceOutput>;
|
private _fromDevice: ReadableStream<Types.DeviceOutput>;
|
||||||
|
|
||||||
public static async create(baudRate?: number): Promise<TransportWebSerial> {
|
public static async create(baudRate?: number): Promise<TransportWebSerial> {
|
||||||
const port = await navigator.serial.requestPort();
|
const port = await navigator.serial.requestPort();
|
||||||
await port.open({ baudRate: baudRate || 115200 });
|
await port.open({ baudRate: baudRate || 115200 });
|
||||||
return new TransportWebSerial(port);
|
return new TransportWebSerial(port);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async createFromPort(
|
public static async createFromPort(
|
||||||
port: SerialPort,
|
port: SerialPort,
|
||||||
baudRate?: number,
|
baudRate?: number,
|
||||||
): Promise<TransportWebSerial> {
|
): Promise<TransportWebSerial> {
|
||||||
await port.open({ baudRate: baudRate || 115200 });
|
await port.open({ baudRate: baudRate || 115200 });
|
||||||
return new TransportWebSerial(port);
|
return new TransportWebSerial(port);
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(connection: SerialPort) {
|
constructor(connection: SerialPort) {
|
||||||
if (!connection.readable || !connection.writable) {
|
if (!connection.readable || !connection.writable) {
|
||||||
throw new Error("Stream not accessible");
|
throw new Error("Stream not accessible");
|
||||||
}
|
}
|
||||||
|
|
||||||
Utils.toDeviceStream.readable.pipeTo(connection.writable);
|
Utils.toDeviceStream.readable.pipeTo(connection.writable);
|
||||||
|
|
||||||
this._toDevice = Utils.toDeviceStream.writable;
|
this._toDevice = Utils.toDeviceStream.writable;
|
||||||
this._fromDevice = connection.readable.pipeThrough(
|
this._fromDevice = connection.readable.pipeThrough(
|
||||||
Utils.fromDeviceStream(),
|
Utils.fromDeviceStream(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
get toDevice(): WritableStream<Uint8Array> {
|
get toDevice(): WritableStream<Uint8Array> {
|
||||||
return this._toDevice;
|
return this._toDevice;
|
||||||
}
|
}
|
||||||
|
|
||||||
get fromDevice(): ReadableStream<Types.DeviceOutput> {
|
get fromDevice(): ReadableStream<Types.DeviceOutput> {
|
||||||
return this._fromDevice;
|
return this._fromDevice;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+14
-14
@@ -98,7 +98,7 @@ improve the stability of future releases
|
|||||||
## Development & Building
|
## Development & Building
|
||||||
|
|
||||||
You'll need to download the package manager used with this repo. You can install
|
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.
|
instructions listed on the home page.
|
||||||
|
|
||||||
### Development
|
### Development
|
||||||
@@ -106,13 +106,13 @@ instructions listed on the home page.
|
|||||||
Install the dependencies.
|
Install the dependencies.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
deno i
|
bun install
|
||||||
```
|
```
|
||||||
|
|
||||||
Start the development server:
|
Start the development server:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
deno task dev
|
bun run dev
|
||||||
```
|
```
|
||||||
|
|
||||||
### Building and Packaging
|
### Building and Packaging
|
||||||
@@ -120,33 +120,33 @@ deno task dev
|
|||||||
Build the project:
|
Build the project:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
deno task build
|
bun run build
|
||||||
```
|
```
|
||||||
|
|
||||||
GZip the output:
|
GZip the output:
|
||||||
|
|
||||||
```bash
|
```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:
|
reasons:
|
||||||
|
|
||||||
- **Built-in Security**: Deno's security-first approach requires explicit
|
- **Fast Performance**: Bun is built from the ground up for speed, offering
|
||||||
permissions for file, network, and environment access, reducing vulnerability
|
significantly faster package installation and bundling compared to other
|
||||||
risks.
|
JavaScript runtimes.
|
||||||
- **TypeScript Support**: Native TypeScript support without additional
|
- **TypeScript Support**: Native TypeScript support without additional
|
||||||
configuration, enhancing code quality and developer experience.
|
configuration, enhancing code quality and developer experience.
|
||||||
- **Modern JavaScript**: First-class support for ESM imports, top-level await,
|
- **Modern JavaScript**: First-class support for ESM imports, top-level await,
|
||||||
and other modern JavaScript features.
|
and other modern JavaScript features.
|
||||||
- **Simplified Tooling**: Built-in formatter, linter, test runner, and bundler
|
- **All-in-One Tooling**: Built-in package manager, bundler, test runner, and
|
||||||
eliminate the need for multiple third-party tools.
|
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
|
- **Reproducible Builds**: Lockfile ensures consistent builds across all
|
||||||
environments.
|
environments.
|
||||||
- **Web Standard APIs**: Uses browser-compatible APIs, making code more portable
|
|
||||||
between server and client environments.
|
|
||||||
|
|
||||||
### Contributing
|
### Contributing
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -18,6 +18,11 @@
|
|||||||
href="https://cdn.jsdelivr.net/npm/@xz/fonts@1/serve/cascadia-code.min.css"
|
href="https://cdn.jsdelivr.net/npm/@xz/fonts@1/serve/cascadia-code.min.css"
|
||||||
crossorigin="anonymous"
|
crossorigin="anonymous"
|
||||||
/>
|
/>
|
||||||
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
href="src/index.css"
|
||||||
|
crossorigin="anonymous"
|
||||||
|
/>
|
||||||
<meta name="theme-color" content="#67ea94" />
|
<meta name="theme-color" content="#67ea94" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<meta name="description" content="Meshtastic Web Client" />
|
<meta name="description" content="Meshtastic Web Client" />
|
||||||
|
|||||||
+110
-100
@@ -1,102 +1,112 @@
|
|||||||
{
|
{
|
||||||
"name": "meshtastic-web",
|
"name": "meshtastic-web",
|
||||||
"version": "2.7.0-0",
|
"version": "2.7.0-0",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"description": "Meshtastic web client",
|
"description": "Meshtastic web client",
|
||||||
"license": "GPL-3.0-only",
|
"license": "GPL-3.0-only",
|
||||||
|
"repository": {
|
||||||
"repository": {
|
"type": "git",
|
||||||
"type": "git",
|
"url": "git+https://github.com/meshtastic/web.git"
|
||||||
"url": "git+https://github.com/meshtastic/web.git"
|
},
|
||||||
},
|
"bugs": {
|
||||||
"bugs": {
|
"url": "https://github.com/meshtastic/web/issues"
|
||||||
"url": "https://github.com/meshtastic/web/issues"
|
},
|
||||||
},
|
"simple-git-hooks": {
|
||||||
"simple-git-hooks": {
|
"pre-commit": "bun run check:fix"
|
||||||
"pre-commit": "deno task lint:fix && deno task format"
|
},
|
||||||
},
|
"homepage": "https://meshtastic.org",
|
||||||
"homepage": "https://meshtastic.org",
|
"scripts": {
|
||||||
"dependencies": {
|
"build": "bunx --bun vite build",
|
||||||
"@bufbuild/protobuf": "^2.6.0",
|
"build:analyze": "BUNDLE_ANALYZE=true bun run build",
|
||||||
"@hookform/resolvers": "^5.1.1",
|
"check": "biome check src/",
|
||||||
"@meshtastic/core": "npm:@jsr/meshtastic__core@2.6.4",
|
"check:fix": "biome check --write src/",
|
||||||
"@meshtastic/js": "npm:@jsr/meshtastic__js@2.6.0-0",
|
"dev": "bunx --bun vite",
|
||||||
"@meshtastic/transport-http": "npm:@jsr/meshtastic__transport-http",
|
"test": "bunx --bun vitest",
|
||||||
"@meshtastic/transport-web-bluetooth": "npm:@jsr/meshtastic__transport-web-bluetooth",
|
"ts:check": "bun run tsc --noEmit",
|
||||||
"@meshtastic/transport-web-serial": "npm:@jsr/meshtastic__transport-web-serial",
|
"preview": "bunx --bun vite preview",
|
||||||
"@noble/curves": "^1.9.2",
|
"generate:routes": "bun @tanstack/router-cli generate --outDir src/ routes --rootRoutePath /",
|
||||||
"@radix-ui/react-accordion": "^1.2.11",
|
"package": "gzipper c -i html,js,css,png,ico,svg,json,webmanifest,txt dist dist/output && tar -cvf dist/build.tar -C ./dist/output/ ."
|
||||||
"@radix-ui/react-checkbox": "^1.3.2",
|
},
|
||||||
"@radix-ui/react-dialog": "^1.1.14",
|
"dependencies": {
|
||||||
"@radix-ui/react-dropdown-menu": "^2.1.15",
|
"@bufbuild/protobuf": "^2.6.0",
|
||||||
"@radix-ui/react-label": "^2.1.7",
|
"@hookform/resolvers": "^5.1.1",
|
||||||
"@radix-ui/react-menubar": "^1.1.15",
|
"@meshtastic/core": "npm:@jsr/meshtastic__core@2.6.4",
|
||||||
"@radix-ui/react-popover": "^1.1.14",
|
"@meshtastic/transport-http": "npm:@jsr/meshtastic__transport-http",
|
||||||
"@radix-ui/react-scroll-area": "^1.2.9",
|
"@meshtastic/transport-web-bluetooth": "npm:@jsr/meshtastic__transport-web-bluetooth",
|
||||||
"@radix-ui/react-select": "^2.2.5",
|
"@meshtastic/transport-web-serial": "npm:@jsr/meshtastic__transport-web-serial",
|
||||||
"@radix-ui/react-separator": "^1.1.7",
|
"@noble/curves": "^1.9.2",
|
||||||
"@radix-ui/react-slider": "^1.3.5",
|
"@radix-ui/react-accordion": "^1.2.11",
|
||||||
"@radix-ui/react-switch": "^1.2.5",
|
"@radix-ui/react-checkbox": "^1.3.2",
|
||||||
"@radix-ui/react-tabs": "^1.1.12",
|
"@radix-ui/react-dialog": "^1.1.14",
|
||||||
"@radix-ui/react-toast": "^1.2.14",
|
"@radix-ui/react-dropdown-menu": "^2.1.15",
|
||||||
"@radix-ui/react-toggle-group": "^1.1.10",
|
"@radix-ui/react-label": "^2.1.7",
|
||||||
"@radix-ui/react-tooltip": "^1.2.7",
|
"@radix-ui/react-menubar": "^1.1.15",
|
||||||
"@tanstack/react-router": "^1.125.4",
|
"@radix-ui/react-popover": "^1.1.14",
|
||||||
"@tanstack/react-router-devtools": "^1.125.4",
|
"@radix-ui/react-scroll-area": "^1.2.9",
|
||||||
"@tanstack/router-cli": "^1.125.4",
|
"@radix-ui/react-select": "^2.2.5",
|
||||||
"@tanstack/router-devtools": "^1.125.4",
|
"@radix-ui/react-separator": "^1.1.7",
|
||||||
"@turf/turf": "^7.2.0",
|
"@radix-ui/react-slider": "^1.3.5",
|
||||||
"@types/node": "^24.0.10",
|
"@radix-ui/react-switch": "^1.2.5",
|
||||||
"@types/web-bluetooth": "^0.0.21",
|
"@radix-ui/react-tabs": "^1.1.12",
|
||||||
"base64-js": "^1.5.1",
|
"@radix-ui/react-toast": "^1.2.14",
|
||||||
"class-variance-authority": "^0.7.1",
|
"@radix-ui/react-toggle-group": "^1.1.10",
|
||||||
"clsx": "^2.1.1",
|
"@radix-ui/react-tooltip": "^1.2.7",
|
||||||
"cmdk": "^1.1.1",
|
"@tailwindcss/vite": "^4.1.11",
|
||||||
"crypto-random-string": "^5.0.0",
|
"@tanstack/react-router": "^1.127.9",
|
||||||
"i18next": "^25.3.1",
|
"@tanstack/react-router-devtools": "^1.127.9",
|
||||||
"i18next-browser-languagedetector": "^8.2.0",
|
"@tanstack/router-cli": "^1.127.8",
|
||||||
"i18next-http-backend": "^3.0.2",
|
"@tanstack/router-devtools": "^1.127.9",
|
||||||
"idb-keyval": "^6.2.2",
|
"@turf/turf": "^7.2.0",
|
||||||
"immer": "^10.1.1",
|
"@types/node": "^24.0.14",
|
||||||
"js-cookie": "^3.0.5",
|
"@types/web-bluetooth": "^0.0.21",
|
||||||
"lucide-react": "^0.525.0",
|
"base64-js": "^1.5.1",
|
||||||
"maplibre-gl": "5.6.1",
|
"class-variance-authority": "^0.7.1",
|
||||||
"react": "^19.1.0",
|
"clsx": "^2.1.1",
|
||||||
"react-dom": "^19.1.0",
|
"cmdk": "^1.1.1",
|
||||||
"react-error-boundary": "^6.0.0",
|
"crypto-random-string": "^5.0.0",
|
||||||
"react-hook-form": "^7.60.0",
|
"i18next": "^25.3.2",
|
||||||
"react-i18next": "^15.6.0",
|
"i18next-browser-languagedetector": "^8.2.0",
|
||||||
"react-map-gl": "8.0.4",
|
"i18next-http-backend": "^3.0.2",
|
||||||
"react-qrcode-logo": "^3.0.0",
|
"idb-keyval": "^6.2.2",
|
||||||
"rfc4648": "^1.5.4",
|
"immer": "^10.1.1",
|
||||||
"zod": "^3.25.75",
|
"js-cookie": "^3.0.5",
|
||||||
"zustand": "5.0.6"
|
"lucide-react": "^0.525.0",
|
||||||
},
|
"maplibre-gl": "5.6.1",
|
||||||
"devDependencies": {
|
"react": "^19.1.0",
|
||||||
"@tailwindcss/postcss": "^4.1.11",
|
"react-dom": "^19.1.0",
|
||||||
"@tanstack/router-plugin": "^1.125.5",
|
"react-error-boundary": "^6.0.0",
|
||||||
"@testing-library/jest-dom": "^6.6.3",
|
"react-hook-form": "^7.60.0",
|
||||||
"@testing-library/react": "^16.3.0",
|
"react-i18next": "^15.6.0",
|
||||||
"@testing-library/user-event": "^14.6.1",
|
"react-map-gl": "8.0.4",
|
||||||
"@types/chrome": "^0.0.329",
|
"react-qrcode-logo": "^3.0.0",
|
||||||
"@types/react": "^19.1.8",
|
"rfc4648": "^1.5.4",
|
||||||
"@types/react-dom": "^19.1.6",
|
"zod": "^4.0.5",
|
||||||
"@types/serviceworker": "^0.0.140",
|
"zustand": "5.0.6"
|
||||||
"@types/js-cookie": "^3.0.6",
|
},
|
||||||
"@types/w3c-web-serial": "^1.0.8",
|
"devDependencies": {
|
||||||
"@vitejs/plugin-react": "^4.6.0",
|
"@biomejs/biome": "2.0.6",
|
||||||
"autoprefixer": "^10.4.21",
|
"@tanstack/router-plugin": "^1.127.9",
|
||||||
"gzipper": "^8.2.1",
|
"@testing-library/jest-dom": "^6.6.3",
|
||||||
"happy-dom": "^18.0.1",
|
"@testing-library/react": "^16.3.0",
|
||||||
"postcss": "^8.5.6",
|
"@testing-library/user-event": "^14.6.1",
|
||||||
"simple-git-hooks": "^2.13.0",
|
"@types/chrome": "^0.1.0",
|
||||||
"tailwind-merge": "^3.3.1",
|
"@types/js-cookie": "^3.0.6",
|
||||||
"tailwindcss": "^4.1.11",
|
"@types/react": "^19.1.8",
|
||||||
"tailwindcss-animate": "^1.0.7",
|
"@types/react-dom": "^19.1.6",
|
||||||
"tar": "^7.4.3",
|
"@types/serviceworker": "^0.0.142",
|
||||||
"testing-library": "^0.0.2",
|
"@types/w3c-web-serial": "^1.0.8",
|
||||||
"typescript": "^5.8.3",
|
"@vitejs/plugin-react": "^4.6.0",
|
||||||
"vite": "^7.0",
|
"autoprefixer": "^10.4.21",
|
||||||
"vitest": "^3.2.4"
|
"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"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
plugins: {
|
|
||||||
"@tailwindcss/postcss": {},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
@@ -1,69 +1,69 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"sectionLabel": "Канали",
|
"sectionLabel": "Канали",
|
||||||
"channelName": "Канал: {{channelName}}",
|
"channelName": "Канал: {{channelName}}",
|
||||||
"broadcastLabel": "Primary",
|
"broadcastLabel": "Primary",
|
||||||
"channelIndex": "Ch {{index}}"
|
"channelIndex": "Ch {{index}}"
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
|
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"label": "Настройки на канала",
|
"label": "Настройки на канала",
|
||||||
"description": "Crypto, MQTT & misc settings"
|
"description": "Crypto, MQTT & misc settings"
|
||||||
},
|
},
|
||||||
"role": {
|
"role": {
|
||||||
"label": "Роля",
|
"label": "Роля",
|
||||||
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
|
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
|
||||||
"options": {
|
"options": {
|
||||||
"primary": "PRIMARY",
|
"primary": "PRIMARY",
|
||||||
"disabled": "DISABLED",
|
"disabled": "DISABLED",
|
||||||
"secondary": "SECONDARY"
|
"secondary": "SECONDARY"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"psk": {
|
"psk": {
|
||||||
"label": "Pre-Shared Key",
|
"label": "Pre-Shared Key",
|
||||||
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
|
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
|
||||||
"generate": "Генериране"
|
"generate": "Генериране"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"label": "Име",
|
"label": "Име",
|
||||||
"description": "A unique name for the channel <12 bytes, leave blank for default"
|
"description": "A unique name for the channel <12 bytes, leave blank for default"
|
||||||
},
|
},
|
||||||
"uplinkEnabled": {
|
"uplinkEnabled": {
|
||||||
"label": "Uplink Enabled",
|
"label": "Uplink Enabled",
|
||||||
"description": "Send messages from the local mesh to MQTT"
|
"description": "Send messages from the local mesh to MQTT"
|
||||||
},
|
},
|
||||||
"downlinkEnabled": {
|
"downlinkEnabled": {
|
||||||
"label": "Downlink Enabled",
|
"label": "Downlink Enabled",
|
||||||
"description": "Send messages from MQTT to the local mesh"
|
"description": "Send messages from MQTT to the local mesh"
|
||||||
},
|
},
|
||||||
"positionPrecision": {
|
"positionPrecision": {
|
||||||
"label": "Местоположение",
|
"label": "Местоположение",
|
||||||
"description": "The precision of the location to share with the channel. Can be disabled.",
|
"description": "The precision of the location to share with the channel. Can be disabled.",
|
||||||
"options": {
|
"options": {
|
||||||
"none": "Да не се споделя местоположението",
|
"none": "Да не се споделя местоположението",
|
||||||
"precise": "Точно местоположение",
|
"precise": "Точно местоположение",
|
||||||
"metric_km23": "Within 23 kilometers",
|
"metric_km23": "Within 23 kilometers",
|
||||||
"metric_km12": "Within 12 kilometers",
|
"metric_km12": "Within 12 kilometers",
|
||||||
"metric_km5_8": "Within 5.8 kilometers",
|
"metric_km5_8": "Within 5.8 kilometers",
|
||||||
"metric_km2_9": "Within 2.9 kilometers",
|
"metric_km2_9": "Within 2.9 kilometers",
|
||||||
"metric_km1_5": "Within 1.5 kilometers",
|
"metric_km1_5": "Within 1.5 kilometers",
|
||||||
"metric_m700": "Within 700 meters",
|
"metric_m700": "Within 700 meters",
|
||||||
"metric_m350": "Within 350 meters",
|
"metric_m350": "Within 350 meters",
|
||||||
"metric_m200": "Within 200 meters",
|
"metric_m200": "Within 200 meters",
|
||||||
"metric_m90": "Within 90 meters",
|
"metric_m90": "Within 90 meters",
|
||||||
"metric_m50": "Within 50 meters",
|
"metric_m50": "Within 50 meters",
|
||||||
"imperial_mi15": "Within 15 miles",
|
"imperial_mi15": "Within 15 miles",
|
||||||
"imperial_mi7_3": "Within 7.3 miles",
|
"imperial_mi7_3": "Within 7.3 miles",
|
||||||
"imperial_mi3_6": "Within 3.6 miles",
|
"imperial_mi3_6": "Within 3.6 miles",
|
||||||
"imperial_mi1_8": "Within 1.8 miles",
|
"imperial_mi1_8": "Within 1.8 miles",
|
||||||
"imperial_mi0_9": "Within 0.9 miles",
|
"imperial_mi0_9": "Within 0.9 miles",
|
||||||
"imperial_mi0_5": "Within 0.5 miles",
|
"imperial_mi0_5": "Within 0.5 miles",
|
||||||
"imperial_mi0_2": "Within 0.2 miles",
|
"imperial_mi0_2": "Within 0.2 miles",
|
||||||
"imperial_ft600": "Within 600 feet",
|
"imperial_ft600": "Within 600 feet",
|
||||||
"imperial_ft300": "Within 300 feet",
|
"imperial_ft300": "Within 300 feet",
|
||||||
"imperial_ft150": "Within 150 feet"
|
"imperial_ft150": "Within 150 feet"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,50 +1,50 @@
|
|||||||
{
|
{
|
||||||
"emptyState": "Няма намерени резултати.",
|
"emptyState": "Няма намерени резултати.",
|
||||||
"page": {
|
"page": {
|
||||||
"title": "Command Menu"
|
"title": "Command Menu"
|
||||||
},
|
},
|
||||||
"pinGroup": {
|
"pinGroup": {
|
||||||
"label": "Pin command group"
|
"label": "Pin command group"
|
||||||
},
|
},
|
||||||
"unpinGroup": {
|
"unpinGroup": {
|
||||||
"label": "Unpin command group"
|
"label": "Unpin command group"
|
||||||
},
|
},
|
||||||
"goto": {
|
"goto": {
|
||||||
"label": "Goto",
|
"label": "Goto",
|
||||||
"command": {
|
"command": {
|
||||||
"messages": "Съобщения",
|
"messages": "Съобщения",
|
||||||
"map": "Карта",
|
"map": "Карта",
|
||||||
"config": "Конфигурация",
|
"config": "Конфигурация",
|
||||||
"channels": "Канали",
|
"channels": "Канали",
|
||||||
"nodes": "Възли"
|
"nodes": "Възли"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manage": {
|
"manage": {
|
||||||
"label": "Управление",
|
"label": "Управление",
|
||||||
"command": {
|
"command": {
|
||||||
"switchNode": "Switch Node",
|
"switchNode": "Switch Node",
|
||||||
"connectNewNode": "Свързване на нов възел"
|
"connectNewNode": "Свързване на нов възел"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"contextual": {
|
"contextual": {
|
||||||
"label": "Contextual",
|
"label": "Contextual",
|
||||||
"command": {
|
"command": {
|
||||||
"qrCode": "QR код",
|
"qrCode": "QR код",
|
||||||
"qrGenerator": "Генератор",
|
"qrGenerator": "Генератор",
|
||||||
"qrImport": "Импортиране",
|
"qrImport": "Импортиране",
|
||||||
"scheduleShutdown": "Планирано изключване",
|
"scheduleShutdown": "Планирано изключване",
|
||||||
"scheduleReboot": "Планирано рестартиране",
|
"scheduleReboot": "Планирано рестартиране",
|
||||||
"rebootToOtaMode": "Рестартиране в режим OTA",
|
"rebootToOtaMode": "Рестартиране в режим OTA",
|
||||||
"resetNodeDb": "Нулиране на базата данни с възли",
|
"resetNodeDb": "Нулиране на базата данни с възли",
|
||||||
"factoryResetDevice": "Фабрично нулиране на устройството",
|
"factoryResetDevice": "Фабрично нулиране на устройството",
|
||||||
"factoryResetConfig": "Фабрично нулиране на конфигурацията"
|
"factoryResetConfig": "Фабрично нулиране на конфигурацията"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"debug": {
|
"debug": {
|
||||||
"label": "Отстраняване на грешки",
|
"label": "Отстраняване на грешки",
|
||||||
"command": {
|
"command": {
|
||||||
"reconfigure": "Преконфигуриране",
|
"reconfigure": "Преконфигуриране",
|
||||||
"clearAllStoredMessages": "Изчистване на всички съхранени съобщения"
|
"clearAllStoredMessages": "Изчистване на всички съхранени съобщения"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,141 +1,141 @@
|
|||||||
{
|
{
|
||||||
"button": {
|
"button": {
|
||||||
"apply": "Приложи",
|
"apply": "Приложи",
|
||||||
"backupKey": "Backup Key",
|
"backupKey": "Backup Key",
|
||||||
"cancel": "Отказ",
|
"cancel": "Отказ",
|
||||||
"clearMessages": "Изчистване на съобщенията",
|
"clearMessages": "Изчистване на съобщенията",
|
||||||
"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",
|
"rebootOtaNow": "Reboot to OTA Mode Now",
|
||||||
"remove": "Изтрий",
|
"remove": "Изтрий",
|
||||||
"requestNewKeys": "Request New Keys",
|
"requestNewKeys": "Request New Keys",
|
||||||
"requestPosition": "Request Position",
|
"requestPosition": "Request Position",
|
||||||
"reset": "Нулиране",
|
"reset": "Нулиране",
|
||||||
"save": "Запис",
|
"save": "Запис",
|
||||||
"scanQr": "Сканиране на QR кода",
|
"scanQr": "Сканиране на QR кода",
|
||||||
"traceRoute": "Trace Route",
|
"traceRoute": "Trace Route",
|
||||||
"submit": "Submit"
|
"submit": "Submit"
|
||||||
},
|
},
|
||||||
"app": {
|
"app": {
|
||||||
"title": "Meshtastic",
|
"title": "Meshtastic",
|
||||||
"fullTitle": "Meshtastic Web клиент"
|
"fullTitle": "Meshtastic Web клиент"
|
||||||
},
|
},
|
||||||
"loading": "Зареждане...",
|
"loading": "Зареждане...",
|
||||||
"unit": {
|
"unit": {
|
||||||
"cps": "CPS",
|
"cps": "CPS",
|
||||||
"dbm": "dBm",
|
"dbm": "dBm",
|
||||||
"hertz": "Hz",
|
"hertz": "Hz",
|
||||||
"hop": {
|
"hop": {
|
||||||
"one": "Hop",
|
"one": "Hop",
|
||||||
"plural": "Hops"
|
"plural": "Hops"
|
||||||
},
|
},
|
||||||
"hopsAway": {
|
"hopsAway": {
|
||||||
"one": "{{count}} hop away",
|
"one": "{{count}} hop away",
|
||||||
"plural": "{{count}} hops away",
|
"plural": "{{count}} hops away",
|
||||||
"unknown": "Unknown hops away"
|
"unknown": "Unknown hops away"
|
||||||
},
|
},
|
||||||
"megahertz": "MHz",
|
"megahertz": "MHz",
|
||||||
"raw": "raw",
|
"raw": "raw",
|
||||||
"meter": {
|
"meter": {
|
||||||
"one": "Метър",
|
"one": "Метър",
|
||||||
"plural": "Метри",
|
"plural": "Метри",
|
||||||
"suffix": "m"
|
"suffix": "m"
|
||||||
},
|
},
|
||||||
"minute": {
|
"minute": {
|
||||||
"one": "Минута",
|
"one": "Минута",
|
||||||
"plural": "Минути"
|
"plural": "Минути"
|
||||||
},
|
},
|
||||||
"hour": {
|
"hour": {
|
||||||
"one": "Час",
|
"one": "Час",
|
||||||
"plural": "Часа"
|
"plural": "Часа"
|
||||||
},
|
},
|
||||||
"millisecond": {
|
"millisecond": {
|
||||||
"one": "Милисекунда",
|
"one": "Милисекунда",
|
||||||
"plural": "Милисекунди",
|
"plural": "Милисекунди",
|
||||||
"suffix": "ms"
|
"suffix": "ms"
|
||||||
},
|
},
|
||||||
"second": {
|
"second": {
|
||||||
"one": "Секунда",
|
"one": "Секунда",
|
||||||
"plural": "Секунди"
|
"plural": "Секунди"
|
||||||
},
|
},
|
||||||
"day": {
|
"day": {
|
||||||
"one": "Ден",
|
"one": "Ден",
|
||||||
"plural": "Дни"
|
"plural": "Дни"
|
||||||
},
|
},
|
||||||
"month": {
|
"month": {
|
||||||
"one": "Месец",
|
"one": "Месец",
|
||||||
"plural": "Месеца"
|
"plural": "Месеца"
|
||||||
},
|
},
|
||||||
"year": {
|
"year": {
|
||||||
"one": "Година",
|
"one": "Година",
|
||||||
"plural": "Години"
|
"plural": "Години"
|
||||||
},
|
},
|
||||||
"snr": "SNR",
|
"snr": "SNR",
|
||||||
"volt": {
|
"volt": {
|
||||||
"one": "Волт",
|
"one": "Волт",
|
||||||
"plural": "Волта",
|
"plural": "Волта",
|
||||||
"suffix": "V"
|
"suffix": "V"
|
||||||
},
|
},
|
||||||
"record": {
|
"record": {
|
||||||
"one": "Записи",
|
"one": "Записи",
|
||||||
"plural": "Записи"
|
"plural": "Записи"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"0bit": "Empty",
|
"0bit": "Empty",
|
||||||
"8bit": "8 bit",
|
"8bit": "8 bit",
|
||||||
"128bit": "128 bit",
|
"128bit": "128 bit",
|
||||||
"256bit": "256 bit"
|
"256bit": "256 bit"
|
||||||
},
|
},
|
||||||
"unknown": {
|
"unknown": {
|
||||||
"longName": "Неизвестно",
|
"longName": "Неизвестно",
|
||||||
"shortName": "НЕИЗВ.",
|
"shortName": "НЕИЗВ.",
|
||||||
"notAvailable": "N/A",
|
"notAvailable": "N/A",
|
||||||
"num": "??"
|
"num": "??"
|
||||||
},
|
},
|
||||||
"nodeUnknownPrefix": "!",
|
"nodeUnknownPrefix": "!",
|
||||||
"unset": "НЕЗАДАДЕН",
|
"unset": "НЕЗАДАДЕН",
|
||||||
"fallbackName": "Meshtastic {{last4}}",
|
"fallbackName": "Meshtastic {{last4}}",
|
||||||
"node": "Възел",
|
"node": "Възел",
|
||||||
"formValidation": {
|
"formValidation": {
|
||||||
"unsavedChanges": "Unsaved changes",
|
"unsavedChanges": "Unsaved changes",
|
||||||
"tooBig": {
|
"tooBig": {
|
||||||
"string": "Too long, expected less than or equal to {{maximum}} characters.",
|
"string": "Too long, expected less than or equal to {{maximum}} characters.",
|
||||||
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
|
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
|
||||||
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
|
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
|
||||||
},
|
},
|
||||||
"tooSmall": {
|
"tooSmall": {
|
||||||
"string": "Too short, expected more than or equal to {{minimum}} characters.",
|
"string": "Too short, expected more than or equal to {{minimum}} characters.",
|
||||||
"number": "Too small, expected a number larger than or equal to {{minimum}}."
|
"number": "Too small, expected a number larger than or equal to {{minimum}}."
|
||||||
},
|
},
|
||||||
"invalidFormat": {
|
"invalidFormat": {
|
||||||
"ipv4": "Невалиден формат, очаква се IPv4 адрес.",
|
"ipv4": "Невалиден формат, очаква се IPv4 адрес.",
|
||||||
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
|
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
|
||||||
},
|
},
|
||||||
"invalidType": {
|
"invalidType": {
|
||||||
"number": "Невалиден тип, очаква се число."
|
"number": "Невалиден тип, очаква се число."
|
||||||
},
|
},
|
||||||
"pskLength": {
|
"pskLength": {
|
||||||
"0bit": "Ключът трябва да е празен.",
|
"0bit": "Ключът трябва да е празен.",
|
||||||
"8bit": "Key is required to be an 8 bit pre-shared key (PSK).",
|
"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).",
|
"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)."
|
"256bit": "Key is required to be a 256 bit pre-shared key (PSK)."
|
||||||
},
|
},
|
||||||
"required": {
|
"required": {
|
||||||
"generic": "Това поле е задължително.",
|
"generic": "Това поле е задължително.",
|
||||||
"managed": "At least one admin key is requred if the node is managed.",
|
"managed": "At least one admin key is requred if the node is managed.",
|
||||||
"key": "Ключът е задължителен."
|
"key": "Ключът е задължителен."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
"title": "Свързани устройства",
|
"title": "Свързани устройства",
|
||||||
"description": "Управлявайте свързаните си устройства Meshtastic.",
|
"description": "Управлявайте свързаните си устройства Meshtastic.",
|
||||||
"connectionType_ble": "BLE",
|
"connectionType_ble": "BLE",
|
||||||
"connectionType_serial": "Серийна",
|
"connectionType_serial": "Серийна",
|
||||||
"connectionType_network": "Мрежа",
|
"connectionType_network": "Мрежа",
|
||||||
"noDevicesTitle": "Няма свързани устройства",
|
"noDevicesTitle": "Няма свързани устройства",
|
||||||
"noDevicesDescription": "Свържете ново устройство, за да започнете.",
|
"noDevicesDescription": "Свържете ново устройство, за да започнете.",
|
||||||
"button_newConnection": "Нова връзка"
|
"button_newConnection": "Нова връзка"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,428 +1,428 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"title": "Конфигурация",
|
"title": "Конфигурация",
|
||||||
"tabBluetooth": "Bluetooth",
|
"tabBluetooth": "Bluetooth",
|
||||||
"tabDevice": "Устройство",
|
"tabDevice": "Устройство",
|
||||||
"tabDisplay": "Дисплей",
|
"tabDisplay": "Дисплей",
|
||||||
"tabLora": "LoRa",
|
"tabLora": "LoRa",
|
||||||
"tabNetwork": "Мрежа",
|
"tabNetwork": "Мрежа",
|
||||||
"tabPosition": "Позиция",
|
"tabPosition": "Позиция",
|
||||||
"tabPower": "Захранване",
|
"tabPower": "Захранване",
|
||||||
"tabSecurity": "Сигурност"
|
"tabSecurity": "Сигурност"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"label": "Модули"
|
"label": "Модули"
|
||||||
},
|
},
|
||||||
"device": {
|
"device": {
|
||||||
"title": "Настройки на устройството",
|
"title": "Настройки на устройството",
|
||||||
"description": "Настройки за устройството",
|
"description": "Настройки за устройството",
|
||||||
"buttonPin": {
|
"buttonPin": {
|
||||||
"description": "Button pin override",
|
"description": "Button pin override",
|
||||||
"label": "Button Pin"
|
"label": "Button Pin"
|
||||||
},
|
},
|
||||||
"buzzerPin": {
|
"buzzerPin": {
|
||||||
"description": "Buzzer pin override",
|
"description": "Buzzer pin override",
|
||||||
"label": "Buzzer Pin"
|
"label": "Buzzer Pin"
|
||||||
},
|
},
|
||||||
"disableTripleClick": {
|
"disableTripleClick": {
|
||||||
"description": "Disable triple click",
|
"description": "Disable triple click",
|
||||||
"label": "Disable Triple Click"
|
"label": "Disable Triple Click"
|
||||||
},
|
},
|
||||||
"doubleTapAsButtonPress": {
|
"doubleTapAsButtonPress": {
|
||||||
"description": "Treat double tap as button press",
|
"description": "Treat double tap as button press",
|
||||||
"label": "Double Tap as Button Press"
|
"label": "Double Tap as Button Press"
|
||||||
},
|
},
|
||||||
"ledHeartbeatDisabled": {
|
"ledHeartbeatDisabled": {
|
||||||
"description": "Disable default blinking LED",
|
"description": "Disable default blinking LED",
|
||||||
"label": "LED Heartbeat Disabled"
|
"label": "LED Heartbeat Disabled"
|
||||||
},
|
},
|
||||||
"nodeInfoBroadcastInterval": {
|
"nodeInfoBroadcastInterval": {
|
||||||
"description": "How often to broadcast node info",
|
"description": "How often to broadcast node info",
|
||||||
"label": "Node Info Broadcast Interval"
|
"label": "Node Info Broadcast Interval"
|
||||||
},
|
},
|
||||||
"posixTimezone": {
|
"posixTimezone": {
|
||||||
"description": "The POSIX timezone string for the device",
|
"description": "The POSIX timezone string for the device",
|
||||||
"label": "POSIX часова зона"
|
"label": "POSIX часова зона"
|
||||||
},
|
},
|
||||||
"rebroadcastMode": {
|
"rebroadcastMode": {
|
||||||
"description": "How to handle rebroadcasting",
|
"description": "How to handle rebroadcasting",
|
||||||
"label": "Rebroadcast Mode"
|
"label": "Rebroadcast Mode"
|
||||||
},
|
},
|
||||||
"role": {
|
"role": {
|
||||||
"description": "What role the device performs on the mesh",
|
"description": "What role the device performs on the mesh",
|
||||||
"label": "Роля"
|
"label": "Роля"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"bluetooth": {
|
"bluetooth": {
|
||||||
"title": "Настройки за Bluetooth",
|
"title": "Настройки за Bluetooth",
|
||||||
"description": "Настройки за Bluetooth модула",
|
"description": "Настройки за Bluetooth модула",
|
||||||
"note": "Забележка: Някои устройства (ESP32) не могат да използват едновременно Bluetooth и WiFi.",
|
"note": "Забележка: Някои устройства (ESP32) не могат да използват едновременно Bluetooth и WiFi.",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"description": "Активиране или дезактивиране на Bluetooth",
|
"description": "Активиране или дезактивиране на Bluetooth",
|
||||||
"label": "Активиран"
|
"label": "Активиран"
|
||||||
},
|
},
|
||||||
"pairingMode": {
|
"pairingMode": {
|
||||||
"description": "Поведение при избор на ПИН.",
|
"description": "Поведение при избор на ПИН.",
|
||||||
"label": "Режим на сдвояване"
|
"label": "Режим на сдвояване"
|
||||||
},
|
},
|
||||||
"pin": {
|
"pin": {
|
||||||
"description": "Pin to use when pairing",
|
"description": "Pin to use when pairing",
|
||||||
"label": "ПИН"
|
"label": "ПИН"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"display": {
|
"display": {
|
||||||
"description": "Настройки за дисплея на устройството",
|
"description": "Настройки за дисплея на устройството",
|
||||||
"title": "Настройки на дисплея",
|
"title": "Настройки на дисплея",
|
||||||
"headingBold": {
|
"headingBold": {
|
||||||
"description": "Bolden the heading text",
|
"description": "Bolden the heading text",
|
||||||
"label": "Bold Heading"
|
"label": "Bold Heading"
|
||||||
},
|
},
|
||||||
"carouselDelay": {
|
"carouselDelay": {
|
||||||
"description": "Колко бързо да се превключва между прозорците",
|
"description": "Колко бързо да се превключва между прозорците",
|
||||||
"label": "Carousel Delay"
|
"label": "Carousel Delay"
|
||||||
},
|
},
|
||||||
"compassNorthTop": {
|
"compassNorthTop": {
|
||||||
"description": "Fix north to the top of compass",
|
"description": "Fix north to the top of compass",
|
||||||
"label": "Compass North Top"
|
"label": "Compass North Top"
|
||||||
},
|
},
|
||||||
"displayMode": {
|
"displayMode": {
|
||||||
"description": "Screen layout variant",
|
"description": "Screen layout variant",
|
||||||
"label": "Display Mode"
|
"label": "Display Mode"
|
||||||
},
|
},
|
||||||
"displayUnits": {
|
"displayUnits": {
|
||||||
"description": "Показване на метрични или имперски мерни единици",
|
"description": "Показване на метрични или имперски мерни единици",
|
||||||
"label": "Display Units"
|
"label": "Display Units"
|
||||||
},
|
},
|
||||||
"flipScreen": {
|
"flipScreen": {
|
||||||
"description": "Flip display 180 degrees",
|
"description": "Flip display 180 degrees",
|
||||||
"label": "Flip Screen"
|
"label": "Flip Screen"
|
||||||
},
|
},
|
||||||
"gpsDisplayUnits": {
|
"gpsDisplayUnits": {
|
||||||
"description": "Coordinate display format",
|
"description": "Coordinate display format",
|
||||||
"label": "GPS Display Units"
|
"label": "GPS Display Units"
|
||||||
},
|
},
|
||||||
"oledType": {
|
"oledType": {
|
||||||
"description": "Type of OLED screen attached to the device",
|
"description": "Type of OLED screen attached to the device",
|
||||||
"label": "OLED Type"
|
"label": "OLED Type"
|
||||||
},
|
},
|
||||||
"screenTimeout": {
|
"screenTimeout": {
|
||||||
"description": "Turn off the display after this long",
|
"description": "Turn off the display after this long",
|
||||||
"label": "Screen Timeout"
|
"label": "Screen Timeout"
|
||||||
},
|
},
|
||||||
"twelveHourClock": {
|
"twelveHourClock": {
|
||||||
"description": "Използване на 12-часов формат на часовника",
|
"description": "Използване на 12-часов формат на часовника",
|
||||||
"label": "12-часов часовник"
|
"label": "12-часов часовник"
|
||||||
},
|
},
|
||||||
"wakeOnTapOrMotion": {
|
"wakeOnTapOrMotion": {
|
||||||
"description": "Wake the device on tap or motion",
|
"description": "Wake the device on tap or motion",
|
||||||
"label": "Wake on Tap or Motion"
|
"label": "Wake on Tap or Motion"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lora": {
|
"lora": {
|
||||||
"title": "Настройки на Mesh",
|
"title": "Настройки на Mesh",
|
||||||
"description": "Settings for the LoRa mesh",
|
"description": "Settings for the LoRa mesh",
|
||||||
"bandwidth": {
|
"bandwidth": {
|
||||||
"description": "Широчина на канала в MHz",
|
"description": "Широчина на канала в MHz",
|
||||||
"label": "Широчина на честотната лента"
|
"label": "Широчина на честотната лента"
|
||||||
},
|
},
|
||||||
"boostedRxGain": {
|
"boostedRxGain": {
|
||||||
"description": "Boosted RX gain",
|
"description": "Boosted RX gain",
|
||||||
"label": "Boosted RX Gain"
|
"label": "Boosted RX Gain"
|
||||||
},
|
},
|
||||||
"codingRate": {
|
"codingRate": {
|
||||||
"description": "The denominator of the coding rate",
|
"description": "The denominator of the coding rate",
|
||||||
"label": "Coding Rate"
|
"label": "Coding Rate"
|
||||||
},
|
},
|
||||||
"frequencyOffset": {
|
"frequencyOffset": {
|
||||||
"description": "Frequency offset to correct for crystal calibration errors",
|
"description": "Frequency offset to correct for crystal calibration errors",
|
||||||
"label": "Отместване на честотата"
|
"label": "Отместване на честотата"
|
||||||
},
|
},
|
||||||
"frequencySlot": {
|
"frequencySlot": {
|
||||||
"description": "LoRa frequency channel number",
|
"description": "LoRa frequency channel number",
|
||||||
"label": "Честотен слот"
|
"label": "Честотен слот"
|
||||||
},
|
},
|
||||||
"hopLimit": {
|
"hopLimit": {
|
||||||
"description": "Maximum number of hops",
|
"description": "Maximum number of hops",
|
||||||
"label": "Hop Limit"
|
"label": "Hop Limit"
|
||||||
},
|
},
|
||||||
"ignoreMqtt": {
|
"ignoreMqtt": {
|
||||||
"description": "Don't forward MQTT messages over the mesh",
|
"description": "Don't forward MQTT messages over the mesh",
|
||||||
"label": "Ignore MQTT"
|
"label": "Ignore MQTT"
|
||||||
},
|
},
|
||||||
"modemPreset": {
|
"modemPreset": {
|
||||||
"description": "Използване на предварително настроен модем",
|
"description": "Използване на предварително настроен модем",
|
||||||
"label": "Предварително настроен модем"
|
"label": "Предварително настроен модем"
|
||||||
},
|
},
|
||||||
"okToMqtt": {
|
"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",
|
"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"
|
"label": "OK to MQTT"
|
||||||
},
|
},
|
||||||
"overrideDutyCycle": {
|
"overrideDutyCycle": {
|
||||||
"description": "Override Duty Cycle",
|
"description": "Override Duty Cycle",
|
||||||
"label": "Override Duty Cycle"
|
"label": "Override Duty Cycle"
|
||||||
},
|
},
|
||||||
"overrideFrequency": {
|
"overrideFrequency": {
|
||||||
"description": "Override frequency",
|
"description": "Override frequency",
|
||||||
"label": "Override Frequency"
|
"label": "Override Frequency"
|
||||||
},
|
},
|
||||||
"region": {
|
"region": {
|
||||||
"description": "Sets the region for your node",
|
"description": "Sets the region for your node",
|
||||||
"label": "Регион"
|
"label": "Регион"
|
||||||
},
|
},
|
||||||
"spreadingFactor": {
|
"spreadingFactor": {
|
||||||
"description": "Indicates the number of chirps per symbol",
|
"description": "Indicates the number of chirps per symbol",
|
||||||
"label": "Spreading Factor"
|
"label": "Spreading Factor"
|
||||||
},
|
},
|
||||||
"transmitEnabled": {
|
"transmitEnabled": {
|
||||||
"description": "Активиране/дезактивиране на предаването (TX) от LoRa радиото",
|
"description": "Активиране/дезактивиране на предаването (TX) от LoRa радиото",
|
||||||
"label": "Предаването е активирано"
|
"label": "Предаването е активирано"
|
||||||
},
|
},
|
||||||
"transmitPower": {
|
"transmitPower": {
|
||||||
"description": "Максимална мощност на предаване",
|
"description": "Максимална мощност на предаване",
|
||||||
"label": "Мощност на предаване"
|
"label": "Мощност на предаване"
|
||||||
},
|
},
|
||||||
"usePreset": {
|
"usePreset": {
|
||||||
"description": "Use one of the predefined modem presets",
|
"description": "Use one of the predefined modem presets",
|
||||||
"label": "Използване на предварително зададени настройки"
|
"label": "Използване на предварително зададени настройки"
|
||||||
},
|
},
|
||||||
"meshSettings": {
|
"meshSettings": {
|
||||||
"description": "Settings for the LoRa mesh",
|
"description": "Settings for the LoRa mesh",
|
||||||
"label": "Настройки на Mesh"
|
"label": "Настройки на Mesh"
|
||||||
},
|
},
|
||||||
"waveformSettings": {
|
"waveformSettings": {
|
||||||
"description": "Settings for the LoRa waveform",
|
"description": "Settings for the LoRa waveform",
|
||||||
"label": "Waveform Settings"
|
"label": "Waveform Settings"
|
||||||
},
|
},
|
||||||
"radioSettings": {
|
"radioSettings": {
|
||||||
"label": "Настройки на радиото",
|
"label": "Настройки на радиото",
|
||||||
"description": "Настройки за LoRa радиото"
|
"description": "Настройки за LoRa радиото"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "Конфигурация на WiFi",
|
"title": "Конфигурация на WiFi",
|
||||||
"description": "Конфигурация на WiFi радиото",
|
"description": "Конфигурация на WiFi радиото",
|
||||||
"note": "Забележка: Някои устройства (ESP32) не могат да използват едновременно Bluetooth и WiFi.",
|
"note": "Забележка: Някои устройства (ESP32) не могат да използват едновременно Bluetooth и WiFi.",
|
||||||
"addressMode": {
|
"addressMode": {
|
||||||
"description": "Address assignment selection",
|
"description": "Address assignment selection",
|
||||||
"label": "Address Mode"
|
"label": "Address Mode"
|
||||||
},
|
},
|
||||||
"dns": {
|
"dns": {
|
||||||
"description": "DNS сървър",
|
"description": "DNS сървър",
|
||||||
"label": "DNS"
|
"label": "DNS"
|
||||||
},
|
},
|
||||||
"ethernetEnabled": {
|
"ethernetEnabled": {
|
||||||
"description": "Активиране или дезактивиране на Ethernet порта",
|
"description": "Активиране или дезактивиране на Ethernet порта",
|
||||||
"label": "Активиран"
|
"label": "Активиран"
|
||||||
},
|
},
|
||||||
"gateway": {
|
"gateway": {
|
||||||
"description": "Шлюз по подразбиране",
|
"description": "Шлюз по подразбиране",
|
||||||
"label": "Шлюз"
|
"label": "Шлюз"
|
||||||
},
|
},
|
||||||
"ip": {
|
"ip": {
|
||||||
"description": "IP адрес",
|
"description": "IP адрес",
|
||||||
"label": "IP"
|
"label": "IP"
|
||||||
},
|
},
|
||||||
"psk": {
|
"psk": {
|
||||||
"description": "Парола за мрежата",
|
"description": "Парола за мрежата",
|
||||||
"label": "PSK"
|
"label": "PSK"
|
||||||
},
|
},
|
||||||
"ssid": {
|
"ssid": {
|
||||||
"description": "Име на мрежата",
|
"description": "Име на мрежата",
|
||||||
"label": "SSID"
|
"label": "SSID"
|
||||||
},
|
},
|
||||||
"subnet": {
|
"subnet": {
|
||||||
"description": "Subnet Mask",
|
"description": "Subnet Mask",
|
||||||
"label": "Subnet"
|
"label": "Subnet"
|
||||||
},
|
},
|
||||||
"wifiEnabled": {
|
"wifiEnabled": {
|
||||||
"description": "Активиране или дезактивиране на WiFi радиото",
|
"description": "Активиране или дезактивиране на WiFi радиото",
|
||||||
"label": "Активиран"
|
"label": "Активиран"
|
||||||
},
|
},
|
||||||
"meshViaUdp": {
|
"meshViaUdp": {
|
||||||
"label": "Mesh via UDP"
|
"label": "Mesh via UDP"
|
||||||
},
|
},
|
||||||
"ntpServer": {
|
"ntpServer": {
|
||||||
"label": "NTP сървър"
|
"label": "NTP сървър"
|
||||||
},
|
},
|
||||||
"rsyslogServer": {
|
"rsyslogServer": {
|
||||||
"label": "Rsyslog Server"
|
"label": "Rsyslog Server"
|
||||||
},
|
},
|
||||||
"ethernetConfigSettings": {
|
"ethernetConfigSettings": {
|
||||||
"description": "Ethernet port configuration",
|
"description": "Ethernet port configuration",
|
||||||
"label": "Конфигурация на Ethernet "
|
"label": "Конфигурация на Ethernet "
|
||||||
},
|
},
|
||||||
"ipConfigSettings": {
|
"ipConfigSettings": {
|
||||||
"description": "Конфигуриране на IP",
|
"description": "Конфигуриране на IP",
|
||||||
"label": "Конфигурация на IP"
|
"label": "Конфигурация на IP"
|
||||||
},
|
},
|
||||||
"ntpConfigSettings": {
|
"ntpConfigSettings": {
|
||||||
"description": "Конфигуриране на NTP",
|
"description": "Конфигуриране на NTP",
|
||||||
"label": "Конфигурация на NTP"
|
"label": "Конфигурация на NTP"
|
||||||
},
|
},
|
||||||
"rsyslogConfigSettings": {
|
"rsyslogConfigSettings": {
|
||||||
"description": "Rsyslog configuration",
|
"description": "Rsyslog configuration",
|
||||||
"label": "Rsyslog Config"
|
"label": "Rsyslog Config"
|
||||||
},
|
},
|
||||||
"udpConfigSettings": {
|
"udpConfigSettings": {
|
||||||
"description": "UDP over Mesh configuration",
|
"description": "UDP over Mesh configuration",
|
||||||
"label": "Конфигурация на UDP"
|
"label": "Конфигурация на UDP"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"position": {
|
"position": {
|
||||||
"title": "Настройки на позицията",
|
"title": "Настройки на позицията",
|
||||||
"description": "Настройки за модула за позиция",
|
"description": "Настройки за модула за позиция",
|
||||||
"broadcastInterval": {
|
"broadcastInterval": {
|
||||||
"description": "How often your position is sent out over the mesh",
|
"description": "How often your position is sent out over the mesh",
|
||||||
"label": "Broadcast Interval"
|
"label": "Broadcast Interval"
|
||||||
},
|
},
|
||||||
"enablePin": {
|
"enablePin": {
|
||||||
"description": "GPS module enable pin override",
|
"description": "GPS module enable pin override",
|
||||||
"label": "Enable Pin"
|
"label": "Enable Pin"
|
||||||
},
|
},
|
||||||
"fixedPosition": {
|
"fixedPosition": {
|
||||||
"description": "Don't report GPS position, but a manually-specified one",
|
"description": "Don't report GPS position, but a manually-specified one",
|
||||||
"label": "Фиксирана позиция"
|
"label": "Фиксирана позиция"
|
||||||
},
|
},
|
||||||
"gpsMode": {
|
"gpsMode": {
|
||||||
"description": "Configure whether device GPS is Enabled, Disabled, or Not Present",
|
"description": "Configure whether device GPS is Enabled, Disabled, or Not Present",
|
||||||
"label": "Режим на GPS"
|
"label": "Режим на GPS"
|
||||||
},
|
},
|
||||||
"gpsUpdateInterval": {
|
"gpsUpdateInterval": {
|
||||||
"description": "How often a GPS fix should be acquired",
|
"description": "How often a GPS fix should be acquired",
|
||||||
"label": "Интервал на актуализиране на GPS"
|
"label": "Интервал на актуализиране на GPS"
|
||||||
},
|
},
|
||||||
"positionFlags": {
|
"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.",
|
"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"
|
"label": "Position Flags"
|
||||||
},
|
},
|
||||||
"receivePin": {
|
"receivePin": {
|
||||||
"description": "GPS module RX pin override",
|
"description": "GPS module RX pin override",
|
||||||
"label": "Receive Pin"
|
"label": "Receive Pin"
|
||||||
},
|
},
|
||||||
"smartPositionEnabled": {
|
"smartPositionEnabled": {
|
||||||
"description": "Only send position when there has been a meaningful change in location",
|
"description": "Only send position when there has been a meaningful change in location",
|
||||||
"label": "Enable Smart Position"
|
"label": "Enable Smart Position"
|
||||||
},
|
},
|
||||||
"smartPositionMinDistance": {
|
"smartPositionMinDistance": {
|
||||||
"description": "Minimum distance (in meters) that must be traveled before a position update is sent",
|
"description": "Minimum distance (in meters) that must be traveled before a position update is sent",
|
||||||
"label": "Smart Position Minimum Distance"
|
"label": "Smart Position Minimum Distance"
|
||||||
},
|
},
|
||||||
"smartPositionMinInterval": {
|
"smartPositionMinInterval": {
|
||||||
"description": "Minimum interval (in seconds) that must pass before a position update is sent",
|
"description": "Minimum interval (in seconds) that must pass before a position update is sent",
|
||||||
"label": "Smart Position Minimum Interval"
|
"label": "Smart Position Minimum Interval"
|
||||||
},
|
},
|
||||||
"transmitPin": {
|
"transmitPin": {
|
||||||
"description": "GPS module TX pin override",
|
"description": "GPS module TX pin override",
|
||||||
"label": "Transmit Pin"
|
"label": "Transmit Pin"
|
||||||
},
|
},
|
||||||
"intervalsSettings": {
|
"intervalsSettings": {
|
||||||
"description": "How often to send position updates",
|
"description": "How often to send position updates",
|
||||||
"label": "Интервали"
|
"label": "Интервали"
|
||||||
},
|
},
|
||||||
"flags": {
|
"flags": {
|
||||||
"placeholder": "Select position flags...",
|
"placeholder": "Select position flags...",
|
||||||
"altitude": "Надморска височина",
|
"altitude": "Надморска височина",
|
||||||
"altitudeGeoidalSeparation": "Altitude Geoidal Separation",
|
"altitudeGeoidalSeparation": "Altitude Geoidal Separation",
|
||||||
"altitudeMsl": "Altitude is Mean Sea Level",
|
"altitudeMsl": "Altitude is Mean Sea Level",
|
||||||
"dop": "Dilution of precision (DOP) PDOP used by default",
|
"dop": "Dilution of precision (DOP) PDOP used by default",
|
||||||
"hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP",
|
"hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP",
|
||||||
"numSatellites": "Number of satellites",
|
"numSatellites": "Number of satellites",
|
||||||
"sequenceNumber": "Sequence number",
|
"sequenceNumber": "Sequence number",
|
||||||
"timestamp": "Времево клеймо",
|
"timestamp": "Времево клеймо",
|
||||||
"unset": "Отказ",
|
"unset": "Отказ",
|
||||||
"vehicleHeading": "Vehicle heading",
|
"vehicleHeading": "Vehicle heading",
|
||||||
"vehicleSpeed": "Скорост на превозното средство"
|
"vehicleSpeed": "Скорост на превозното средство"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"power": {
|
"power": {
|
||||||
"adcMultiplierOverride": {
|
"adcMultiplierOverride": {
|
||||||
"description": "Used for tweaking battery voltage reading",
|
"description": "Used for tweaking battery voltage reading",
|
||||||
"label": "ADC Multiplier Override ratio"
|
"label": "ADC Multiplier Override ratio"
|
||||||
},
|
},
|
||||||
"ina219Address": {
|
"ina219Address": {
|
||||||
"description": "Address of the INA219 battery monitor",
|
"description": "Address of the INA219 battery monitor",
|
||||||
"label": "INA219 Address"
|
"label": "INA219 Address"
|
||||||
},
|
},
|
||||||
"lightSleepDuration": {
|
"lightSleepDuration": {
|
||||||
"description": "How long the device will be in light sleep for",
|
"description": "How long the device will be in light sleep for",
|
||||||
"label": "Light Sleep Duration"
|
"label": "Light Sleep Duration"
|
||||||
},
|
},
|
||||||
"minimumWakeTime": {
|
"minimumWakeTime": {
|
||||||
"description": "Minimum amount of time the device will stay awake for after receiving a packet",
|
"description": "Minimum amount of time the device will stay awake for after receiving a packet",
|
||||||
"label": "Minimum Wake Time"
|
"label": "Minimum Wake Time"
|
||||||
},
|
},
|
||||||
"noConnectionBluetoothDisabled": {
|
"noConnectionBluetoothDisabled": {
|
||||||
"description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long",
|
"description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long",
|
||||||
"label": "No Connection Bluetooth Disabled"
|
"label": "No Connection Bluetooth Disabled"
|
||||||
},
|
},
|
||||||
"powerSavingEnabled": {
|
"powerSavingEnabled": {
|
||||||
"description": "Select if powered from a low-current source (i.e. solar), to minimize power consumption as much as possible.",
|
"description": "Select if powered from a low-current source (i.e. solar), to minimize power consumption as much as possible.",
|
||||||
"label": "Активиране на енергоспестяващ режим"
|
"label": "Активиране на енергоспестяващ режим"
|
||||||
},
|
},
|
||||||
"shutdownOnBatteryDelay": {
|
"shutdownOnBatteryDelay": {
|
||||||
"description": "Automatically shutdown node after this long when on battery, 0 for indefinite",
|
"description": "Automatically shutdown node after this long when on battery, 0 for indefinite",
|
||||||
"label": "Shutdown on battery delay"
|
"label": "Shutdown on battery delay"
|
||||||
},
|
},
|
||||||
"superDeepSleepDuration": {
|
"superDeepSleepDuration": {
|
||||||
"description": "How long the device will be in super deep sleep for",
|
"description": "How long the device will be in super deep sleep for",
|
||||||
"label": "Super Deep Sleep Duration"
|
"label": "Super Deep Sleep Duration"
|
||||||
},
|
},
|
||||||
"powerConfigSettings": {
|
"powerConfigSettings": {
|
||||||
"description": "Settings for the power module",
|
"description": "Settings for the power module",
|
||||||
"label": "Конфигурация на захранването"
|
"label": "Конфигурация на захранването"
|
||||||
},
|
},
|
||||||
"sleepSettings": {
|
"sleepSettings": {
|
||||||
"description": "Sleep settings for the power module",
|
"description": "Sleep settings for the power module",
|
||||||
"label": "Sleep Settings"
|
"label": "Sleep Settings"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"description": "Settings for the Security configuration",
|
"description": "Settings for the Security configuration",
|
||||||
"title": "Насртойки на сигурността",
|
"title": "Насртойки на сигурността",
|
||||||
"button_backupKey": "Backup Key",
|
"button_backupKey": "Backup Key",
|
||||||
"adminChannelEnabled": {
|
"adminChannelEnabled": {
|
||||||
"description": "Allow incoming device control over the insecure legacy admin channel",
|
"description": "Allow incoming device control over the insecure legacy admin channel",
|
||||||
"label": "Allow Legacy Admin"
|
"label": "Allow Legacy Admin"
|
||||||
},
|
},
|
||||||
"enableDebugLogApi": {
|
"enableDebugLogApi": {
|
||||||
"description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth",
|
"description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth",
|
||||||
"label": "Enable Debug Log API"
|
"label": "Enable Debug Log API"
|
||||||
},
|
},
|
||||||
"managed": {
|
"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.",
|
"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"
|
"label": "Managed"
|
||||||
},
|
},
|
||||||
"privateKey": {
|
"privateKey": {
|
||||||
"description": "Used to create a shared key with a remote device",
|
"description": "Used to create a shared key with a remote device",
|
||||||
"label": "Частен ключ"
|
"label": "Частен ключ"
|
||||||
},
|
},
|
||||||
"publicKey": {
|
"publicKey": {
|
||||||
"description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key",
|
"description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key",
|
||||||
"label": "Публичен ключ"
|
"label": "Публичен ключ"
|
||||||
},
|
},
|
||||||
"primaryAdminKey": {
|
"primaryAdminKey": {
|
||||||
"description": "The primary public key authorized to send admin messages to this node",
|
"description": "The primary public key authorized to send admin messages to this node",
|
||||||
"label": "Primary Admin Key"
|
"label": "Primary Admin Key"
|
||||||
},
|
},
|
||||||
"secondaryAdminKey": {
|
"secondaryAdminKey": {
|
||||||
"description": "The secondary public key authorized to send admin messages to this node",
|
"description": "The secondary public key authorized to send admin messages to this node",
|
||||||
"label": "Secondary Admin Key"
|
"label": "Secondary Admin Key"
|
||||||
},
|
},
|
||||||
"serialOutputEnabled": {
|
"serialOutputEnabled": {
|
||||||
"description": "Serial Console over the Stream API",
|
"description": "Serial Console over the Stream API",
|
||||||
"label": "Serial Output Enabled"
|
"label": "Serial Output Enabled"
|
||||||
},
|
},
|
||||||
"tertiaryAdminKey": {
|
"tertiaryAdminKey": {
|
||||||
"description": "The tertiary public key authorized to send admin messages to this node",
|
"description": "The tertiary public key authorized to send admin messages to this node",
|
||||||
"label": "Tertiary Admin Key"
|
"label": "Tertiary Admin Key"
|
||||||
},
|
},
|
||||||
"adminSettings": {
|
"adminSettings": {
|
||||||
"description": "Настройки за Admin",
|
"description": "Настройки за Admin",
|
||||||
"label": "Admin Settings"
|
"label": "Admin Settings"
|
||||||
},
|
},
|
||||||
"loggingSettings": {
|
"loggingSettings": {
|
||||||
"description": "Settings for Logging",
|
"description": "Settings for Logging",
|
||||||
"label": "Logging Settings"
|
"label": "Logging Settings"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,171 +1,171 @@
|
|||||||
{
|
{
|
||||||
"deleteMessages": {
|
"deleteMessages": {
|
||||||
"description": "Това действие ще изчисти цялата история на съобщенията. Това не може да бъде отменено. Сигурни ли сте, че искате да продължите?",
|
"description": "Това действие ще изчисти цялата история на съобщенията. Това не може да бъде отменено. Сигурни ли сте, че искате да продължите?",
|
||||||
"title": "Изчистване на всички съобщения"
|
"title": "Изчистване на всички съобщения"
|
||||||
},
|
},
|
||||||
"deviceName": {
|
"deviceName": {
|
||||||
"description": "Устройството ще се рестартира, след като конфигурацията бъде запазена.",
|
"description": "Устройството ще се рестартира, след като конфигурацията бъде запазена.",
|
||||||
"longName": "Дълго име",
|
"longName": "Дълго име",
|
||||||
"shortName": "Кратко име",
|
"shortName": "Кратко име",
|
||||||
"title": "Промяна на името на устройството"
|
"title": "Промяна на името на устройството"
|
||||||
},
|
},
|
||||||
"import": {
|
"import": {
|
||||||
"description": "The current LoRa configuration will be overridden.",
|
"description": "The current LoRa configuration will be overridden.",
|
||||||
"error": {
|
"error": {
|
||||||
"invalidUrl": "Невалиден Meshtastic URL"
|
"invalidUrl": "Невалиден Meshtastic URL"
|
||||||
},
|
},
|
||||||
"channelPrefix": "Канал: ",
|
"channelPrefix": "Канал: ",
|
||||||
"channelSetUrl": "Channel Set/QR Code URL",
|
"channelSetUrl": "Channel Set/QR Code URL",
|
||||||
"channels": "Канали:",
|
"channels": "Канали:",
|
||||||
"usePreset": "Use Preset?",
|
"usePreset": "Use Preset?",
|
||||||
"title": "Import Channel Set"
|
"title": "Import Channel Set"
|
||||||
},
|
},
|
||||||
"locationResponse": {
|
"locationResponse": {
|
||||||
"altitude": "Надморска височина: ",
|
"altitude": "Надморска височина: ",
|
||||||
"coordinates": "Координати:",
|
"coordinates": "Координати:",
|
||||||
"title": "Местоположение: {{identifier}}"
|
"title": "Местоположение: {{identifier}}"
|
||||||
},
|
},
|
||||||
"pkiRegenerateDialog": {
|
"pkiRegenerateDialog": {
|
||||||
"title": "Regenerate Pre-Shared Key?",
|
"title": "Regenerate Pre-Shared Key?",
|
||||||
"description": "Are you sure you want to regenerate the pre-shared key?",
|
"description": "Are you sure you want to regenerate the pre-shared key?",
|
||||||
"regenerate": "Регенериране"
|
"regenerate": "Регенериране"
|
||||||
},
|
},
|
||||||
"newDeviceDialog": {
|
"newDeviceDialog": {
|
||||||
"title": "Свързване на ново устройство",
|
"title": "Свързване на ново устройство",
|
||||||
"https": "https",
|
"https": "https",
|
||||||
"http": "http",
|
"http": "http",
|
||||||
"tabHttp": "HTTP",
|
"tabHttp": "HTTP",
|
||||||
"tabBluetooth": "Bluetooth",
|
"tabBluetooth": "Bluetooth",
|
||||||
"tabSerial": "Serial",
|
"tabSerial": "Serial",
|
||||||
"useHttps": "Използване на HTTPS",
|
"useHttps": "Използване на HTTPS",
|
||||||
"connecting": "Свързване...",
|
"connecting": "Свързване...",
|
||||||
"connect": "Свързване",
|
"connect": "Свързване",
|
||||||
"connectionFailedAlert": {
|
"connectionFailedAlert": {
|
||||||
"title": "Връзката е неуспешна",
|
"title": "Връзката е неуспешна",
|
||||||
"descriptionPrefix": "Не може да се свърже с устройството.",
|
"descriptionPrefix": "Не може да се свърже с устройството.",
|
||||||
"httpsHint": "Ако използвате HTTPS, може да се наложи първо да приемете самоподписан сертификат. ",
|
"httpsHint": "Ако използвате HTTPS, може да се наложи първо да приемете самоподписан сертификат. ",
|
||||||
"openLinkPrefix": "Моля, отворете",
|
"openLinkPrefix": "Моля, отворете",
|
||||||
"openLinkSuffix": "в нов раздел",
|
"openLinkSuffix": "в нов раздел",
|
||||||
"acceptTlsWarningSuffix": "",
|
"acceptTlsWarningSuffix": "",
|
||||||
"learnMoreLink": "Научете повече"
|
"learnMoreLink": "Научете повече"
|
||||||
},
|
},
|
||||||
"httpConnection": {
|
"httpConnection": {
|
||||||
"label": "IP адрес/Име на хост",
|
"label": "IP адрес/Име на хост",
|
||||||
"placeholder": "000.000.000.000 / meshtastic.local"
|
"placeholder": "000.000.000.000 / meshtastic.local"
|
||||||
},
|
},
|
||||||
"serialConnection": {
|
"serialConnection": {
|
||||||
"noDevicesPaired": "Все още няма сдвоени устройства.",
|
"noDevicesPaired": "Все още няма сдвоени устройства.",
|
||||||
"newDeviceButton": "Ново устройство",
|
"newDeviceButton": "Ново устройство",
|
||||||
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
|
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
|
||||||
},
|
},
|
||||||
"bluetoothConnection": {
|
"bluetoothConnection": {
|
||||||
"noDevicesPaired": "Все още няма сдвоени устройства.",
|
"noDevicesPaired": "Все още няма сдвоени устройства.",
|
||||||
"newDeviceButton": "Ново устройство"
|
"newDeviceButton": "Ново устройство"
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"requiresWebBluetooth": "This connection type requires <0>Web Bluetooth</0>. Please use a supported browser, like Chrome or Edge.",
|
"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.",
|
"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.",
|
"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."
|
"additionallyRequiresSecureContext": "Additionally, it requires a <0>secure context</0>. Please connect using HTTPS or localhost."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nodeDetails": {
|
"nodeDetails": {
|
||||||
"message": "Съобщение",
|
"message": "Съобщение",
|
||||||
"requestPosition": "Request Position",
|
"requestPosition": "Request Position",
|
||||||
"traceRoute": "Trace Route",
|
"traceRoute": "Trace Route",
|
||||||
"airTxUtilization": "Air TX utilization",
|
"airTxUtilization": "Air TX utilization",
|
||||||
"allRawMetrics": "All Raw Metrics:",
|
"allRawMetrics": "All Raw Metrics:",
|
||||||
"batteryLevel": "Ниво на батерията",
|
"batteryLevel": "Ниво на батерията",
|
||||||
"channelUtilization": "Използване на канала",
|
"channelUtilization": "Използване на канала",
|
||||||
"details": "Подробности:",
|
"details": "Подробности:",
|
||||||
"deviceMetrics": "Device Metrics:",
|
"deviceMetrics": "Device Metrics:",
|
||||||
"hardware": "Хардуер: ",
|
"hardware": "Хардуер: ",
|
||||||
"lastHeard": "Последно чут: ",
|
"lastHeard": "Последно чут: ",
|
||||||
"nodeHexPrefix": "Node Hex: !",
|
"nodeHexPrefix": "Node Hex: !",
|
||||||
"nodeNumber": "Номер на възела: ",
|
"nodeNumber": "Номер на възела: ",
|
||||||
"position": "Позиция:",
|
"position": "Позиция:",
|
||||||
"role": "Роля: ",
|
"role": "Роля: ",
|
||||||
"uptime": "Време на работа: ",
|
"uptime": "Време на работа: ",
|
||||||
"voltage": "Напрежение",
|
"voltage": "Напрежение",
|
||||||
"title": "Node Details for {{identifier}}",
|
"title": "Node Details for {{identifier}}",
|
||||||
"ignoreNode": "Ignore node",
|
"ignoreNode": "Ignore node",
|
||||||
"removeNode": "Remove node",
|
"removeNode": "Remove node",
|
||||||
"unignoreNode": "Unignore node"
|
"unignoreNode": "Unignore node"
|
||||||
},
|
},
|
||||||
"pkiBackup": {
|
"pkiBackup": {
|
||||||
"loseKeysWarning": "Ако загубите ключовете си, ще трябва да нулирате устройството си.",
|
"loseKeysWarning": "Ако загубите ключовете си, ще трябва да нулирате устройството си.",
|
||||||
"secureBackup": "Важно е да направите резервно копие на публичните и частните си ключове и да съхранявате резервното си копие сигурно!",
|
"secureBackup": "Важно е да направите резервно копие на публичните и частните си ключове и да съхранявате резервното си копие сигурно!",
|
||||||
"footer": "=== КРАЙ НА КЛЮЧОВЕТЕ ===",
|
"footer": "=== КРАЙ НА КЛЮЧОВЕТЕ ===",
|
||||||
"header": "=== MESHTASTIC КЛЮЧОВЕ ЗА {{longName}} ({{shortName}}) ===",
|
"header": "=== MESHTASTIC КЛЮЧОВЕ ЗА {{longName}} ({{shortName}}) ===",
|
||||||
"privateKey": "Частен ключ:",
|
"privateKey": "Частен ключ:",
|
||||||
"publicKey": "Публичен ключ:",
|
"publicKey": "Публичен ключ:",
|
||||||
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
|
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
|
||||||
"title": "Backup Keys"
|
"title": "Backup Keys"
|
||||||
},
|
},
|
||||||
"pkiBackupReminder": {
|
"pkiBackupReminder": {
|
||||||
"description": "We recommend backing up your key data regularly. Would you like to back up now?",
|
"description": "We recommend backing up your key data regularly. Would you like to back up now?",
|
||||||
"title": "Backup Reminder",
|
"title": "Backup Reminder",
|
||||||
"remindLaterPrefix": "Remind me in",
|
"remindLaterPrefix": "Remind me in",
|
||||||
"remindNever": "Never remind me",
|
"remindNever": "Never remind me",
|
||||||
"backupNow": "Back up now"
|
"backupNow": "Back up now"
|
||||||
},
|
},
|
||||||
"pkiRegenerate": {
|
"pkiRegenerate": {
|
||||||
"description": "Сигурни ли сте, че искате да регенерирате двойката ключове?",
|
"description": "Сигурни ли сте, че искате да регенерирате двойката ключове?",
|
||||||
"title": "Регенериране на двойката ключове"
|
"title": "Регенериране на двойката ключове"
|
||||||
},
|
},
|
||||||
"qr": {
|
"qr": {
|
||||||
"addChannels": "Добавяне на канали",
|
"addChannels": "Добавяне на канали",
|
||||||
"replaceChannels": "Замяна на канали",
|
"replaceChannels": "Замяна на канали",
|
||||||
"description": "Текущата конфигурация на LoRa също ще бъде споделена.",
|
"description": "Текущата конфигурация на LoRa също ще бъде споделена.",
|
||||||
"sharableUrl": "Sharable URL",
|
"sharableUrl": "Sharable URL",
|
||||||
"title": "Генериране на QR код"
|
"title": "Генериране на QR код"
|
||||||
},
|
},
|
||||||
"rebootOta": {
|
"rebootOta": {
|
||||||
"title": "Планирано рестартиране",
|
"title": "Планирано рестартиране",
|
||||||
"description": "Reboot the connected node after a delay into OTA (Over-the-Air) mode.",
|
"description": "Reboot the connected node after a delay into OTA (Over-the-Air) mode.",
|
||||||
"enterDelay": "Въведете забавяне (сек)",
|
"enterDelay": "Въведете забавяне (сек)",
|
||||||
"scheduled": "Насрочено е рестартиране"
|
"scheduled": "Насрочено е рестартиране"
|
||||||
},
|
},
|
||||||
"reboot": {
|
"reboot": {
|
||||||
"title": "Планирано рестартиране",
|
"title": "Планирано рестартиране",
|
||||||
"description": "Рестартиране на свързания възел след x минути."
|
"description": "Рестартиране на свързания възел след x минути."
|
||||||
},
|
},
|
||||||
"refreshKeys": {
|
"refreshKeys": {
|
||||||
"description": {
|
"description": {
|
||||||
"acceptNewKeys": "This will remove the node from device and request new keys.",
|
"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.",
|
"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: "
|
"unableToSendDmPrefix": "Your node is unable to send a direct message to node: "
|
||||||
},
|
},
|
||||||
"acceptNewKeys": "Accept New Keys",
|
"acceptNewKeys": "Accept New Keys",
|
||||||
"title": "Keys Mismatch - {{identifier}}"
|
"title": "Keys Mismatch - {{identifier}}"
|
||||||
},
|
},
|
||||||
"removeNode": {
|
"removeNode": {
|
||||||
"description": "Сигурни ли сте, че искате да премахнете този възел?",
|
"description": "Сигурни ли сте, че искате да премахнете този възел?",
|
||||||
"title": "Премахване на възела?"
|
"title": "Премахване на възела?"
|
||||||
},
|
},
|
||||||
"shutdown": {
|
"shutdown": {
|
||||||
"title": "Планирано изключване",
|
"title": "Планирано изключване",
|
||||||
"description": "Изключване на свързания възел след x минути."
|
"description": "Изключване на свързания възел след x минути."
|
||||||
},
|
},
|
||||||
"traceRoute": {
|
"traceRoute": {
|
||||||
"routeToDestination": "Route to destination:",
|
"routeToDestination": "Route to destination:",
|
||||||
"routeBack": "Route back:"
|
"routeBack": "Route back:"
|
||||||
},
|
},
|
||||||
"tracerouteResponse": {
|
"tracerouteResponse": {
|
||||||
"title": "Traceroute: {{identifier}}"
|
"title": "Traceroute: {{identifier}}"
|
||||||
},
|
},
|
||||||
"unsafeRoles": {
|
"unsafeRoles": {
|
||||||
"confirmUnderstanding": "Да, знам какво правя",
|
"confirmUnderstanding": "Да, знам какво правя",
|
||||||
"conjunction": " and the blog post about ",
|
"conjunction": " and the blog post about ",
|
||||||
"postamble": " and understand the implications of changing the role.",
|
"postamble": " and understand the implications of changing the role.",
|
||||||
"preamble": "I have read the ",
|
"preamble": "I have read the ",
|
||||||
"choosingRightDeviceRole": "Choosing The Right Device Role",
|
"choosingRightDeviceRole": "Choosing The Right Device Role",
|
||||||
"deviceRoleDocumentation": "Device Role Documentation",
|
"deviceRoleDocumentation": "Device Role Documentation",
|
||||||
"title": "Сигурни ли сте?"
|
"title": "Сигурни ли сте?"
|
||||||
},
|
},
|
||||||
"managedMode": {
|
"managedMode": {
|
||||||
"confirmUnderstanding": "Да, знам какво правя",
|
"confirmUnderstanding": "Да, знам какво правя",
|
||||||
"title": "Сигурни ли сте?",
|
"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."
|
"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."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,39 +1,39 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"title": "Съобщения: {{chatName}}",
|
"title": "Съобщения: {{chatName}}",
|
||||||
"placeholder": "Enter Message"
|
"placeholder": "Enter Message"
|
||||||
},
|
},
|
||||||
"emptyState": {
|
"emptyState": {
|
||||||
"title": "Изберете чат",
|
"title": "Изберете чат",
|
||||||
"text": "Все още няма съобщения."
|
"text": "Все още няма съобщения."
|
||||||
},
|
},
|
||||||
"selectChatPrompt": {
|
"selectChatPrompt": {
|
||||||
"text": "Select a channel or node to start messaging."
|
"text": "Select a channel or node to start messaging."
|
||||||
},
|
},
|
||||||
"sendMessage": {
|
"sendMessage": {
|
||||||
"placeholder": "Въведете Вашето съобщение тук...",
|
"placeholder": "Въведете Вашето съобщение тук...",
|
||||||
"sendButton": "Изпрати"
|
"sendButton": "Изпрати"
|
||||||
},
|
},
|
||||||
"actionsMenu": {
|
"actionsMenu": {
|
||||||
"addReactionLabel": "Добавяне на реакция",
|
"addReactionLabel": "Добавяне на реакция",
|
||||||
"replyLabel": "Отговор"
|
"replyLabel": "Отговор"
|
||||||
},
|
},
|
||||||
"deliveryStatus": {
|
"deliveryStatus": {
|
||||||
"delivered": {
|
"delivered": {
|
||||||
"label": "Съобщението е доставено",
|
"label": "Съобщението е доставено",
|
||||||
"displayText": "Съобщението е доставено"
|
"displayText": "Съобщението е доставено"
|
||||||
},
|
},
|
||||||
"failed": {
|
"failed": {
|
||||||
"label": "Message delivery failed",
|
"label": "Message delivery failed",
|
||||||
"displayText": "Delivery failed"
|
"displayText": "Delivery failed"
|
||||||
},
|
},
|
||||||
"unknown": {
|
"unknown": {
|
||||||
"label": "Статусът на съобщението е неизвестен",
|
"label": "Статусът на съобщението е неизвестен",
|
||||||
"displayText": "Неизвестно състояние"
|
"displayText": "Неизвестно състояние"
|
||||||
},
|
},
|
||||||
"waiting": {
|
"waiting": {
|
||||||
"label": "Sending message",
|
"label": "Sending message",
|
||||||
"displayText": "Waiting for delivery"
|
"displayText": "Waiting for delivery"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,448 +1,448 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"tabAmbientLighting": "Ambient Lighting",
|
"tabAmbientLighting": "Ambient Lighting",
|
||||||
"tabAudio": "Аудио",
|
"tabAudio": "Аудио",
|
||||||
"tabCannedMessage": "Canned",
|
"tabCannedMessage": "Canned",
|
||||||
"tabDetectionSensor": "Detection Sensor",
|
"tabDetectionSensor": "Detection Sensor",
|
||||||
"tabExternalNotification": "Ext Notif",
|
"tabExternalNotification": "Ext Notif",
|
||||||
"tabMqtt": "MQTT",
|
"tabMqtt": "MQTT",
|
||||||
"tabNeighborInfo": "Neighbor Info",
|
"tabNeighborInfo": "Neighbor Info",
|
||||||
"tabPaxcounter": "Paxcounter",
|
"tabPaxcounter": "Paxcounter",
|
||||||
"tabRangeTest": "Range Test",
|
"tabRangeTest": "Range Test",
|
||||||
"tabSerial": "Serial",
|
"tabSerial": "Serial",
|
||||||
"tabStoreAndForward": "S&F",
|
"tabStoreAndForward": "S&F",
|
||||||
"tabTelemetry": "Телеметрия"
|
"tabTelemetry": "Телеметрия"
|
||||||
},
|
},
|
||||||
"ambientLighting": {
|
"ambientLighting": {
|
||||||
"title": "Ambient Lighting Settings",
|
"title": "Ambient Lighting Settings",
|
||||||
"description": "Settings for the Ambient Lighting module",
|
"description": "Settings for the Ambient Lighting module",
|
||||||
"ledState": {
|
"ledState": {
|
||||||
"label": "LED State",
|
"label": "LED State",
|
||||||
"description": "Sets LED to on or off"
|
"description": "Sets LED to on or off"
|
||||||
},
|
},
|
||||||
"current": {
|
"current": {
|
||||||
"label": "Current",
|
"label": "Current",
|
||||||
"description": "Sets the current for the LED output. Default is 10"
|
"description": "Sets the current for the LED output. Default is 10"
|
||||||
},
|
},
|
||||||
"red": {
|
"red": {
|
||||||
"label": "Червен",
|
"label": "Червен",
|
||||||
"description": "Sets the red LED level. Values are 0-255"
|
"description": "Sets the red LED level. Values are 0-255"
|
||||||
},
|
},
|
||||||
"green": {
|
"green": {
|
||||||
"label": "Зелен",
|
"label": "Зелен",
|
||||||
"description": "Sets the green LED level. Values are 0-255"
|
"description": "Sets the green LED level. Values are 0-255"
|
||||||
},
|
},
|
||||||
"blue": {
|
"blue": {
|
||||||
"label": "Син",
|
"label": "Син",
|
||||||
"description": "Sets the blue LED level. Values are 0-255"
|
"description": "Sets the blue LED level. Values are 0-255"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"audio": {
|
"audio": {
|
||||||
"title": "Настройки на аудиото",
|
"title": "Настройки на аудиото",
|
||||||
"description": "Настройки за аудио модула",
|
"description": "Настройки за аудио модула",
|
||||||
"codec2Enabled": {
|
"codec2Enabled": {
|
||||||
"label": "Codec 2 е активиран",
|
"label": "Codec 2 е активиран",
|
||||||
"description": "Enable Codec 2 audio encoding"
|
"description": "Enable Codec 2 audio encoding"
|
||||||
},
|
},
|
||||||
"pttPin": {
|
"pttPin": {
|
||||||
"label": "PTT Pin",
|
"label": "PTT Pin",
|
||||||
"description": "GPIO pin to use for PTT"
|
"description": "GPIO pin to use for PTT"
|
||||||
},
|
},
|
||||||
"bitrate": {
|
"bitrate": {
|
||||||
"label": "Bitrate",
|
"label": "Bitrate",
|
||||||
"description": "Bitrate to use for audio encoding"
|
"description": "Bitrate to use for audio encoding"
|
||||||
},
|
},
|
||||||
"i2sWs": {
|
"i2sWs": {
|
||||||
"label": "i2S WS",
|
"label": "i2S WS",
|
||||||
"description": "GPIO pin to use for i2S WS"
|
"description": "GPIO pin to use for i2S WS"
|
||||||
},
|
},
|
||||||
"i2sSd": {
|
"i2sSd": {
|
||||||
"label": "i2S SD",
|
"label": "i2S SD",
|
||||||
"description": "GPIO pin to use for i2S SD"
|
"description": "GPIO pin to use for i2S SD"
|
||||||
},
|
},
|
||||||
"i2sDin": {
|
"i2sDin": {
|
||||||
"label": "i2S DIN",
|
"label": "i2S DIN",
|
||||||
"description": "GPIO pin to use for i2S DIN"
|
"description": "GPIO pin to use for i2S DIN"
|
||||||
},
|
},
|
||||||
"i2sSck": {
|
"i2sSck": {
|
||||||
"label": "i2S SCK",
|
"label": "i2S SCK",
|
||||||
"description": "GPIO pin to use for i2S SCK"
|
"description": "GPIO pin to use for i2S SCK"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"cannedMessage": {
|
"cannedMessage": {
|
||||||
"title": "Canned Message Settings",
|
"title": "Canned Message Settings",
|
||||||
"description": "Settings for the Canned Message module",
|
"description": "Settings for the Canned Message module",
|
||||||
"moduleEnabled": {
|
"moduleEnabled": {
|
||||||
"label": "Модулът е активиран",
|
"label": "Модулът е активиран",
|
||||||
"description": "Enable Canned Message"
|
"description": "Enable Canned Message"
|
||||||
},
|
},
|
||||||
"rotary1Enabled": {
|
"rotary1Enabled": {
|
||||||
"label": "Ротационен енкодер #1 е активиран",
|
"label": "Ротационен енкодер #1 е активиран",
|
||||||
"description": "Активиране на ротационния енкодер"
|
"description": "Активиране на ротационния енкодер"
|
||||||
},
|
},
|
||||||
"inputbrokerPinA": {
|
"inputbrokerPinA": {
|
||||||
"label": "Encoder Pin A",
|
"label": "Encoder Pin A",
|
||||||
"description": "GPIO Pin Value (1-39) For encoder port A"
|
"description": "GPIO Pin Value (1-39) For encoder port A"
|
||||||
},
|
},
|
||||||
"inputbrokerPinB": {
|
"inputbrokerPinB": {
|
||||||
"label": "Encoder Pin B",
|
"label": "Encoder Pin B",
|
||||||
"description": "GPIO Pin Value (1-39) For encoder port B"
|
"description": "GPIO Pin Value (1-39) For encoder port B"
|
||||||
},
|
},
|
||||||
"inputbrokerPinPress": {
|
"inputbrokerPinPress": {
|
||||||
"label": "Encoder Pin Press",
|
"label": "Encoder Pin Press",
|
||||||
"description": "GPIO Pin Value (1-39) For encoder Press"
|
"description": "GPIO Pin Value (1-39) For encoder Press"
|
||||||
},
|
},
|
||||||
"inputbrokerEventCw": {
|
"inputbrokerEventCw": {
|
||||||
"label": "Clockwise event",
|
"label": "Clockwise event",
|
||||||
"description": "Select input event."
|
"description": "Select input event."
|
||||||
},
|
},
|
||||||
"inputbrokerEventCcw": {
|
"inputbrokerEventCcw": {
|
||||||
"label": "Counter Clockwise event",
|
"label": "Counter Clockwise event",
|
||||||
"description": "Select input event."
|
"description": "Select input event."
|
||||||
},
|
},
|
||||||
"inputbrokerEventPress": {
|
"inputbrokerEventPress": {
|
||||||
"label": "Press event",
|
"label": "Press event",
|
||||||
"description": "Select input event"
|
"description": "Select input event"
|
||||||
},
|
},
|
||||||
"updown1Enabled": {
|
"updown1Enabled": {
|
||||||
"label": "Up Down enabled",
|
"label": "Up Down enabled",
|
||||||
"description": "Enable the up / down encoder"
|
"description": "Enable the up / down encoder"
|
||||||
},
|
},
|
||||||
"allowInputSource": {
|
"allowInputSource": {
|
||||||
"label": "Allow Input Source",
|
"label": "Allow Input Source",
|
||||||
"description": "Изберете от: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
|
"description": "Изберете от: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
|
||||||
},
|
},
|
||||||
"sendBell": {
|
"sendBell": {
|
||||||
"label": "Send Bell",
|
"label": "Send Bell",
|
||||||
"description": "Sends a bell character with each message"
|
"description": "Sends a bell character with each message"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"detectionSensor": {
|
"detectionSensor": {
|
||||||
"title": "Detection Sensor Settings",
|
"title": "Detection Sensor Settings",
|
||||||
"description": "Settings for the Detection Sensor module",
|
"description": "Settings for the Detection Sensor module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Активиран",
|
"label": "Активиран",
|
||||||
"description": "Enable or disable Detection Sensor Module"
|
"description": "Enable or disable Detection Sensor Module"
|
||||||
},
|
},
|
||||||
"minimumBroadcastSecs": {
|
"minimumBroadcastSecs": {
|
||||||
"label": "Minimum Broadcast Seconds",
|
"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"
|
"description": "The interval in seconds of how often we can send a message to the mesh when a state change is detected"
|
||||||
},
|
},
|
||||||
"stateBroadcastSecs": {
|
"stateBroadcastSecs": {
|
||||||
"label": "State Broadcast Seconds",
|
"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"
|
"description": "The interval in seconds of how often we should send a message to the mesh with the current state regardless of changes"
|
||||||
},
|
},
|
||||||
"sendBell": {
|
"sendBell": {
|
||||||
"label": "Send Bell",
|
"label": "Send Bell",
|
||||||
"description": "Send ASCII bell with alert message"
|
"description": "Send ASCII bell with alert message"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"label": "Приятелско име",
|
"label": "Приятелско име",
|
||||||
"description": "Използва се за форматиране на съобщението, изпратено до mesh, максимум 20 знака"
|
"description": "Използва се за форматиране на съобщението, изпратено до mesh, максимум 20 знака"
|
||||||
},
|
},
|
||||||
"monitorPin": {
|
"monitorPin": {
|
||||||
"label": "Monitor Pin",
|
"label": "Monitor Pin",
|
||||||
"description": "The GPIO pin to monitor for state changes"
|
"description": "The GPIO pin to monitor for state changes"
|
||||||
},
|
},
|
||||||
"detectionTriggerType": {
|
"detectionTriggerType": {
|
||||||
"label": "Detection Triggered Type",
|
"label": "Detection Triggered Type",
|
||||||
"description": "The type of trigger event to be used"
|
"description": "The type of trigger event to be used"
|
||||||
},
|
},
|
||||||
"usePullup": {
|
"usePullup": {
|
||||||
"label": "Use Pullup",
|
"label": "Use Pullup",
|
||||||
"description": "Whether or not use INPUT_PULLUP mode for GPIO pin"
|
"description": "Whether or not use INPUT_PULLUP mode for GPIO pin"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"externalNotification": {
|
"externalNotification": {
|
||||||
"title": "External Notification Settings",
|
"title": "External Notification Settings",
|
||||||
"description": "Configure the external notification module",
|
"description": "Configure the external notification module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Модулът е активиран",
|
"label": "Модулът е активиран",
|
||||||
"description": "Enable External Notification"
|
"description": "Enable External Notification"
|
||||||
},
|
},
|
||||||
"outputMs": {
|
"outputMs": {
|
||||||
"label": "Output MS",
|
"label": "Output MS",
|
||||||
"description": "Output MS"
|
"description": "Output MS"
|
||||||
},
|
},
|
||||||
"output": {
|
"output": {
|
||||||
"label": "Output",
|
"label": "Output",
|
||||||
"description": "Output"
|
"description": "Output"
|
||||||
},
|
},
|
||||||
"outputVibra": {
|
"outputVibra": {
|
||||||
"label": "Output Vibrate",
|
"label": "Output Vibrate",
|
||||||
"description": "Output Vibrate"
|
"description": "Output Vibrate"
|
||||||
},
|
},
|
||||||
"outputBuzzer": {
|
"outputBuzzer": {
|
||||||
"label": "Output Buzzer",
|
"label": "Output Buzzer",
|
||||||
"description": "Output Buzzer"
|
"description": "Output Buzzer"
|
||||||
},
|
},
|
||||||
"active": {
|
"active": {
|
||||||
"label": "Active",
|
"label": "Active",
|
||||||
"description": "Active"
|
"description": "Active"
|
||||||
},
|
},
|
||||||
"alertMessage": {
|
"alertMessage": {
|
||||||
"label": "Предупредително съобщение",
|
"label": "Предупредително съобщение",
|
||||||
"description": "Предупредително съобщение"
|
"description": "Предупредително съобщение"
|
||||||
},
|
},
|
||||||
"alertMessageVibra": {
|
"alertMessageVibra": {
|
||||||
"label": "Alert Message Vibrate",
|
"label": "Alert Message Vibrate",
|
||||||
"description": "Alert Message Vibrate"
|
"description": "Alert Message Vibrate"
|
||||||
},
|
},
|
||||||
"alertMessageBuzzer": {
|
"alertMessageBuzzer": {
|
||||||
"label": "Alert Message Buzzer",
|
"label": "Alert Message Buzzer",
|
||||||
"description": "Alert Message Buzzer"
|
"description": "Alert Message Buzzer"
|
||||||
},
|
},
|
||||||
"alertBell": {
|
"alertBell": {
|
||||||
"label": "Alert Bell",
|
"label": "Alert Bell",
|
||||||
"description": "Should an alert be triggered when receiving an incoming bell?"
|
"description": "Should an alert be triggered when receiving an incoming bell?"
|
||||||
},
|
},
|
||||||
"alertBellVibra": {
|
"alertBellVibra": {
|
||||||
"label": "Alert Bell Vibrate",
|
"label": "Alert Bell Vibrate",
|
||||||
"description": "Alert Bell Vibrate"
|
"description": "Alert Bell Vibrate"
|
||||||
},
|
},
|
||||||
"alertBellBuzzer": {
|
"alertBellBuzzer": {
|
||||||
"label": "Alert Bell Buzzer",
|
"label": "Alert Bell Buzzer",
|
||||||
"description": "Alert Bell Buzzer"
|
"description": "Alert Bell Buzzer"
|
||||||
},
|
},
|
||||||
"usePwm": {
|
"usePwm": {
|
||||||
"label": "Use PWM",
|
"label": "Use PWM",
|
||||||
"description": "Use PWM"
|
"description": "Use PWM"
|
||||||
},
|
},
|
||||||
"nagTimeout": {
|
"nagTimeout": {
|
||||||
"label": "Nag Timeout",
|
"label": "Nag Timeout",
|
||||||
"description": "Nag Timeout"
|
"description": "Nag Timeout"
|
||||||
},
|
},
|
||||||
"useI2sAsBuzzer": {
|
"useI2sAsBuzzer": {
|
||||||
"label": "Use I²S Pin as Buzzer",
|
"label": "Use I²S Pin as Buzzer",
|
||||||
"description": "Designate I²S Pin as Buzzer Output"
|
"description": "Designate I²S Pin as Buzzer Output"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"mqtt": {
|
"mqtt": {
|
||||||
"title": "Настройки на MQTT",
|
"title": "Настройки на MQTT",
|
||||||
"description": "Настройки за MQTT модула",
|
"description": "Настройки за MQTT модула",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Активиран",
|
"label": "Активиран",
|
||||||
"description": "Активиране или дезактивиране на MQTT"
|
"description": "Активиране или дезактивиране на MQTT"
|
||||||
},
|
},
|
||||||
"address": {
|
"address": {
|
||||||
"label": "Адрес на MQTT сървъра",
|
"label": "Адрес на MQTT сървъра",
|
||||||
"description": "Адрес на MQTT сървъра, който да се използва за сървъри по подразбиране/персонализирани сървъри"
|
"description": "Адрес на MQTT сървъра, който да се използва за сървъри по подразбиране/персонализирани сървъри"
|
||||||
},
|
},
|
||||||
"username": {
|
"username": {
|
||||||
"label": "Потребителско име за MQTT",
|
"label": "Потребителско име за MQTT",
|
||||||
"description": "Потребителско име за MQTT, което да се използва за сървъри по подразбиране/персонализирани сървъри"
|
"description": "Потребителско име за MQTT, което да се използва за сървъри по подразбиране/персонализирани сървъри"
|
||||||
},
|
},
|
||||||
"password": {
|
"password": {
|
||||||
"label": "Парола за MQTT",
|
"label": "Парола за MQTT",
|
||||||
"description": "Парола за MQTT, която да се използва за сървъри по подразбиране/персонализирани сървъри"
|
"description": "Парола за MQTT, която да се използва за сървъри по подразбиране/персонализирани сървъри"
|
||||||
},
|
},
|
||||||
"encryptionEnabled": {
|
"encryptionEnabled": {
|
||||||
"label": "Криптирането е активирано",
|
"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."
|
"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": {
|
"jsonEnabled": {
|
||||||
"label": "JSON е активиран",
|
"label": "JSON е активиран",
|
||||||
"description": "Whether to send/consume JSON packets on MQTT"
|
"description": "Whether to send/consume JSON packets on MQTT"
|
||||||
},
|
},
|
||||||
"tlsEnabled": {
|
"tlsEnabled": {
|
||||||
"label": "TLS е активиран",
|
"label": "TLS е активиран",
|
||||||
"description": "Активиране или дезактивиране на TLS"
|
"description": "Активиране или дезактивиране на TLS"
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"label": "Root topic",
|
"label": "Root topic",
|
||||||
"description": "MQTT root topic to use for default/custom servers"
|
"description": "MQTT root topic to use for default/custom servers"
|
||||||
},
|
},
|
||||||
"proxyToClientEnabled": {
|
"proxyToClientEnabled": {
|
||||||
"label": "MQTT Client Proxy Enabled",
|
"label": "MQTT Client Proxy Enabled",
|
||||||
"description": "Utilizes the network connection to proxy MQTT messages to the client."
|
"description": "Utilizes the network connection to proxy MQTT messages to the client."
|
||||||
},
|
},
|
||||||
"mapReportingEnabled": {
|
"mapReportingEnabled": {
|
||||||
"label": "Map Reporting Enabled",
|
"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."
|
"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": {
|
"mapReportSettings": {
|
||||||
"publishIntervalSecs": {
|
"publishIntervalSecs": {
|
||||||
"label": "Map Report Publish Interval (s)",
|
"label": "Map Report Publish Interval (s)",
|
||||||
"description": "Interval in seconds to publish map reports"
|
"description": "Interval in seconds to publish map reports"
|
||||||
},
|
},
|
||||||
"positionPrecision": {
|
"positionPrecision": {
|
||||||
"label": "Приблизително местоположение",
|
"label": "Приблизително местоположение",
|
||||||
"description": "Position shared will be accurate within this distance",
|
"description": "Position shared will be accurate within this distance",
|
||||||
"options": {
|
"options": {
|
||||||
"metric_km23": "Within 23 km",
|
"metric_km23": "Within 23 km",
|
||||||
"metric_km12": "Within 12 km",
|
"metric_km12": "Within 12 km",
|
||||||
"metric_km5_8": "Within 5.8 km",
|
"metric_km5_8": "Within 5.8 km",
|
||||||
"metric_km2_9": "Within 2.9 km",
|
"metric_km2_9": "Within 2.9 km",
|
||||||
"metric_km1_5": "Within 1.5 km",
|
"metric_km1_5": "Within 1.5 km",
|
||||||
"metric_m700": "Within 700 m",
|
"metric_m700": "Within 700 m",
|
||||||
"metric_m350": "Within 350 m",
|
"metric_m350": "Within 350 m",
|
||||||
"metric_m200": "Within 200 m",
|
"metric_m200": "Within 200 m",
|
||||||
"metric_m90": "Within 90 m",
|
"metric_m90": "Within 90 m",
|
||||||
"metric_m50": "Within 50 m",
|
"metric_m50": "Within 50 m",
|
||||||
"imperial_mi15": "Within 15 miles",
|
"imperial_mi15": "Within 15 miles",
|
||||||
"imperial_mi7_3": "Within 7.3 miles",
|
"imperial_mi7_3": "Within 7.3 miles",
|
||||||
"imperial_mi3_6": "Within 3.6 miles",
|
"imperial_mi3_6": "Within 3.6 miles",
|
||||||
"imperial_mi1_8": "Within 1.8 miles",
|
"imperial_mi1_8": "Within 1.8 miles",
|
||||||
"imperial_mi0_9": "Within 0.9 miles",
|
"imperial_mi0_9": "Within 0.9 miles",
|
||||||
"imperial_mi0_5": "Within 0.5 miles",
|
"imperial_mi0_5": "Within 0.5 miles",
|
||||||
"imperial_mi0_2": "Within 0.2 miles",
|
"imperial_mi0_2": "Within 0.2 miles",
|
||||||
"imperial_ft600": "Within 600 feet",
|
"imperial_ft600": "Within 600 feet",
|
||||||
"imperial_ft300": "Within 300 feet",
|
"imperial_ft300": "Within 300 feet",
|
||||||
"imperial_ft150": "Within 150 feet"
|
"imperial_ft150": "Within 150 feet"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"neighborInfo": {
|
"neighborInfo": {
|
||||||
"title": "Neighbor Info Settings",
|
"title": "Neighbor Info Settings",
|
||||||
"description": "Settings for the Neighbor Info module",
|
"description": "Settings for the Neighbor Info module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Активиран",
|
"label": "Активиран",
|
||||||
"description": "Enable or disable Neighbor Info Module"
|
"description": "Enable or disable Neighbor Info Module"
|
||||||
},
|
},
|
||||||
"updateInterval": {
|
"updateInterval": {
|
||||||
"label": "Update Interval",
|
"label": "Update Interval",
|
||||||
"description": "Interval in seconds of how often we should try to send our Neighbor Info to the mesh"
|
"description": "Interval in seconds of how often we should try to send our Neighbor Info to the mesh"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"paxcounter": {
|
"paxcounter": {
|
||||||
"title": "Paxcounter Settings",
|
"title": "Paxcounter Settings",
|
||||||
"description": "Настройки за модула Paxcounter",
|
"description": "Настройки за модула Paxcounter",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Модулът е активиран",
|
"label": "Модулът е активиран",
|
||||||
"description": "Активиране на Paxcounter"
|
"description": "Активиране на Paxcounter"
|
||||||
},
|
},
|
||||||
"paxcounterUpdateInterval": {
|
"paxcounterUpdateInterval": {
|
||||||
"label": "Update Interval (seconds)",
|
"label": "Update Interval (seconds)",
|
||||||
"description": "How long to wait between sending paxcounter packets"
|
"description": "How long to wait between sending paxcounter packets"
|
||||||
},
|
},
|
||||||
"wifiThreshold": {
|
"wifiThreshold": {
|
||||||
"label": "WiFi RSSI Threshold",
|
"label": "WiFi RSSI Threshold",
|
||||||
"description": "At what WiFi RSSI level should the counter increase. Defaults to -80."
|
"description": "At what WiFi RSSI level should the counter increase. Defaults to -80."
|
||||||
},
|
},
|
||||||
"bleThreshold": {
|
"bleThreshold": {
|
||||||
"label": "BLE RSSI Threshold",
|
"label": "BLE RSSI Threshold",
|
||||||
"description": "At what BLE RSSI level should the counter increase. Defaults to -80."
|
"description": "At what BLE RSSI level should the counter increase. Defaults to -80."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rangeTest": {
|
"rangeTest": {
|
||||||
"title": "Range Test Settings",
|
"title": "Range Test Settings",
|
||||||
"description": "Settings for the Range Test module",
|
"description": "Settings for the Range Test module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Module Enabled",
|
"label": "Module Enabled",
|
||||||
"description": "Enable Range Test"
|
"description": "Enable Range Test"
|
||||||
},
|
},
|
||||||
"sender": {
|
"sender": {
|
||||||
"label": "Message Interval",
|
"label": "Message Interval",
|
||||||
"description": "How long to wait between sending test packets"
|
"description": "How long to wait between sending test packets"
|
||||||
},
|
},
|
||||||
"save": {
|
"save": {
|
||||||
"label": "Save CSV to storage",
|
"label": "Save CSV to storage",
|
||||||
"description": "Само ESP32"
|
"description": "Само ESP32"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"serial": {
|
"serial": {
|
||||||
"title": "Serial Settings",
|
"title": "Serial Settings",
|
||||||
"description": "Settings for the Serial module",
|
"description": "Settings for the Serial module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Модулът е активиран",
|
"label": "Модулът е активиран",
|
||||||
"description": "Enable Serial output"
|
"description": "Enable Serial output"
|
||||||
},
|
},
|
||||||
"echo": {
|
"echo": {
|
||||||
"label": "Echo",
|
"label": "Echo",
|
||||||
"description": "Any packets you send will be echoed back to your device"
|
"description": "Any packets you send will be echoed back to your device"
|
||||||
},
|
},
|
||||||
"rxd": {
|
"rxd": {
|
||||||
"label": "Receive Pin",
|
"label": "Receive Pin",
|
||||||
"description": "Set the GPIO pin to the RXD pin you have set up."
|
"description": "Set the GPIO pin to the RXD pin you have set up."
|
||||||
},
|
},
|
||||||
"txd": {
|
"txd": {
|
||||||
"label": "Transmit Pin",
|
"label": "Transmit Pin",
|
||||||
"description": "Set the GPIO pin to the TXD pin you have set up."
|
"description": "Set the GPIO pin to the TXD pin you have set up."
|
||||||
},
|
},
|
||||||
"baud": {
|
"baud": {
|
||||||
"label": "Baud Rate",
|
"label": "Baud Rate",
|
||||||
"description": "The serial baud rate"
|
"description": "The serial baud rate"
|
||||||
},
|
},
|
||||||
"timeout": {
|
"timeout": {
|
||||||
"label": "Timeout",
|
"label": "Timeout",
|
||||||
"description": "Seconds to wait before we consider your packet as 'done'"
|
"description": "Seconds to wait before we consider your packet as 'done'"
|
||||||
},
|
},
|
||||||
"mode": {
|
"mode": {
|
||||||
"label": "Режим",
|
"label": "Режим",
|
||||||
"description": "Избор на режим"
|
"description": "Избор на режим"
|
||||||
},
|
},
|
||||||
"overrideConsoleSerialPort": {
|
"overrideConsoleSerialPort": {
|
||||||
"label": "Override Console Serial Port",
|
"label": "Override Console Serial Port",
|
||||||
"description": "If you have a serial port connected to the console, this will override it."
|
"description": "If you have a serial port connected to the console, this will override it."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storeForward": {
|
"storeForward": {
|
||||||
"title": "Store & Forward Settings",
|
"title": "Store & Forward Settings",
|
||||||
"description": "Settings for the Store & Forward module",
|
"description": "Settings for the Store & Forward module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Модулът е активиран",
|
"label": "Модулът е активиран",
|
||||||
"description": "Enable Store & Forward"
|
"description": "Enable Store & Forward"
|
||||||
},
|
},
|
||||||
"heartbeat": {
|
"heartbeat": {
|
||||||
"label": "Heartbeat Enabled",
|
"label": "Heartbeat Enabled",
|
||||||
"description": "Enable Store & Forward heartbeat"
|
"description": "Enable Store & Forward heartbeat"
|
||||||
},
|
},
|
||||||
"records": {
|
"records": {
|
||||||
"label": "Брой записи",
|
"label": "Брой записи",
|
||||||
"description": "Number of records to store"
|
"description": "Number of records to store"
|
||||||
},
|
},
|
||||||
"historyReturnMax": {
|
"historyReturnMax": {
|
||||||
"label": "History return max",
|
"label": "History return max",
|
||||||
"description": "Max number of records to return"
|
"description": "Max number of records to return"
|
||||||
},
|
},
|
||||||
"historyReturnWindow": {
|
"historyReturnWindow": {
|
||||||
"label": "History return window",
|
"label": "History return window",
|
||||||
"description": "Max number of records to return"
|
"description": "Max number of records to return"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"telemetry": {
|
"telemetry": {
|
||||||
"title": "Настройки на телеметрията",
|
"title": "Настройки на телеметрията",
|
||||||
"description": "Настройки за модула за телеметрия",
|
"description": "Настройки за модула за телеметрия",
|
||||||
"deviceUpdateInterval": {
|
"deviceUpdateInterval": {
|
||||||
"label": "Device Metrics",
|
"label": "Device Metrics",
|
||||||
"description": "Device metrics update interval (seconds)"
|
"description": "Device metrics update interval (seconds)"
|
||||||
},
|
},
|
||||||
"environmentUpdateInterval": {
|
"environmentUpdateInterval": {
|
||||||
"label": "Environment metrics update interval (seconds)",
|
"label": "Environment metrics update interval (seconds)",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"environmentMeasurementEnabled": {
|
"environmentMeasurementEnabled": {
|
||||||
"label": "Модулът е активиран",
|
"label": "Модулът е активиран",
|
||||||
"description": "Enable the Environment Telemetry"
|
"description": "Enable the Environment Telemetry"
|
||||||
},
|
},
|
||||||
"environmentScreenEnabled": {
|
"environmentScreenEnabled": {
|
||||||
"label": "Displayed on Screen",
|
"label": "Displayed on Screen",
|
||||||
"description": "Show the Telemetry Module on the OLED"
|
"description": "Show the Telemetry Module on the OLED"
|
||||||
},
|
},
|
||||||
"environmentDisplayFahrenheit": {
|
"environmentDisplayFahrenheit": {
|
||||||
"label": "Показване на Фаренхайт",
|
"label": "Показване на Фаренхайт",
|
||||||
"description": "Показване на температурата във Фаренхайт"
|
"description": "Показване на температурата във Фаренхайт"
|
||||||
},
|
},
|
||||||
"airQualityEnabled": {
|
"airQualityEnabled": {
|
||||||
"label": "Качество на въздуха е активирано",
|
"label": "Качество на въздуха е активирано",
|
||||||
"description": "Активиране на телеметрията за качеството на въздуха"
|
"description": "Активиране на телеметрията за качеството на въздуха"
|
||||||
},
|
},
|
||||||
"airQualityInterval": {
|
"airQualityInterval": {
|
||||||
"label": "Air Quality Update Interval",
|
"label": "Air Quality Update Interval",
|
||||||
"description": "How often to send Air Quality data over the mesh"
|
"description": "How often to send Air Quality data over the mesh"
|
||||||
},
|
},
|
||||||
"powerMeasurementEnabled": {
|
"powerMeasurementEnabled": {
|
||||||
"label": "Power Measurement Enabled",
|
"label": "Power Measurement Enabled",
|
||||||
"description": "Enable the Power Measurement Telemetry"
|
"description": "Enable the Power Measurement Telemetry"
|
||||||
},
|
},
|
||||||
"powerUpdateInterval": {
|
"powerUpdateInterval": {
|
||||||
"label": "Power Update Interval",
|
"label": "Power Update Interval",
|
||||||
"description": "How often to send Power data over the mesh"
|
"description": "How often to send Power data over the mesh"
|
||||||
},
|
},
|
||||||
"powerScreenEnabled": {
|
"powerScreenEnabled": {
|
||||||
"label": "Power Screen Enabled",
|
"label": "Power Screen Enabled",
|
||||||
"description": "Enable the Power Telemetry Screen"
|
"description": "Enable the Power Telemetry Screen"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,63 +1,63 @@
|
|||||||
{
|
{
|
||||||
"nodeDetail": {
|
"nodeDetail": {
|
||||||
"publicKeyEnabled": {
|
"publicKeyEnabled": {
|
||||||
"label": "Публичният ключ е активиран"
|
"label": "Публичният ключ е активиран"
|
||||||
},
|
},
|
||||||
"noPublicKey": {
|
"noPublicKey": {
|
||||||
"label": "Няма публичен ключ"
|
"label": "Няма публичен ключ"
|
||||||
},
|
},
|
||||||
"directMessage": {
|
"directMessage": {
|
||||||
"label": "Директно съобщение {{shortName}}"
|
"label": "Директно съобщение {{shortName}}"
|
||||||
},
|
},
|
||||||
"favorite": {
|
"favorite": {
|
||||||
"label": "Любим",
|
"label": "Любим",
|
||||||
"tooltip": "Добавяне или премахване на този възел от любимите ви"
|
"tooltip": "Добавяне или премахване на този възел от любимите ви"
|
||||||
},
|
},
|
||||||
"notFavorite": {
|
"notFavorite": {
|
||||||
"label": "Не е любим"
|
"label": "Не е любим"
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"label": "Грешка",
|
"label": "Грешка",
|
||||||
"text": "Възникна грешка при извличането на подробности за възела. Моля, опитайте отново по-късно."
|
"text": "Възникна грешка при извличането на подробности за възела. Моля, опитайте отново по-късно."
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"heard": "Heard",
|
"heard": "Heard",
|
||||||
"mqtt": "MQTT"
|
"mqtt": "MQTT"
|
||||||
},
|
},
|
||||||
"elevation": {
|
"elevation": {
|
||||||
"label": "Elevation"
|
"label": "Elevation"
|
||||||
},
|
},
|
||||||
"channelUtil": {
|
"channelUtil": {
|
||||||
"label": "Channel Util"
|
"label": "Channel Util"
|
||||||
},
|
},
|
||||||
"airtimeUtil": {
|
"airtimeUtil": {
|
||||||
"label": "Airtime Util"
|
"label": "Airtime Util"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nodesTable": {
|
"nodesTable": {
|
||||||
"headings": {
|
"headings": {
|
||||||
"longName": "Дълго име",
|
"longName": "Дълго име",
|
||||||
"connection": "Connection",
|
"connection": "Connection",
|
||||||
"lastHeard": "Последно чут",
|
"lastHeard": "Последно чут",
|
||||||
"encryption": "Криптиране",
|
"encryption": "Криптиране",
|
||||||
"model": "Модел",
|
"model": "Модел",
|
||||||
"macAddress": "MAC адрес"
|
"macAddress": "MAC адрес"
|
||||||
},
|
},
|
||||||
"connectionStatus": {
|
"connectionStatus": {
|
||||||
"direct": "Direct",
|
"direct": "Direct",
|
||||||
"away": "away",
|
"away": "away",
|
||||||
"unknown": "-",
|
"unknown": "-",
|
||||||
"viaMqtt": ", чрез MQTT"
|
"viaMqtt": ", чрез MQTT"
|
||||||
},
|
},
|
||||||
"lastHeardStatus": {
|
"lastHeardStatus": {
|
||||||
"never": "Никога"
|
"never": "Никога"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"actions": {
|
"actions": {
|
||||||
"added": "Добавен",
|
"added": "Добавен",
|
||||||
"removed": "Премахнат",
|
"removed": "Премахнат",
|
||||||
"ignoreNode": "Ignore Node",
|
"ignoreNode": "Ignore Node",
|
||||||
"unignoreNode": "Unignore Node",
|
"unignoreNode": "Unignore Node",
|
||||||
"requestPosition": "Request Position"
|
"requestPosition": "Request Position"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,228 +1,228 @@
|
|||||||
{
|
{
|
||||||
"navigation": {
|
"navigation": {
|
||||||
"title": "Навигация",
|
"title": "Навигация",
|
||||||
"messages": "Съобщения",
|
"messages": "Съобщения",
|
||||||
"map": "Карта",
|
"map": "Карта",
|
||||||
"config": "Конфигурация",
|
"config": "Конфигурация",
|
||||||
"radioConfig": "Конфигурация на радиото",
|
"radioConfig": "Конфигурация на радиото",
|
||||||
"moduleConfig": "Конфигурация на модула",
|
"moduleConfig": "Конфигурация на модула",
|
||||||
"channels": "Канали",
|
"channels": "Канали",
|
||||||
"nodes": "Възли"
|
"nodes": "Възли"
|
||||||
},
|
},
|
||||||
"app": {
|
"app": {
|
||||||
"title": "Meshtastic",
|
"title": "Meshtastic",
|
||||||
"logo": "Лого на Meshtastic"
|
"logo": "Лого на Meshtastic"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"collapseToggle": {
|
"collapseToggle": {
|
||||||
"button": {
|
"button": {
|
||||||
"open": "Отваряне на страничната лента",
|
"open": "Отваряне на страничната лента",
|
||||||
"close": "Затваряне на страничната лента"
|
"close": "Затваряне на страничната лента"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"deviceInfo": {
|
"deviceInfo": {
|
||||||
"volts": "{{voltage}} волта",
|
"volts": "{{voltage}} волта",
|
||||||
"firmware": {
|
"firmware": {
|
||||||
"title": "Фърмуер",
|
"title": "Фърмуер",
|
||||||
"version": "v{{version}}",
|
"version": "v{{version}}",
|
||||||
"buildDate": "Дата на компилация: {{date}}"
|
"buildDate": "Дата на компилация: {{date}}"
|
||||||
},
|
},
|
||||||
"deviceName": {
|
"deviceName": {
|
||||||
"title": "Име на устройството",
|
"title": "Име на устройството",
|
||||||
"changeName": "Промяна на името на устройството",
|
"changeName": "Промяна на името на устройството",
|
||||||
"placeholder": "Въвеждане на име на устройството"
|
"placeholder": "Въвеждане на име на устройството"
|
||||||
},
|
},
|
||||||
"editDeviceName": "Редактиране на името на устройство"
|
"editDeviceName": "Редактиране на името на устройство"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"batteryStatus": {
|
"batteryStatus": {
|
||||||
"charging": "{{level}}% зареждане",
|
"charging": "{{level}}% зареждане",
|
||||||
"pluggedIn": "Включен в ел. мрежа",
|
"pluggedIn": "Включен в ел. мрежа",
|
||||||
"title": "Батерия"
|
"title": "Батерия"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"nodes": "Търсене на възли...",
|
"nodes": "Търсене на възли...",
|
||||||
"channels": "Търсене на канали...",
|
"channels": "Търсене на канали...",
|
||||||
"commandPalette": "Търсене на команди..."
|
"commandPalette": "Търсене на команди..."
|
||||||
},
|
},
|
||||||
"toast": {
|
"toast": {
|
||||||
"positionRequestSent": {
|
"positionRequestSent": {
|
||||||
"title": "Position request sent."
|
"title": "Position request sent."
|
||||||
},
|
},
|
||||||
"requestingPosition": {
|
"requestingPosition": {
|
||||||
"title": "Requesting position, please wait..."
|
"title": "Requesting position, please wait..."
|
||||||
},
|
},
|
||||||
"sendingTraceroute": {
|
"sendingTraceroute": {
|
||||||
"title": "Sending Traceroute, please wait..."
|
"title": "Sending Traceroute, please wait..."
|
||||||
},
|
},
|
||||||
"tracerouteSent": {
|
"tracerouteSent": {
|
||||||
"title": "Traceroute sent."
|
"title": "Traceroute sent."
|
||||||
},
|
},
|
||||||
"savedChannel": {
|
"savedChannel": {
|
||||||
"title": "Запазен канал: {{channelName}}"
|
"title": "Запазен канал: {{channelName}}"
|
||||||
},
|
},
|
||||||
"messages": {
|
"messages": {
|
||||||
"pkiEncryption": {
|
"pkiEncryption": {
|
||||||
"title": "Чатът използва PKI криптиране."
|
"title": "Чатът използва PKI криптиране."
|
||||||
},
|
},
|
||||||
"pskEncryption": {
|
"pskEncryption": {
|
||||||
"title": "Чатът използва PSK криптиране."
|
"title": "Чатът използва PSK криптиране."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"configSaveError": {
|
"configSaveError": {
|
||||||
"title": "Грешка при запазване на конфигурацията",
|
"title": "Грешка при запазване на конфигурацията",
|
||||||
"description": "Възникна грешка при запазване на конфигурацията."
|
"description": "Възникна грешка при запазване на конфигурацията."
|
||||||
},
|
},
|
||||||
"validationError": {
|
"validationError": {
|
||||||
"title": "Съществуват грешки в конфигурацията",
|
"title": "Съществуват грешки в конфигурацията",
|
||||||
"description": "Моля, коригирайте грешките в конфигурацията, преди да я запазите."
|
"description": "Моля, коригирайте грешките в конфигурацията, преди да я запазите."
|
||||||
},
|
},
|
||||||
"saveSuccess": {
|
"saveSuccess": {
|
||||||
"title": "Запазване на конфигурацията",
|
"title": "Запазване на конфигурацията",
|
||||||
"description": "Промяната в конфигурацията {{case}} е запазена."
|
"description": "Промяната в конфигурацията {{case}} е запазена."
|
||||||
},
|
},
|
||||||
"favoriteNode": {
|
"favoriteNode": {
|
||||||
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
|
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
|
||||||
"action": {
|
"action": {
|
||||||
"added": "Added",
|
"added": "Added",
|
||||||
"removed": "Removed",
|
"removed": "Removed",
|
||||||
"to": "to",
|
"to": "to",
|
||||||
"from": "from"
|
"from": "from"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ignoreNode": {
|
"ignoreNode": {
|
||||||
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
|
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
|
||||||
"action": {
|
"action": {
|
||||||
"added": "Added",
|
"added": "Added",
|
||||||
"removed": "Removed",
|
"removed": "Removed",
|
||||||
"to": "to",
|
"to": "to",
|
||||||
"from": "from"
|
"from": "from"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"copied": {
|
"copied": {
|
||||||
"label": "Копирано!"
|
"label": "Копирано!"
|
||||||
},
|
},
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"label": "Копиране в клипборда"
|
"label": "Копиране в клипборда"
|
||||||
},
|
},
|
||||||
"hidePassword": {
|
"hidePassword": {
|
||||||
"label": "Скриване на паролата"
|
"label": "Скриване на паролата"
|
||||||
},
|
},
|
||||||
"showPassword": {
|
"showPassword": {
|
||||||
"label": "Показване на паролата"
|
"label": "Показване на паролата"
|
||||||
},
|
},
|
||||||
"deliveryStatus": {
|
"deliveryStatus": {
|
||||||
"delivered": "Delivered",
|
"delivered": "Delivered",
|
||||||
"failed": "Delivery Failed",
|
"failed": "Delivery Failed",
|
||||||
"waiting": "Изчакване",
|
"waiting": "Изчакване",
|
||||||
"unknown": "Unknown"
|
"unknown": "Unknown"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"general": {
|
"general": {
|
||||||
"label": "General"
|
"label": "General"
|
||||||
},
|
},
|
||||||
"hardware": {
|
"hardware": {
|
||||||
"label": "Хардуер"
|
"label": "Хардуер"
|
||||||
},
|
},
|
||||||
"metrics": {
|
"metrics": {
|
||||||
"label": "Metrics"
|
"label": "Metrics"
|
||||||
},
|
},
|
||||||
"role": {
|
"role": {
|
||||||
"label": "Роля"
|
"label": "Роля"
|
||||||
},
|
},
|
||||||
"filter": {
|
"filter": {
|
||||||
"label": "Филтър"
|
"label": "Филтър"
|
||||||
},
|
},
|
||||||
"advanced": {
|
"advanced": {
|
||||||
"label": "Advanced"
|
"label": "Advanced"
|
||||||
},
|
},
|
||||||
"clearInput": {
|
"clearInput": {
|
||||||
"label": "Clear input"
|
"label": "Clear input"
|
||||||
},
|
},
|
||||||
"resetFilters": {
|
"resetFilters": {
|
||||||
"label": "Нулиране на филтрите"
|
"label": "Нулиране на филтрите"
|
||||||
},
|
},
|
||||||
"nodeName": {
|
"nodeName": {
|
||||||
"label": "Име/номер на възел",
|
"label": "Име/номер на възел",
|
||||||
"placeholder": "Meshtastic 1234"
|
"placeholder": "Meshtastic 1234"
|
||||||
},
|
},
|
||||||
"airtimeUtilization": {
|
"airtimeUtilization": {
|
||||||
"label": "Airtime Utilization (%)"
|
"label": "Airtime Utilization (%)"
|
||||||
},
|
},
|
||||||
"batteryLevel": {
|
"batteryLevel": {
|
||||||
"label": "Ниво на батерията (%)",
|
"label": "Ниво на батерията (%)",
|
||||||
"labelText": "Ниво на батерията (%): {{value}}"
|
"labelText": "Ниво на батерията (%): {{value}}"
|
||||||
},
|
},
|
||||||
"batteryVoltage": {
|
"batteryVoltage": {
|
||||||
"label": "Напрежение на батерията (V)",
|
"label": "Напрежение на батерията (V)",
|
||||||
"title": "Напрежение"
|
"title": "Напрежение"
|
||||||
},
|
},
|
||||||
"channelUtilization": {
|
"channelUtilization": {
|
||||||
"label": "Използване на канала (%)"
|
"label": "Използване на канала (%)"
|
||||||
},
|
},
|
||||||
"hops": {
|
"hops": {
|
||||||
"direct": "Direct",
|
"direct": "Direct",
|
||||||
"label": "Number of hops",
|
"label": "Number of hops",
|
||||||
"text": "Number of hops: {{value}}"
|
"text": "Number of hops: {{value}}"
|
||||||
},
|
},
|
||||||
"lastHeard": {
|
"lastHeard": {
|
||||||
"label": "Последно чут",
|
"label": "Последно чут",
|
||||||
"labelText": "Last heard: {{value}}",
|
"labelText": "Last heard: {{value}}",
|
||||||
"nowLabel": "Сега"
|
"nowLabel": "Сега"
|
||||||
},
|
},
|
||||||
"snr": {
|
"snr": {
|
||||||
"label": "SNR (db)"
|
"label": "SNR (db)"
|
||||||
},
|
},
|
||||||
"favorites": {
|
"favorites": {
|
||||||
"label": "Любими"
|
"label": "Любими"
|
||||||
},
|
},
|
||||||
"hide": {
|
"hide": {
|
||||||
"label": "Hide"
|
"label": "Hide"
|
||||||
},
|
},
|
||||||
"showOnly": {
|
"showOnly": {
|
||||||
"label": "Show Only"
|
"label": "Show Only"
|
||||||
},
|
},
|
||||||
"viaMqtt": {
|
"viaMqtt": {
|
||||||
"label": "Свързан чрез MQTT"
|
"label": "Свързан чрез MQTT"
|
||||||
},
|
},
|
||||||
"hopsUnknown": {
|
"hopsUnknown": {
|
||||||
"label": "Unknown number of hops"
|
"label": "Unknown number of hops"
|
||||||
},
|
},
|
||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Never heard"
|
"label": "Never heard"
|
||||||
},
|
},
|
||||||
"language": {
|
"language": {
|
||||||
"label": "Език",
|
"label": "Език",
|
||||||
"changeLanguage": "Промяна на езика"
|
"changeLanguage": "Промяна на езика"
|
||||||
},
|
},
|
||||||
"theme": {
|
"theme": {
|
||||||
"dark": "Тъмна",
|
"dark": "Тъмна",
|
||||||
"light": "Светла",
|
"light": "Светла",
|
||||||
"system": "Автоматично",
|
"system": "Автоматично",
|
||||||
"changeTheme": "Промяна на цветовата схема"
|
"changeTheme": "Промяна на цветовата схема"
|
||||||
},
|
},
|
||||||
"errorPage": {
|
"errorPage": {
|
||||||
"title": "This is a little embarrassing...",
|
"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.",
|
"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.",
|
"description2": "The best way to prevent this from happening again to you or anyone else is to report the issue to us.",
|
||||||
"reportInstructions": "Моля, включете следната информация в доклада си:",
|
"reportInstructions": "Моля, включете следната информация в доклада си:",
|
||||||
"reportSteps": {
|
"reportSteps": {
|
||||||
"step1": "Какво правехте, когато възникна грешката",
|
"step1": "Какво правехте, когато възникна грешката",
|
||||||
"step2": "Какво очаквахте да се случи",
|
"step2": "Какво очаквахте да се случи",
|
||||||
"step3": "Какво всъщност се случи",
|
"step3": "Какво всъщност се случи",
|
||||||
"step4": "Всяка друга подходяща информация"
|
"step4": "Всяка друга подходяща информация"
|
||||||
},
|
},
|
||||||
"reportLink": "Можете да съобщите за проблема в нашия <0>GitHub</0>",
|
"reportLink": "Можете да съобщите за проблема в нашия <0>GitHub</0>",
|
||||||
"dashboardLink": "Връщане към <0>таблото</0>",
|
"dashboardLink": "Връщане към <0>таблото</0>",
|
||||||
"detailsSummary": "Подробности за грешката",
|
"detailsSummary": "Подробности за грешката",
|
||||||
"errorMessageLabel": "Съобщение за грешка:",
|
"errorMessageLabel": "Съобщение за грешка:",
|
||||||
"stackTraceLabel": "Stack trace:",
|
"stackTraceLabel": "Stack trace:",
|
||||||
"fallbackError": "{{error}}"
|
"fallbackError": "{{error}}"
|
||||||
},
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"text": "Задвижвано от <0>▲ Vercel</0> | Meshtastic® е регистрирана търговска марка на Meshtastic LLC. | <1>Правна информация</1>",
|
"text": "Задвижвано от <0>▲ Vercel</0> | Meshtastic® е регистрирана търговска марка на Meshtastic LLC. | <1>Правна информация</1>",
|
||||||
"commitSha": "Commit SHA: {{sha}}"
|
"commitSha": "Commit SHA: {{sha}}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,69 +1,69 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"sectionLabel": "Kanály",
|
"sectionLabel": "Kanály",
|
||||||
"channelName": "Channel: {{channelName}}",
|
"channelName": "Channel: {{channelName}}",
|
||||||
"broadcastLabel": "Primární",
|
"broadcastLabel": "Primární",
|
||||||
"channelIndex": "Ch {{index}}"
|
"channelIndex": "Ch {{index}}"
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
|
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"label": "Nastavení kanálu",
|
"label": "Nastavení kanálu",
|
||||||
"description": "Crypto, MQTT & misc settings"
|
"description": "Crypto, MQTT & misc settings"
|
||||||
},
|
},
|
||||||
"role": {
|
"role": {
|
||||||
"label": "Role",
|
"label": "Role",
|
||||||
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
|
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
|
||||||
"options": {
|
"options": {
|
||||||
"primary": "PRIMARY",
|
"primary": "PRIMARY",
|
||||||
"disabled": "DISABLED",
|
"disabled": "DISABLED",
|
||||||
"secondary": "SECONDARY"
|
"secondary": "SECONDARY"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"psk": {
|
"psk": {
|
||||||
"label": "Pre-Shared Key",
|
"label": "Pre-Shared Key",
|
||||||
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
|
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
|
||||||
"generate": "Generate"
|
"generate": "Generate"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"label": "Jméno",
|
"label": "Jméno",
|
||||||
"description": "A unique name for the channel <12 bytes, leave blank for default"
|
"description": "A unique name for the channel <12 bytes, leave blank for default"
|
||||||
},
|
},
|
||||||
"uplinkEnabled": {
|
"uplinkEnabled": {
|
||||||
"label": "Uplink Enabled",
|
"label": "Uplink Enabled",
|
||||||
"description": "Send messages from the local mesh to MQTT"
|
"description": "Send messages from the local mesh to MQTT"
|
||||||
},
|
},
|
||||||
"downlinkEnabled": {
|
"downlinkEnabled": {
|
||||||
"label": "Downlink Enabled",
|
"label": "Downlink Enabled",
|
||||||
"description": "Send messages from MQTT to the local mesh"
|
"description": "Send messages from MQTT to the local mesh"
|
||||||
},
|
},
|
||||||
"positionPrecision": {
|
"positionPrecision": {
|
||||||
"label": "Location",
|
"label": "Location",
|
||||||
"description": "The precision of the location to share with the channel. Can be disabled.",
|
"description": "The precision of the location to share with the channel. Can be disabled.",
|
||||||
"options": {
|
"options": {
|
||||||
"none": "Do not share location",
|
"none": "Do not share location",
|
||||||
"precise": "Precise Location",
|
"precise": "Precise Location",
|
||||||
"metric_km23": "Within 23 kilometers",
|
"metric_km23": "Within 23 kilometers",
|
||||||
"metric_km12": "Within 12 kilometers",
|
"metric_km12": "Within 12 kilometers",
|
||||||
"metric_km5_8": "Within 5.8 kilometers",
|
"metric_km5_8": "Within 5.8 kilometers",
|
||||||
"metric_km2_9": "Within 2.9 kilometers",
|
"metric_km2_9": "Within 2.9 kilometers",
|
||||||
"metric_km1_5": "Within 1.5 kilometers",
|
"metric_km1_5": "Within 1.5 kilometers",
|
||||||
"metric_m700": "Within 700 meters",
|
"metric_m700": "Within 700 meters",
|
||||||
"metric_m350": "Within 350 meters",
|
"metric_m350": "Within 350 meters",
|
||||||
"metric_m200": "Within 200 meters",
|
"metric_m200": "Within 200 meters",
|
||||||
"metric_m90": "Within 90 meters",
|
"metric_m90": "Within 90 meters",
|
||||||
"metric_m50": "Within 50 meters",
|
"metric_m50": "Within 50 meters",
|
||||||
"imperial_mi15": "Within 15 miles",
|
"imperial_mi15": "Within 15 miles",
|
||||||
"imperial_mi7_3": "Within 7.3 miles",
|
"imperial_mi7_3": "Within 7.3 miles",
|
||||||
"imperial_mi3_6": "Within 3.6 miles",
|
"imperial_mi3_6": "Within 3.6 miles",
|
||||||
"imperial_mi1_8": "Within 1.8 miles",
|
"imperial_mi1_8": "Within 1.8 miles",
|
||||||
"imperial_mi0_9": "Within 0.9 miles",
|
"imperial_mi0_9": "Within 0.9 miles",
|
||||||
"imperial_mi0_5": "Within 0.5 miles",
|
"imperial_mi0_5": "Within 0.5 miles",
|
||||||
"imperial_mi0_2": "Within 0.2 miles",
|
"imperial_mi0_2": "Within 0.2 miles",
|
||||||
"imperial_ft600": "Within 600 feet",
|
"imperial_ft600": "Within 600 feet",
|
||||||
"imperial_ft300": "Within 300 feet",
|
"imperial_ft300": "Within 300 feet",
|
||||||
"imperial_ft150": "Within 150 feet"
|
"imperial_ft150": "Within 150 feet"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,50 +1,50 @@
|
|||||||
{
|
{
|
||||||
"emptyState": "No results found.",
|
"emptyState": "No results found.",
|
||||||
"page": {
|
"page": {
|
||||||
"title": "Command Menu"
|
"title": "Command Menu"
|
||||||
},
|
},
|
||||||
"pinGroup": {
|
"pinGroup": {
|
||||||
"label": "Pin command group"
|
"label": "Pin command group"
|
||||||
},
|
},
|
||||||
"unpinGroup": {
|
"unpinGroup": {
|
||||||
"label": "Unpin command group"
|
"label": "Unpin command group"
|
||||||
},
|
},
|
||||||
"goto": {
|
"goto": {
|
||||||
"label": "Goto",
|
"label": "Goto",
|
||||||
"command": {
|
"command": {
|
||||||
"messages": "Zprávy",
|
"messages": "Zprávy",
|
||||||
"map": "Mapa",
|
"map": "Mapa",
|
||||||
"config": "Config",
|
"config": "Config",
|
||||||
"channels": "Kanály",
|
"channels": "Kanály",
|
||||||
"nodes": "Uzly"
|
"nodes": "Uzly"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manage": {
|
"manage": {
|
||||||
"label": "Manage",
|
"label": "Manage",
|
||||||
"command": {
|
"command": {
|
||||||
"switchNode": "Switch Node",
|
"switchNode": "Switch Node",
|
||||||
"connectNewNode": "Connect New Node"
|
"connectNewNode": "Connect New Node"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"contextual": {
|
"contextual": {
|
||||||
"label": "Contextual",
|
"label": "Contextual",
|
||||||
"command": {
|
"command": {
|
||||||
"qrCode": "QR Code",
|
"qrCode": "QR Code",
|
||||||
"qrGenerator": "Generator",
|
"qrGenerator": "Generator",
|
||||||
"qrImport": "Import",
|
"qrImport": "Import",
|
||||||
"scheduleShutdown": "Schedule Shutdown",
|
"scheduleShutdown": "Schedule Shutdown",
|
||||||
"scheduleReboot": "Schedule Reboot",
|
"scheduleReboot": "Schedule Reboot",
|
||||||
"rebootToOtaMode": "Reboot To OTA Mode",
|
"rebootToOtaMode": "Reboot To OTA Mode",
|
||||||
"resetNodeDb": "Reset Node DB",
|
"resetNodeDb": "Reset Node DB",
|
||||||
"factoryResetDevice": "Factory Reset Device",
|
"factoryResetDevice": "Factory Reset Device",
|
||||||
"factoryResetConfig": "Factory Reset Config"
|
"factoryResetConfig": "Factory Reset Config"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"debug": {
|
"debug": {
|
||||||
"label": "Debug",
|
"label": "Debug",
|
||||||
"command": {
|
"command": {
|
||||||
"reconfigure": "Reconfigure",
|
"reconfigure": "Reconfigure",
|
||||||
"clearAllStoredMessages": "Clear All Stored Message"
|
"clearAllStoredMessages": "Clear All Stored Message"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,141 +1,141 @@
|
|||||||
{
|
{
|
||||||
"button": {
|
"button": {
|
||||||
"apply": "Použít",
|
"apply": "Použít",
|
||||||
"backupKey": "Backup Key",
|
"backupKey": "Backup Key",
|
||||||
"cancel": "Zrušit",
|
"cancel": "Zrušit",
|
||||||
"clearMessages": "Clear Messages",
|
"clearMessages": "Clear Messages",
|
||||||
"close": "Zavřít",
|
"close": "Zavřít",
|
||||||
"confirm": "Confirm",
|
"confirm": "Confirm",
|
||||||
"delete": "Smazat",
|
"delete": "Smazat",
|
||||||
"dismiss": "Dismiss",
|
"dismiss": "Dismiss",
|
||||||
"download": "Download",
|
"download": "Download",
|
||||||
"export": "Export",
|
"export": "Export",
|
||||||
"generate": "Generate",
|
"generate": "Generate",
|
||||||
"regenerate": "Regenerate",
|
"regenerate": "Regenerate",
|
||||||
"import": "Import",
|
"import": "Import",
|
||||||
"message": "Zpráva",
|
"message": "Zpráva",
|
||||||
"now": "Now",
|
"now": "Now",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"print": "Print",
|
"print": "Print",
|
||||||
"rebootOtaNow": "Reboot to OTA Mode Now",
|
"rebootOtaNow": "Reboot to OTA Mode Now",
|
||||||
"remove": "Odstranit",
|
"remove": "Odstranit",
|
||||||
"requestNewKeys": "Request New Keys",
|
"requestNewKeys": "Request New Keys",
|
||||||
"requestPosition": "Request Position",
|
"requestPosition": "Request Position",
|
||||||
"reset": "Reset",
|
"reset": "Reset",
|
||||||
"save": "Uložit",
|
"save": "Uložit",
|
||||||
"scanQr": "Naskenovat QR kód",
|
"scanQr": "Naskenovat QR kód",
|
||||||
"traceRoute": "Trace Route",
|
"traceRoute": "Trace Route",
|
||||||
"submit": "Submit"
|
"submit": "Submit"
|
||||||
},
|
},
|
||||||
"app": {
|
"app": {
|
||||||
"title": "Meshtastic",
|
"title": "Meshtastic",
|
||||||
"fullTitle": "Meshtastic Web Client"
|
"fullTitle": "Meshtastic Web Client"
|
||||||
},
|
},
|
||||||
"loading": "Loading...",
|
"loading": "Loading...",
|
||||||
"unit": {
|
"unit": {
|
||||||
"cps": "CPS",
|
"cps": "CPS",
|
||||||
"dbm": "dBm",
|
"dbm": "dBm",
|
||||||
"hertz": "Hz",
|
"hertz": "Hz",
|
||||||
"hop": {
|
"hop": {
|
||||||
"one": "Hop",
|
"one": "Hop",
|
||||||
"plural": "Hops"
|
"plural": "Hops"
|
||||||
},
|
},
|
||||||
"hopsAway": {
|
"hopsAway": {
|
||||||
"one": "{{count}} hop away",
|
"one": "{{count}} hop away",
|
||||||
"plural": "{{count}} hops away",
|
"plural": "{{count}} hops away",
|
||||||
"unknown": "Unknown hops away"
|
"unknown": "Unknown hops away"
|
||||||
},
|
},
|
||||||
"megahertz": "MHz",
|
"megahertz": "MHz",
|
||||||
"raw": "raw",
|
"raw": "raw",
|
||||||
"meter": {
|
"meter": {
|
||||||
"one": "Meter",
|
"one": "Meter",
|
||||||
"plural": "Meters",
|
"plural": "Meters",
|
||||||
"suffix": "m"
|
"suffix": "m"
|
||||||
},
|
},
|
||||||
"minute": {
|
"minute": {
|
||||||
"one": "Minute",
|
"one": "Minute",
|
||||||
"plural": "Minutes"
|
"plural": "Minutes"
|
||||||
},
|
},
|
||||||
"hour": {
|
"hour": {
|
||||||
"one": "Hour",
|
"one": "Hour",
|
||||||
"plural": "Hours"
|
"plural": "Hours"
|
||||||
},
|
},
|
||||||
"millisecond": {
|
"millisecond": {
|
||||||
"one": "Millisecond",
|
"one": "Millisecond",
|
||||||
"plural": "Milliseconds",
|
"plural": "Milliseconds",
|
||||||
"suffix": "ms"
|
"suffix": "ms"
|
||||||
},
|
},
|
||||||
"second": {
|
"second": {
|
||||||
"one": "Second",
|
"one": "Second",
|
||||||
"plural": "Seconds"
|
"plural": "Seconds"
|
||||||
},
|
},
|
||||||
"day": {
|
"day": {
|
||||||
"one": "Day",
|
"one": "Day",
|
||||||
"plural": "Days"
|
"plural": "Days"
|
||||||
},
|
},
|
||||||
"month": {
|
"month": {
|
||||||
"one": "Month",
|
"one": "Month",
|
||||||
"plural": "Months"
|
"plural": "Months"
|
||||||
},
|
},
|
||||||
"year": {
|
"year": {
|
||||||
"one": "Year",
|
"one": "Year",
|
||||||
"plural": "Years"
|
"plural": "Years"
|
||||||
},
|
},
|
||||||
"snr": "SNR",
|
"snr": "SNR",
|
||||||
"volt": {
|
"volt": {
|
||||||
"one": "Volt",
|
"one": "Volt",
|
||||||
"plural": "Volts",
|
"plural": "Volts",
|
||||||
"suffix": "V"
|
"suffix": "V"
|
||||||
},
|
},
|
||||||
"record": {
|
"record": {
|
||||||
"one": "Records",
|
"one": "Records",
|
||||||
"plural": "Records"
|
"plural": "Records"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"0bit": "Empty",
|
"0bit": "Empty",
|
||||||
"8bit": "8 bit",
|
"8bit": "8 bit",
|
||||||
"128bit": "128 bit",
|
"128bit": "128 bit",
|
||||||
"256bit": "256 bit"
|
"256bit": "256 bit"
|
||||||
},
|
},
|
||||||
"unknown": {
|
"unknown": {
|
||||||
"longName": "Unknown",
|
"longName": "Unknown",
|
||||||
"shortName": "UNK",
|
"shortName": "UNK",
|
||||||
"notAvailable": "N/A",
|
"notAvailable": "N/A",
|
||||||
"num": "??"
|
"num": "??"
|
||||||
},
|
},
|
||||||
"nodeUnknownPrefix": "!",
|
"nodeUnknownPrefix": "!",
|
||||||
"unset": "UNSET",
|
"unset": "UNSET",
|
||||||
"fallbackName": "Meshtastic {{last4}}",
|
"fallbackName": "Meshtastic {{last4}}",
|
||||||
"node": "Node",
|
"node": "Node",
|
||||||
"formValidation": {
|
"formValidation": {
|
||||||
"unsavedChanges": "Unsaved changes",
|
"unsavedChanges": "Unsaved changes",
|
||||||
"tooBig": {
|
"tooBig": {
|
||||||
"string": "Too long, expected less than or equal to {{maximum}} characters.",
|
"string": "Too long, expected less than or equal to {{maximum}} characters.",
|
||||||
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
|
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
|
||||||
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
|
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
|
||||||
},
|
},
|
||||||
"tooSmall": {
|
"tooSmall": {
|
||||||
"string": "Too short, expected more than or equal to {{minimum}} characters.",
|
"string": "Too short, expected more than or equal to {{minimum}} characters.",
|
||||||
"number": "Too small, expected a number larger than or equal to {{minimum}}."
|
"number": "Too small, expected a number larger than or equal to {{minimum}}."
|
||||||
},
|
},
|
||||||
"invalidFormat": {
|
"invalidFormat": {
|
||||||
"ipv4": "Invalid format, expected an IPv4 address.",
|
"ipv4": "Invalid format, expected an IPv4 address.",
|
||||||
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
|
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
|
||||||
},
|
},
|
||||||
"invalidType": {
|
"invalidType": {
|
||||||
"number": "Invalid type, expected a number."
|
"number": "Invalid type, expected a number."
|
||||||
},
|
},
|
||||||
"pskLength": {
|
"pskLength": {
|
||||||
"0bit": "Key is required to be empty.",
|
"0bit": "Key is required to be empty.",
|
||||||
"8bit": "Key is required to be an 8 bit pre-shared key (PSK).",
|
"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).",
|
"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)."
|
"256bit": "Key is required to be a 256 bit pre-shared key (PSK)."
|
||||||
},
|
},
|
||||||
"required": {
|
"required": {
|
||||||
"generic": "This field is required.",
|
"generic": "This field is required.",
|
||||||
"managed": "At least one admin key is requred if the node is managed.",
|
"managed": "At least one admin key is requred if the node is managed.",
|
||||||
"key": "Key is required."
|
"key": "Key is required."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
"title": "Connected Devices",
|
"title": "Connected Devices",
|
||||||
"description": "Manage your connected Meshtastic devices.",
|
"description": "Manage your connected Meshtastic devices.",
|
||||||
"connectionType_ble": "BLE",
|
"connectionType_ble": "BLE",
|
||||||
"connectionType_serial": "Sériová komunikace",
|
"connectionType_serial": "Sériová komunikace",
|
||||||
"connectionType_network": "Síť",
|
"connectionType_network": "Síť",
|
||||||
"noDevicesTitle": "No devices connected",
|
"noDevicesTitle": "No devices connected",
|
||||||
"noDevicesDescription": "Connect a new device to get started.",
|
"noDevicesDescription": "Connect a new device to get started.",
|
||||||
"button_newConnection": "New Connection"
|
"button_newConnection": "New Connection"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,428 +1,428 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"title": "Configuration",
|
"title": "Configuration",
|
||||||
"tabBluetooth": "Bluetooth",
|
"tabBluetooth": "Bluetooth",
|
||||||
"tabDevice": "Zařízení",
|
"tabDevice": "Zařízení",
|
||||||
"tabDisplay": "Obrazovka",
|
"tabDisplay": "Obrazovka",
|
||||||
"tabLora": "LoRa",
|
"tabLora": "LoRa",
|
||||||
"tabNetwork": "Síť",
|
"tabNetwork": "Síť",
|
||||||
"tabPosition": "Pozice",
|
"tabPosition": "Pozice",
|
||||||
"tabPower": "Napájení",
|
"tabPower": "Napájení",
|
||||||
"tabSecurity": "Zabezpečení"
|
"tabSecurity": "Zabezpečení"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"label": "Modules"
|
"label": "Modules"
|
||||||
},
|
},
|
||||||
"device": {
|
"device": {
|
||||||
"title": "Device Settings",
|
"title": "Device Settings",
|
||||||
"description": "Settings for the device",
|
"description": "Settings for the device",
|
||||||
"buttonPin": {
|
"buttonPin": {
|
||||||
"description": "Button pin override",
|
"description": "Button pin override",
|
||||||
"label": "Button Pin"
|
"label": "Button Pin"
|
||||||
},
|
},
|
||||||
"buzzerPin": {
|
"buzzerPin": {
|
||||||
"description": "Buzzer pin override",
|
"description": "Buzzer pin override",
|
||||||
"label": "Buzzer Pin"
|
"label": "Buzzer Pin"
|
||||||
},
|
},
|
||||||
"disableTripleClick": {
|
"disableTripleClick": {
|
||||||
"description": "Disable triple click",
|
"description": "Disable triple click",
|
||||||
"label": "Disable Triple Click"
|
"label": "Disable Triple Click"
|
||||||
},
|
},
|
||||||
"doubleTapAsButtonPress": {
|
"doubleTapAsButtonPress": {
|
||||||
"description": "Treat double tap as button press",
|
"description": "Treat double tap as button press",
|
||||||
"label": "Dvojité klepnutí jako stisk tlačítka"
|
"label": "Dvojité klepnutí jako stisk tlačítka"
|
||||||
},
|
},
|
||||||
"ledHeartbeatDisabled": {
|
"ledHeartbeatDisabled": {
|
||||||
"description": "Disable default blinking LED",
|
"description": "Disable default blinking LED",
|
||||||
"label": "LED Heartbeat Disabled"
|
"label": "LED Heartbeat Disabled"
|
||||||
},
|
},
|
||||||
"nodeInfoBroadcastInterval": {
|
"nodeInfoBroadcastInterval": {
|
||||||
"description": "How often to broadcast node info",
|
"description": "How often to broadcast node info",
|
||||||
"label": "Node Info Broadcast Interval"
|
"label": "Node Info Broadcast Interval"
|
||||||
},
|
},
|
||||||
"posixTimezone": {
|
"posixTimezone": {
|
||||||
"description": "The POSIX timezone string for the device",
|
"description": "The POSIX timezone string for the device",
|
||||||
"label": "POSIX časové pásmo"
|
"label": "POSIX časové pásmo"
|
||||||
},
|
},
|
||||||
"rebroadcastMode": {
|
"rebroadcastMode": {
|
||||||
"description": "How to handle rebroadcasting",
|
"description": "How to handle rebroadcasting",
|
||||||
"label": "Režim opětovného vysílání"
|
"label": "Režim opětovného vysílání"
|
||||||
},
|
},
|
||||||
"role": {
|
"role": {
|
||||||
"description": "What role the device performs on the mesh",
|
"description": "What role the device performs on the mesh",
|
||||||
"label": "Role"
|
"label": "Role"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"bluetooth": {
|
"bluetooth": {
|
||||||
"title": "Nastavení Bluetooth",
|
"title": "Nastavení Bluetooth",
|
||||||
"description": "Settings for the Bluetooth module",
|
"description": "Settings for the Bluetooth module",
|
||||||
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
|
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"description": "Enable or disable Bluetooth",
|
"description": "Enable or disable Bluetooth",
|
||||||
"label": "Povoleno"
|
"label": "Povoleno"
|
||||||
},
|
},
|
||||||
"pairingMode": {
|
"pairingMode": {
|
||||||
"description": "Pin selection behaviour.",
|
"description": "Pin selection behaviour.",
|
||||||
"label": "Režim párování"
|
"label": "Režim párování"
|
||||||
},
|
},
|
||||||
"pin": {
|
"pin": {
|
||||||
"description": "Pin to use when pairing",
|
"description": "Pin to use when pairing",
|
||||||
"label": "Pin"
|
"label": "Pin"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"display": {
|
"display": {
|
||||||
"description": "Settings for the device display",
|
"description": "Settings for the device display",
|
||||||
"title": "Display Settings",
|
"title": "Display Settings",
|
||||||
"headingBold": {
|
"headingBold": {
|
||||||
"description": "Bolden the heading text",
|
"description": "Bolden the heading text",
|
||||||
"label": "Bold Heading"
|
"label": "Bold Heading"
|
||||||
},
|
},
|
||||||
"carouselDelay": {
|
"carouselDelay": {
|
||||||
"description": "How fast to cycle through windows",
|
"description": "How fast to cycle through windows",
|
||||||
"label": "Carousel Delay"
|
"label": "Carousel Delay"
|
||||||
},
|
},
|
||||||
"compassNorthTop": {
|
"compassNorthTop": {
|
||||||
"description": "Fix north to the top of compass",
|
"description": "Fix north to the top of compass",
|
||||||
"label": "Compass North Top"
|
"label": "Compass North Top"
|
||||||
},
|
},
|
||||||
"displayMode": {
|
"displayMode": {
|
||||||
"description": "Screen layout variant",
|
"description": "Screen layout variant",
|
||||||
"label": "Display Mode"
|
"label": "Display Mode"
|
||||||
},
|
},
|
||||||
"displayUnits": {
|
"displayUnits": {
|
||||||
"description": "Display metric or imperial units",
|
"description": "Display metric or imperial units",
|
||||||
"label": "Display Units"
|
"label": "Display Units"
|
||||||
},
|
},
|
||||||
"flipScreen": {
|
"flipScreen": {
|
||||||
"description": "Flip display 180 degrees",
|
"description": "Flip display 180 degrees",
|
||||||
"label": "Flip Screen"
|
"label": "Flip Screen"
|
||||||
},
|
},
|
||||||
"gpsDisplayUnits": {
|
"gpsDisplayUnits": {
|
||||||
"description": "Coordinate display format",
|
"description": "Coordinate display format",
|
||||||
"label": "GPS Display Units"
|
"label": "GPS Display Units"
|
||||||
},
|
},
|
||||||
"oledType": {
|
"oledType": {
|
||||||
"description": "Type of OLED screen attached to the device",
|
"description": "Type of OLED screen attached to the device",
|
||||||
"label": "OLED Type"
|
"label": "OLED Type"
|
||||||
},
|
},
|
||||||
"screenTimeout": {
|
"screenTimeout": {
|
||||||
"description": "Turn off the display after this long",
|
"description": "Turn off the display after this long",
|
||||||
"label": "Screen Timeout"
|
"label": "Screen Timeout"
|
||||||
},
|
},
|
||||||
"twelveHourClock": {
|
"twelveHourClock": {
|
||||||
"description": "Use 12-hour clock format",
|
"description": "Use 12-hour clock format",
|
||||||
"label": "12-Hour Clock"
|
"label": "12-Hour Clock"
|
||||||
},
|
},
|
||||||
"wakeOnTapOrMotion": {
|
"wakeOnTapOrMotion": {
|
||||||
"description": "Wake the device on tap or motion",
|
"description": "Wake the device on tap or motion",
|
||||||
"label": "Wake on Tap or Motion"
|
"label": "Wake on Tap or Motion"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lora": {
|
"lora": {
|
||||||
"title": "Mesh Settings",
|
"title": "Mesh Settings",
|
||||||
"description": "Settings for the LoRa mesh",
|
"description": "Settings for the LoRa mesh",
|
||||||
"bandwidth": {
|
"bandwidth": {
|
||||||
"description": "Channel bandwidth in MHz",
|
"description": "Channel bandwidth in MHz",
|
||||||
"label": "Šířka pásma"
|
"label": "Šířka pásma"
|
||||||
},
|
},
|
||||||
"boostedRxGain": {
|
"boostedRxGain": {
|
||||||
"description": "Boosted RX gain",
|
"description": "Boosted RX gain",
|
||||||
"label": "Boosted RX Gain"
|
"label": "Boosted RX Gain"
|
||||||
},
|
},
|
||||||
"codingRate": {
|
"codingRate": {
|
||||||
"description": "The denominator of the coding rate",
|
"description": "The denominator of the coding rate",
|
||||||
"label": "Coding Rate"
|
"label": "Coding Rate"
|
||||||
},
|
},
|
||||||
"frequencyOffset": {
|
"frequencyOffset": {
|
||||||
"description": "Frequency offset to correct for crystal calibration errors",
|
"description": "Frequency offset to correct for crystal calibration errors",
|
||||||
"label": "Frequency Offset"
|
"label": "Frequency Offset"
|
||||||
},
|
},
|
||||||
"frequencySlot": {
|
"frequencySlot": {
|
||||||
"description": "LoRa frequency channel number",
|
"description": "LoRa frequency channel number",
|
||||||
"label": "Frequency Slot"
|
"label": "Frequency Slot"
|
||||||
},
|
},
|
||||||
"hopLimit": {
|
"hopLimit": {
|
||||||
"description": "Maximum number of hops",
|
"description": "Maximum number of hops",
|
||||||
"label": "Hop Limit"
|
"label": "Hop Limit"
|
||||||
},
|
},
|
||||||
"ignoreMqtt": {
|
"ignoreMqtt": {
|
||||||
"description": "Don't forward MQTT messages over the mesh",
|
"description": "Don't forward MQTT messages over the mesh",
|
||||||
"label": "Ignorovat MQTT"
|
"label": "Ignorovat MQTT"
|
||||||
},
|
},
|
||||||
"modemPreset": {
|
"modemPreset": {
|
||||||
"description": "Modem preset to use",
|
"description": "Modem preset to use",
|
||||||
"label": "Předvolba modemu"
|
"label": "Předvolba modemu"
|
||||||
},
|
},
|
||||||
"okToMqtt": {
|
"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",
|
"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"
|
"label": "OK do MQTT"
|
||||||
},
|
},
|
||||||
"overrideDutyCycle": {
|
"overrideDutyCycle": {
|
||||||
"description": "Přepsat střídu",
|
"description": "Přepsat střídu",
|
||||||
"label": "Přepsat střídu"
|
"label": "Přepsat střídu"
|
||||||
},
|
},
|
||||||
"overrideFrequency": {
|
"overrideFrequency": {
|
||||||
"description": "Override frequency",
|
"description": "Override frequency",
|
||||||
"label": "Override Frequency"
|
"label": "Override Frequency"
|
||||||
},
|
},
|
||||||
"region": {
|
"region": {
|
||||||
"description": "Sets the region for your node",
|
"description": "Sets the region for your node",
|
||||||
"label": "Region"
|
"label": "Region"
|
||||||
},
|
},
|
||||||
"spreadingFactor": {
|
"spreadingFactor": {
|
||||||
"description": "Indicates the number of chirps per symbol",
|
"description": "Indicates the number of chirps per symbol",
|
||||||
"label": "Spreading Factor"
|
"label": "Spreading Factor"
|
||||||
},
|
},
|
||||||
"transmitEnabled": {
|
"transmitEnabled": {
|
||||||
"description": "Enable/Disable transmit (TX) from the LoRa radio",
|
"description": "Enable/Disable transmit (TX) from the LoRa radio",
|
||||||
"label": "Transmit Enabled"
|
"label": "Transmit Enabled"
|
||||||
},
|
},
|
||||||
"transmitPower": {
|
"transmitPower": {
|
||||||
"description": "Max transmit power",
|
"description": "Max transmit power",
|
||||||
"label": "Transmit Power"
|
"label": "Transmit Power"
|
||||||
},
|
},
|
||||||
"usePreset": {
|
"usePreset": {
|
||||||
"description": "Use one of the predefined modem presets",
|
"description": "Use one of the predefined modem presets",
|
||||||
"label": "Use Preset"
|
"label": "Use Preset"
|
||||||
},
|
},
|
||||||
"meshSettings": {
|
"meshSettings": {
|
||||||
"description": "Settings for the LoRa mesh",
|
"description": "Settings for the LoRa mesh",
|
||||||
"label": "Mesh Settings"
|
"label": "Mesh Settings"
|
||||||
},
|
},
|
||||||
"waveformSettings": {
|
"waveformSettings": {
|
||||||
"description": "Settings for the LoRa waveform",
|
"description": "Settings for the LoRa waveform",
|
||||||
"label": "Waveform Settings"
|
"label": "Waveform Settings"
|
||||||
},
|
},
|
||||||
"radioSettings": {
|
"radioSettings": {
|
||||||
"label": "Radio Settings",
|
"label": "Radio Settings",
|
||||||
"description": "Settings for the LoRa radio"
|
"description": "Settings for the LoRa radio"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "WiFi Config",
|
"title": "WiFi Config",
|
||||||
"description": "WiFi radio configuration",
|
"description": "WiFi radio configuration",
|
||||||
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
|
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
|
||||||
"addressMode": {
|
"addressMode": {
|
||||||
"description": "Address assignment selection",
|
"description": "Address assignment selection",
|
||||||
"label": "Address Mode"
|
"label": "Address Mode"
|
||||||
},
|
},
|
||||||
"dns": {
|
"dns": {
|
||||||
"description": "DNS Server",
|
"description": "DNS Server",
|
||||||
"label": "DNS"
|
"label": "DNS"
|
||||||
},
|
},
|
||||||
"ethernetEnabled": {
|
"ethernetEnabled": {
|
||||||
"description": "Enable or disable the Ethernet port",
|
"description": "Enable or disable the Ethernet port",
|
||||||
"label": "Povoleno"
|
"label": "Povoleno"
|
||||||
},
|
},
|
||||||
"gateway": {
|
"gateway": {
|
||||||
"description": "Default Gateway",
|
"description": "Default Gateway",
|
||||||
"label": "Gateway/Brána"
|
"label": "Gateway/Brána"
|
||||||
},
|
},
|
||||||
"ip": {
|
"ip": {
|
||||||
"description": "IP Address",
|
"description": "IP Address",
|
||||||
"label": "IP adresa"
|
"label": "IP adresa"
|
||||||
},
|
},
|
||||||
"psk": {
|
"psk": {
|
||||||
"description": "Network password",
|
"description": "Network password",
|
||||||
"label": "PSK"
|
"label": "PSK"
|
||||||
},
|
},
|
||||||
"ssid": {
|
"ssid": {
|
||||||
"description": "Network name",
|
"description": "Network name",
|
||||||
"label": "SSID"
|
"label": "SSID"
|
||||||
},
|
},
|
||||||
"subnet": {
|
"subnet": {
|
||||||
"description": "Subnet Mask",
|
"description": "Subnet Mask",
|
||||||
"label": "Podsíť"
|
"label": "Podsíť"
|
||||||
},
|
},
|
||||||
"wifiEnabled": {
|
"wifiEnabled": {
|
||||||
"description": "Enable or disable the WiFi radio",
|
"description": "Enable or disable the WiFi radio",
|
||||||
"label": "Povoleno"
|
"label": "Povoleno"
|
||||||
},
|
},
|
||||||
"meshViaUdp": {
|
"meshViaUdp": {
|
||||||
"label": "Mesh via UDP"
|
"label": "Mesh via UDP"
|
||||||
},
|
},
|
||||||
"ntpServer": {
|
"ntpServer": {
|
||||||
"label": "NTP Server"
|
"label": "NTP Server"
|
||||||
},
|
},
|
||||||
"rsyslogServer": {
|
"rsyslogServer": {
|
||||||
"label": "Rsyslog Server"
|
"label": "Rsyslog Server"
|
||||||
},
|
},
|
||||||
"ethernetConfigSettings": {
|
"ethernetConfigSettings": {
|
||||||
"description": "Ethernet port configuration",
|
"description": "Ethernet port configuration",
|
||||||
"label": "Ethernet Config"
|
"label": "Ethernet Config"
|
||||||
},
|
},
|
||||||
"ipConfigSettings": {
|
"ipConfigSettings": {
|
||||||
"description": "IP configuration",
|
"description": "IP configuration",
|
||||||
"label": "IP Config"
|
"label": "IP Config"
|
||||||
},
|
},
|
||||||
"ntpConfigSettings": {
|
"ntpConfigSettings": {
|
||||||
"description": "NTP configuration",
|
"description": "NTP configuration",
|
||||||
"label": "NTP Config"
|
"label": "NTP Config"
|
||||||
},
|
},
|
||||||
"rsyslogConfigSettings": {
|
"rsyslogConfigSettings": {
|
||||||
"description": "Rsyslog configuration",
|
"description": "Rsyslog configuration",
|
||||||
"label": "Rsyslog Config"
|
"label": "Rsyslog Config"
|
||||||
},
|
},
|
||||||
"udpConfigSettings": {
|
"udpConfigSettings": {
|
||||||
"description": "UDP over Mesh configuration",
|
"description": "UDP over Mesh configuration",
|
||||||
"label": "UDP Konfigurace"
|
"label": "UDP Konfigurace"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"position": {
|
"position": {
|
||||||
"title": "Position Settings",
|
"title": "Position Settings",
|
||||||
"description": "Settings for the position module",
|
"description": "Settings for the position module",
|
||||||
"broadcastInterval": {
|
"broadcastInterval": {
|
||||||
"description": "How often your position is sent out over the mesh",
|
"description": "How often your position is sent out over the mesh",
|
||||||
"label": "Broadcast Interval"
|
"label": "Broadcast Interval"
|
||||||
},
|
},
|
||||||
"enablePin": {
|
"enablePin": {
|
||||||
"description": "GPS module enable pin override",
|
"description": "GPS module enable pin override",
|
||||||
"label": "Enable Pin"
|
"label": "Enable Pin"
|
||||||
},
|
},
|
||||||
"fixedPosition": {
|
"fixedPosition": {
|
||||||
"description": "Don't report GPS position, but a manually-specified one",
|
"description": "Don't report GPS position, but a manually-specified one",
|
||||||
"label": "Fixed Position"
|
"label": "Fixed Position"
|
||||||
},
|
},
|
||||||
"gpsMode": {
|
"gpsMode": {
|
||||||
"description": "Configure whether device GPS is Enabled, Disabled, or Not Present",
|
"description": "Configure whether device GPS is Enabled, Disabled, or Not Present",
|
||||||
"label": "GPS Mode"
|
"label": "GPS Mode"
|
||||||
},
|
},
|
||||||
"gpsUpdateInterval": {
|
"gpsUpdateInterval": {
|
||||||
"description": "How often a GPS fix should be acquired",
|
"description": "How often a GPS fix should be acquired",
|
||||||
"label": "GPS Update Interval"
|
"label": "GPS Update Interval"
|
||||||
},
|
},
|
||||||
"positionFlags": {
|
"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.",
|
"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"
|
"label": "Position Flags"
|
||||||
},
|
},
|
||||||
"receivePin": {
|
"receivePin": {
|
||||||
"description": "GPS module RX pin override",
|
"description": "GPS module RX pin override",
|
||||||
"label": "Receive Pin"
|
"label": "Receive Pin"
|
||||||
},
|
},
|
||||||
"smartPositionEnabled": {
|
"smartPositionEnabled": {
|
||||||
"description": "Only send position when there has been a meaningful change in location",
|
"description": "Only send position when there has been a meaningful change in location",
|
||||||
"label": "Enable Smart Position"
|
"label": "Enable Smart Position"
|
||||||
},
|
},
|
||||||
"smartPositionMinDistance": {
|
"smartPositionMinDistance": {
|
||||||
"description": "Minimum distance (in meters) that must be traveled before a position update is sent",
|
"description": "Minimum distance (in meters) that must be traveled before a position update is sent",
|
||||||
"label": "Smart Position Minimum Distance"
|
"label": "Smart Position Minimum Distance"
|
||||||
},
|
},
|
||||||
"smartPositionMinInterval": {
|
"smartPositionMinInterval": {
|
||||||
"description": "Minimum interval (in seconds) that must pass before a position update is sent",
|
"description": "Minimum interval (in seconds) that must pass before a position update is sent",
|
||||||
"label": "Smart Position Minimum Interval"
|
"label": "Smart Position Minimum Interval"
|
||||||
},
|
},
|
||||||
"transmitPin": {
|
"transmitPin": {
|
||||||
"description": "GPS module TX pin override",
|
"description": "GPS module TX pin override",
|
||||||
"label": "Transmit Pin"
|
"label": "Transmit Pin"
|
||||||
},
|
},
|
||||||
"intervalsSettings": {
|
"intervalsSettings": {
|
||||||
"description": "How often to send position updates",
|
"description": "How often to send position updates",
|
||||||
"label": "Intervals"
|
"label": "Intervals"
|
||||||
},
|
},
|
||||||
"flags": {
|
"flags": {
|
||||||
"placeholder": "Select position flags...",
|
"placeholder": "Select position flags...",
|
||||||
"altitude": "Altitude",
|
"altitude": "Altitude",
|
||||||
"altitudeGeoidalSeparation": "Altitude Geoidal Separation",
|
"altitudeGeoidalSeparation": "Altitude Geoidal Separation",
|
||||||
"altitudeMsl": "Altitude is Mean Sea Level",
|
"altitudeMsl": "Altitude is Mean Sea Level",
|
||||||
"dop": "Dilution of precision (DOP) PDOP used by default",
|
"dop": "Dilution of precision (DOP) PDOP used by default",
|
||||||
"hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP",
|
"hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP",
|
||||||
"numSatellites": "Number of satellites",
|
"numSatellites": "Number of satellites",
|
||||||
"sequenceNumber": "Sequence number",
|
"sequenceNumber": "Sequence number",
|
||||||
"timestamp": "Časová značka",
|
"timestamp": "Časová značka",
|
||||||
"unset": "Zrušit nastavení",
|
"unset": "Zrušit nastavení",
|
||||||
"vehicleHeading": "Vehicle heading",
|
"vehicleHeading": "Vehicle heading",
|
||||||
"vehicleSpeed": "Vehicle speed"
|
"vehicleSpeed": "Vehicle speed"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"power": {
|
"power": {
|
||||||
"adcMultiplierOverride": {
|
"adcMultiplierOverride": {
|
||||||
"description": "Used for tweaking battery voltage reading",
|
"description": "Used for tweaking battery voltage reading",
|
||||||
"label": "ADC Multiplier Override ratio"
|
"label": "ADC Multiplier Override ratio"
|
||||||
},
|
},
|
||||||
"ina219Address": {
|
"ina219Address": {
|
||||||
"description": "Address of the INA219 battery monitor",
|
"description": "Address of the INA219 battery monitor",
|
||||||
"label": "INA219 Address"
|
"label": "INA219 Address"
|
||||||
},
|
},
|
||||||
"lightSleepDuration": {
|
"lightSleepDuration": {
|
||||||
"description": "How long the device will be in light sleep for",
|
"description": "How long the device will be in light sleep for",
|
||||||
"label": "Light Sleep Duration"
|
"label": "Light Sleep Duration"
|
||||||
},
|
},
|
||||||
"minimumWakeTime": {
|
"minimumWakeTime": {
|
||||||
"description": "Minimum amount of time the device will stay awake for after receiving a packet",
|
"description": "Minimum amount of time the device will stay awake for after receiving a packet",
|
||||||
"label": "Minimum Wake Time"
|
"label": "Minimum Wake Time"
|
||||||
},
|
},
|
||||||
"noConnectionBluetoothDisabled": {
|
"noConnectionBluetoothDisabled": {
|
||||||
"description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long",
|
"description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long",
|
||||||
"label": "No Connection Bluetooth Disabled"
|
"label": "No Connection Bluetooth Disabled"
|
||||||
},
|
},
|
||||||
"powerSavingEnabled": {
|
"powerSavingEnabled": {
|
||||||
"description": "Select if powered from a low-current source (i.e. solar), to minimize power consumption as much as possible.",
|
"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"
|
"label": "Povolit úsporný režim"
|
||||||
},
|
},
|
||||||
"shutdownOnBatteryDelay": {
|
"shutdownOnBatteryDelay": {
|
||||||
"description": "Automatically shutdown node after this long when on battery, 0 for indefinite",
|
"description": "Automatically shutdown node after this long when on battery, 0 for indefinite",
|
||||||
"label": "Shutdown on battery delay"
|
"label": "Shutdown on battery delay"
|
||||||
},
|
},
|
||||||
"superDeepSleepDuration": {
|
"superDeepSleepDuration": {
|
||||||
"description": "How long the device will be in super deep sleep for",
|
"description": "How long the device will be in super deep sleep for",
|
||||||
"label": "Super Deep Sleep Duration"
|
"label": "Super Deep Sleep Duration"
|
||||||
},
|
},
|
||||||
"powerConfigSettings": {
|
"powerConfigSettings": {
|
||||||
"description": "Settings for the power module",
|
"description": "Settings for the power module",
|
||||||
"label": "Nastavení napájení"
|
"label": "Nastavení napájení"
|
||||||
},
|
},
|
||||||
"sleepSettings": {
|
"sleepSettings": {
|
||||||
"description": "Sleep settings for the power module",
|
"description": "Sleep settings for the power module",
|
||||||
"label": "Sleep Settings"
|
"label": "Sleep Settings"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"description": "Settings for the Security configuration",
|
"description": "Settings for the Security configuration",
|
||||||
"title": "Security Settings",
|
"title": "Security Settings",
|
||||||
"button_backupKey": "Backup Key",
|
"button_backupKey": "Backup Key",
|
||||||
"adminChannelEnabled": {
|
"adminChannelEnabled": {
|
||||||
"description": "Allow incoming device control over the insecure legacy admin channel",
|
"description": "Allow incoming device control over the insecure legacy admin channel",
|
||||||
"label": "Allow Legacy Admin"
|
"label": "Allow Legacy Admin"
|
||||||
},
|
},
|
||||||
"enableDebugLogApi": {
|
"enableDebugLogApi": {
|
||||||
"description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth",
|
"description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth",
|
||||||
"label": "Enable Debug Log API"
|
"label": "Enable Debug Log API"
|
||||||
},
|
},
|
||||||
"managed": {
|
"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.",
|
"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"
|
"label": "Managed"
|
||||||
},
|
},
|
||||||
"privateKey": {
|
"privateKey": {
|
||||||
"description": "Used to create a shared key with a remote device",
|
"description": "Used to create a shared key with a remote device",
|
||||||
"label": "Soukromý klíč"
|
"label": "Soukromý klíč"
|
||||||
},
|
},
|
||||||
"publicKey": {
|
"publicKey": {
|
||||||
"description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key",
|
"description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key",
|
||||||
"label": "Veřejný klíč"
|
"label": "Veřejný klíč"
|
||||||
},
|
},
|
||||||
"primaryAdminKey": {
|
"primaryAdminKey": {
|
||||||
"description": "The primary public key authorized to send admin messages to this node",
|
"description": "The primary public key authorized to send admin messages to this node",
|
||||||
"label": "Primary Admin Key"
|
"label": "Primary Admin Key"
|
||||||
},
|
},
|
||||||
"secondaryAdminKey": {
|
"secondaryAdminKey": {
|
||||||
"description": "The secondary public key authorized to send admin messages to this node",
|
"description": "The secondary public key authorized to send admin messages to this node",
|
||||||
"label": "Secondary Admin Key"
|
"label": "Secondary Admin Key"
|
||||||
},
|
},
|
||||||
"serialOutputEnabled": {
|
"serialOutputEnabled": {
|
||||||
"description": "Serial Console over the Stream API",
|
"description": "Serial Console over the Stream API",
|
||||||
"label": "Serial Output Enabled"
|
"label": "Serial Output Enabled"
|
||||||
},
|
},
|
||||||
"tertiaryAdminKey": {
|
"tertiaryAdminKey": {
|
||||||
"description": "The tertiary public key authorized to send admin messages to this node",
|
"description": "The tertiary public key authorized to send admin messages to this node",
|
||||||
"label": "Tertiary Admin Key"
|
"label": "Tertiary Admin Key"
|
||||||
},
|
},
|
||||||
"adminSettings": {
|
"adminSettings": {
|
||||||
"description": "Settings for Admin",
|
"description": "Settings for Admin",
|
||||||
"label": "Admin Settings"
|
"label": "Admin Settings"
|
||||||
},
|
},
|
||||||
"loggingSettings": {
|
"loggingSettings": {
|
||||||
"description": "Settings for Logging",
|
"description": "Settings for Logging",
|
||||||
"label": "Logging Settings"
|
"label": "Logging Settings"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,171 +1,171 @@
|
|||||||
{
|
{
|
||||||
"deleteMessages": {
|
"deleteMessages": {
|
||||||
"description": "This action will clear all message history. This cannot be undone. Are you sure you want to continue?",
|
"description": "This action will clear all message history. This cannot be undone. Are you sure you want to continue?",
|
||||||
"title": "Clear All Messages"
|
"title": "Clear All Messages"
|
||||||
},
|
},
|
||||||
"deviceName": {
|
"deviceName": {
|
||||||
"description": "The Device will restart once the config is saved.",
|
"description": "The Device will restart once the config is saved.",
|
||||||
"longName": "Long Name",
|
"longName": "Long Name",
|
||||||
"shortName": "Short Name",
|
"shortName": "Short Name",
|
||||||
"title": "Change Device Name"
|
"title": "Change Device Name"
|
||||||
},
|
},
|
||||||
"import": {
|
"import": {
|
||||||
"description": "The current LoRa configuration will be overridden.",
|
"description": "The current LoRa configuration will be overridden.",
|
||||||
"error": {
|
"error": {
|
||||||
"invalidUrl": "Invalid Meshtastic URL"
|
"invalidUrl": "Invalid Meshtastic URL"
|
||||||
},
|
},
|
||||||
"channelPrefix": "Channel: ",
|
"channelPrefix": "Channel: ",
|
||||||
"channelSetUrl": "Channel Set/QR Code URL",
|
"channelSetUrl": "Channel Set/QR Code URL",
|
||||||
"channels": "Channels:",
|
"channels": "Channels:",
|
||||||
"usePreset": "Use Preset?",
|
"usePreset": "Use Preset?",
|
||||||
"title": "Import Channel Set"
|
"title": "Import Channel Set"
|
||||||
},
|
},
|
||||||
"locationResponse": {
|
"locationResponse": {
|
||||||
"altitude": "Altitude: ",
|
"altitude": "Altitude: ",
|
||||||
"coordinates": "Coordinates: ",
|
"coordinates": "Coordinates: ",
|
||||||
"title": "Location: {{identifier}}"
|
"title": "Location: {{identifier}}"
|
||||||
},
|
},
|
||||||
"pkiRegenerateDialog": {
|
"pkiRegenerateDialog": {
|
||||||
"title": "Regenerate Pre-Shared Key?",
|
"title": "Regenerate Pre-Shared Key?",
|
||||||
"description": "Are you sure you want to regenerate the pre-shared key?",
|
"description": "Are you sure you want to regenerate the pre-shared key?",
|
||||||
"regenerate": "Regenerate"
|
"regenerate": "Regenerate"
|
||||||
},
|
},
|
||||||
"newDeviceDialog": {
|
"newDeviceDialog": {
|
||||||
"title": "Connect New Device",
|
"title": "Connect New Device",
|
||||||
"https": "https",
|
"https": "https",
|
||||||
"http": "http",
|
"http": "http",
|
||||||
"tabHttp": "HTTP",
|
"tabHttp": "HTTP",
|
||||||
"tabBluetooth": "Bluetooth",
|
"tabBluetooth": "Bluetooth",
|
||||||
"tabSerial": "Sériová komunikace",
|
"tabSerial": "Sériová komunikace",
|
||||||
"useHttps": "Use HTTPS",
|
"useHttps": "Use HTTPS",
|
||||||
"connecting": "Connecting...",
|
"connecting": "Connecting...",
|
||||||
"connect": "Connect",
|
"connect": "Connect",
|
||||||
"connectionFailedAlert": {
|
"connectionFailedAlert": {
|
||||||
"title": "Connection Failed",
|
"title": "Connection Failed",
|
||||||
"descriptionPrefix": "Could not connect to the device. ",
|
"descriptionPrefix": "Could not connect to the device. ",
|
||||||
"httpsHint": "If using HTTPS, you may need to accept a self-signed certificate first. ",
|
"httpsHint": "If using HTTPS, you may need to accept a self-signed certificate first. ",
|
||||||
"openLinkPrefix": "Please open ",
|
"openLinkPrefix": "Please open ",
|
||||||
"openLinkSuffix": " in a new tab",
|
"openLinkSuffix": " in a new tab",
|
||||||
"acceptTlsWarningSuffix": ", accept any TLS warnings if prompted, then try again",
|
"acceptTlsWarningSuffix": ", accept any TLS warnings if prompted, then try again",
|
||||||
"learnMoreLink": "Learn more"
|
"learnMoreLink": "Learn more"
|
||||||
},
|
},
|
||||||
"httpConnection": {
|
"httpConnection": {
|
||||||
"label": "IP Address/Hostname",
|
"label": "IP Address/Hostname",
|
||||||
"placeholder": "000.000.000.000 / meshtastic.local"
|
"placeholder": "000.000.000.000 / meshtastic.local"
|
||||||
},
|
},
|
||||||
"serialConnection": {
|
"serialConnection": {
|
||||||
"noDevicesPaired": "No devices paired yet.",
|
"noDevicesPaired": "No devices paired yet.",
|
||||||
"newDeviceButton": "New device",
|
"newDeviceButton": "New device",
|
||||||
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
|
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
|
||||||
},
|
},
|
||||||
"bluetoothConnection": {
|
"bluetoothConnection": {
|
||||||
"noDevicesPaired": "No devices paired yet.",
|
"noDevicesPaired": "No devices paired yet.",
|
||||||
"newDeviceButton": "New device"
|
"newDeviceButton": "New device"
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"requiresWebBluetooth": "This connection type requires <0>Web Bluetooth</0>. Please use a supported browser, like Chrome or Edge.",
|
"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.",
|
"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.",
|
"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."
|
"additionallyRequiresSecureContext": "Additionally, it requires a <0>secure context</0>. Please connect using HTTPS or localhost."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nodeDetails": {
|
"nodeDetails": {
|
||||||
"message": "Zpráva",
|
"message": "Zpráva",
|
||||||
"requestPosition": "Request Position",
|
"requestPosition": "Request Position",
|
||||||
"traceRoute": "Trace Route",
|
"traceRoute": "Trace Route",
|
||||||
"airTxUtilization": "Air TX utilization",
|
"airTxUtilization": "Air TX utilization",
|
||||||
"allRawMetrics": "All Raw Metrics:",
|
"allRawMetrics": "All Raw Metrics:",
|
||||||
"batteryLevel": "Battery level",
|
"batteryLevel": "Battery level",
|
||||||
"channelUtilization": "Channel utilization",
|
"channelUtilization": "Channel utilization",
|
||||||
"details": "Details:",
|
"details": "Details:",
|
||||||
"deviceMetrics": "Device Metrics:",
|
"deviceMetrics": "Device Metrics:",
|
||||||
"hardware": "Hardware: ",
|
"hardware": "Hardware: ",
|
||||||
"lastHeard": "Last Heard: ",
|
"lastHeard": "Last Heard: ",
|
||||||
"nodeHexPrefix": "Node Hex: !",
|
"nodeHexPrefix": "Node Hex: !",
|
||||||
"nodeNumber": "Node Number: ",
|
"nodeNumber": "Node Number: ",
|
||||||
"position": "Position:",
|
"position": "Position:",
|
||||||
"role": "Role: ",
|
"role": "Role: ",
|
||||||
"uptime": "Uptime: ",
|
"uptime": "Uptime: ",
|
||||||
"voltage": "Napětí",
|
"voltage": "Napětí",
|
||||||
"title": "Node Details for {{identifier}}",
|
"title": "Node Details for {{identifier}}",
|
||||||
"ignoreNode": "Ignore node",
|
"ignoreNode": "Ignore node",
|
||||||
"removeNode": "Remove node",
|
"removeNode": "Remove node",
|
||||||
"unignoreNode": "Unignore node"
|
"unignoreNode": "Unignore node"
|
||||||
},
|
},
|
||||||
"pkiBackup": {
|
"pkiBackup": {
|
||||||
"loseKeysWarning": "If you lose your keys, you will need to reset your device.",
|
"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!",
|
"secureBackup": "Its important to backup your public and private keys and store your backup securely!",
|
||||||
"footer": "=== END OF KEYS ===",
|
"footer": "=== END OF KEYS ===",
|
||||||
"header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===",
|
"header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===",
|
||||||
"privateKey": "Private Key:",
|
"privateKey": "Private Key:",
|
||||||
"publicKey": "Public Key:",
|
"publicKey": "Public Key:",
|
||||||
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
|
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
|
||||||
"title": "Backup Keys"
|
"title": "Backup Keys"
|
||||||
},
|
},
|
||||||
"pkiBackupReminder": {
|
"pkiBackupReminder": {
|
||||||
"description": "We recommend backing up your key data regularly. Would you like to back up now?",
|
"description": "We recommend backing up your key data regularly. Would you like to back up now?",
|
||||||
"title": "Backup Reminder",
|
"title": "Backup Reminder",
|
||||||
"remindLaterPrefix": "Remind me in",
|
"remindLaterPrefix": "Remind me in",
|
||||||
"remindNever": "Never remind me",
|
"remindNever": "Never remind me",
|
||||||
"backupNow": "Back up now"
|
"backupNow": "Back up now"
|
||||||
},
|
},
|
||||||
"pkiRegenerate": {
|
"pkiRegenerate": {
|
||||||
"description": "Are you sure you want to regenerate key pair?",
|
"description": "Are you sure you want to regenerate key pair?",
|
||||||
"title": "Regenerate Key Pair"
|
"title": "Regenerate Key Pair"
|
||||||
},
|
},
|
||||||
"qr": {
|
"qr": {
|
||||||
"addChannels": "Add Channels",
|
"addChannels": "Add Channels",
|
||||||
"replaceChannels": "Replace Channels",
|
"replaceChannels": "Replace Channels",
|
||||||
"description": "The current LoRa configuration will also be shared.",
|
"description": "The current LoRa configuration will also be shared.",
|
||||||
"sharableUrl": "Sharable URL",
|
"sharableUrl": "Sharable URL",
|
||||||
"title": "Generate QR Code"
|
"title": "Generate QR Code"
|
||||||
},
|
},
|
||||||
"rebootOta": {
|
"rebootOta": {
|
||||||
"title": "Schedule Reboot",
|
"title": "Schedule Reboot",
|
||||||
"description": "Reboot the connected node after a delay into OTA (Over-the-Air) mode.",
|
"description": "Reboot the connected node after a delay into OTA (Over-the-Air) mode.",
|
||||||
"enterDelay": "Enter delay (sec)",
|
"enterDelay": "Enter delay (sec)",
|
||||||
"scheduled": "Reboot has been scheduled"
|
"scheduled": "Reboot has been scheduled"
|
||||||
},
|
},
|
||||||
"reboot": {
|
"reboot": {
|
||||||
"title": "Schedule Reboot",
|
"title": "Schedule Reboot",
|
||||||
"description": "Reboot the connected node after x minutes."
|
"description": "Reboot the connected node after x minutes."
|
||||||
},
|
},
|
||||||
"refreshKeys": {
|
"refreshKeys": {
|
||||||
"description": {
|
"description": {
|
||||||
"acceptNewKeys": "This will remove the node from device and request new keys.",
|
"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.",
|
"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: "
|
"unableToSendDmPrefix": "Your node is unable to send a direct message to node: "
|
||||||
},
|
},
|
||||||
"acceptNewKeys": "Accept New Keys",
|
"acceptNewKeys": "Accept New Keys",
|
||||||
"title": "Keys Mismatch - {{identifier}}"
|
"title": "Keys Mismatch - {{identifier}}"
|
||||||
},
|
},
|
||||||
"removeNode": {
|
"removeNode": {
|
||||||
"description": "Are you sure you want to remove this Node?",
|
"description": "Are you sure you want to remove this Node?",
|
||||||
"title": "Remove Node?"
|
"title": "Remove Node?"
|
||||||
},
|
},
|
||||||
"shutdown": {
|
"shutdown": {
|
||||||
"title": "Schedule Shutdown",
|
"title": "Schedule Shutdown",
|
||||||
"description": "Turn off the connected node after x minutes."
|
"description": "Turn off the connected node after x minutes."
|
||||||
},
|
},
|
||||||
"traceRoute": {
|
"traceRoute": {
|
||||||
"routeToDestination": "Route to destination:",
|
"routeToDestination": "Route to destination:",
|
||||||
"routeBack": "Route back:"
|
"routeBack": "Route back:"
|
||||||
},
|
},
|
||||||
"tracerouteResponse": {
|
"tracerouteResponse": {
|
||||||
"title": "Traceroute: {{identifier}}"
|
"title": "Traceroute: {{identifier}}"
|
||||||
},
|
},
|
||||||
"unsafeRoles": {
|
"unsafeRoles": {
|
||||||
"confirmUnderstanding": "Yes, I know what I'm doing",
|
"confirmUnderstanding": "Yes, I know what I'm doing",
|
||||||
"conjunction": " and the blog post about ",
|
"conjunction": " and the blog post about ",
|
||||||
"postamble": " and understand the implications of changing the role.",
|
"postamble": " and understand the implications of changing the role.",
|
||||||
"preamble": "I have read the ",
|
"preamble": "I have read the ",
|
||||||
"choosingRightDeviceRole": "Choosing The Right Device Role",
|
"choosingRightDeviceRole": "Choosing The Right Device Role",
|
||||||
"deviceRoleDocumentation": "Device Role Documentation",
|
"deviceRoleDocumentation": "Device Role Documentation",
|
||||||
"title": "Jste si jistý?"
|
"title": "Jste si jistý?"
|
||||||
},
|
},
|
||||||
"managedMode": {
|
"managedMode": {
|
||||||
"confirmUnderstanding": "Yes, I know what I'm doing",
|
"confirmUnderstanding": "Yes, I know what I'm doing",
|
||||||
"title": "Jste si jistý?",
|
"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."
|
"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."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,39 +1,39 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"title": "Messages: {{chatName}}",
|
"title": "Messages: {{chatName}}",
|
||||||
"placeholder": "Enter Message"
|
"placeholder": "Enter Message"
|
||||||
},
|
},
|
||||||
"emptyState": {
|
"emptyState": {
|
||||||
"title": "Select a Chat",
|
"title": "Select a Chat",
|
||||||
"text": "No messages yet."
|
"text": "No messages yet."
|
||||||
},
|
},
|
||||||
"selectChatPrompt": {
|
"selectChatPrompt": {
|
||||||
"text": "Select a channel or node to start messaging."
|
"text": "Select a channel or node to start messaging."
|
||||||
},
|
},
|
||||||
"sendMessage": {
|
"sendMessage": {
|
||||||
"placeholder": "Enter your message here...",
|
"placeholder": "Enter your message here...",
|
||||||
"sendButton": "Odeslat"
|
"sendButton": "Odeslat"
|
||||||
},
|
},
|
||||||
"actionsMenu": {
|
"actionsMenu": {
|
||||||
"addReactionLabel": "Add Reaction",
|
"addReactionLabel": "Add Reaction",
|
||||||
"replyLabel": "Reply"
|
"replyLabel": "Reply"
|
||||||
},
|
},
|
||||||
"deliveryStatus": {
|
"deliveryStatus": {
|
||||||
"delivered": {
|
"delivered": {
|
||||||
"label": "Message delivered",
|
"label": "Message delivered",
|
||||||
"displayText": "Message delivered"
|
"displayText": "Message delivered"
|
||||||
},
|
},
|
||||||
"failed": {
|
"failed": {
|
||||||
"label": "Message delivery failed",
|
"label": "Message delivery failed",
|
||||||
"displayText": "Delivery failed"
|
"displayText": "Delivery failed"
|
||||||
},
|
},
|
||||||
"unknown": {
|
"unknown": {
|
||||||
"label": "Message status unknown",
|
"label": "Message status unknown",
|
||||||
"displayText": "Unknown state"
|
"displayText": "Unknown state"
|
||||||
},
|
},
|
||||||
"waiting": {
|
"waiting": {
|
||||||
"label": "Sending message",
|
"label": "Sending message",
|
||||||
"displayText": "Waiting for delivery"
|
"displayText": "Waiting for delivery"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,448 +1,448 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"tabAmbientLighting": "Ambientní osvětlení",
|
"tabAmbientLighting": "Ambientní osvětlení",
|
||||||
"tabAudio": "Zvuk",
|
"tabAudio": "Zvuk",
|
||||||
"tabCannedMessage": "Canned",
|
"tabCannedMessage": "Canned",
|
||||||
"tabDetectionSensor": "Detekční senzor",
|
"tabDetectionSensor": "Detekční senzor",
|
||||||
"tabExternalNotification": "Ext Notif",
|
"tabExternalNotification": "Ext Notif",
|
||||||
"tabMqtt": "MQTT",
|
"tabMqtt": "MQTT",
|
||||||
"tabNeighborInfo": "Informace o sousedech",
|
"tabNeighborInfo": "Informace o sousedech",
|
||||||
"tabPaxcounter": "Paxcounter",
|
"tabPaxcounter": "Paxcounter",
|
||||||
"tabRangeTest": "Zkouška dosahu",
|
"tabRangeTest": "Zkouška dosahu",
|
||||||
"tabSerial": "Sériová komunikace",
|
"tabSerial": "Sériová komunikace",
|
||||||
"tabStoreAndForward": "S&F",
|
"tabStoreAndForward": "S&F",
|
||||||
"tabTelemetry": "Telemetrie"
|
"tabTelemetry": "Telemetrie"
|
||||||
},
|
},
|
||||||
"ambientLighting": {
|
"ambientLighting": {
|
||||||
"title": "Ambient Lighting Settings",
|
"title": "Ambient Lighting Settings",
|
||||||
"description": "Settings for the Ambient Lighting module",
|
"description": "Settings for the Ambient Lighting module",
|
||||||
"ledState": {
|
"ledState": {
|
||||||
"label": "LED State",
|
"label": "LED State",
|
||||||
"description": "Sets LED to on or off"
|
"description": "Sets LED to on or off"
|
||||||
},
|
},
|
||||||
"current": {
|
"current": {
|
||||||
"label": "Proud",
|
"label": "Proud",
|
||||||
"description": "Sets the current for the LED output. Default is 10"
|
"description": "Sets the current for the LED output. Default is 10"
|
||||||
},
|
},
|
||||||
"red": {
|
"red": {
|
||||||
"label": "Červená",
|
"label": "Červená",
|
||||||
"description": "Sets the red LED level. Values are 0-255"
|
"description": "Sets the red LED level. Values are 0-255"
|
||||||
},
|
},
|
||||||
"green": {
|
"green": {
|
||||||
"label": "Zelená",
|
"label": "Zelená",
|
||||||
"description": "Sets the green LED level. Values are 0-255"
|
"description": "Sets the green LED level. Values are 0-255"
|
||||||
},
|
},
|
||||||
"blue": {
|
"blue": {
|
||||||
"label": "Modrá",
|
"label": "Modrá",
|
||||||
"description": "Sets the blue LED level. Values are 0-255"
|
"description": "Sets the blue LED level. Values are 0-255"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"audio": {
|
"audio": {
|
||||||
"title": "Audio Settings",
|
"title": "Audio Settings",
|
||||||
"description": "Settings for the Audio module",
|
"description": "Settings for the Audio module",
|
||||||
"codec2Enabled": {
|
"codec2Enabled": {
|
||||||
"label": "Codec 2 Enabled",
|
"label": "Codec 2 Enabled",
|
||||||
"description": "Enable Codec 2 audio encoding"
|
"description": "Enable Codec 2 audio encoding"
|
||||||
},
|
},
|
||||||
"pttPin": {
|
"pttPin": {
|
||||||
"label": "PTT Pin",
|
"label": "PTT Pin",
|
||||||
"description": "GPIO pin to use for PTT"
|
"description": "GPIO pin to use for PTT"
|
||||||
},
|
},
|
||||||
"bitrate": {
|
"bitrate": {
|
||||||
"label": "Bitrate",
|
"label": "Bitrate",
|
||||||
"description": "Bitrate to use for audio encoding"
|
"description": "Bitrate to use for audio encoding"
|
||||||
},
|
},
|
||||||
"i2sWs": {
|
"i2sWs": {
|
||||||
"label": "i2S WS",
|
"label": "i2S WS",
|
||||||
"description": "GPIO pin to use for i2S WS"
|
"description": "GPIO pin to use for i2S WS"
|
||||||
},
|
},
|
||||||
"i2sSd": {
|
"i2sSd": {
|
||||||
"label": "i2S SD",
|
"label": "i2S SD",
|
||||||
"description": "GPIO pin to use for i2S SD"
|
"description": "GPIO pin to use for i2S SD"
|
||||||
},
|
},
|
||||||
"i2sDin": {
|
"i2sDin": {
|
||||||
"label": "i2S DIN",
|
"label": "i2S DIN",
|
||||||
"description": "GPIO pin to use for i2S DIN"
|
"description": "GPIO pin to use for i2S DIN"
|
||||||
},
|
},
|
||||||
"i2sSck": {
|
"i2sSck": {
|
||||||
"label": "i2S SCK",
|
"label": "i2S SCK",
|
||||||
"description": "GPIO pin to use for i2S SCK"
|
"description": "GPIO pin to use for i2S SCK"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"cannedMessage": {
|
"cannedMessage": {
|
||||||
"title": "Canned Message Settings",
|
"title": "Canned Message Settings",
|
||||||
"description": "Settings for the Canned Message module",
|
"description": "Settings for the Canned Message module",
|
||||||
"moduleEnabled": {
|
"moduleEnabled": {
|
||||||
"label": "Module Enabled",
|
"label": "Module Enabled",
|
||||||
"description": "Enable Canned Message"
|
"description": "Enable Canned Message"
|
||||||
},
|
},
|
||||||
"rotary1Enabled": {
|
"rotary1Enabled": {
|
||||||
"label": "Rotary Encoder #1 Enabled",
|
"label": "Rotary Encoder #1 Enabled",
|
||||||
"description": "Enable the rotary encoder"
|
"description": "Enable the rotary encoder"
|
||||||
},
|
},
|
||||||
"inputbrokerPinA": {
|
"inputbrokerPinA": {
|
||||||
"label": "Encoder Pin A",
|
"label": "Encoder Pin A",
|
||||||
"description": "GPIO Pin Value (1-39) For encoder port A"
|
"description": "GPIO Pin Value (1-39) For encoder port A"
|
||||||
},
|
},
|
||||||
"inputbrokerPinB": {
|
"inputbrokerPinB": {
|
||||||
"label": "Encoder Pin B",
|
"label": "Encoder Pin B",
|
||||||
"description": "GPIO Pin Value (1-39) For encoder port B"
|
"description": "GPIO Pin Value (1-39) For encoder port B"
|
||||||
},
|
},
|
||||||
"inputbrokerPinPress": {
|
"inputbrokerPinPress": {
|
||||||
"label": "Encoder Pin Press",
|
"label": "Encoder Pin Press",
|
||||||
"description": "GPIO Pin Value (1-39) For encoder Press"
|
"description": "GPIO Pin Value (1-39) For encoder Press"
|
||||||
},
|
},
|
||||||
"inputbrokerEventCw": {
|
"inputbrokerEventCw": {
|
||||||
"label": "Clockwise event",
|
"label": "Clockwise event",
|
||||||
"description": "Select input event."
|
"description": "Select input event."
|
||||||
},
|
},
|
||||||
"inputbrokerEventCcw": {
|
"inputbrokerEventCcw": {
|
||||||
"label": "Counter Clockwise event",
|
"label": "Counter Clockwise event",
|
||||||
"description": "Select input event."
|
"description": "Select input event."
|
||||||
},
|
},
|
||||||
"inputbrokerEventPress": {
|
"inputbrokerEventPress": {
|
||||||
"label": "Press event",
|
"label": "Press event",
|
||||||
"description": "Select input event"
|
"description": "Select input event"
|
||||||
},
|
},
|
||||||
"updown1Enabled": {
|
"updown1Enabled": {
|
||||||
"label": "Up Down enabled",
|
"label": "Up Down enabled",
|
||||||
"description": "Enable the up / down encoder"
|
"description": "Enable the up / down encoder"
|
||||||
},
|
},
|
||||||
"allowInputSource": {
|
"allowInputSource": {
|
||||||
"label": "Allow Input Source",
|
"label": "Allow Input Source",
|
||||||
"description": "Select from: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
|
"description": "Select from: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
|
||||||
},
|
},
|
||||||
"sendBell": {
|
"sendBell": {
|
||||||
"label": "Send Bell",
|
"label": "Send Bell",
|
||||||
"description": "Sends a bell character with each message"
|
"description": "Sends a bell character with each message"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"detectionSensor": {
|
"detectionSensor": {
|
||||||
"title": "Detection Sensor Settings",
|
"title": "Detection Sensor Settings",
|
||||||
"description": "Settings for the Detection Sensor module",
|
"description": "Settings for the Detection Sensor module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Povoleno",
|
"label": "Povoleno",
|
||||||
"description": "Enable or disable Detection Sensor Module"
|
"description": "Enable or disable Detection Sensor Module"
|
||||||
},
|
},
|
||||||
"minimumBroadcastSecs": {
|
"minimumBroadcastSecs": {
|
||||||
"label": "Minimum Broadcast Seconds",
|
"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"
|
"description": "The interval in seconds of how often we can send a message to the mesh when a state change is detected"
|
||||||
},
|
},
|
||||||
"stateBroadcastSecs": {
|
"stateBroadcastSecs": {
|
||||||
"label": "State Broadcast Seconds",
|
"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"
|
"description": "The interval in seconds of how often we should send a message to the mesh with the current state regardless of changes"
|
||||||
},
|
},
|
||||||
"sendBell": {
|
"sendBell": {
|
||||||
"label": "Send Bell",
|
"label": "Send Bell",
|
||||||
"description": "Send ASCII bell with alert message"
|
"description": "Send ASCII bell with alert message"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"label": "Friendly Name",
|
"label": "Friendly Name",
|
||||||
"description": "Used to format the message sent to mesh, max 20 Characters"
|
"description": "Used to format the message sent to mesh, max 20 Characters"
|
||||||
},
|
},
|
||||||
"monitorPin": {
|
"monitorPin": {
|
||||||
"label": "Monitor Pin",
|
"label": "Monitor Pin",
|
||||||
"description": "The GPIO pin to monitor for state changes"
|
"description": "The GPIO pin to monitor for state changes"
|
||||||
},
|
},
|
||||||
"detectionTriggerType": {
|
"detectionTriggerType": {
|
||||||
"label": "Detection Triggered Type",
|
"label": "Detection Triggered Type",
|
||||||
"description": "The type of trigger event to be used"
|
"description": "The type of trigger event to be used"
|
||||||
},
|
},
|
||||||
"usePullup": {
|
"usePullup": {
|
||||||
"label": "Use Pullup",
|
"label": "Use Pullup",
|
||||||
"description": "Whether or not use INPUT_PULLUP mode for GPIO pin"
|
"description": "Whether or not use INPUT_PULLUP mode for GPIO pin"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"externalNotification": {
|
"externalNotification": {
|
||||||
"title": "External Notification Settings",
|
"title": "External Notification Settings",
|
||||||
"description": "Configure the external notification module",
|
"description": "Configure the external notification module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Module Enabled",
|
"label": "Module Enabled",
|
||||||
"description": "Enable External Notification"
|
"description": "Enable External Notification"
|
||||||
},
|
},
|
||||||
"outputMs": {
|
"outputMs": {
|
||||||
"label": "Output MS",
|
"label": "Output MS",
|
||||||
"description": "Output MS"
|
"description": "Output MS"
|
||||||
},
|
},
|
||||||
"output": {
|
"output": {
|
||||||
"label": "Output",
|
"label": "Output",
|
||||||
"description": "Output"
|
"description": "Output"
|
||||||
},
|
},
|
||||||
"outputVibra": {
|
"outputVibra": {
|
||||||
"label": "Output Vibrate",
|
"label": "Output Vibrate",
|
||||||
"description": "Output Vibrate"
|
"description": "Output Vibrate"
|
||||||
},
|
},
|
||||||
"outputBuzzer": {
|
"outputBuzzer": {
|
||||||
"label": "Output Buzzer",
|
"label": "Output Buzzer",
|
||||||
"description": "Output Buzzer"
|
"description": "Output Buzzer"
|
||||||
},
|
},
|
||||||
"active": {
|
"active": {
|
||||||
"label": "Active",
|
"label": "Active",
|
||||||
"description": "Active"
|
"description": "Active"
|
||||||
},
|
},
|
||||||
"alertMessage": {
|
"alertMessage": {
|
||||||
"label": "Alert Message",
|
"label": "Alert Message",
|
||||||
"description": "Alert Message"
|
"description": "Alert Message"
|
||||||
},
|
},
|
||||||
"alertMessageVibra": {
|
"alertMessageVibra": {
|
||||||
"label": "Alert Message Vibrate",
|
"label": "Alert Message Vibrate",
|
||||||
"description": "Alert Message Vibrate"
|
"description": "Alert Message Vibrate"
|
||||||
},
|
},
|
||||||
"alertMessageBuzzer": {
|
"alertMessageBuzzer": {
|
||||||
"label": "Alert Message Buzzer",
|
"label": "Alert Message Buzzer",
|
||||||
"description": "Alert Message Buzzer"
|
"description": "Alert Message Buzzer"
|
||||||
},
|
},
|
||||||
"alertBell": {
|
"alertBell": {
|
||||||
"label": "Alert Bell",
|
"label": "Alert Bell",
|
||||||
"description": "Should an alert be triggered when receiving an incoming bell?"
|
"description": "Should an alert be triggered when receiving an incoming bell?"
|
||||||
},
|
},
|
||||||
"alertBellVibra": {
|
"alertBellVibra": {
|
||||||
"label": "Alert Bell Vibrate",
|
"label": "Alert Bell Vibrate",
|
||||||
"description": "Alert Bell Vibrate"
|
"description": "Alert Bell Vibrate"
|
||||||
},
|
},
|
||||||
"alertBellBuzzer": {
|
"alertBellBuzzer": {
|
||||||
"label": "Alert Bell Buzzer",
|
"label": "Alert Bell Buzzer",
|
||||||
"description": "Alert Bell Buzzer"
|
"description": "Alert Bell Buzzer"
|
||||||
},
|
},
|
||||||
"usePwm": {
|
"usePwm": {
|
||||||
"label": "Use PWM",
|
"label": "Use PWM",
|
||||||
"description": "Use PWM"
|
"description": "Use PWM"
|
||||||
},
|
},
|
||||||
"nagTimeout": {
|
"nagTimeout": {
|
||||||
"label": "Nag Timeout",
|
"label": "Nag Timeout",
|
||||||
"description": "Nag Timeout"
|
"description": "Nag Timeout"
|
||||||
},
|
},
|
||||||
"useI2sAsBuzzer": {
|
"useI2sAsBuzzer": {
|
||||||
"label": "Use I²S Pin as Buzzer",
|
"label": "Use I²S Pin as Buzzer",
|
||||||
"description": "Designate I²S Pin as Buzzer Output"
|
"description": "Designate I²S Pin as Buzzer Output"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"mqtt": {
|
"mqtt": {
|
||||||
"title": "MQTT Settings",
|
"title": "MQTT Settings",
|
||||||
"description": "Settings for the MQTT module",
|
"description": "Settings for the MQTT module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Povoleno",
|
"label": "Povoleno",
|
||||||
"description": "Enable or disable MQTT"
|
"description": "Enable or disable MQTT"
|
||||||
},
|
},
|
||||||
"address": {
|
"address": {
|
||||||
"label": "MQTT Server Address",
|
"label": "MQTT Server Address",
|
||||||
"description": "MQTT server address to use for default/custom servers"
|
"description": "MQTT server address to use for default/custom servers"
|
||||||
},
|
},
|
||||||
"username": {
|
"username": {
|
||||||
"label": "MQTT Username",
|
"label": "MQTT Username",
|
||||||
"description": "MQTT username to use for default/custom servers"
|
"description": "MQTT username to use for default/custom servers"
|
||||||
},
|
},
|
||||||
"password": {
|
"password": {
|
||||||
"label": "MQTT Password",
|
"label": "MQTT Password",
|
||||||
"description": "MQTT password to use for default/custom servers"
|
"description": "MQTT password to use for default/custom servers"
|
||||||
},
|
},
|
||||||
"encryptionEnabled": {
|
"encryptionEnabled": {
|
||||||
"label": "Encryption Enabled",
|
"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."
|
"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": {
|
"jsonEnabled": {
|
||||||
"label": "JSON Enabled",
|
"label": "JSON Enabled",
|
||||||
"description": "Whether to send/consume JSON packets on MQTT"
|
"description": "Whether to send/consume JSON packets on MQTT"
|
||||||
},
|
},
|
||||||
"tlsEnabled": {
|
"tlsEnabled": {
|
||||||
"label": "TLS povoleno",
|
"label": "TLS povoleno",
|
||||||
"description": "Enable or disable TLS"
|
"description": "Enable or disable TLS"
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"label": "Kořenové téma",
|
"label": "Kořenové téma",
|
||||||
"description": "MQTT root topic to use for default/custom servers"
|
"description": "MQTT root topic to use for default/custom servers"
|
||||||
},
|
},
|
||||||
"proxyToClientEnabled": {
|
"proxyToClientEnabled": {
|
||||||
"label": "MQTT Client Proxy Enabled",
|
"label": "MQTT Client Proxy Enabled",
|
||||||
"description": "Utilizes the network connection to proxy MQTT messages to the client."
|
"description": "Utilizes the network connection to proxy MQTT messages to the client."
|
||||||
},
|
},
|
||||||
"mapReportingEnabled": {
|
"mapReportingEnabled": {
|
||||||
"label": "Map Reporting Enabled",
|
"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."
|
"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": {
|
"mapReportSettings": {
|
||||||
"publishIntervalSecs": {
|
"publishIntervalSecs": {
|
||||||
"label": "Map Report Publish Interval (s)",
|
"label": "Map Report Publish Interval (s)",
|
||||||
"description": "Interval in seconds to publish map reports"
|
"description": "Interval in seconds to publish map reports"
|
||||||
},
|
},
|
||||||
"positionPrecision": {
|
"positionPrecision": {
|
||||||
"label": "Approximate Location",
|
"label": "Approximate Location",
|
||||||
"description": "Position shared will be accurate within this distance",
|
"description": "Position shared will be accurate within this distance",
|
||||||
"options": {
|
"options": {
|
||||||
"metric_km23": "Within 23 km",
|
"metric_km23": "Within 23 km",
|
||||||
"metric_km12": "Within 12 km",
|
"metric_km12": "Within 12 km",
|
||||||
"metric_km5_8": "Within 5.8 km",
|
"metric_km5_8": "Within 5.8 km",
|
||||||
"metric_km2_9": "Within 2.9 km",
|
"metric_km2_9": "Within 2.9 km",
|
||||||
"metric_km1_5": "Within 1.5 km",
|
"metric_km1_5": "Within 1.5 km",
|
||||||
"metric_m700": "Within 700 m",
|
"metric_m700": "Within 700 m",
|
||||||
"metric_m350": "Within 350 m",
|
"metric_m350": "Within 350 m",
|
||||||
"metric_m200": "Within 200 m",
|
"metric_m200": "Within 200 m",
|
||||||
"metric_m90": "Within 90 m",
|
"metric_m90": "Within 90 m",
|
||||||
"metric_m50": "Within 50 m",
|
"metric_m50": "Within 50 m",
|
||||||
"imperial_mi15": "Within 15 miles",
|
"imperial_mi15": "Within 15 miles",
|
||||||
"imperial_mi7_3": "Within 7.3 miles",
|
"imperial_mi7_3": "Within 7.3 miles",
|
||||||
"imperial_mi3_6": "Within 3.6 miles",
|
"imperial_mi3_6": "Within 3.6 miles",
|
||||||
"imperial_mi1_8": "Within 1.8 miles",
|
"imperial_mi1_8": "Within 1.8 miles",
|
||||||
"imperial_mi0_9": "Within 0.9 miles",
|
"imperial_mi0_9": "Within 0.9 miles",
|
||||||
"imperial_mi0_5": "Within 0.5 miles",
|
"imperial_mi0_5": "Within 0.5 miles",
|
||||||
"imperial_mi0_2": "Within 0.2 miles",
|
"imperial_mi0_2": "Within 0.2 miles",
|
||||||
"imperial_ft600": "Within 600 feet",
|
"imperial_ft600": "Within 600 feet",
|
||||||
"imperial_ft300": "Within 300 feet",
|
"imperial_ft300": "Within 300 feet",
|
||||||
"imperial_ft150": "Within 150 feet"
|
"imperial_ft150": "Within 150 feet"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"neighborInfo": {
|
"neighborInfo": {
|
||||||
"title": "Neighbor Info Settings",
|
"title": "Neighbor Info Settings",
|
||||||
"description": "Settings for the Neighbor Info module",
|
"description": "Settings for the Neighbor Info module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Povoleno",
|
"label": "Povoleno",
|
||||||
"description": "Enable or disable Neighbor Info Module"
|
"description": "Enable or disable Neighbor Info Module"
|
||||||
},
|
},
|
||||||
"updateInterval": {
|
"updateInterval": {
|
||||||
"label": "Update Interval",
|
"label": "Update Interval",
|
||||||
"description": "Interval in seconds of how often we should try to send our Neighbor Info to the mesh"
|
"description": "Interval in seconds of how often we should try to send our Neighbor Info to the mesh"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"paxcounter": {
|
"paxcounter": {
|
||||||
"title": "Paxcounter Settings",
|
"title": "Paxcounter Settings",
|
||||||
"description": "Settings for the Paxcounter module",
|
"description": "Settings for the Paxcounter module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Module Enabled",
|
"label": "Module Enabled",
|
||||||
"description": "Enable Paxcounter"
|
"description": "Enable Paxcounter"
|
||||||
},
|
},
|
||||||
"paxcounterUpdateInterval": {
|
"paxcounterUpdateInterval": {
|
||||||
"label": "Update Interval (seconds)",
|
"label": "Update Interval (seconds)",
|
||||||
"description": "How long to wait between sending paxcounter packets"
|
"description": "How long to wait between sending paxcounter packets"
|
||||||
},
|
},
|
||||||
"wifiThreshold": {
|
"wifiThreshold": {
|
||||||
"label": "WiFi RSSI Threshold",
|
"label": "WiFi RSSI Threshold",
|
||||||
"description": "At what WiFi RSSI level should the counter increase. Defaults to -80."
|
"description": "At what WiFi RSSI level should the counter increase. Defaults to -80."
|
||||||
},
|
},
|
||||||
"bleThreshold": {
|
"bleThreshold": {
|
||||||
"label": "BLE RSSI Threshold",
|
"label": "BLE RSSI Threshold",
|
||||||
"description": "At what BLE RSSI level should the counter increase. Defaults to -80."
|
"description": "At what BLE RSSI level should the counter increase. Defaults to -80."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rangeTest": {
|
"rangeTest": {
|
||||||
"title": "Range Test Settings",
|
"title": "Range Test Settings",
|
||||||
"description": "Settings for the Range Test module",
|
"description": "Settings for the Range Test module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Module Enabled",
|
"label": "Module Enabled",
|
||||||
"description": "Enable Range Test"
|
"description": "Enable Range Test"
|
||||||
},
|
},
|
||||||
"sender": {
|
"sender": {
|
||||||
"label": "Message Interval",
|
"label": "Message Interval",
|
||||||
"description": "How long to wait between sending test packets"
|
"description": "How long to wait between sending test packets"
|
||||||
},
|
},
|
||||||
"save": {
|
"save": {
|
||||||
"label": "Save CSV to storage",
|
"label": "Save CSV to storage",
|
||||||
"description": "ESP32 Only"
|
"description": "ESP32 Only"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"serial": {
|
"serial": {
|
||||||
"title": "Serial Settings",
|
"title": "Serial Settings",
|
||||||
"description": "Settings for the Serial module",
|
"description": "Settings for the Serial module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Module Enabled",
|
"label": "Module Enabled",
|
||||||
"description": "Enable Serial output"
|
"description": "Enable Serial output"
|
||||||
},
|
},
|
||||||
"echo": {
|
"echo": {
|
||||||
"label": "Echo",
|
"label": "Echo",
|
||||||
"description": "Any packets you send will be echoed back to your device"
|
"description": "Any packets you send will be echoed back to your device"
|
||||||
},
|
},
|
||||||
"rxd": {
|
"rxd": {
|
||||||
"label": "Receive Pin",
|
"label": "Receive Pin",
|
||||||
"description": "Set the GPIO pin to the RXD pin you have set up."
|
"description": "Set the GPIO pin to the RXD pin you have set up."
|
||||||
},
|
},
|
||||||
"txd": {
|
"txd": {
|
||||||
"label": "Transmit Pin",
|
"label": "Transmit Pin",
|
||||||
"description": "Set the GPIO pin to the TXD pin you have set up."
|
"description": "Set the GPIO pin to the TXD pin you have set up."
|
||||||
},
|
},
|
||||||
"baud": {
|
"baud": {
|
||||||
"label": "Baud Rate",
|
"label": "Baud Rate",
|
||||||
"description": "The serial baud rate"
|
"description": "The serial baud rate"
|
||||||
},
|
},
|
||||||
"timeout": {
|
"timeout": {
|
||||||
"label": "Vypršel čas spojení",
|
"label": "Vypršel čas spojení",
|
||||||
"description": "Seconds to wait before we consider your packet as 'done'"
|
"description": "Seconds to wait before we consider your packet as 'done'"
|
||||||
},
|
},
|
||||||
"mode": {
|
"mode": {
|
||||||
"label": "Mode",
|
"label": "Mode",
|
||||||
"description": "Select Mode"
|
"description": "Select Mode"
|
||||||
},
|
},
|
||||||
"overrideConsoleSerialPort": {
|
"overrideConsoleSerialPort": {
|
||||||
"label": "Override Console Serial Port",
|
"label": "Override Console Serial Port",
|
||||||
"description": "If you have a serial port connected to the console, this will override it."
|
"description": "If you have a serial port connected to the console, this will override it."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storeForward": {
|
"storeForward": {
|
||||||
"title": "Store & Forward Settings",
|
"title": "Store & Forward Settings",
|
||||||
"description": "Settings for the Store & Forward module",
|
"description": "Settings for the Store & Forward module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Module Enabled",
|
"label": "Module Enabled",
|
||||||
"description": "Enable Store & Forward"
|
"description": "Enable Store & Forward"
|
||||||
},
|
},
|
||||||
"heartbeat": {
|
"heartbeat": {
|
||||||
"label": "Heartbeat Enabled",
|
"label": "Heartbeat Enabled",
|
||||||
"description": "Enable Store & Forward heartbeat"
|
"description": "Enable Store & Forward heartbeat"
|
||||||
},
|
},
|
||||||
"records": {
|
"records": {
|
||||||
"label": "Počet záznamů",
|
"label": "Počet záznamů",
|
||||||
"description": "Number of records to store"
|
"description": "Number of records to store"
|
||||||
},
|
},
|
||||||
"historyReturnMax": {
|
"historyReturnMax": {
|
||||||
"label": "History return max",
|
"label": "History return max",
|
||||||
"description": "Max number of records to return"
|
"description": "Max number of records to return"
|
||||||
},
|
},
|
||||||
"historyReturnWindow": {
|
"historyReturnWindow": {
|
||||||
"label": "History return window",
|
"label": "History return window",
|
||||||
"description": "Max number of records to return"
|
"description": "Max number of records to return"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"telemetry": {
|
"telemetry": {
|
||||||
"title": "Telemetry Settings",
|
"title": "Telemetry Settings",
|
||||||
"description": "Settings for the Telemetry module",
|
"description": "Settings for the Telemetry module",
|
||||||
"deviceUpdateInterval": {
|
"deviceUpdateInterval": {
|
||||||
"label": "Device Metrics",
|
"label": "Device Metrics",
|
||||||
"description": "Interval aktualizace měření spotřeby (v sekundách)"
|
"description": "Interval aktualizace měření spotřeby (v sekundách)"
|
||||||
},
|
},
|
||||||
"environmentUpdateInterval": {
|
"environmentUpdateInterval": {
|
||||||
"label": "Interval aktualizace měření životního prostředí (v sekundách)",
|
"label": "Interval aktualizace měření životního prostředí (v sekundách)",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"environmentMeasurementEnabled": {
|
"environmentMeasurementEnabled": {
|
||||||
"label": "Module Enabled",
|
"label": "Module Enabled",
|
||||||
"description": "Enable the Environment Telemetry"
|
"description": "Enable the Environment Telemetry"
|
||||||
},
|
},
|
||||||
"environmentScreenEnabled": {
|
"environmentScreenEnabled": {
|
||||||
"label": "Displayed on Screen",
|
"label": "Displayed on Screen",
|
||||||
"description": "Show the Telemetry Module on the OLED"
|
"description": "Show the Telemetry Module on the OLED"
|
||||||
},
|
},
|
||||||
"environmentDisplayFahrenheit": {
|
"environmentDisplayFahrenheit": {
|
||||||
"label": "Display Fahrenheit",
|
"label": "Display Fahrenheit",
|
||||||
"description": "Display temp in Fahrenheit"
|
"description": "Display temp in Fahrenheit"
|
||||||
},
|
},
|
||||||
"airQualityEnabled": {
|
"airQualityEnabled": {
|
||||||
"label": "Air Quality Enabled",
|
"label": "Air Quality Enabled",
|
||||||
"description": "Enable the Air Quality Telemetry"
|
"description": "Enable the Air Quality Telemetry"
|
||||||
},
|
},
|
||||||
"airQualityInterval": {
|
"airQualityInterval": {
|
||||||
"label": "Air Quality Update Interval",
|
"label": "Air Quality Update Interval",
|
||||||
"description": "How often to send Air Quality data over the mesh"
|
"description": "How often to send Air Quality data over the mesh"
|
||||||
},
|
},
|
||||||
"powerMeasurementEnabled": {
|
"powerMeasurementEnabled": {
|
||||||
"label": "Power Measurement Enabled",
|
"label": "Power Measurement Enabled",
|
||||||
"description": "Enable the Power Measurement Telemetry"
|
"description": "Enable the Power Measurement Telemetry"
|
||||||
},
|
},
|
||||||
"powerUpdateInterval": {
|
"powerUpdateInterval": {
|
||||||
"label": "Power Update Interval",
|
"label": "Power Update Interval",
|
||||||
"description": "How often to send Power data over the mesh"
|
"description": "How often to send Power data over the mesh"
|
||||||
},
|
},
|
||||||
"powerScreenEnabled": {
|
"powerScreenEnabled": {
|
||||||
"label": "Power Screen Enabled",
|
"label": "Power Screen Enabled",
|
||||||
"description": "Enable the Power Telemetry Screen"
|
"description": "Enable the Power Telemetry Screen"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,63 +1,63 @@
|
|||||||
{
|
{
|
||||||
"nodeDetail": {
|
"nodeDetail": {
|
||||||
"publicKeyEnabled": {
|
"publicKeyEnabled": {
|
||||||
"label": "Public Key Enabled"
|
"label": "Public Key Enabled"
|
||||||
},
|
},
|
||||||
"noPublicKey": {
|
"noPublicKey": {
|
||||||
"label": "No Public Key"
|
"label": "No Public Key"
|
||||||
},
|
},
|
||||||
"directMessage": {
|
"directMessage": {
|
||||||
"label": "Direct Message {{shortName}}"
|
"label": "Direct Message {{shortName}}"
|
||||||
},
|
},
|
||||||
"favorite": {
|
"favorite": {
|
||||||
"label": "Oblíbené",
|
"label": "Oblíbené",
|
||||||
"tooltip": "Add or remove this node from your favorites"
|
"tooltip": "Add or remove this node from your favorites"
|
||||||
},
|
},
|
||||||
"notFavorite": {
|
"notFavorite": {
|
||||||
"label": "Not a Favorite"
|
"label": "Not a Favorite"
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"label": "Chyba",
|
"label": "Chyba",
|
||||||
"text": "An error occurred while fetching node details. Please try again later."
|
"text": "An error occurred while fetching node details. Please try again later."
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"heard": "Heard",
|
"heard": "Heard",
|
||||||
"mqtt": "MQTT"
|
"mqtt": "MQTT"
|
||||||
},
|
},
|
||||||
"elevation": {
|
"elevation": {
|
||||||
"label": "Elevation"
|
"label": "Elevation"
|
||||||
},
|
},
|
||||||
"channelUtil": {
|
"channelUtil": {
|
||||||
"label": "Channel Util"
|
"label": "Channel Util"
|
||||||
},
|
},
|
||||||
"airtimeUtil": {
|
"airtimeUtil": {
|
||||||
"label": "Airtime Util"
|
"label": "Airtime Util"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nodesTable": {
|
"nodesTable": {
|
||||||
"headings": {
|
"headings": {
|
||||||
"longName": "Long Name",
|
"longName": "Long Name",
|
||||||
"connection": "Connection",
|
"connection": "Connection",
|
||||||
"lastHeard": "Last Heard",
|
"lastHeard": "Last Heard",
|
||||||
"encryption": "Encryption",
|
"encryption": "Encryption",
|
||||||
"model": "Model",
|
"model": "Model",
|
||||||
"macAddress": "MAC Address"
|
"macAddress": "MAC Address"
|
||||||
},
|
},
|
||||||
"connectionStatus": {
|
"connectionStatus": {
|
||||||
"direct": "Přímý",
|
"direct": "Přímý",
|
||||||
"away": "away",
|
"away": "away",
|
||||||
"unknown": "-",
|
"unknown": "-",
|
||||||
"viaMqtt": ", via MQTT"
|
"viaMqtt": ", via MQTT"
|
||||||
},
|
},
|
||||||
"lastHeardStatus": {
|
"lastHeardStatus": {
|
||||||
"never": "Never"
|
"never": "Never"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"actions": {
|
"actions": {
|
||||||
"added": "Added",
|
"added": "Added",
|
||||||
"removed": "Removed",
|
"removed": "Removed",
|
||||||
"ignoreNode": "Ignore Node",
|
"ignoreNode": "Ignore Node",
|
||||||
"unignoreNode": "Unignore Node",
|
"unignoreNode": "Unignore Node",
|
||||||
"requestPosition": "Request Position"
|
"requestPosition": "Request Position"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,228 +1,228 @@
|
|||||||
{
|
{
|
||||||
"navigation": {
|
"navigation": {
|
||||||
"title": "Navigation",
|
"title": "Navigation",
|
||||||
"messages": "Zprávy",
|
"messages": "Zprávy",
|
||||||
"map": "Mapa",
|
"map": "Mapa",
|
||||||
"config": "Config",
|
"config": "Config",
|
||||||
"radioConfig": "Radio Config",
|
"radioConfig": "Radio Config",
|
||||||
"moduleConfig": "Module Config",
|
"moduleConfig": "Module Config",
|
||||||
"channels": "Kanály",
|
"channels": "Kanály",
|
||||||
"nodes": "Uzly"
|
"nodes": "Uzly"
|
||||||
},
|
},
|
||||||
"app": {
|
"app": {
|
||||||
"title": "Meshtastic",
|
"title": "Meshtastic",
|
||||||
"logo": "Meshtastic Logo"
|
"logo": "Meshtastic Logo"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"collapseToggle": {
|
"collapseToggle": {
|
||||||
"button": {
|
"button": {
|
||||||
"open": "Open sidebar",
|
"open": "Open sidebar",
|
||||||
"close": "Close sidebar"
|
"close": "Close sidebar"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"deviceInfo": {
|
"deviceInfo": {
|
||||||
"volts": "{{voltage}} volts",
|
"volts": "{{voltage}} volts",
|
||||||
"firmware": {
|
"firmware": {
|
||||||
"title": "Firmware",
|
"title": "Firmware",
|
||||||
"version": "v{{version}}",
|
"version": "v{{version}}",
|
||||||
"buildDate": "Build date: {{date}}"
|
"buildDate": "Build date: {{date}}"
|
||||||
},
|
},
|
||||||
"deviceName": {
|
"deviceName": {
|
||||||
"title": "Device Name",
|
"title": "Device Name",
|
||||||
"changeName": "Change Device Name",
|
"changeName": "Change Device Name",
|
||||||
"placeholder": "Enter device name"
|
"placeholder": "Enter device name"
|
||||||
},
|
},
|
||||||
"editDeviceName": "Edit device name"
|
"editDeviceName": "Edit device name"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"batteryStatus": {
|
"batteryStatus": {
|
||||||
"charging": "{{level}}% charging",
|
"charging": "{{level}}% charging",
|
||||||
"pluggedIn": "Plugged in",
|
"pluggedIn": "Plugged in",
|
||||||
"title": "Baterie"
|
"title": "Baterie"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"nodes": "Search nodes...",
|
"nodes": "Search nodes...",
|
||||||
"channels": "Search channels...",
|
"channels": "Search channels...",
|
||||||
"commandPalette": "Search commands..."
|
"commandPalette": "Search commands..."
|
||||||
},
|
},
|
||||||
"toast": {
|
"toast": {
|
||||||
"positionRequestSent": {
|
"positionRequestSent": {
|
||||||
"title": "Position request sent."
|
"title": "Position request sent."
|
||||||
},
|
},
|
||||||
"requestingPosition": {
|
"requestingPosition": {
|
||||||
"title": "Requesting position, please wait..."
|
"title": "Requesting position, please wait..."
|
||||||
},
|
},
|
||||||
"sendingTraceroute": {
|
"sendingTraceroute": {
|
||||||
"title": "Sending Traceroute, please wait..."
|
"title": "Sending Traceroute, please wait..."
|
||||||
},
|
},
|
||||||
"tracerouteSent": {
|
"tracerouteSent": {
|
||||||
"title": "Traceroute sent."
|
"title": "Traceroute sent."
|
||||||
},
|
},
|
||||||
"savedChannel": {
|
"savedChannel": {
|
||||||
"title": "Saved Channel: {{channelName}}"
|
"title": "Saved Channel: {{channelName}}"
|
||||||
},
|
},
|
||||||
"messages": {
|
"messages": {
|
||||||
"pkiEncryption": {
|
"pkiEncryption": {
|
||||||
"title": "Chat is using PKI encryption."
|
"title": "Chat is using PKI encryption."
|
||||||
},
|
},
|
||||||
"pskEncryption": {
|
"pskEncryption": {
|
||||||
"title": "Chat is using PSK encryption."
|
"title": "Chat is using PSK encryption."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"configSaveError": {
|
"configSaveError": {
|
||||||
"title": "Error Saving Config",
|
"title": "Error Saving Config",
|
||||||
"description": "An error occurred while saving the configuration."
|
"description": "An error occurred while saving the configuration."
|
||||||
},
|
},
|
||||||
"validationError": {
|
"validationError": {
|
||||||
"title": "Config Errors Exist",
|
"title": "Config Errors Exist",
|
||||||
"description": "Please fix the configuration errors before saving."
|
"description": "Please fix the configuration errors before saving."
|
||||||
},
|
},
|
||||||
"saveSuccess": {
|
"saveSuccess": {
|
||||||
"title": "Saving Config",
|
"title": "Saving Config",
|
||||||
"description": "The configuration change {{case}} has been saved."
|
"description": "The configuration change {{case}} has been saved."
|
||||||
},
|
},
|
||||||
"favoriteNode": {
|
"favoriteNode": {
|
||||||
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
|
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
|
||||||
"action": {
|
"action": {
|
||||||
"added": "Added",
|
"added": "Added",
|
||||||
"removed": "Removed",
|
"removed": "Removed",
|
||||||
"to": "to",
|
"to": "to",
|
||||||
"from": "from"
|
"from": "from"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ignoreNode": {
|
"ignoreNode": {
|
||||||
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
|
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
|
||||||
"action": {
|
"action": {
|
||||||
"added": "Added",
|
"added": "Added",
|
||||||
"removed": "Removed",
|
"removed": "Removed",
|
||||||
"to": "to",
|
"to": "to",
|
||||||
"from": "from"
|
"from": "from"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"copied": {
|
"copied": {
|
||||||
"label": "Copied!"
|
"label": "Copied!"
|
||||||
},
|
},
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"label": "Copy to clipboard"
|
"label": "Copy to clipboard"
|
||||||
},
|
},
|
||||||
"hidePassword": {
|
"hidePassword": {
|
||||||
"label": "Skrýt heslo"
|
"label": "Skrýt heslo"
|
||||||
},
|
},
|
||||||
"showPassword": {
|
"showPassword": {
|
||||||
"label": "Zobrazit heslo"
|
"label": "Zobrazit heslo"
|
||||||
},
|
},
|
||||||
"deliveryStatus": {
|
"deliveryStatus": {
|
||||||
"delivered": "Delivered",
|
"delivered": "Delivered",
|
||||||
"failed": "Delivery Failed",
|
"failed": "Delivery Failed",
|
||||||
"waiting": "Waiting",
|
"waiting": "Waiting",
|
||||||
"unknown": "Unknown"
|
"unknown": "Unknown"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"general": {
|
"general": {
|
||||||
"label": "General"
|
"label": "General"
|
||||||
},
|
},
|
||||||
"hardware": {
|
"hardware": {
|
||||||
"label": "Hardware"
|
"label": "Hardware"
|
||||||
},
|
},
|
||||||
"metrics": {
|
"metrics": {
|
||||||
"label": "Metriky"
|
"label": "Metriky"
|
||||||
},
|
},
|
||||||
"role": {
|
"role": {
|
||||||
"label": "Role"
|
"label": "Role"
|
||||||
},
|
},
|
||||||
"filter": {
|
"filter": {
|
||||||
"label": "Filtr"
|
"label": "Filtr"
|
||||||
},
|
},
|
||||||
"advanced": {
|
"advanced": {
|
||||||
"label": "Advanced"
|
"label": "Advanced"
|
||||||
},
|
},
|
||||||
"clearInput": {
|
"clearInput": {
|
||||||
"label": "Clear input"
|
"label": "Clear input"
|
||||||
},
|
},
|
||||||
"resetFilters": {
|
"resetFilters": {
|
||||||
"label": "Reset Filters"
|
"label": "Reset Filters"
|
||||||
},
|
},
|
||||||
"nodeName": {
|
"nodeName": {
|
||||||
"label": "Node name/number",
|
"label": "Node name/number",
|
||||||
"placeholder": "Meshtastic 1234"
|
"placeholder": "Meshtastic 1234"
|
||||||
},
|
},
|
||||||
"airtimeUtilization": {
|
"airtimeUtilization": {
|
||||||
"label": "Airtime Utilization (%)"
|
"label": "Airtime Utilization (%)"
|
||||||
},
|
},
|
||||||
"batteryLevel": {
|
"batteryLevel": {
|
||||||
"label": "Battery level (%)",
|
"label": "Battery level (%)",
|
||||||
"labelText": "Battery level (%): {{value}}"
|
"labelText": "Battery level (%): {{value}}"
|
||||||
},
|
},
|
||||||
"batteryVoltage": {
|
"batteryVoltage": {
|
||||||
"label": "Battery voltage (V)",
|
"label": "Battery voltage (V)",
|
||||||
"title": "Napětí"
|
"title": "Napětí"
|
||||||
},
|
},
|
||||||
"channelUtilization": {
|
"channelUtilization": {
|
||||||
"label": "Channel Utilization (%)"
|
"label": "Channel Utilization (%)"
|
||||||
},
|
},
|
||||||
"hops": {
|
"hops": {
|
||||||
"direct": "Přímý",
|
"direct": "Přímý",
|
||||||
"label": "Number of hops",
|
"label": "Number of hops",
|
||||||
"text": "Number of hops: {{value}}"
|
"text": "Number of hops: {{value}}"
|
||||||
},
|
},
|
||||||
"lastHeard": {
|
"lastHeard": {
|
||||||
"label": "Naposledy slyšen",
|
"label": "Naposledy slyšen",
|
||||||
"labelText": "Last heard: {{value}}",
|
"labelText": "Last heard: {{value}}",
|
||||||
"nowLabel": "Now"
|
"nowLabel": "Now"
|
||||||
},
|
},
|
||||||
"snr": {
|
"snr": {
|
||||||
"label": "SNR (db)"
|
"label": "SNR (db)"
|
||||||
},
|
},
|
||||||
"favorites": {
|
"favorites": {
|
||||||
"label": "Favorites"
|
"label": "Favorites"
|
||||||
},
|
},
|
||||||
"hide": {
|
"hide": {
|
||||||
"label": "Hide"
|
"label": "Hide"
|
||||||
},
|
},
|
||||||
"showOnly": {
|
"showOnly": {
|
||||||
"label": "Show Only"
|
"label": "Show Only"
|
||||||
},
|
},
|
||||||
"viaMqtt": {
|
"viaMqtt": {
|
||||||
"label": "Connected via MQTT"
|
"label": "Connected via MQTT"
|
||||||
},
|
},
|
||||||
"hopsUnknown": {
|
"hopsUnknown": {
|
||||||
"label": "Unknown number of hops"
|
"label": "Unknown number of hops"
|
||||||
},
|
},
|
||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Never heard"
|
"label": "Never heard"
|
||||||
},
|
},
|
||||||
"language": {
|
"language": {
|
||||||
"label": "Jazyk",
|
"label": "Jazyk",
|
||||||
"changeLanguage": "Change Language"
|
"changeLanguage": "Change Language"
|
||||||
},
|
},
|
||||||
"theme": {
|
"theme": {
|
||||||
"dark": "Tmavý",
|
"dark": "Tmavý",
|
||||||
"light": "Světlý",
|
"light": "Světlý",
|
||||||
"system": "Automatic",
|
"system": "Automatic",
|
||||||
"changeTheme": "Change Color Scheme"
|
"changeTheme": "Change Color Scheme"
|
||||||
},
|
},
|
||||||
"errorPage": {
|
"errorPage": {
|
||||||
"title": "This is a little embarrassing...",
|
"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.",
|
"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.",
|
"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:",
|
"reportInstructions": "Please include the following information in your report:",
|
||||||
"reportSteps": {
|
"reportSteps": {
|
||||||
"step1": "What you were doing when the error occurred",
|
"step1": "What you were doing when the error occurred",
|
||||||
"step2": "What you expected to happen",
|
"step2": "What you expected to happen",
|
||||||
"step3": "What actually happened",
|
"step3": "What actually happened",
|
||||||
"step4": "Any other relevant information"
|
"step4": "Any other relevant information"
|
||||||
},
|
},
|
||||||
"reportLink": "You can report the issue to our <0>GitHub</0>",
|
"reportLink": "You can report the issue to our <0>GitHub</0>",
|
||||||
"dashboardLink": "Return to the <0>dashboard</0>",
|
"dashboardLink": "Return to the <0>dashboard</0>",
|
||||||
"detailsSummary": "Error Details",
|
"detailsSummary": "Error Details",
|
||||||
"errorMessageLabel": "Error message:",
|
"errorMessageLabel": "Error message:",
|
||||||
"stackTraceLabel": "Stack trace:",
|
"stackTraceLabel": "Stack trace:",
|
||||||
"fallbackError": "{{error}}"
|
"fallbackError": "{{error}}"
|
||||||
},
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® is a registered trademark of Meshtastic LLC. | <1>Legal Information</1>",
|
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® is a registered trademark of Meshtastic LLC. | <1>Legal Information</1>",
|
||||||
"commitSha": "Commit SHA: {{sha}}"
|
"commitSha": "Commit SHA: {{sha}}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,69 +1,69 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"sectionLabel": "Kanäle",
|
"sectionLabel": "Kanäle",
|
||||||
"channelName": "Kanal {{channelName}}",
|
"channelName": "Kanal {{channelName}}",
|
||||||
"broadcastLabel": "Primär",
|
"broadcastLabel": "Primär",
|
||||||
"channelIndex": "Kanal {{index}}"
|
"channelIndex": "Kanal {{index}}"
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"pskInvalid": "Bitte geben Sie einen gültigen {{bits}} Bit PSK Schlüssel ein."
|
"pskInvalid": "Bitte geben Sie einen gültigen {{bits}} Bit PSK Schlüssel ein."
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"label": "Kanaleinstellungen",
|
"label": "Kanaleinstellungen",
|
||||||
"description": "Verschlüsselung, MQTT & sonstige Einstellungen"
|
"description": "Verschlüsselung, MQTT & sonstige Einstellungen"
|
||||||
},
|
},
|
||||||
"role": {
|
"role": {
|
||||||
"label": "Rolle",
|
"label": "Rolle",
|
||||||
"description": "Gerätetelemetrie wird über den PRIMÄR Kanal gesendet. Nur ein PRIMÄR Kanal ist erlaubt.",
|
"description": "Gerätetelemetrie wird über den PRIMÄR Kanal gesendet. Nur ein PRIMÄR Kanal ist erlaubt.",
|
||||||
"options": {
|
"options": {
|
||||||
"primary": "PRIMÄR",
|
"primary": "PRIMÄR",
|
||||||
"disabled": "DEAKTIVIERT",
|
"disabled": "DEAKTIVIERT",
|
||||||
"secondary": "SEKUNDÄR"
|
"secondary": "SEKUNDÄR"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"psk": {
|
"psk": {
|
||||||
"label": "Vorher verteilter Schlüssel",
|
"label": "Vorher verteilter Schlüssel",
|
||||||
"description": "Unterstützte PSK-Längen: 256-Bit, 128-Bit, 8-Bit, leer (0-Bit)",
|
"description": "Unterstützte PSK-Längen: 256-Bit, 128-Bit, 8-Bit, leer (0-Bit)",
|
||||||
"generate": "Erzeugen"
|
"generate": "Erzeugen"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"label": "Name",
|
"label": "Name",
|
||||||
"description": "Ein eindeutiger Name für den Kanal <12 Bytes. Leer lassen für Standard."
|
"description": "Ein eindeutiger Name für den Kanal <12 Bytes. Leer lassen für Standard."
|
||||||
},
|
},
|
||||||
"uplinkEnabled": {
|
"uplinkEnabled": {
|
||||||
"label": "Uplink aktiviert",
|
"label": "Uplink aktiviert",
|
||||||
"description": "Nachrichten vom lokalen Netz über MQTT versenden"
|
"description": "Nachrichten vom lokalen Netz über MQTT versenden"
|
||||||
},
|
},
|
||||||
"downlinkEnabled": {
|
"downlinkEnabled": {
|
||||||
"label": "Downlink aktiviert",
|
"label": "Downlink aktiviert",
|
||||||
"description": "Nachrichten von MQTT im lokalen Netz versenden"
|
"description": "Nachrichten von MQTT im lokalen Netz versenden"
|
||||||
},
|
},
|
||||||
"positionPrecision": {
|
"positionPrecision": {
|
||||||
"label": "Standort",
|
"label": "Standort",
|
||||||
"description": "Die Genauigkeit des Standorts, die in diesem Kanal geteilt werden soll. Kann deaktiviert werden.",
|
"description": "Die Genauigkeit des Standorts, die in diesem Kanal geteilt werden soll. Kann deaktiviert werden.",
|
||||||
"options": {
|
"options": {
|
||||||
"none": "Standort nicht freigeben",
|
"none": "Standort nicht freigeben",
|
||||||
"precise": "Genauer Standort",
|
"precise": "Genauer Standort",
|
||||||
"metric_km23": "Innerhalb von 23 Kilometern",
|
"metric_km23": "Innerhalb von 23 Kilometern",
|
||||||
"metric_km12": "Innerhalb von 12 Kilometern",
|
"metric_km12": "Innerhalb von 12 Kilometern",
|
||||||
"metric_km5_8": "Innerhalb von 5,8 Kilometern",
|
"metric_km5_8": "Innerhalb von 5,8 Kilometern",
|
||||||
"metric_km2_9": "Innerhalb von 2,9 Kilometern",
|
"metric_km2_9": "Innerhalb von 2,9 Kilometern",
|
||||||
"metric_km1_5": "Innerhalb von 1,5 Kilometern",
|
"metric_km1_5": "Innerhalb von 1,5 Kilometern",
|
||||||
"metric_m700": "Innerhalb von 700 Metern",
|
"metric_m700": "Innerhalb von 700 Metern",
|
||||||
"metric_m350": "Innerhalb von 350 Metern",
|
"metric_m350": "Innerhalb von 350 Metern",
|
||||||
"metric_m200": "Innerhalb von 200 Metern",
|
"metric_m200": "Innerhalb von 200 Metern",
|
||||||
"metric_m90": "Innerhalb von 90 Metern",
|
"metric_m90": "Innerhalb von 90 Metern",
|
||||||
"metric_m50": "Innerhalb von 50 Metern",
|
"metric_m50": "Innerhalb von 50 Metern",
|
||||||
"imperial_mi15": "Innerhalb von 15 Meilen",
|
"imperial_mi15": "Innerhalb von 15 Meilen",
|
||||||
"imperial_mi7_3": "Innerhalb von 7,3 Meilen",
|
"imperial_mi7_3": "Innerhalb von 7,3 Meilen",
|
||||||
"imperial_mi3_6": "Innerhalb von 3,6 Meilen",
|
"imperial_mi3_6": "Innerhalb von 3,6 Meilen",
|
||||||
"imperial_mi1_8": "Innerhalb von 1,8 Meilen",
|
"imperial_mi1_8": "Innerhalb von 1,8 Meilen",
|
||||||
"imperial_mi0_9": "Innerhalb von 0,9 Meilen",
|
"imperial_mi0_9": "Innerhalb von 0,9 Meilen",
|
||||||
"imperial_mi0_5": "Innerhalb von 0,5 Meilen",
|
"imperial_mi0_5": "Innerhalb von 0,5 Meilen",
|
||||||
"imperial_mi0_2": "Innerhalb von 0,2 Meilen",
|
"imperial_mi0_2": "Innerhalb von 0,2 Meilen",
|
||||||
"imperial_ft600": "Innerhalb von 600 Fuß",
|
"imperial_ft600": "Innerhalb von 600 Fuß",
|
||||||
"imperial_ft300": "Innerhalb von 300 Fuß",
|
"imperial_ft300": "Innerhalb von 300 Fuß",
|
||||||
"imperial_ft150": "Innerhalb von 150 Fuß"
|
"imperial_ft150": "Innerhalb von 150 Fuß"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,50 +1,50 @@
|
|||||||
{
|
{
|
||||||
"emptyState": "Keine Ergebnisse gefunden.",
|
"emptyState": "Keine Ergebnisse gefunden.",
|
||||||
"page": {
|
"page": {
|
||||||
"title": "Befehlsmenü"
|
"title": "Befehlsmenü"
|
||||||
},
|
},
|
||||||
"pinGroup": {
|
"pinGroup": {
|
||||||
"label": "Befehlsgruppe anheften"
|
"label": "Befehlsgruppe anheften"
|
||||||
},
|
},
|
||||||
"unpinGroup": {
|
"unpinGroup": {
|
||||||
"label": "Befehlsgruppe lösen"
|
"label": "Befehlsgruppe lösen"
|
||||||
},
|
},
|
||||||
"goto": {
|
"goto": {
|
||||||
"label": "Gehe zu",
|
"label": "Gehe zu",
|
||||||
"command": {
|
"command": {
|
||||||
"messages": "Nachrichten",
|
"messages": "Nachrichten",
|
||||||
"map": "Karte",
|
"map": "Karte",
|
||||||
"config": "Einstellungen",
|
"config": "Einstellungen",
|
||||||
"channels": "Kanäle",
|
"channels": "Kanäle",
|
||||||
"nodes": "Knoten"
|
"nodes": "Knoten"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manage": {
|
"manage": {
|
||||||
"label": "Verwalten",
|
"label": "Verwalten",
|
||||||
"command": {
|
"command": {
|
||||||
"switchNode": "Knoten wechseln",
|
"switchNode": "Knoten wechseln",
|
||||||
"connectNewNode": "Neuen Knoten verbinden"
|
"connectNewNode": "Neuen Knoten verbinden"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"contextual": {
|
"contextual": {
|
||||||
"label": "Kontextabhängig",
|
"label": "Kontextabhängig",
|
||||||
"command": {
|
"command": {
|
||||||
"qrCode": "QR Code",
|
"qrCode": "QR Code",
|
||||||
"qrGenerator": "Generator",
|
"qrGenerator": "Generator",
|
||||||
"qrImport": "Importieren",
|
"qrImport": "Importieren",
|
||||||
"scheduleShutdown": "Herunterfahren planen",
|
"scheduleShutdown": "Herunterfahren planen",
|
||||||
"scheduleReboot": "Neustarten planen",
|
"scheduleReboot": "Neustarten planen",
|
||||||
"rebootToOtaMode": "Neustart in den OTA Modus",
|
"rebootToOtaMode": "Neustart in den OTA Modus",
|
||||||
"resetNodeDb": "Knotendatenbank zurücksetzen",
|
"resetNodeDb": "Knotendatenbank zurücksetzen",
|
||||||
"factoryResetDevice": "Gerät auf Werkseinstellungen zurücksetzen",
|
"factoryResetDevice": "Gerät auf Werkseinstellungen zurücksetzen",
|
||||||
"factoryResetConfig": "Auf Werkseinstellungen zurücksetzen"
|
"factoryResetConfig": "Auf Werkseinstellungen zurücksetzen"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"debug": {
|
"debug": {
|
||||||
"label": "Debug",
|
"label": "Debug",
|
||||||
"command": {
|
"command": {
|
||||||
"reconfigure": "Neu einrichten",
|
"reconfigure": "Neu einrichten",
|
||||||
"clearAllStoredMessages": "Alle gespeicherten Nachrichten löschen"
|
"clearAllStoredMessages": "Alle gespeicherten Nachrichten löschen"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,141 +1,141 @@
|
|||||||
{
|
{
|
||||||
"button": {
|
"button": {
|
||||||
"apply": "Anwenden",
|
"apply": "Anwenden",
|
||||||
"backupKey": "Schlüssel sichern",
|
"backupKey": "Schlüssel sichern",
|
||||||
"cancel": "Abbrechen",
|
"cancel": "Abbrechen",
|
||||||
"clearMessages": "Nachrichten löschen",
|
"clearMessages": "Nachrichten löschen",
|
||||||
"close": "Schließen",
|
"close": "Schließen",
|
||||||
"confirm": "Bestätigen",
|
"confirm": "Bestätigen",
|
||||||
"delete": "Löschen",
|
"delete": "Löschen",
|
||||||
"dismiss": "Tastatur ausblenden",
|
"dismiss": "Tastatur ausblenden",
|
||||||
"download": "Herunterladen",
|
"download": "Herunterladen",
|
||||||
"export": "Exportieren",
|
"export": "Exportieren",
|
||||||
"generate": "Erzeugen",
|
"generate": "Erzeugen",
|
||||||
"regenerate": "Neu erzeugen",
|
"regenerate": "Neu erzeugen",
|
||||||
"import": "Importieren",
|
"import": "Importieren",
|
||||||
"message": "Nachricht",
|
"message": "Nachricht",
|
||||||
"now": "Jetzt",
|
"now": "Jetzt",
|
||||||
"ok": "Ok",
|
"ok": "Ok",
|
||||||
"print": "Drucken",
|
"print": "Drucken",
|
||||||
"rebootOtaNow": "Neustart in den OTA Modus",
|
"rebootOtaNow": "Neustart in den OTA Modus",
|
||||||
"remove": "Entfernen",
|
"remove": "Entfernen",
|
||||||
"requestNewKeys": "Neue Schlüssel anfordern",
|
"requestNewKeys": "Neue Schlüssel anfordern",
|
||||||
"requestPosition": "Standort anfordern",
|
"requestPosition": "Standort anfordern",
|
||||||
"reset": "Zurücksetzen",
|
"reset": "Zurücksetzen",
|
||||||
"save": "Speichern",
|
"save": "Speichern",
|
||||||
"scanQr": "QR Code scannen",
|
"scanQr": "QR Code scannen",
|
||||||
"traceRoute": "Route verfolgen",
|
"traceRoute": "Route verfolgen",
|
||||||
"submit": "Absenden"
|
"submit": "Absenden"
|
||||||
},
|
},
|
||||||
"app": {
|
"app": {
|
||||||
"title": "Meshtastic",
|
"title": "Meshtastic",
|
||||||
"fullTitle": "Meshtastic Web-Applikation"
|
"fullTitle": "Meshtastic Web-Applikation"
|
||||||
},
|
},
|
||||||
"loading": "Wird geladen...",
|
"loading": "Wird geladen...",
|
||||||
"unit": {
|
"unit": {
|
||||||
"cps": "CPS",
|
"cps": "CPS",
|
||||||
"dbm": "dBm",
|
"dbm": "dBm",
|
||||||
"hertz": "Hz",
|
"hertz": "Hz",
|
||||||
"hop": {
|
"hop": {
|
||||||
"one": "Sprung",
|
"one": "Sprung",
|
||||||
"plural": "Sprünge"
|
"plural": "Sprünge"
|
||||||
},
|
},
|
||||||
"hopsAway": {
|
"hopsAway": {
|
||||||
"one": "{{count}} Sprung entfernt",
|
"one": "{{count}} Sprung entfernt",
|
||||||
"plural": "{{count}} Sprünge entfernt",
|
"plural": "{{count}} Sprünge entfernt",
|
||||||
"unknown": "Sprungweite unbekannt"
|
"unknown": "Sprungweite unbekannt"
|
||||||
},
|
},
|
||||||
"megahertz": "MHz",
|
"megahertz": "MHz",
|
||||||
"raw": "Einheitslos",
|
"raw": "Einheitslos",
|
||||||
"meter": {
|
"meter": {
|
||||||
"one": "Meter",
|
"one": "Meter",
|
||||||
"plural": "Meter",
|
"plural": "Meter",
|
||||||
"suffix": "m"
|
"suffix": "m"
|
||||||
},
|
},
|
||||||
"minute": {
|
"minute": {
|
||||||
"one": "Minute",
|
"one": "Minute",
|
||||||
"plural": "Minuten"
|
"plural": "Minuten"
|
||||||
},
|
},
|
||||||
"hour": {
|
"hour": {
|
||||||
"one": "Stunde",
|
"one": "Stunde",
|
||||||
"plural": "Stunden"
|
"plural": "Stunden"
|
||||||
},
|
},
|
||||||
"millisecond": {
|
"millisecond": {
|
||||||
"one": "Millisekunde",
|
"one": "Millisekunde",
|
||||||
"plural": "Millisekunden",
|
"plural": "Millisekunden",
|
||||||
"suffix": "ms"
|
"suffix": "ms"
|
||||||
},
|
},
|
||||||
"second": {
|
"second": {
|
||||||
"one": "Sekunde",
|
"one": "Sekunde",
|
||||||
"plural": "Sekunden"
|
"plural": "Sekunden"
|
||||||
},
|
},
|
||||||
"day": {
|
"day": {
|
||||||
"one": "Tag",
|
"one": "Tag",
|
||||||
"plural": "Tage"
|
"plural": "Tage"
|
||||||
},
|
},
|
||||||
"month": {
|
"month": {
|
||||||
"one": "Monat",
|
"one": "Monat",
|
||||||
"plural": "Monate"
|
"plural": "Monate"
|
||||||
},
|
},
|
||||||
"year": {
|
"year": {
|
||||||
"one": "Jahr",
|
"one": "Jahr",
|
||||||
"plural": "Jahre"
|
"plural": "Jahre"
|
||||||
},
|
},
|
||||||
"snr": "SNR",
|
"snr": "SNR",
|
||||||
"volt": {
|
"volt": {
|
||||||
"one": "Volt",
|
"one": "Volt",
|
||||||
"plural": "Volt",
|
"plural": "Volt",
|
||||||
"suffix": "V"
|
"suffix": "V"
|
||||||
},
|
},
|
||||||
"record": {
|
"record": {
|
||||||
"one": "Datensatz",
|
"one": "Datensatz",
|
||||||
"plural": "Datensätze"
|
"plural": "Datensätze"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"0bit": "Leer",
|
"0bit": "Leer",
|
||||||
"8bit": "8 Bit",
|
"8bit": "8 Bit",
|
||||||
"128bit": "128 Bit",
|
"128bit": "128 Bit",
|
||||||
"256bit": "256 Bit"
|
"256bit": "256 Bit"
|
||||||
},
|
},
|
||||||
"unknown": {
|
"unknown": {
|
||||||
"longName": "Unbekannt",
|
"longName": "Unbekannt",
|
||||||
"shortName": "UNB",
|
"shortName": "UNB",
|
||||||
"notAvailable": "Keine Angaben",
|
"notAvailable": "Keine Angaben",
|
||||||
"num": "???"
|
"num": "???"
|
||||||
},
|
},
|
||||||
"nodeUnknownPrefix": "!",
|
"nodeUnknownPrefix": "!",
|
||||||
"unset": "NICHT GESETZT",
|
"unset": "NICHT GESETZT",
|
||||||
"fallbackName": "Meshtastic {{last4}}",
|
"fallbackName": "Meshtastic {{last4}}",
|
||||||
"node": "Knoten",
|
"node": "Knoten",
|
||||||
"formValidation": {
|
"formValidation": {
|
||||||
"unsavedChanges": "Ungespeicherte Änderungen",
|
"unsavedChanges": "Ungespeicherte Änderungen",
|
||||||
"tooBig": {
|
"tooBig": {
|
||||||
"string": "Zu lang, erwarte maximal {{maximum}} Zeichen.",
|
"string": "Zu lang, erwarte maximal {{maximum}} Zeichen.",
|
||||||
"number": "Zu groß, erwartete eine Zahl kleiner oder gleich {{maximum}}.",
|
"number": "Zu groß, erwartete eine Zahl kleiner oder gleich {{maximum}}.",
|
||||||
"bytes": "Zu groß, erwarte maximal {{params.maximum}} Bytes."
|
"bytes": "Zu groß, erwarte maximal {{params.maximum}} Bytes."
|
||||||
},
|
},
|
||||||
"tooSmall": {
|
"tooSmall": {
|
||||||
"string": "Zu kurz, erwartete mindestens {{minimum}} Zeichen.",
|
"string": "Zu kurz, erwartete mindestens {{minimum}} Zeichen.",
|
||||||
"number": "Zu klein, erwartete eine Zahl größer oder gleich {{minimum}}."
|
"number": "Zu klein, erwartete eine Zahl größer oder gleich {{minimum}}."
|
||||||
},
|
},
|
||||||
"invalidFormat": {
|
"invalidFormat": {
|
||||||
"ipv4": "Ungültiges Format, erwartete eine IPv4 Adresse.",
|
"ipv4": "Ungültiges Format, erwartete eine IPv4 Adresse.",
|
||||||
"key": "Ungültiges Format, erwartet einen Base64-kodierten vor verteilten Schlüssel (PSK)."
|
"key": "Ungültiges Format, erwartet einen Base64-kodierten vor verteilten Schlüssel (PSK)."
|
||||||
},
|
},
|
||||||
"invalidType": {
|
"invalidType": {
|
||||||
"number": "Ungültiger Typ, erwartete eine Zahl."
|
"number": "Ungültiger Typ, erwartete eine Zahl."
|
||||||
},
|
},
|
||||||
"pskLength": {
|
"pskLength": {
|
||||||
"0bit": "Der Schlüssel muss leer sein.",
|
"0bit": "Der Schlüssel muss leer sein.",
|
||||||
"8bit": "Der administrative Schlüssel muss ein vor verteilter 8 Bit Schlüssel (PSK) 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.",
|
"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."
|
"256bit": "Der administrative Schlüssel muss ein vor verteilter 256 Bit Schlüssel (PSK) sein."
|
||||||
},
|
},
|
||||||
"required": {
|
"required": {
|
||||||
"generic": "Dies ist ein Pflichtfeld.",
|
"generic": "Dies ist ein Pflichtfeld.",
|
||||||
"managed": "Mindestens ein administrativer Schlüssel wird benötigt, um diesen Knoten zu verwalten",
|
"managed": "Mindestens ein administrativer Schlüssel wird benötigt, um diesen Knoten zu verwalten",
|
||||||
"key": "Schlüssel erforderlich."
|
"key": "Schlüssel erforderlich."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
"title": "Verbundene Geräte",
|
"title": "Verbundene Geräte",
|
||||||
"description": "Verwalten Sie Ihre verbundenen Meshtastic Geräte.",
|
"description": "Verwalten Sie Ihre verbundenen Meshtastic Geräte.",
|
||||||
"connectionType_ble": "BLE",
|
"connectionType_ble": "BLE",
|
||||||
"connectionType_serial": "Seriell",
|
"connectionType_serial": "Seriell",
|
||||||
"connectionType_network": "Netzwerk",
|
"connectionType_network": "Netzwerk",
|
||||||
"noDevicesTitle": "Keine Geräte verbunden",
|
"noDevicesTitle": "Keine Geräte verbunden",
|
||||||
"noDevicesDescription": "Verbinden Sie ein neues Gerät, um zu beginnen.",
|
"noDevicesDescription": "Verbinden Sie ein neues Gerät, um zu beginnen.",
|
||||||
"button_newConnection": "Neue Verbindung"
|
"button_newConnection": "Neue Verbindung"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,428 +1,428 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"title": "Einstellungen",
|
"title": "Einstellungen",
|
||||||
"tabBluetooth": "Bluetooth",
|
"tabBluetooth": "Bluetooth",
|
||||||
"tabDevice": "Gerät",
|
"tabDevice": "Gerät",
|
||||||
"tabDisplay": "Display",
|
"tabDisplay": "Display",
|
||||||
"tabLora": "LoRa",
|
"tabLora": "LoRa",
|
||||||
"tabNetwork": "Netzwerk",
|
"tabNetwork": "Netzwerk",
|
||||||
"tabPosition": "Standort",
|
"tabPosition": "Standort",
|
||||||
"tabPower": "Leistung",
|
"tabPower": "Leistung",
|
||||||
"tabSecurity": "Sicherheit"
|
"tabSecurity": "Sicherheit"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"label": "Module"
|
"label": "Module"
|
||||||
},
|
},
|
||||||
"device": {
|
"device": {
|
||||||
"title": "Geräteeinstellungen",
|
"title": "Geräteeinstellungen",
|
||||||
"description": "Einstellungen für dieses Gerät",
|
"description": "Einstellungen für dieses Gerät",
|
||||||
"buttonPin": {
|
"buttonPin": {
|
||||||
"description": "GPIO für Taste überschreiben",
|
"description": "GPIO für Taste überschreiben",
|
||||||
"label": "GPIO Taste"
|
"label": "GPIO Taste"
|
||||||
},
|
},
|
||||||
"buzzerPin": {
|
"buzzerPin": {
|
||||||
"description": "GPIO für Summer überschreiben",
|
"description": "GPIO für Summer überschreiben",
|
||||||
"label": "GPIO Summer"
|
"label": "GPIO Summer"
|
||||||
},
|
},
|
||||||
"disableTripleClick": {
|
"disableTripleClick": {
|
||||||
"description": "Dreifachklicken deaktivieren",
|
"description": "Dreifachklicken deaktivieren",
|
||||||
"label": "Dreifachklicken deaktivieren"
|
"label": "Dreifachklicken deaktivieren"
|
||||||
},
|
},
|
||||||
"doubleTapAsButtonPress": {
|
"doubleTapAsButtonPress": {
|
||||||
"description": "Doppeltes Tippen als Taste verwenden",
|
"description": "Doppeltes Tippen als Taste verwenden",
|
||||||
"label": "Doppelklick als Tastendruck"
|
"label": "Doppelklick als Tastendruck"
|
||||||
},
|
},
|
||||||
"ledHeartbeatDisabled": {
|
"ledHeartbeatDisabled": {
|
||||||
"description": "Die Herzschlag LED deaktivieren",
|
"description": "Die Herzschlag LED deaktivieren",
|
||||||
"label": "Herzschlag LED deaktivieren"
|
"label": "Herzschlag LED deaktivieren"
|
||||||
},
|
},
|
||||||
"nodeInfoBroadcastInterval": {
|
"nodeInfoBroadcastInterval": {
|
||||||
"description": "Häufigkeit der Übertragung von Knoteninformationen",
|
"description": "Häufigkeit der Übertragung von Knoteninformationen",
|
||||||
"label": "Knoteninfo Übertragungsintervall"
|
"label": "Knoteninfo Übertragungsintervall"
|
||||||
},
|
},
|
||||||
"posixTimezone": {
|
"posixTimezone": {
|
||||||
"description": "Zeichenfolge der POSIX Zeitzone für dieses Gerät",
|
"description": "Zeichenfolge der POSIX Zeitzone für dieses Gerät",
|
||||||
"label": "POSIX Zeitzone"
|
"label": "POSIX Zeitzone"
|
||||||
},
|
},
|
||||||
"rebroadcastMode": {
|
"rebroadcastMode": {
|
||||||
"description": "Wie Weiterleitungen behandelt werden",
|
"description": "Wie Weiterleitungen behandelt werden",
|
||||||
"label": "Weiterleitungsmodus"
|
"label": "Weiterleitungsmodus"
|
||||||
},
|
},
|
||||||
"role": {
|
"role": {
|
||||||
"description": "In welche Rolle das Gerät im Netz arbeitet",
|
"description": "In welche Rolle das Gerät im Netz arbeitet",
|
||||||
"label": "Rolle"
|
"label": "Rolle"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"bluetooth": {
|
"bluetooth": {
|
||||||
"title": "Bluetooth Einstellungen",
|
"title": "Bluetooth Einstellungen",
|
||||||
"description": "Einstellungen für das Bluetooth Modul",
|
"description": "Einstellungen für das Bluetooth Modul",
|
||||||
"note": "Hinweis: Einige Geräte (ESP32) können nicht gleichzeitig Bluetooth und WLAN verwenden.",
|
"note": "Hinweis: Einige Geräte (ESP32) können nicht gleichzeitig Bluetooth und WLAN verwenden.",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"description": "Bluetooth aktivieren oder deaktivieren",
|
"description": "Bluetooth aktivieren oder deaktivieren",
|
||||||
"label": "Aktiviert"
|
"label": "Aktiviert"
|
||||||
},
|
},
|
||||||
"pairingMode": {
|
"pairingMode": {
|
||||||
"description": "PIN Nummer Auswahlverhalten",
|
"description": "PIN Nummer Auswahlverhalten",
|
||||||
"label": "Kopplungsmodus"
|
"label": "Kopplungsmodus"
|
||||||
},
|
},
|
||||||
"pin": {
|
"pin": {
|
||||||
"description": "PIN Nummer zum Verbinden verwenden",
|
"description": "PIN Nummer zum Verbinden verwenden",
|
||||||
"label": "PIN Nummer"
|
"label": "PIN Nummer"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"display": {
|
"display": {
|
||||||
"description": "Einstellungen für die Geräteanzeige",
|
"description": "Einstellungen für die Geräteanzeige",
|
||||||
"title": "Anzeigeeinstellungen",
|
"title": "Anzeigeeinstellungen",
|
||||||
"headingBold": {
|
"headingBold": {
|
||||||
"description": "Überschrifttext fett darstellen",
|
"description": "Überschrifttext fett darstellen",
|
||||||
"label": "Fette Überschrift"
|
"label": "Fette Überschrift"
|
||||||
},
|
},
|
||||||
"carouselDelay": {
|
"carouselDelay": {
|
||||||
"description": "Bestimmt wie schnell die Fenster durch gewechselt werden",
|
"description": "Bestimmt wie schnell die Fenster durch gewechselt werden",
|
||||||
"label": "Karussellverzögerung"
|
"label": "Karussellverzögerung"
|
||||||
},
|
},
|
||||||
"compassNorthTop": {
|
"compassNorthTop": {
|
||||||
"description": "Norden im Kompass immer oben anzeigen",
|
"description": "Norden im Kompass immer oben anzeigen",
|
||||||
"label": "Kompass Norden oben"
|
"label": "Kompass Norden oben"
|
||||||
},
|
},
|
||||||
"displayMode": {
|
"displayMode": {
|
||||||
"description": "Variante des Anzeigelayout",
|
"description": "Variante des Anzeigelayout",
|
||||||
"label": "Anzeigemodus"
|
"label": "Anzeigemodus"
|
||||||
},
|
},
|
||||||
"displayUnits": {
|
"displayUnits": {
|
||||||
"description": "Zeige metrische oder imperiale Einheiten",
|
"description": "Zeige metrische oder imperiale Einheiten",
|
||||||
"label": "Anzeigeeinheiten"
|
"label": "Anzeigeeinheiten"
|
||||||
},
|
},
|
||||||
"flipScreen": {
|
"flipScreen": {
|
||||||
"description": "Anzeige um 180 Grad drehen",
|
"description": "Anzeige um 180 Grad drehen",
|
||||||
"label": "Anzeige drehen"
|
"label": "Anzeige drehen"
|
||||||
},
|
},
|
||||||
"gpsDisplayUnits": {
|
"gpsDisplayUnits": {
|
||||||
"description": "Anzeigeformat der Koordinaten",
|
"description": "Anzeigeformat der Koordinaten",
|
||||||
"label": "GPS Anzeigeformat"
|
"label": "GPS Anzeigeformat"
|
||||||
},
|
},
|
||||||
"oledType": {
|
"oledType": {
|
||||||
"description": "Art des OLED Anzeige, die an dem Gerät angeschlossen ist",
|
"description": "Art des OLED Anzeige, die an dem Gerät angeschlossen ist",
|
||||||
"label": "OLED Typ"
|
"label": "OLED Typ"
|
||||||
},
|
},
|
||||||
"screenTimeout": {
|
"screenTimeout": {
|
||||||
"description": "Anzeige nach dieser Zeit automatisch ausschalten",
|
"description": "Anzeige nach dieser Zeit automatisch ausschalten",
|
||||||
"label": "Anzeigeabschaltung"
|
"label": "Anzeigeabschaltung"
|
||||||
},
|
},
|
||||||
"twelveHourClock": {
|
"twelveHourClock": {
|
||||||
"description": "12-Stunden Format benutzen",
|
"description": "12-Stunden Format benutzen",
|
||||||
"label": "12-Stunden Uhr"
|
"label": "12-Stunden Uhr"
|
||||||
},
|
},
|
||||||
"wakeOnTapOrMotion": {
|
"wakeOnTapOrMotion": {
|
||||||
"description": "Gerät durch Tippen oder Bewegung aufwecken",
|
"description": "Gerät durch Tippen oder Bewegung aufwecken",
|
||||||
"label": "Aufwachen durch Tippen oder Bewegung"
|
"label": "Aufwachen durch Tippen oder Bewegung"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lora": {
|
"lora": {
|
||||||
"title": "Netzeinstellungen",
|
"title": "Netzeinstellungen",
|
||||||
"description": "Einstellungen für das LoRa Netz",
|
"description": "Einstellungen für das LoRa Netz",
|
||||||
"bandwidth": {
|
"bandwidth": {
|
||||||
"description": "Kanalbandbreite in MHz",
|
"description": "Kanalbandbreite in MHz",
|
||||||
"label": "Bandbreite"
|
"label": "Bandbreite"
|
||||||
},
|
},
|
||||||
"boostedRxGain": {
|
"boostedRxGain": {
|
||||||
"description": "Erhöhte Empfangsverstärkung",
|
"description": "Erhöhte Empfangsverstärkung",
|
||||||
"label": "Erhöhte Empfangsverstärkung"
|
"label": "Erhöhte Empfangsverstärkung"
|
||||||
},
|
},
|
||||||
"codingRate": {
|
"codingRate": {
|
||||||
"description": "Kodierrate",
|
"description": "Kodierrate",
|
||||||
"label": "Fehlerkorrektur"
|
"label": "Fehlerkorrektur"
|
||||||
},
|
},
|
||||||
"frequencyOffset": {
|
"frequencyOffset": {
|
||||||
"description": "Frequenzversatz zur Kalibrierung von Oszillatorfehlern",
|
"description": "Frequenzversatz zur Kalibrierung von Oszillatorfehlern",
|
||||||
"label": "Frequenzversatz"
|
"label": "Frequenzversatz"
|
||||||
},
|
},
|
||||||
"frequencySlot": {
|
"frequencySlot": {
|
||||||
"description": "LoRa Frequenzschlitz",
|
"description": "LoRa Frequenzschlitz",
|
||||||
"label": "Frequenzschlitz"
|
"label": "Frequenzschlitz"
|
||||||
},
|
},
|
||||||
"hopLimit": {
|
"hopLimit": {
|
||||||
"description": "Maximale Sprungweite",
|
"description": "Maximale Sprungweite",
|
||||||
"label": "Sprungweite"
|
"label": "Sprungweite"
|
||||||
},
|
},
|
||||||
"ignoreMqtt": {
|
"ignoreMqtt": {
|
||||||
"description": "MQTT Nachrichten nicht über das Netz weiterleiten",
|
"description": "MQTT Nachrichten nicht über das Netz weiterleiten",
|
||||||
"label": "MQTT ignorieren"
|
"label": "MQTT ignorieren"
|
||||||
},
|
},
|
||||||
"modemPreset": {
|
"modemPreset": {
|
||||||
"description": "Modem Voreinstellung die verwendet wird",
|
"description": "Modem Voreinstellung die verwendet wird",
|
||||||
"label": "Modem Voreinstellungen"
|
"label": "Modem Voreinstellungen"
|
||||||
},
|
},
|
||||||
"okToMqtt": {
|
"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",
|
"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"
|
"label": "OK für MQTT"
|
||||||
},
|
},
|
||||||
"overrideDutyCycle": {
|
"overrideDutyCycle": {
|
||||||
"description": "Duty-Cycle überschreiben",
|
"description": "Duty-Cycle überschreiben",
|
||||||
"label": "Duty-Cycle überschreiben"
|
"label": "Duty-Cycle überschreiben"
|
||||||
},
|
},
|
||||||
"overrideFrequency": {
|
"overrideFrequency": {
|
||||||
"description": "Sendefrequenz überschreiben (MHz)",
|
"description": "Sendefrequenz überschreiben (MHz)",
|
||||||
"label": "Sendefrequenz überschreiben"
|
"label": "Sendefrequenz überschreiben"
|
||||||
},
|
},
|
||||||
"region": {
|
"region": {
|
||||||
"description": "Legt die Region für Ihren Knoten fest",
|
"description": "Legt die Region für Ihren Knoten fest",
|
||||||
"label": "Region"
|
"label": "Region"
|
||||||
},
|
},
|
||||||
"spreadingFactor": {
|
"spreadingFactor": {
|
||||||
"description": "Anzahl der Symbole zur Kodierung der Nutzdaten",
|
"description": "Anzahl der Symbole zur Kodierung der Nutzdaten",
|
||||||
"label": "Spreizfaktor"
|
"label": "Spreizfaktor"
|
||||||
},
|
},
|
||||||
"transmitEnabled": {
|
"transmitEnabled": {
|
||||||
"description": "Sender (TX) des LoRa Funkgerätes aktivieren/deaktivieren",
|
"description": "Sender (TX) des LoRa Funkgerätes aktivieren/deaktivieren",
|
||||||
"label": "Senden aktiviert"
|
"label": "Senden aktiviert"
|
||||||
},
|
},
|
||||||
"transmitPower": {
|
"transmitPower": {
|
||||||
"description": "Maximale Sendeleistung",
|
"description": "Maximale Sendeleistung",
|
||||||
"label": "Sendeleistung"
|
"label": "Sendeleistung"
|
||||||
},
|
},
|
||||||
"usePreset": {
|
"usePreset": {
|
||||||
"description": "Eine der vordefinierten Modem Voreinstellungen verwenden",
|
"description": "Eine der vordefinierten Modem Voreinstellungen verwenden",
|
||||||
"label": "Voreinstellung verwenden"
|
"label": "Voreinstellung verwenden"
|
||||||
},
|
},
|
||||||
"meshSettings": {
|
"meshSettings": {
|
||||||
"description": "Einstellungen für das LoRa Netz",
|
"description": "Einstellungen für das LoRa Netz",
|
||||||
"label": "Netzeinstellungen"
|
"label": "Netzeinstellungen"
|
||||||
},
|
},
|
||||||
"waveformSettings": {
|
"waveformSettings": {
|
||||||
"description": "Einstellungen für die LoRa Wellenform",
|
"description": "Einstellungen für die LoRa Wellenform",
|
||||||
"label": "Einstellungen der Wellenform"
|
"label": "Einstellungen der Wellenform"
|
||||||
},
|
},
|
||||||
"radioSettings": {
|
"radioSettings": {
|
||||||
"label": "Radio-Einstellungen",
|
"label": "Radio-Einstellungen",
|
||||||
"description": "Einstellungen für das LoRa Funkgerät"
|
"description": "Einstellungen für das LoRa Funkgerät"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "WLAN Einstellungen",
|
"title": "WLAN Einstellungen",
|
||||||
"description": "WLAN Funkeinstellungen",
|
"description": "WLAN Funkeinstellungen",
|
||||||
"note": "Hinweis: Einige Geräte (ESP32) können nicht gleichzeitig Bluetooth und WLAN verwenden.",
|
"note": "Hinweis: Einige Geräte (ESP32) können nicht gleichzeitig Bluetooth und WLAN verwenden.",
|
||||||
"addressMode": {
|
"addressMode": {
|
||||||
"description": "Auswahl der IP Adressenzuweisung",
|
"description": "Auswahl der IP Adressenzuweisung",
|
||||||
"label": "IP Adressenmodus"
|
"label": "IP Adressenmodus"
|
||||||
},
|
},
|
||||||
"dns": {
|
"dns": {
|
||||||
"description": "DNS Server",
|
"description": "DNS Server",
|
||||||
"label": "DNS"
|
"label": "DNS"
|
||||||
},
|
},
|
||||||
"ethernetEnabled": {
|
"ethernetEnabled": {
|
||||||
"description": "Aktivieren oder deaktivieren sie den Ethernet Anschluss",
|
"description": "Aktivieren oder deaktivieren sie den Ethernet Anschluss",
|
||||||
"label": "Aktiviert"
|
"label": "Aktiviert"
|
||||||
},
|
},
|
||||||
"gateway": {
|
"gateway": {
|
||||||
"description": "Standard Gateway",
|
"description": "Standard Gateway",
|
||||||
"label": "Gateway"
|
"label": "Gateway"
|
||||||
},
|
},
|
||||||
"ip": {
|
"ip": {
|
||||||
"description": "IP Adresse",
|
"description": "IP Adresse",
|
||||||
"label": "IP"
|
"label": "IP"
|
||||||
},
|
},
|
||||||
"psk": {
|
"psk": {
|
||||||
"description": "Netzwerkpasswort",
|
"description": "Netzwerkpasswort",
|
||||||
"label": "PSK"
|
"label": "PSK"
|
||||||
},
|
},
|
||||||
"ssid": {
|
"ssid": {
|
||||||
"description": "Netzwerkname",
|
"description": "Netzwerkname",
|
||||||
"label": "SSID"
|
"label": "SSID"
|
||||||
},
|
},
|
||||||
"subnet": {
|
"subnet": {
|
||||||
"description": "Subnetzmaske",
|
"description": "Subnetzmaske",
|
||||||
"label": "Subnetz"
|
"label": "Subnetz"
|
||||||
},
|
},
|
||||||
"wifiEnabled": {
|
"wifiEnabled": {
|
||||||
"description": "Aktivieren oder deaktivieren Sie die WLAN Übertragung",
|
"description": "Aktivieren oder deaktivieren Sie die WLAN Übertragung",
|
||||||
"label": "Aktiviert"
|
"label": "Aktiviert"
|
||||||
},
|
},
|
||||||
"meshViaUdp": {
|
"meshViaUdp": {
|
||||||
"label": "Netz über UDP"
|
"label": "Netz über UDP"
|
||||||
},
|
},
|
||||||
"ntpServer": {
|
"ntpServer": {
|
||||||
"label": "NTP Server"
|
"label": "NTP Server"
|
||||||
},
|
},
|
||||||
"rsyslogServer": {
|
"rsyslogServer": {
|
||||||
"label": "Rsyslog Server"
|
"label": "Rsyslog Server"
|
||||||
},
|
},
|
||||||
"ethernetConfigSettings": {
|
"ethernetConfigSettings": {
|
||||||
"description": "Einstellung des Ethernet Ports",
|
"description": "Einstellung des Ethernet Ports",
|
||||||
"label": "Ethernet Einstellung"
|
"label": "Ethernet Einstellung"
|
||||||
},
|
},
|
||||||
"ipConfigSettings": {
|
"ipConfigSettings": {
|
||||||
"description": "Einstellung der IP Adresse",
|
"description": "Einstellung der IP Adresse",
|
||||||
"label": "IP Adresseinstellungen"
|
"label": "IP Adresseinstellungen"
|
||||||
},
|
},
|
||||||
"ntpConfigSettings": {
|
"ntpConfigSettings": {
|
||||||
"description": "NTP Server Einstellungen",
|
"description": "NTP Server Einstellungen",
|
||||||
"label": "NTP Einstellungen"
|
"label": "NTP Einstellungen"
|
||||||
},
|
},
|
||||||
"rsyslogConfigSettings": {
|
"rsyslogConfigSettings": {
|
||||||
"description": "Rsyslog Einstellung",
|
"description": "Rsyslog Einstellung",
|
||||||
"label": "Rsyslog Einstellung"
|
"label": "Rsyslog Einstellung"
|
||||||
},
|
},
|
||||||
"udpConfigSettings": {
|
"udpConfigSettings": {
|
||||||
"description": "UDP über Netz Einstellung",
|
"description": "UDP über Netz Einstellung",
|
||||||
"label": "UDP Konfiguration"
|
"label": "UDP Konfiguration"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"position": {
|
"position": {
|
||||||
"title": "Standorteinstellung",
|
"title": "Standorteinstellung",
|
||||||
"description": "Einstellungen für das Standortmodul",
|
"description": "Einstellungen für das Standortmodul",
|
||||||
"broadcastInterval": {
|
"broadcastInterval": {
|
||||||
"description": "Wie oft Ihr Standort über das Netz gesendet wird",
|
"description": "Wie oft Ihr Standort über das Netz gesendet wird",
|
||||||
"label": "Übertragungsintervall"
|
"label": "Übertragungsintervall"
|
||||||
},
|
},
|
||||||
"enablePin": {
|
"enablePin": {
|
||||||
"description": "Überschreiben des GPIO der das GPS-Modul aktiviert",
|
"description": "Überschreiben des GPIO der das GPS-Modul aktiviert",
|
||||||
"label": "GPIO GPS aktivieren"
|
"label": "GPIO GPS aktivieren"
|
||||||
},
|
},
|
||||||
"fixedPosition": {
|
"fixedPosition": {
|
||||||
"description": "GPS Standort nicht senden, sondern manuell angegeben",
|
"description": "GPS Standort nicht senden, sondern manuell angegeben",
|
||||||
"label": "Fester Standort"
|
"label": "Fester Standort"
|
||||||
},
|
},
|
||||||
"gpsMode": {
|
"gpsMode": {
|
||||||
"description": "Einstellung, ob GPS des Geräts aktiviert, deaktiviert oder nicht vorhanden ist",
|
"description": "Einstellung, ob GPS des Geräts aktiviert, deaktiviert oder nicht vorhanden ist",
|
||||||
"label": "GPS Modus"
|
"label": "GPS Modus"
|
||||||
},
|
},
|
||||||
"gpsUpdateInterval": {
|
"gpsUpdateInterval": {
|
||||||
"description": "Wie oft ein GPS Standort ermittelt werden soll",
|
"description": "Wie oft ein GPS Standort ermittelt werden soll",
|
||||||
"label": "GPS Aktualisierungsintervall"
|
"label": "GPS Aktualisierungsintervall"
|
||||||
},
|
},
|
||||||
"positionFlags": {
|
"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.",
|
"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"
|
"label": "Standort Optionen"
|
||||||
},
|
},
|
||||||
"receivePin": {
|
"receivePin": {
|
||||||
"description": "GPIO Pin für serielles Empfangen (RX) des GPS-Moduls überschreiben",
|
"description": "GPIO Pin für serielles Empfangen (RX) des GPS-Moduls überschreiben",
|
||||||
"label": "GPIO Empfangen"
|
"label": "GPIO Empfangen"
|
||||||
},
|
},
|
||||||
"smartPositionEnabled": {
|
"smartPositionEnabled": {
|
||||||
"description": "Standort nur verschicken, wenn eine sinnvolle Standortänderung stattgefunden hat",
|
"description": "Standort nur verschicken, wenn eine sinnvolle Standortänderung stattgefunden hat",
|
||||||
"label": "Intelligenten Standort aktivieren"
|
"label": "Intelligenten Standort aktivieren"
|
||||||
},
|
},
|
||||||
"smartPositionMinDistance": {
|
"smartPositionMinDistance": {
|
||||||
"description": "Mindestabstand (in Meter), die vor dem Senden einer Standortaktualisierung zurückgelegt werden muss",
|
"description": "Mindestabstand (in Meter), die vor dem Senden einer Standortaktualisierung zurückgelegt werden muss",
|
||||||
"label": "Minimale Entfernung für intelligenten Standort"
|
"label": "Minimale Entfernung für intelligenten Standort"
|
||||||
},
|
},
|
||||||
"smartPositionMinInterval": {
|
"smartPositionMinInterval": {
|
||||||
"description": "Minimales Intervall (in Sekunden), das vor dem Senden einer Standortaktualisierung vergangen sein muss",
|
"description": "Minimales Intervall (in Sekunden), das vor dem Senden einer Standortaktualisierung vergangen sein muss",
|
||||||
"label": "Minimales Intervall für intelligenten Standort"
|
"label": "Minimales Intervall für intelligenten Standort"
|
||||||
},
|
},
|
||||||
"transmitPin": {
|
"transmitPin": {
|
||||||
"description": "GPIO Pin für serielles Senden (TX) des GPS-Moduls überschreiben",
|
"description": "GPIO Pin für serielles Senden (TX) des GPS-Moduls überschreiben",
|
||||||
"label": "GPIO Senden"
|
"label": "GPIO Senden"
|
||||||
},
|
},
|
||||||
"intervalsSettings": {
|
"intervalsSettings": {
|
||||||
"description": "Wie oft Standortaktualisierungen gesendet werden",
|
"description": "Wie oft Standortaktualisierungen gesendet werden",
|
||||||
"label": "Intervalle"
|
"label": "Intervalle"
|
||||||
},
|
},
|
||||||
"flags": {
|
"flags": {
|
||||||
"placeholder": "Standort Optionen auswählen",
|
"placeholder": "Standort Optionen auswählen",
|
||||||
"altitude": "Höhe",
|
"altitude": "Höhe",
|
||||||
"altitudeGeoidalSeparation": "Geoidale Höhentrennung",
|
"altitudeGeoidalSeparation": "Geoidale Höhentrennung",
|
||||||
"altitudeMsl": "Höhe in Bezug auf Meeresspiegel",
|
"altitudeMsl": "Höhe in Bezug auf Meeresspiegel",
|
||||||
"dop": "Dilution of Präzision (DOP) PDOP standardmäßig verwenden",
|
"dop": "Dilution of Präzision (DOP) PDOP standardmäßig verwenden",
|
||||||
"hdopVdop": "Wenn DOP gesetzt ist, wird HDOP / VDOP anstelle von PDOP verwendet",
|
"hdopVdop": "Wenn DOP gesetzt ist, wird HDOP / VDOP anstelle von PDOP verwendet",
|
||||||
"numSatellites": "Anzahl Satelliten",
|
"numSatellites": "Anzahl Satelliten",
|
||||||
"sequenceNumber": "Sequenznummer",
|
"sequenceNumber": "Sequenznummer",
|
||||||
"timestamp": "Zeitstempel",
|
"timestamp": "Zeitstempel",
|
||||||
"unset": "Nicht konfiguriert",
|
"unset": "Nicht konfiguriert",
|
||||||
"vehicleHeading": "Fahrzeugsteuerkurs",
|
"vehicleHeading": "Fahrzeugsteuerkurs",
|
||||||
"vehicleSpeed": "Fahrzeuggeschwindigkeit"
|
"vehicleSpeed": "Fahrzeuggeschwindigkeit"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"power": {
|
"power": {
|
||||||
"adcMultiplierOverride": {
|
"adcMultiplierOverride": {
|
||||||
"description": "Zur Optimierung der Genauigkeit bei der Akkuspannunsmessung",
|
"description": "Zur Optimierung der Genauigkeit bei der Akkuspannunsmessung",
|
||||||
"label": "ADC Multiplikationsfaktor"
|
"label": "ADC Multiplikationsfaktor"
|
||||||
},
|
},
|
||||||
"ina219Address": {
|
"ina219Address": {
|
||||||
"description": "Adresse des INA219 Stromsensors",
|
"description": "Adresse des INA219 Stromsensors",
|
||||||
"label": "INA219 Adresse"
|
"label": "INA219 Adresse"
|
||||||
},
|
},
|
||||||
"lightSleepDuration": {
|
"lightSleepDuration": {
|
||||||
"description": "Wie lange das Gerät im leichten Schlafmodus ist",
|
"description": "Wie lange das Gerät im leichten Schlafmodus ist",
|
||||||
"label": "Dauer leichter Schlafmodus"
|
"label": "Dauer leichter Schlafmodus"
|
||||||
},
|
},
|
||||||
"minimumWakeTime": {
|
"minimumWakeTime": {
|
||||||
"description": "Minimale Zeitspanne für die das Gerät aktiv bleibt, nachdem es eine Nachricht empfangen hat",
|
"description": "Minimale Zeitspanne für die das Gerät aktiv bleibt, nachdem es eine Nachricht empfangen hat",
|
||||||
"label": "Minimale Aufwachzeit"
|
"label": "Minimale Aufwachzeit"
|
||||||
},
|
},
|
||||||
"noConnectionBluetoothDisabled": {
|
"noConnectionBluetoothDisabled": {
|
||||||
"description": "Wenn das Gerät keine Bluetooth Verbindung erhält, wird der BLE Funk nach dieser Zeit deaktiviert",
|
"description": "Wenn das Gerät keine Bluetooth Verbindung erhält, wird der BLE Funk nach dieser Zeit deaktiviert",
|
||||||
"label": "Keine Verbindung, Bluetooth deaktiviert"
|
"label": "Keine Verbindung, Bluetooth deaktiviert"
|
||||||
},
|
},
|
||||||
"powerSavingEnabled": {
|
"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.",
|
"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"
|
"label": "Energiesparmodus aktivieren"
|
||||||
},
|
},
|
||||||
"shutdownOnBatteryDelay": {
|
"shutdownOnBatteryDelay": {
|
||||||
"description": "Verzögerung bis zum Abschalten der Knoten sich im Akkubetrieb befindet. 0 für unbegrenzt",
|
"description": "Verzögerung bis zum Abschalten der Knoten sich im Akkubetrieb befindet. 0 für unbegrenzt",
|
||||||
"label": "Verzögerung Akkuabschaltung"
|
"label": "Verzögerung Akkuabschaltung"
|
||||||
},
|
},
|
||||||
"superDeepSleepDuration": {
|
"superDeepSleepDuration": {
|
||||||
"description": "Wie lange das Gerät im supertiefen Schlafmodus ist",
|
"description": "Wie lange das Gerät im supertiefen Schlafmodus ist",
|
||||||
"label": "Dauer Supertiefschlaf"
|
"label": "Dauer Supertiefschlaf"
|
||||||
},
|
},
|
||||||
"powerConfigSettings": {
|
"powerConfigSettings": {
|
||||||
"description": "Einstellungen für das Energiemodul",
|
"description": "Einstellungen für das Energiemodul",
|
||||||
"label": "Power Konfiguration"
|
"label": "Power Konfiguration"
|
||||||
},
|
},
|
||||||
"sleepSettings": {
|
"sleepSettings": {
|
||||||
"description": "Einstellungen Ruhezustand für das Energiemodul",
|
"description": "Einstellungen Ruhezustand für das Energiemodul",
|
||||||
"label": "Einstellung Ruhezustand"
|
"label": "Einstellung Ruhezustand"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"description": "Sicherheitseinstellungen",
|
"description": "Sicherheitseinstellungen",
|
||||||
"title": "Sicherheitseinstellungen",
|
"title": "Sicherheitseinstellungen",
|
||||||
"button_backupKey": "Schlüssel sichern",
|
"button_backupKey": "Schlüssel sichern",
|
||||||
"adminChannelEnabled": {
|
"adminChannelEnabled": {
|
||||||
"description": "Erlaubt die Gerätesteuerung über den unsicheren, veralteten administrativen Kanal",
|
"description": "Erlaubt die Gerätesteuerung über den unsicheren, veralteten administrativen Kanal",
|
||||||
"label": "Veraltete Administrierung erlauben"
|
"label": "Veraltete Administrierung erlauben"
|
||||||
},
|
},
|
||||||
"enableDebugLogApi": {
|
"enableDebugLogApi": {
|
||||||
"description": "Ausgabe von Fehlerprotokollen in Echtzeit über die serielle Schnittstelle, Anzeige und Export von Standort reduzierten Geräteprotokollen über Bluetooth",
|
"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"
|
"label": "Debug-Protokoll API aktivieren"
|
||||||
},
|
},
|
||||||
"managed": {
|
"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.",
|
"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"
|
"label": "Verwaltet"
|
||||||
},
|
},
|
||||||
"privateKey": {
|
"privateKey": {
|
||||||
"description": "Wird verwendet, um einen gemeinsamen Schlüssel mit einem entfernten Gerät zu erstellen",
|
"description": "Wird verwendet, um einen gemeinsamen Schlüssel mit einem entfernten Gerät zu erstellen",
|
||||||
"label": "Privater Schlüssel"
|
"label": "Privater Schlüssel"
|
||||||
},
|
},
|
||||||
"publicKey": {
|
"publicKey": {
|
||||||
"description": "Wird an andere Knoten im Netz gesendet, damit diese einen gemeinsamen geheimen Schlüssel berechnen können",
|
"description": "Wird an andere Knoten im Netz gesendet, damit diese einen gemeinsamen geheimen Schlüssel berechnen können",
|
||||||
"label": "Öffentlicher Schlüssel"
|
"label": "Öffentlicher Schlüssel"
|
||||||
},
|
},
|
||||||
"primaryAdminKey": {
|
"primaryAdminKey": {
|
||||||
"description": "Erster öffentlicher Schlüssel, der berechtigt ist, administrative Nachrichten an diesen Knoten zu senden",
|
"description": "Erster öffentlicher Schlüssel, der berechtigt ist, administrative Nachrichten an diesen Knoten zu senden",
|
||||||
"label": "Erster Admin-Schlüssel"
|
"label": "Erster Admin-Schlüssel"
|
||||||
},
|
},
|
||||||
"secondaryAdminKey": {
|
"secondaryAdminKey": {
|
||||||
"description": "Zweiter öffentlicher Schlüssel, der berechtigt ist, administrative Nachrichten an diesen Knoten zu senden",
|
"description": "Zweiter öffentlicher Schlüssel, der berechtigt ist, administrative Nachrichten an diesen Knoten zu senden",
|
||||||
"label": "Zweiter Admin-Schlüssel"
|
"label": "Zweiter Admin-Schlüssel"
|
||||||
},
|
},
|
||||||
"serialOutputEnabled": {
|
"serialOutputEnabled": {
|
||||||
"description": "Serielle Konsole über die Stream-API",
|
"description": "Serielle Konsole über die Stream-API",
|
||||||
"label": "Serielle Ausgabe aktiviert"
|
"label": "Serielle Ausgabe aktiviert"
|
||||||
},
|
},
|
||||||
"tertiaryAdminKey": {
|
"tertiaryAdminKey": {
|
||||||
"description": "Dritter öffentlicher Schlüssel, der berechtigt ist, administrative Nachrichten an diesen Knoten zu senden",
|
"description": "Dritter öffentlicher Schlüssel, der berechtigt ist, administrative Nachrichten an diesen Knoten zu senden",
|
||||||
"label": "Dritter Admin-Schlüssel"
|
"label": "Dritter Admin-Schlüssel"
|
||||||
},
|
},
|
||||||
"adminSettings": {
|
"adminSettings": {
|
||||||
"description": "Administrator Einstellungen",
|
"description": "Administrator Einstellungen",
|
||||||
"label": "Administrator Einstellungen"
|
"label": "Administrator Einstellungen"
|
||||||
},
|
},
|
||||||
"loggingSettings": {
|
"loggingSettings": {
|
||||||
"description": "Einstellungen für die Protokollierung",
|
"description": "Einstellungen für die Protokollierung",
|
||||||
"label": "Protokolleinstellungen"
|
"label": "Protokolleinstellungen"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,171 +1,171 @@
|
|||||||
{
|
{
|
||||||
"deleteMessages": {
|
"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?",
|
"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"
|
"title": "Alle Nachrichten löschen"
|
||||||
},
|
},
|
||||||
"deviceName": {
|
"deviceName": {
|
||||||
"description": "Das Gerät wird neu gestartet, sobald die Einstellung gespeichert ist.",
|
"description": "Das Gerät wird neu gestartet, sobald die Einstellung gespeichert ist.",
|
||||||
"longName": "Langer Name",
|
"longName": "Langer Name",
|
||||||
"shortName": "Kurzname",
|
"shortName": "Kurzname",
|
||||||
"title": "Gerätename ändern"
|
"title": "Gerätename ändern"
|
||||||
},
|
},
|
||||||
"import": {
|
"import": {
|
||||||
"description": "Die aktuelle LoRa Einstellung wird überschrieben.",
|
"description": "Die aktuelle LoRa Einstellung wird überschrieben.",
|
||||||
"error": {
|
"error": {
|
||||||
"invalidUrl": "Ungültige Meshtastic URL"
|
"invalidUrl": "Ungültige Meshtastic URL"
|
||||||
},
|
},
|
||||||
"channelPrefix": "Kanal: ",
|
"channelPrefix": "Kanal: ",
|
||||||
"channelSetUrl": "Kanalsammlung / QR-Code URL",
|
"channelSetUrl": "Kanalsammlung / QR-Code URL",
|
||||||
"channels": "Kanäle:",
|
"channels": "Kanäle:",
|
||||||
"usePreset": "Voreinstellung verwenden?",
|
"usePreset": "Voreinstellung verwenden?",
|
||||||
"title": "Kanalsammlung importieren"
|
"title": "Kanalsammlung importieren"
|
||||||
},
|
},
|
||||||
"locationResponse": {
|
"locationResponse": {
|
||||||
"altitude": "Höhe: ",
|
"altitude": "Höhe: ",
|
||||||
"coordinates": "Koordinaten: ",
|
"coordinates": "Koordinaten: ",
|
||||||
"title": "Standort: {{identifier}}"
|
"title": "Standort: {{identifier}}"
|
||||||
},
|
},
|
||||||
"pkiRegenerateDialog": {
|
"pkiRegenerateDialog": {
|
||||||
"title": "Vorab verteilten Schlüssel (PSK) neu erstellen?",
|
"title": "Vorab verteilten Schlüssel (PSK) neu erstellen?",
|
||||||
"description": "Sind Sie sicher, dass Sie den vorab verteilten Schlüssel neu erstellen möchten?",
|
"description": "Sind Sie sicher, dass Sie den vorab verteilten Schlüssel neu erstellen möchten?",
|
||||||
"regenerate": "Neu erstellen"
|
"regenerate": "Neu erstellen"
|
||||||
},
|
},
|
||||||
"newDeviceDialog": {
|
"newDeviceDialog": {
|
||||||
"title": "Neues Gerät verbinden",
|
"title": "Neues Gerät verbinden",
|
||||||
"https": "https",
|
"https": "https",
|
||||||
"http": "http",
|
"http": "http",
|
||||||
"tabHttp": "HTTP",
|
"tabHttp": "HTTP",
|
||||||
"tabBluetooth": "Bluetooth",
|
"tabBluetooth": "Bluetooth",
|
||||||
"tabSerial": "Seriell",
|
"tabSerial": "Seriell",
|
||||||
"useHttps": "HTTPS verwenden",
|
"useHttps": "HTTPS verwenden",
|
||||||
"connecting": "Wird verbunden...",
|
"connecting": "Wird verbunden...",
|
||||||
"connect": "Verbindung herstellen",
|
"connect": "Verbindung herstellen",
|
||||||
"connectionFailedAlert": {
|
"connectionFailedAlert": {
|
||||||
"title": "Verbindung fehlgeschlagen",
|
"title": "Verbindung fehlgeschlagen",
|
||||||
"descriptionPrefix": "Verbindung zum Gerät fehlgeschlagen. ",
|
"descriptionPrefix": "Verbindung zum Gerät fehlgeschlagen. ",
|
||||||
"httpsHint": "Wenn Sie HTTPS verwenden, müssen Sie möglicherweise zuerst ein selbstsigniertes Zertifikat akzeptieren. ",
|
"httpsHint": "Wenn Sie HTTPS verwenden, müssen Sie möglicherweise zuerst ein selbstsigniertes Zertifikat akzeptieren. ",
|
||||||
"openLinkPrefix": "Öffnen Sie ",
|
"openLinkPrefix": "Öffnen Sie ",
|
||||||
"openLinkSuffix": "in einem neuen Tab",
|
"openLinkSuffix": "in einem neuen Tab",
|
||||||
"acceptTlsWarningSuffix": ", akzeptieren Sie alle TLS-Warnungen, wenn Sie dazu aufgefordert werden, dann versuchen Sie es erneut",
|
"acceptTlsWarningSuffix": ", akzeptieren Sie alle TLS-Warnungen, wenn Sie dazu aufgefordert werden, dann versuchen Sie es erneut",
|
||||||
"learnMoreLink": "Mehr erfahren"
|
"learnMoreLink": "Mehr erfahren"
|
||||||
},
|
},
|
||||||
"httpConnection": {
|
"httpConnection": {
|
||||||
"label": "IP Adresse/Hostname",
|
"label": "IP Adresse/Hostname",
|
||||||
"placeholder": "000.000.000.000 / meshtastic.local"
|
"placeholder": "000.000.000.000 / meshtastic.local"
|
||||||
},
|
},
|
||||||
"serialConnection": {
|
"serialConnection": {
|
||||||
"noDevicesPaired": "Noch keine Geräte gekoppelt.",
|
"noDevicesPaired": "Noch keine Geräte gekoppelt.",
|
||||||
"newDeviceButton": "Neues Gerät",
|
"newDeviceButton": "Neues Gerät",
|
||||||
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
|
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
|
||||||
},
|
},
|
||||||
"bluetoothConnection": {
|
"bluetoothConnection": {
|
||||||
"noDevicesPaired": "Noch keine Geräte gekoppelt.",
|
"noDevicesPaired": "Noch keine Geräte gekoppelt.",
|
||||||
"newDeviceButton": "Neues Gerät"
|
"newDeviceButton": "Neues Gerät"
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"requiresWebBluetooth": "Dieser Verbindungstyp erfordert <0>Bluetooth</0> im Browser. Bitte verwenden Sie einen unterstützten Browser, wie Chrome oder Edge.",
|
"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.",
|
"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.",
|
"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."
|
"additionallyRequiresSecureContext": "Zusätzlich erfordert es einen <0>sicheren Kontext</0>. Bitte verbinden Sie sich über HTTPS oder localhost."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nodeDetails": {
|
"nodeDetails": {
|
||||||
"message": "Nachricht",
|
"message": "Nachricht",
|
||||||
"requestPosition": "Standort anfordern",
|
"requestPosition": "Standort anfordern",
|
||||||
"traceRoute": "Route verfolgen",
|
"traceRoute": "Route verfolgen",
|
||||||
"airTxUtilization": "Auslastung Sendezeit",
|
"airTxUtilization": "Auslastung Sendezeit",
|
||||||
"allRawMetrics": "Alle Rohdaten",
|
"allRawMetrics": "Alle Rohdaten",
|
||||||
"batteryLevel": "Akkustand",
|
"batteryLevel": "Akkustand",
|
||||||
"channelUtilization": "Kanalauslastung",
|
"channelUtilization": "Kanalauslastung",
|
||||||
"details": "Details:",
|
"details": "Details:",
|
||||||
"deviceMetrics": "Gerätekennzahlen:",
|
"deviceMetrics": "Gerätekennzahlen:",
|
||||||
"hardware": "Hardware: ",
|
"hardware": "Hardware: ",
|
||||||
"lastHeard": "Zuletzt gehört: ",
|
"lastHeard": "Zuletzt gehört: ",
|
||||||
"nodeHexPrefix": "Knoten ID: !",
|
"nodeHexPrefix": "Knoten ID: !",
|
||||||
"nodeNumber": "Knotennummer: ",
|
"nodeNumber": "Knotennummer: ",
|
||||||
"position": "Standort:",
|
"position": "Standort:",
|
||||||
"role": "Rolle: ",
|
"role": "Rolle: ",
|
||||||
"uptime": "Laufzeit: ",
|
"uptime": "Laufzeit: ",
|
||||||
"voltage": "Spannung",
|
"voltage": "Spannung",
|
||||||
"title": "Knotendetails für {{identifier}}",
|
"title": "Knotendetails für {{identifier}}",
|
||||||
"ignoreNode": "Knoten ignorieren",
|
"ignoreNode": "Knoten ignorieren",
|
||||||
"removeNode": "Knoten entfernen",
|
"removeNode": "Knoten entfernen",
|
||||||
"unignoreNode": "Knoten akzeptieren"
|
"unignoreNode": "Knoten akzeptieren"
|
||||||
},
|
},
|
||||||
"pkiBackup": {
|
"pkiBackup": {
|
||||||
"loseKeysWarning": "Wenn Sie Ihre Schlüssel verlieren, müssen Sie Ihr Gerät zurücksetzen.",
|
"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!",
|
"secureBackup": "Es ist wichtig, dass Sie Ihre öffentlichen und privaten Schlüssel sichern und diese sicher speichern!",
|
||||||
"footer": "=== END OF KEYS ===",
|
"footer": "=== END OF KEYS ===",
|
||||||
"header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===",
|
"header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===",
|
||||||
"privateKey": "Privater Schlüssel:",
|
"privateKey": "Privater Schlüssel:",
|
||||||
"publicKey": "Öffentlicher Schlüssel:",
|
"publicKey": "Öffentlicher Schlüssel:",
|
||||||
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
|
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
|
||||||
"title": "Schlüssel sichern"
|
"title": "Schlüssel sichern"
|
||||||
},
|
},
|
||||||
"pkiBackupReminder": {
|
"pkiBackupReminder": {
|
||||||
"description": "Wir empfehlen die regelmäßige Sicherung Ihrer Schlüsseldaten. Möchten Sie jetzt sicheren?",
|
"description": "Wir empfehlen die regelmäßige Sicherung Ihrer Schlüsseldaten. Möchten Sie jetzt sicheren?",
|
||||||
"title": "Erinnerungen für Sicherungen",
|
"title": "Erinnerungen für Sicherungen",
|
||||||
"remindLaterPrefix": "Erinnerung in:",
|
"remindLaterPrefix": "Erinnerung in:",
|
||||||
"remindNever": "Nie erinnern",
|
"remindNever": "Nie erinnern",
|
||||||
"backupNow": "Jetzt sichern"
|
"backupNow": "Jetzt sichern"
|
||||||
},
|
},
|
||||||
"pkiRegenerate": {
|
"pkiRegenerate": {
|
||||||
"description": "Sind Sie sicher, dass Sie Schlüsselpaar neu erstellen möchten?",
|
"description": "Sind Sie sicher, dass Sie Schlüsselpaar neu erstellen möchten?",
|
||||||
"title": "Schlüsselpaar neu erstellen"
|
"title": "Schlüsselpaar neu erstellen"
|
||||||
},
|
},
|
||||||
"qr": {
|
"qr": {
|
||||||
"addChannels": "Kanäle hinzufügen",
|
"addChannels": "Kanäle hinzufügen",
|
||||||
"replaceChannels": "Kanäle ersetzen",
|
"replaceChannels": "Kanäle ersetzen",
|
||||||
"description": "Die aktuelle LoRa Einstellung wird ebenfalls geteilt.",
|
"description": "Die aktuelle LoRa Einstellung wird ebenfalls geteilt.",
|
||||||
"sharableUrl": "Teilbare URL",
|
"sharableUrl": "Teilbare URL",
|
||||||
"title": "QR Code Erzeugen"
|
"title": "QR Code Erzeugen"
|
||||||
},
|
},
|
||||||
"rebootOta": {
|
"rebootOta": {
|
||||||
"title": "Neustart planen",
|
"title": "Neustart planen",
|
||||||
"description": "Startet den verbundenen Knoten nach einer Verzögerung in den OTA (Over-the-Air) Modus.",
|
"description": "Startet den verbundenen Knoten nach einer Verzögerung in den OTA (Over-the-Air) Modus.",
|
||||||
"enterDelay": "Verzögerung eingeben (Sek.)",
|
"enterDelay": "Verzögerung eingeben (Sek.)",
|
||||||
"scheduled": "Neustart wurde geplant"
|
"scheduled": "Neustart wurde geplant"
|
||||||
},
|
},
|
||||||
"reboot": {
|
"reboot": {
|
||||||
"title": "Neustart planen",
|
"title": "Neustart planen",
|
||||||
"description": "Startet den verbundenen Knoten nach x Minuten neu."
|
"description": "Startet den verbundenen Knoten nach x Minuten neu."
|
||||||
},
|
},
|
||||||
"refreshKeys": {
|
"refreshKeys": {
|
||||||
"description": {
|
"description": {
|
||||||
"acceptNewKeys": "Dies entfernt den Knoten vom Gerät und fordert neue Schlüssel an.",
|
"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.",
|
"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: "
|
"unableToSendDmPrefix": "Ihr Knoten kann keine Direktnachricht an folgenden Knoten senden: "
|
||||||
},
|
},
|
||||||
"acceptNewKeys": "Neue Schlüssel akzeptieren",
|
"acceptNewKeys": "Neue Schlüssel akzeptieren",
|
||||||
"title": "Schlüsselfehler - {{identifier}}"
|
"title": "Schlüsselfehler - {{identifier}}"
|
||||||
},
|
},
|
||||||
"removeNode": {
|
"removeNode": {
|
||||||
"description": "Sind Sie sicher, dass Sie diesen Knoten entfernen möchten?",
|
"description": "Sind Sie sicher, dass Sie diesen Knoten entfernen möchten?",
|
||||||
"title": "Knoten entfernen?"
|
"title": "Knoten entfernen?"
|
||||||
},
|
},
|
||||||
"shutdown": {
|
"shutdown": {
|
||||||
"title": "Herunterfahren planen",
|
"title": "Herunterfahren planen",
|
||||||
"description": "Schaltet den verbundenen Knoten nach x Minuten aus."
|
"description": "Schaltet den verbundenen Knoten nach x Minuten aus."
|
||||||
},
|
},
|
||||||
"traceRoute": {
|
"traceRoute": {
|
||||||
"routeToDestination": "Route zum Ziel:",
|
"routeToDestination": "Route zum Ziel:",
|
||||||
"routeBack": "Route zurück:"
|
"routeBack": "Route zurück:"
|
||||||
},
|
},
|
||||||
"tracerouteResponse": {
|
"tracerouteResponse": {
|
||||||
"title": "Traceroute: {{identifier}}"
|
"title": "Traceroute: {{identifier}}"
|
||||||
},
|
},
|
||||||
"unsafeRoles": {
|
"unsafeRoles": {
|
||||||
"confirmUnderstanding": "Ja, ich weiß, was ich tue!",
|
"confirmUnderstanding": "Ja, ich weiß, was ich tue!",
|
||||||
"conjunction": " und der Blog-Beitrag über ",
|
"conjunction": " und der Blog-Beitrag über ",
|
||||||
"postamble": " und verstehen die Auswirkungen einer Veränderung der Rolle.",
|
"postamble": " und verstehen die Auswirkungen einer Veränderung der Rolle.",
|
||||||
"preamble": "Ich habe die",
|
"preamble": "Ich habe die",
|
||||||
"choosingRightDeviceRole": "Wahl der richtigen Geräterolle",
|
"choosingRightDeviceRole": "Wahl der richtigen Geräterolle",
|
||||||
"deviceRoleDocumentation": "Dokumentation der Geräterolle",
|
"deviceRoleDocumentation": "Dokumentation der Geräterolle",
|
||||||
"title": "Bist Du sicher?"
|
"title": "Bist Du sicher?"
|
||||||
},
|
},
|
||||||
"managedMode": {
|
"managedMode": {
|
||||||
"confirmUnderstanding": "Ja, ich weiß, was ich tue!",
|
"confirmUnderstanding": "Ja, ich weiß, was ich tue!",
|
||||||
"title": "Bist Du sicher?",
|
"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."
|
"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."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,39 +1,39 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"title": "Nachrichten: {{chatName}}",
|
"title": "Nachrichten: {{chatName}}",
|
||||||
"placeholder": "Nachricht eingeben"
|
"placeholder": "Nachricht eingeben"
|
||||||
},
|
},
|
||||||
"emptyState": {
|
"emptyState": {
|
||||||
"title": "Einen Chat auswählen",
|
"title": "Einen Chat auswählen",
|
||||||
"text": "Noch keine Nachrichten."
|
"text": "Noch keine Nachrichten."
|
||||||
},
|
},
|
||||||
"selectChatPrompt": {
|
"selectChatPrompt": {
|
||||||
"text": "Wählen Sie einen Kanal oder Knoten, um Nachrichten zu schreiben."
|
"text": "Wählen Sie einen Kanal oder Knoten, um Nachrichten zu schreiben."
|
||||||
},
|
},
|
||||||
"sendMessage": {
|
"sendMessage": {
|
||||||
"placeholder": "Geben Sie hier Ihre Nachricht ein...",
|
"placeholder": "Geben Sie hier Ihre Nachricht ein...",
|
||||||
"sendButton": "Senden"
|
"sendButton": "Senden"
|
||||||
},
|
},
|
||||||
"actionsMenu": {
|
"actionsMenu": {
|
||||||
"addReactionLabel": "Reaktion hinzufügen",
|
"addReactionLabel": "Reaktion hinzufügen",
|
||||||
"replyLabel": "Antworten"
|
"replyLabel": "Antworten"
|
||||||
},
|
},
|
||||||
"deliveryStatus": {
|
"deliveryStatus": {
|
||||||
"delivered": {
|
"delivered": {
|
||||||
"label": "Nachricht zugestellt",
|
"label": "Nachricht zugestellt",
|
||||||
"displayText": "Nachricht zugestellt"
|
"displayText": "Nachricht zugestellt"
|
||||||
},
|
},
|
||||||
"failed": {
|
"failed": {
|
||||||
"label": "Nachrichtenübermittlung fehlgeschlagen",
|
"label": "Nachrichtenübermittlung fehlgeschlagen",
|
||||||
"displayText": "Zustellung fehlgeschlagen"
|
"displayText": "Zustellung fehlgeschlagen"
|
||||||
},
|
},
|
||||||
"unknown": {
|
"unknown": {
|
||||||
"label": "Nachrichtenstatus unbekannt",
|
"label": "Nachrichtenstatus unbekannt",
|
||||||
"displayText": "Unbekannter Status"
|
"displayText": "Unbekannter Status"
|
||||||
},
|
},
|
||||||
"waiting": {
|
"waiting": {
|
||||||
"label": "Nachricht wird gesendet",
|
"label": "Nachricht wird gesendet",
|
||||||
"displayText": "Warte auf Zustellung"
|
"displayText": "Warte auf Zustellung"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,448 +1,448 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"tabAmbientLighting": "Umgebungslicht",
|
"tabAmbientLighting": "Umgebungslicht",
|
||||||
"tabAudio": "Audio",
|
"tabAudio": "Audio",
|
||||||
"tabCannedMessage": "Vordefinierte Nachrichten",
|
"tabCannedMessage": "Vordefinierte Nachrichten",
|
||||||
"tabDetectionSensor": "Erkennungssensor",
|
"tabDetectionSensor": "Erkennungssensor",
|
||||||
"tabExternalNotification": "Externe Benachrichtigung",
|
"tabExternalNotification": "Externe Benachrichtigung",
|
||||||
"tabMqtt": "MQTT",
|
"tabMqtt": "MQTT",
|
||||||
"tabNeighborInfo": "Nachbarinformation",
|
"tabNeighborInfo": "Nachbarinformation",
|
||||||
"tabPaxcounter": "Pax Zähler",
|
"tabPaxcounter": "Pax Zähler",
|
||||||
"tabRangeTest": "Reichweitentest",
|
"tabRangeTest": "Reichweitentest",
|
||||||
"tabSerial": "Seriell",
|
"tabSerial": "Seriell",
|
||||||
"tabStoreAndForward": "Speichern&Weiterleiten",
|
"tabStoreAndForward": "Speichern&Weiterleiten",
|
||||||
"tabTelemetry": "Telemetrie"
|
"tabTelemetry": "Telemetrie"
|
||||||
},
|
},
|
||||||
"ambientLighting": {
|
"ambientLighting": {
|
||||||
"title": "Einstellung Umgebungsbeleuchtung",
|
"title": "Einstellung Umgebungsbeleuchtung",
|
||||||
"description": "Einstellungen für das Modul Umgebungsbeleuchtung",
|
"description": "Einstellungen für das Modul Umgebungsbeleuchtung",
|
||||||
"ledState": {
|
"ledState": {
|
||||||
"label": "LED Status",
|
"label": "LED Status",
|
||||||
"description": "Setzt die LED auf ein oder aus"
|
"description": "Setzt die LED auf ein oder aus"
|
||||||
},
|
},
|
||||||
"current": {
|
"current": {
|
||||||
"label": "Stromstärke",
|
"label": "Stromstärke",
|
||||||
"description": "Legt den Strom für den LED Ausgang fest. Standard ist 10"
|
"description": "Legt den Strom für den LED Ausgang fest. Standard ist 10"
|
||||||
},
|
},
|
||||||
"red": {
|
"red": {
|
||||||
"label": "Rot",
|
"label": "Rot",
|
||||||
"description": "Legt den roten LED Wert fest. Bereich 0-255"
|
"description": "Legt den roten LED Wert fest. Bereich 0-255"
|
||||||
},
|
},
|
||||||
"green": {
|
"green": {
|
||||||
"label": "Grün",
|
"label": "Grün",
|
||||||
"description": "Legt den grünen LED Wert fest. Bereich 0-255"
|
"description": "Legt den grünen LED Wert fest. Bereich 0-255"
|
||||||
},
|
},
|
||||||
"blue": {
|
"blue": {
|
||||||
"label": "Blau",
|
"label": "Blau",
|
||||||
"description": "Legt den blauen LED Wert fest. Bereich 0-255"
|
"description": "Legt den blauen LED Wert fest. Bereich 0-255"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"audio": {
|
"audio": {
|
||||||
"title": "Audioeinstellungen",
|
"title": "Audioeinstellungen",
|
||||||
"description": "Einstellungen für das Audiomodul",
|
"description": "Einstellungen für das Audiomodul",
|
||||||
"codec2Enabled": {
|
"codec2Enabled": {
|
||||||
"label": "Codec 2 aktiviert",
|
"label": "Codec 2 aktiviert",
|
||||||
"description": "Codec 2 Audiokodierung aktivieren"
|
"description": "Codec 2 Audiokodierung aktivieren"
|
||||||
},
|
},
|
||||||
"pttPin": {
|
"pttPin": {
|
||||||
"label": "GPIO PTT",
|
"label": "GPIO PTT",
|
||||||
"description": "Für PTT verwendeter GPIO Pin"
|
"description": "Für PTT verwendeter GPIO Pin"
|
||||||
},
|
},
|
||||||
"bitrate": {
|
"bitrate": {
|
||||||
"label": "Bitrate",
|
"label": "Bitrate",
|
||||||
"description": "Bitrate zur Audiokodierung"
|
"description": "Bitrate zur Audiokodierung"
|
||||||
},
|
},
|
||||||
"i2sWs": {
|
"i2sWs": {
|
||||||
"label": "i2S WS",
|
"label": "i2S WS",
|
||||||
"description": "GPIO Pin für i2S WS"
|
"description": "GPIO Pin für i2S WS"
|
||||||
},
|
},
|
||||||
"i2sSd": {
|
"i2sSd": {
|
||||||
"label": "i2S SD",
|
"label": "i2S SD",
|
||||||
"description": "GPIO Pin für i2S SD"
|
"description": "GPIO Pin für i2S SD"
|
||||||
},
|
},
|
||||||
"i2sDin": {
|
"i2sDin": {
|
||||||
"label": "i2S DIN",
|
"label": "i2S DIN",
|
||||||
"description": "GPIO Pin für i2S DIN"
|
"description": "GPIO Pin für i2S DIN"
|
||||||
},
|
},
|
||||||
"i2sSck": {
|
"i2sSck": {
|
||||||
"label": "i2S SCK",
|
"label": "i2S SCK",
|
||||||
"description": "GPIO Pin für i2S SCK"
|
"description": "GPIO Pin für i2S SCK"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"cannedMessage": {
|
"cannedMessage": {
|
||||||
"title": "Einstellungen für vordefinierte Nachrichten",
|
"title": "Einstellungen für vordefinierte Nachrichten",
|
||||||
"description": "Einstellungen für das Modul vordefinierte Nachrichten",
|
"description": "Einstellungen für das Modul vordefinierte Nachrichten",
|
||||||
"moduleEnabled": {
|
"moduleEnabled": {
|
||||||
"label": "Modul aktiviert",
|
"label": "Modul aktiviert",
|
||||||
"description": "Vordefinierte Nachrichten aktivieren"
|
"description": "Vordefinierte Nachrichten aktivieren"
|
||||||
},
|
},
|
||||||
"rotary1Enabled": {
|
"rotary1Enabled": {
|
||||||
"label": "Drehgeber #1 aktiviert",
|
"label": "Drehgeber #1 aktiviert",
|
||||||
"description": "Drehgeber aktivieren"
|
"description": "Drehgeber aktivieren"
|
||||||
},
|
},
|
||||||
"inputbrokerPinA": {
|
"inputbrokerPinA": {
|
||||||
"label": "Drehgeber Pin A",
|
"label": "Drehgeber Pin A",
|
||||||
"description": "GPIO Pin Wert (1-39) für Drehgeber Pin A"
|
"description": "GPIO Pin Wert (1-39) für Drehgeber Pin A"
|
||||||
},
|
},
|
||||||
"inputbrokerPinB": {
|
"inputbrokerPinB": {
|
||||||
"label": "Drehgeber Pin B",
|
"label": "Drehgeber Pin B",
|
||||||
"description": "GPIO Pin Wert (1-39) für Drehgeber Pin B"
|
"description": "GPIO Pin Wert (1-39) für Drehgeber Pin B"
|
||||||
},
|
},
|
||||||
"inputbrokerPinPress": {
|
"inputbrokerPinPress": {
|
||||||
"label": "Drehgeber Pin Taste",
|
"label": "Drehgeber Pin Taste",
|
||||||
"description": "GPIO Pin Wert (1-39) für Drehgeber Pin Taste"
|
"description": "GPIO Pin Wert (1-39) für Drehgeber Pin Taste"
|
||||||
},
|
},
|
||||||
"inputbrokerEventCw": {
|
"inputbrokerEventCw": {
|
||||||
"label": "Ereignis im Uhrzeigersinn",
|
"label": "Ereignis im Uhrzeigersinn",
|
||||||
"description": "Eingabeereignis auswählen."
|
"description": "Eingabeereignis auswählen."
|
||||||
},
|
},
|
||||||
"inputbrokerEventCcw": {
|
"inputbrokerEventCcw": {
|
||||||
"label": "Ereignis gegen Uhrzeigersinn",
|
"label": "Ereignis gegen Uhrzeigersinn",
|
||||||
"description": "Eingabeereignis auswählen."
|
"description": "Eingabeereignis auswählen."
|
||||||
},
|
},
|
||||||
"inputbrokerEventPress": {
|
"inputbrokerEventPress": {
|
||||||
"label": "Ereignis Tastendruck",
|
"label": "Ereignis Tastendruck",
|
||||||
"description": "Eingabeereignis auswählen."
|
"description": "Eingabeereignis auswählen."
|
||||||
},
|
},
|
||||||
"updown1Enabled": {
|
"updown1Enabled": {
|
||||||
"label": "Geber Hoch/Runter aktiviert",
|
"label": "Geber Hoch/Runter aktiviert",
|
||||||
"description": "Aktiviere Geber Hoch/Runter"
|
"description": "Aktiviere Geber Hoch/Runter"
|
||||||
},
|
},
|
||||||
"allowInputSource": {
|
"allowInputSource": {
|
||||||
"label": "Eingabequelle zulassen",
|
"label": "Eingabequelle zulassen",
|
||||||
"description": "Wählen Sie aus: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
|
"description": "Wählen Sie aus: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
|
||||||
},
|
},
|
||||||
"sendBell": {
|
"sendBell": {
|
||||||
"label": "Sende Glocke",
|
"label": "Sende Glocke",
|
||||||
"description": "Sendet ein Klingelzeichen (Glocke) mit jeder Nachricht"
|
"description": "Sendet ein Klingelzeichen (Glocke) mit jeder Nachricht"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"detectionSensor": {
|
"detectionSensor": {
|
||||||
"title": "Sensoreinstellungen für Erkennung",
|
"title": "Sensoreinstellungen für Erkennung",
|
||||||
"description": "Einstellungen für das Erkennungssensormodul",
|
"description": "Einstellungen für das Erkennungssensormodul",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Aktiviert",
|
"label": "Aktiviert",
|
||||||
"description": "Erkennungssensormodul aktivieren oder deaktivieren"
|
"description": "Erkennungssensormodul aktivieren oder deaktivieren"
|
||||||
},
|
},
|
||||||
"minimumBroadcastSecs": {
|
"minimumBroadcastSecs": {
|
||||||
"label": "Minimale Übertragungszeit alle Sekunden",
|
"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"
|
"description": "Das Intervall in Sekunden, wie oft eine Nachricht an das Netz gesendet wird, wenn eine Statusänderung erkannt wurde"
|
||||||
},
|
},
|
||||||
"stateBroadcastSecs": {
|
"stateBroadcastSecs": {
|
||||||
"label": "Statusübertragung alle Sekunden",
|
"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"
|
"description": "Das Intervall in Sekunden, wie oft eine Nachricht mit dem aktuellen Status an das Netz gesendet wird, unabhängig von Änderungen"
|
||||||
},
|
},
|
||||||
"sendBell": {
|
"sendBell": {
|
||||||
"label": "Sende Glocke",
|
"label": "Sende Glocke",
|
||||||
"description": "ASCII-Glocke mit Warnmeldung senden"
|
"description": "ASCII-Glocke mit Warnmeldung senden"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"label": "Anzeigename",
|
"label": "Anzeigename",
|
||||||
"description": "Formatierte Nachricht die an das Netz gesendet wird, maximal 20 Zeichen"
|
"description": "Formatierte Nachricht die an das Netz gesendet wird, maximal 20 Zeichen"
|
||||||
},
|
},
|
||||||
"monitorPin": {
|
"monitorPin": {
|
||||||
"label": "GPIO Pin überwachen",
|
"label": "GPIO Pin überwachen",
|
||||||
"description": "Der GPIO Pin zur Überwachung von Statusänderungen"
|
"description": "Der GPIO Pin zur Überwachung von Statusänderungen"
|
||||||
},
|
},
|
||||||
"detectionTriggerType": {
|
"detectionTriggerType": {
|
||||||
"label": "Auslösetyp der Erkennung",
|
"label": "Auslösetyp der Erkennung",
|
||||||
"description": "Die Art des zu verwendenden Auslöseereignisses"
|
"description": "Die Art des zu verwendenden Auslöseereignisses"
|
||||||
},
|
},
|
||||||
"usePullup": {
|
"usePullup": {
|
||||||
"label": "Pullup verwenden",
|
"label": "Pullup verwenden",
|
||||||
"description": "Gibt an, ob der INPUT_PULLUP Modus für GPIO Pin verwendet wird oder nicht"
|
"description": "Gibt an, ob der INPUT_PULLUP Modus für GPIO Pin verwendet wird oder nicht"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"externalNotification": {
|
"externalNotification": {
|
||||||
"title": "Einstellungen für externe Benachrichtigungen",
|
"title": "Einstellungen für externe Benachrichtigungen",
|
||||||
"description": "Einstellung für das Modul externe Benachrichtigung",
|
"description": "Einstellung für das Modul externe Benachrichtigung",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Modul aktiviert",
|
"label": "Modul aktiviert",
|
||||||
"description": "Externe Benachrichtigung aktivieren"
|
"description": "Externe Benachrichtigung aktivieren"
|
||||||
},
|
},
|
||||||
"outputMs": {
|
"outputMs": {
|
||||||
"label": "Ausgabe MS",
|
"label": "Ausgabe MS",
|
||||||
"description": "Ausgabe MS"
|
"description": "Ausgabe MS"
|
||||||
},
|
},
|
||||||
"output": {
|
"output": {
|
||||||
"label": "Ausgabe",
|
"label": "Ausgabe",
|
||||||
"description": "Ausgabe"
|
"description": "Ausgabe"
|
||||||
},
|
},
|
||||||
"outputVibra": {
|
"outputVibra": {
|
||||||
"label": "Ausgabe Vibration",
|
"label": "Ausgabe Vibration",
|
||||||
"description": "Ausgabe Vibration"
|
"description": "Ausgabe Vibration"
|
||||||
},
|
},
|
||||||
"outputBuzzer": {
|
"outputBuzzer": {
|
||||||
"label": "Ausgabe Summer",
|
"label": "Ausgabe Summer",
|
||||||
"description": "Ausgabe Summer"
|
"description": "Ausgabe Summer"
|
||||||
},
|
},
|
||||||
"active": {
|
"active": {
|
||||||
"label": "Aktiv",
|
"label": "Aktiv",
|
||||||
"description": "Aktiv"
|
"description": "Aktiv"
|
||||||
},
|
},
|
||||||
"alertMessage": {
|
"alertMessage": {
|
||||||
"label": "Warnmeldung",
|
"label": "Warnmeldung",
|
||||||
"description": "Warnmeldung"
|
"description": "Warnmeldung"
|
||||||
},
|
},
|
||||||
"alertMessageVibra": {
|
"alertMessageVibra": {
|
||||||
"label": "Vibration bei Warnmeldung",
|
"label": "Vibration bei Warnmeldung",
|
||||||
"description": "Vibration bei Warnmeldung"
|
"description": "Vibration bei Warnmeldung"
|
||||||
},
|
},
|
||||||
"alertMessageBuzzer": {
|
"alertMessageBuzzer": {
|
||||||
"label": "Summer bei Warnmeldung",
|
"label": "Summer bei Warnmeldung",
|
||||||
"description": "Summer bei Warnmeldung"
|
"description": "Summer bei Warnmeldung"
|
||||||
},
|
},
|
||||||
"alertBell": {
|
"alertBell": {
|
||||||
"label": "Warnglocke",
|
"label": "Warnglocke",
|
||||||
"description": "Soll beim Empfang eines eingehenden Klingelzeichens (Glocke) eine Warnung ausgelöst werden?"
|
"description": "Soll beim Empfang eines eingehenden Klingelzeichens (Glocke) eine Warnung ausgelöst werden?"
|
||||||
},
|
},
|
||||||
"alertBellVibra": {
|
"alertBellVibra": {
|
||||||
"label": "Vibration bei Klingelzeichen",
|
"label": "Vibration bei Klingelzeichen",
|
||||||
"description": "Vibration bei Klingelzeichen"
|
"description": "Vibration bei Klingelzeichen"
|
||||||
},
|
},
|
||||||
"alertBellBuzzer": {
|
"alertBellBuzzer": {
|
||||||
"label": "Summer bei Klingelzeichen",
|
"label": "Summer bei Klingelzeichen",
|
||||||
"description": "Summer bei Klingelzeichen"
|
"description": "Summer bei Klingelzeichen"
|
||||||
},
|
},
|
||||||
"usePwm": {
|
"usePwm": {
|
||||||
"label": "PWM verwenden",
|
"label": "PWM verwenden",
|
||||||
"description": "PWM verwenden"
|
"description": "PWM verwenden"
|
||||||
},
|
},
|
||||||
"nagTimeout": {
|
"nagTimeout": {
|
||||||
"label": "Nervige Verzögerung",
|
"label": "Nervige Verzögerung",
|
||||||
"description": "Nervige Verzögerung"
|
"description": "Nervige Verzögerung"
|
||||||
},
|
},
|
||||||
"useI2sAsBuzzer": {
|
"useI2sAsBuzzer": {
|
||||||
"label": "I2S GPIO Pin als Summer verwenden",
|
"label": "I2S GPIO Pin als Summer verwenden",
|
||||||
"description": "I2S GPIO Pin als Summerausgang definieren"
|
"description": "I2S GPIO Pin als Summerausgang definieren"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"mqtt": {
|
"mqtt": {
|
||||||
"title": "MQTT Einstellungen",
|
"title": "MQTT Einstellungen",
|
||||||
"description": "Einstellungen für das MQTT Modul",
|
"description": "Einstellungen für das MQTT Modul",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Aktiviert",
|
"label": "Aktiviert",
|
||||||
"description": "MQTT aktivieren oder deaktivieren"
|
"description": "MQTT aktivieren oder deaktivieren"
|
||||||
},
|
},
|
||||||
"address": {
|
"address": {
|
||||||
"label": "MQTT Server Adresse",
|
"label": "MQTT Server Adresse",
|
||||||
"description": "MQTT Serveradresse für Standard/benutzerdefinierte Server"
|
"description": "MQTT Serveradresse für Standard/benutzerdefinierte Server"
|
||||||
},
|
},
|
||||||
"username": {
|
"username": {
|
||||||
"label": "MQTT Benutzername",
|
"label": "MQTT Benutzername",
|
||||||
"description": "MQTT Benutzername für Standard/benutzerdefinierte Server"
|
"description": "MQTT Benutzername für Standard/benutzerdefinierte Server"
|
||||||
},
|
},
|
||||||
"password": {
|
"password": {
|
||||||
"label": "MQTT Passwort",
|
"label": "MQTT Passwort",
|
||||||
"description": "MQTT Passwort für Standard/benutzerdefinierte Server"
|
"description": "MQTT Passwort für Standard/benutzerdefinierte Server"
|
||||||
},
|
},
|
||||||
"encryptionEnabled": {
|
"encryptionEnabled": {
|
||||||
"label": "Verschlüsselung aktiviert",
|
"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."
|
"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": {
|
"jsonEnabled": {
|
||||||
"label": "JSON aktiviert",
|
"label": "JSON aktiviert",
|
||||||
"description": "Gibt an, ob JSON Nachrichten über MQTT gesendet oder empfangen werden sollen"
|
"description": "Gibt an, ob JSON Nachrichten über MQTT gesendet oder empfangen werden sollen"
|
||||||
},
|
},
|
||||||
"tlsEnabled": {
|
"tlsEnabled": {
|
||||||
"label": "TLS aktiviert",
|
"label": "TLS aktiviert",
|
||||||
"description": "TLS aktivieren oder deaktivieren"
|
"description": "TLS aktivieren oder deaktivieren"
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"label": "Hauptthema",
|
"label": "Hauptthema",
|
||||||
"description": "MQTT Hauptthema für Standard/Benutzerdefinierte Server"
|
"description": "MQTT Hauptthema für Standard/Benutzerdefinierte Server"
|
||||||
},
|
},
|
||||||
"proxyToClientEnabled": {
|
"proxyToClientEnabled": {
|
||||||
"label": "MQTT Client Proxy aktiviert",
|
"label": "MQTT Client Proxy aktiviert",
|
||||||
"description": "Verwendet die Netzwerkverbindung zum Austausch von MQTT Nachrichten mit dem Client."
|
"description": "Verwendet die Netzwerkverbindung zum Austausch von MQTT Nachrichten mit dem Client."
|
||||||
},
|
},
|
||||||
"mapReportingEnabled": {
|
"mapReportingEnabled": {
|
||||||
"label": "Kartenberichte aktiviert",
|
"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."
|
"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": {
|
"mapReportSettings": {
|
||||||
"publishIntervalSecs": {
|
"publishIntervalSecs": {
|
||||||
"label": "Veröffentlichungsintervall Kartenbericht (s)",
|
"label": "Veröffentlichungsintervall Kartenbericht (s)",
|
||||||
"description": "Intervall in Sekunden, um Kartenberichte zu veröffentlichen"
|
"description": "Intervall in Sekunden, um Kartenberichte zu veröffentlichen"
|
||||||
},
|
},
|
||||||
"positionPrecision": {
|
"positionPrecision": {
|
||||||
"label": "Ungefährer Standort",
|
"label": "Ungefährer Standort",
|
||||||
"description": "Der geteilte Standort mit einer Genauigkeit innerhalb dieser Entfernung",
|
"description": "Der geteilte Standort mit einer Genauigkeit innerhalb dieser Entfernung",
|
||||||
"options": {
|
"options": {
|
||||||
"metric_km23": "Innerhalb von 23 km",
|
"metric_km23": "Innerhalb von 23 km",
|
||||||
"metric_km12": "Innerhalb von 12 km",
|
"metric_km12": "Innerhalb von 12 km",
|
||||||
"metric_km5_8": "Innerhalb von 5,8 km",
|
"metric_km5_8": "Innerhalb von 5,8 km",
|
||||||
"metric_km2_9": "Innerhalb von 2,9 km",
|
"metric_km2_9": "Innerhalb von 2,9 km",
|
||||||
"metric_km1_5": "Innerhalb von 1,5 km",
|
"metric_km1_5": "Innerhalb von 1,5 km",
|
||||||
"metric_m700": "Innerhalb von 700 m",
|
"metric_m700": "Innerhalb von 700 m",
|
||||||
"metric_m350": "Innerhalb von 350 m",
|
"metric_m350": "Innerhalb von 350 m",
|
||||||
"metric_m200": "Innerhalb von 200 m",
|
"metric_m200": "Innerhalb von 200 m",
|
||||||
"metric_m90": "Innerhalb von 90 m",
|
"metric_m90": "Innerhalb von 90 m",
|
||||||
"metric_m50": "Innerhalb von 50 m",
|
"metric_m50": "Innerhalb von 50 m",
|
||||||
"imperial_mi15": "Innerhalb von 15 Meilen",
|
"imperial_mi15": "Innerhalb von 15 Meilen",
|
||||||
"imperial_mi7_3": "Innerhalb von 7,3 Meilen",
|
"imperial_mi7_3": "Innerhalb von 7,3 Meilen",
|
||||||
"imperial_mi3_6": "Innerhalb von 3,6 Meilen",
|
"imperial_mi3_6": "Innerhalb von 3,6 Meilen",
|
||||||
"imperial_mi1_8": "Innerhalb von 1,8 Meilen",
|
"imperial_mi1_8": "Innerhalb von 1,8 Meilen",
|
||||||
"imperial_mi0_9": "Innerhalb von 0,9 Meilen",
|
"imperial_mi0_9": "Innerhalb von 0,9 Meilen",
|
||||||
"imperial_mi0_5": "Innerhalb von 0,5 Meilen",
|
"imperial_mi0_5": "Innerhalb von 0,5 Meilen",
|
||||||
"imperial_mi0_2": "Innerhalb von 0,2 Meilen",
|
"imperial_mi0_2": "Innerhalb von 0,2 Meilen",
|
||||||
"imperial_ft600": "Innerhalb von 600 Fuß",
|
"imperial_ft600": "Innerhalb von 600 Fuß",
|
||||||
"imperial_ft300": "Innerhalb von 300 Fuß",
|
"imperial_ft300": "Innerhalb von 300 Fuß",
|
||||||
"imperial_ft150": "Innerhalb von 150 Fuß"
|
"imperial_ft150": "Innerhalb von 150 Fuß"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"neighborInfo": {
|
"neighborInfo": {
|
||||||
"title": "Einstellung Nachbarinformation",
|
"title": "Einstellung Nachbarinformation",
|
||||||
"description": "Einstellungen für das Modul Nachbarinformation",
|
"description": "Einstellungen für das Modul Nachbarinformation",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Aktiviert",
|
"label": "Aktiviert",
|
||||||
"description": "Nachbarinformation Modul aktivieren oder deaktivieren"
|
"description": "Nachbarinformation Modul aktivieren oder deaktivieren"
|
||||||
},
|
},
|
||||||
"updateInterval": {
|
"updateInterval": {
|
||||||
"label": "Aktualisierungsintervall",
|
"label": "Aktualisierungsintervall",
|
||||||
"description": "Intervall in Sekunden, wie oft die Nachbarinformation an das Netz gesendet wird"
|
"description": "Intervall in Sekunden, wie oft die Nachbarinformation an das Netz gesendet wird"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"paxcounter": {
|
"paxcounter": {
|
||||||
"title": "Einstellung für Pax Zähler",
|
"title": "Einstellung für Pax Zähler",
|
||||||
"description": "Einstellungen für das Modul Pax Zähler",
|
"description": "Einstellungen für das Modul Pax Zähler",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Modul aktiviert",
|
"label": "Modul aktiviert",
|
||||||
"description": "Aktiviere Pax Zähler"
|
"description": "Aktiviere Pax Zähler"
|
||||||
},
|
},
|
||||||
"paxcounterUpdateInterval": {
|
"paxcounterUpdateInterval": {
|
||||||
"label": "Aktualisierungsintervall (Sekunden)",
|
"label": "Aktualisierungsintervall (Sekunden)",
|
||||||
"description": "Wie lange soll zwischen dem Senden von Pax Zählernachrichten gewartet werden"
|
"description": "Wie lange soll zwischen dem Senden von Pax Zählernachrichten gewartet werden"
|
||||||
},
|
},
|
||||||
"wifiThreshold": {
|
"wifiThreshold": {
|
||||||
"label": "WLAN RSSI Grenzwert",
|
"label": "WLAN RSSI Grenzwert",
|
||||||
"description": "Bei welchem WLAN RSSI Grenzwert sollte der Zähler erhöht werden. Standardwert -80"
|
"description": "Bei welchem WLAN RSSI Grenzwert sollte der Zähler erhöht werden. Standardwert -80"
|
||||||
},
|
},
|
||||||
"bleThreshold": {
|
"bleThreshold": {
|
||||||
"label": "BLE RSSI Grenzwert",
|
"label": "BLE RSSI Grenzwert",
|
||||||
"description": "Bei welchem BLE RSSI Grenzwert sollte der Zähler erhöht werden. Standardwert -80"
|
"description": "Bei welchem BLE RSSI Grenzwert sollte der Zähler erhöht werden. Standardwert -80"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rangeTest": {
|
"rangeTest": {
|
||||||
"title": "Einstellung Reichweitentest",
|
"title": "Einstellung Reichweitentest",
|
||||||
"description": "Einstellungen für das Modul Reichweitentest",
|
"description": "Einstellungen für das Modul Reichweitentest",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Modul aktiviert",
|
"label": "Modul aktiviert",
|
||||||
"description": "Reichweitentest aktivieren"
|
"description": "Reichweitentest aktivieren"
|
||||||
},
|
},
|
||||||
"sender": {
|
"sender": {
|
||||||
"label": "Nachrichtenintervall",
|
"label": "Nachrichtenintervall",
|
||||||
"description": "Wie lange soll zwischen dem Senden von Testnachrichten gewartet werden"
|
"description": "Wie lange soll zwischen dem Senden von Testnachrichten gewartet werden"
|
||||||
},
|
},
|
||||||
"save": {
|
"save": {
|
||||||
"label": "CSV im internen Speicher abspeichern",
|
"label": "CSV im internen Speicher abspeichern",
|
||||||
"description": "Nur für ESP32"
|
"description": "Nur für ESP32"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"serial": {
|
"serial": {
|
||||||
"title": "Serielle Einstellungen",
|
"title": "Serielle Einstellungen",
|
||||||
"description": "Einstellungen für das serielle Modul",
|
"description": "Einstellungen für das serielle Modul",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Modul aktiviert",
|
"label": "Modul aktiviert",
|
||||||
"description": "Serielle Ausgabe aktivieren"
|
"description": "Serielle Ausgabe aktivieren"
|
||||||
},
|
},
|
||||||
"echo": {
|
"echo": {
|
||||||
"label": "Echo",
|
"label": "Echo",
|
||||||
"description": "Wenn aktiviert, werden alle Nachrichten, die Sie senden, an Ihr Gerät zurückgesendet"
|
"description": "Wenn aktiviert, werden alle Nachrichten, die Sie senden, an Ihr Gerät zurückgesendet"
|
||||||
},
|
},
|
||||||
"rxd": {
|
"rxd": {
|
||||||
"label": "GPIO Empfangen",
|
"label": "GPIO Empfangen",
|
||||||
"description": "Setzen Sie den GPIO Pin, den Sie eingerichtet haben, als RXD Pin."
|
"description": "Setzen Sie den GPIO Pin, den Sie eingerichtet haben, als RXD Pin."
|
||||||
},
|
},
|
||||||
"txd": {
|
"txd": {
|
||||||
"label": "GPIO Senden",
|
"label": "GPIO Senden",
|
||||||
"description": "Setzen Sie den GPIO Pin, den Sie eingerichtet haben, als TXD Pin."
|
"description": "Setzen Sie den GPIO Pin, den Sie eingerichtet haben, als TXD Pin."
|
||||||
},
|
},
|
||||||
"baud": {
|
"baud": {
|
||||||
"label": "Baudrate",
|
"label": "Baudrate",
|
||||||
"description": "Serielle Baudrate"
|
"description": "Serielle Baudrate"
|
||||||
},
|
},
|
||||||
"timeout": {
|
"timeout": {
|
||||||
"label": "Zeitlimit erreicht",
|
"label": "Zeitlimit erreicht",
|
||||||
"description": "Wartezeit in Sekunden bis eine Nachricht als gesendet angenommen wird"
|
"description": "Wartezeit in Sekunden bis eine Nachricht als gesendet angenommen wird"
|
||||||
},
|
},
|
||||||
"mode": {
|
"mode": {
|
||||||
"label": "Betriebsmodus",
|
"label": "Betriebsmodus",
|
||||||
"description": "Modus auswählen"
|
"description": "Modus auswählen"
|
||||||
},
|
},
|
||||||
"overrideConsoleSerialPort": {
|
"overrideConsoleSerialPort": {
|
||||||
"label": "Seriellen Port der Konsole überschreiben",
|
"label": "Seriellen Port der Konsole überschreiben",
|
||||||
"description": "Wenn Sie einen seriellen Port an die Konsole angeschlossen haben, wird diese überschrieben."
|
"description": "Wenn Sie einen seriellen Port an die Konsole angeschlossen haben, wird diese überschrieben."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storeForward": {
|
"storeForward": {
|
||||||
"title": "Speichern & Weiterleiten Einstellungen",
|
"title": "Speichern & Weiterleiten Einstellungen",
|
||||||
"description": "Einstellungen für das Modul Speichern & Weiterleiten",
|
"description": "Einstellungen für das Modul Speichern & Weiterleiten",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Modul aktiviert",
|
"label": "Modul aktiviert",
|
||||||
"description": "Speichern & Weiterleiten aktivieren"
|
"description": "Speichern & Weiterleiten aktivieren"
|
||||||
},
|
},
|
||||||
"heartbeat": {
|
"heartbeat": {
|
||||||
"label": "Herzschlag aktiviert",
|
"label": "Herzschlag aktiviert",
|
||||||
"description": "Herzschlag für Speichern & Weiterleiten aktivieren"
|
"description": "Herzschlag für Speichern & Weiterleiten aktivieren"
|
||||||
},
|
},
|
||||||
"records": {
|
"records": {
|
||||||
"label": "Anzahl Einträge",
|
"label": "Anzahl Einträge",
|
||||||
"description": "Anzahl der zu speichernden Datensätze"
|
"description": "Anzahl der zu speichernden Datensätze"
|
||||||
},
|
},
|
||||||
"historyReturnMax": {
|
"historyReturnMax": {
|
||||||
"label": "Verlauf Rückgabewert maximal",
|
"label": "Verlauf Rückgabewert maximal",
|
||||||
"description": "Maximale Anzahl an zurückzugebenden Datensätzen"
|
"description": "Maximale Anzahl an zurückzugebenden Datensätzen"
|
||||||
},
|
},
|
||||||
"historyReturnWindow": {
|
"historyReturnWindow": {
|
||||||
"label": "Zeitraum Rückgabewert",
|
"label": "Zeitraum Rückgabewert",
|
||||||
"description": "Maximale Anzahl an zurückzugebenden Datensätzen"
|
"description": "Maximale Anzahl an zurückzugebenden Datensätzen"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"telemetry": {
|
"telemetry": {
|
||||||
"title": "Telemetrieeinstellungen",
|
"title": "Telemetrieeinstellungen",
|
||||||
"description": "Einstellungen für das Telemetriemodul",
|
"description": "Einstellungen für das Telemetriemodul",
|
||||||
"deviceUpdateInterval": {
|
"deviceUpdateInterval": {
|
||||||
"label": "Gerätekennzahlen",
|
"label": "Gerätekennzahlen",
|
||||||
"description": "Aktualisierungsintervall für Gerätekennzahlen (Sekunden)"
|
"description": "Aktualisierungsintervall für Gerätekennzahlen (Sekunden)"
|
||||||
},
|
},
|
||||||
"environmentUpdateInterval": {
|
"environmentUpdateInterval": {
|
||||||
"label": "Aktualisierungsintervall für Umweltdaten (Sekunden)",
|
"label": "Aktualisierungsintervall für Umweltdaten (Sekunden)",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"environmentMeasurementEnabled": {
|
"environmentMeasurementEnabled": {
|
||||||
"label": "Modul aktiviert",
|
"label": "Modul aktiviert",
|
||||||
"description": "Aktiviert die Telemetrie für Umweltdaten"
|
"description": "Aktiviert die Telemetrie für Umweltdaten"
|
||||||
},
|
},
|
||||||
"environmentScreenEnabled": {
|
"environmentScreenEnabled": {
|
||||||
"label": "OLED Anzeige aktivieren",
|
"label": "OLED Anzeige aktivieren",
|
||||||
"description": "Zeige das Telemetriemodul auf der OLED Anzeige"
|
"description": "Zeige das Telemetriemodul auf der OLED Anzeige"
|
||||||
},
|
},
|
||||||
"environmentDisplayFahrenheit": {
|
"environmentDisplayFahrenheit": {
|
||||||
"label": "Temperatur in Fahrenheit",
|
"label": "Temperatur in Fahrenheit",
|
||||||
"description": "Temperatur in Fahrenheit anzeigen"
|
"description": "Temperatur in Fahrenheit anzeigen"
|
||||||
},
|
},
|
||||||
"airQualityEnabled": {
|
"airQualityEnabled": {
|
||||||
"label": "Luftqualität aktiviert",
|
"label": "Luftqualität aktiviert",
|
||||||
"description": "Telemetrie für Luftqualität aktivieren"
|
"description": "Telemetrie für Luftqualität aktivieren"
|
||||||
},
|
},
|
||||||
"airQualityInterval": {
|
"airQualityInterval": {
|
||||||
"label": "Aktualisierungsintervall Luftqualität",
|
"label": "Aktualisierungsintervall Luftqualität",
|
||||||
"description": "Wie oft werden Luftqualitätsdaten über das Netz gesendet"
|
"description": "Wie oft werden Luftqualitätsdaten über das Netz gesendet"
|
||||||
},
|
},
|
||||||
"powerMeasurementEnabled": {
|
"powerMeasurementEnabled": {
|
||||||
"label": "Energiemessung aktiviert",
|
"label": "Energiemessung aktiviert",
|
||||||
"description": "Aktiviere die Telemetrie für die Energiemessung"
|
"description": "Aktiviere die Telemetrie für die Energiemessung"
|
||||||
},
|
},
|
||||||
"powerUpdateInterval": {
|
"powerUpdateInterval": {
|
||||||
"label": "Aktualisierungsintervall Energie",
|
"label": "Aktualisierungsintervall Energie",
|
||||||
"description": "Wie oft werden Energiedaten an das Netz gesendet"
|
"description": "Wie oft werden Energiedaten an das Netz gesendet"
|
||||||
},
|
},
|
||||||
"powerScreenEnabled": {
|
"powerScreenEnabled": {
|
||||||
"label": "Energieanzeige aktiviert",
|
"label": "Energieanzeige aktiviert",
|
||||||
"description": "Aktiviere die Anzeige für Energietelemetrie"
|
"description": "Aktiviere die Anzeige für Energietelemetrie"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,63 +1,63 @@
|
|||||||
{
|
{
|
||||||
"nodeDetail": {
|
"nodeDetail": {
|
||||||
"publicKeyEnabled": {
|
"publicKeyEnabled": {
|
||||||
"label": "Öffentlicher Schlüssel aktiviert"
|
"label": "Öffentlicher Schlüssel aktiviert"
|
||||||
},
|
},
|
||||||
"noPublicKey": {
|
"noPublicKey": {
|
||||||
"label": "Kein öffentlicher Schlüssel"
|
"label": "Kein öffentlicher Schlüssel"
|
||||||
},
|
},
|
||||||
"directMessage": {
|
"directMessage": {
|
||||||
"label": "Direktnachricht {{shortName}}"
|
"label": "Direktnachricht {{shortName}}"
|
||||||
},
|
},
|
||||||
"favorite": {
|
"favorite": {
|
||||||
"label": "Favorit",
|
"label": "Favorit",
|
||||||
"tooltip": "Diesen Knoten zu Favoriten hinzufügen oder entfernen"
|
"tooltip": "Diesen Knoten zu Favoriten hinzufügen oder entfernen"
|
||||||
},
|
},
|
||||||
"notFavorite": {
|
"notFavorite": {
|
||||||
"label": "Kein Favorit"
|
"label": "Kein Favorit"
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"label": "Fehler",
|
"label": "Fehler",
|
||||||
"text": "Beim Abrufen der Knotendetails ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut."
|
"text": "Beim Abrufen der Knotendetails ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut."
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"heard": "Gehört",
|
"heard": "Gehört",
|
||||||
"mqtt": "MQTT"
|
"mqtt": "MQTT"
|
||||||
},
|
},
|
||||||
"elevation": {
|
"elevation": {
|
||||||
"label": "Höhe"
|
"label": "Höhe"
|
||||||
},
|
},
|
||||||
"channelUtil": {
|
"channelUtil": {
|
||||||
"label": "Kanal-Auslastung"
|
"label": "Kanal-Auslastung"
|
||||||
},
|
},
|
||||||
"airtimeUtil": {
|
"airtimeUtil": {
|
||||||
"label": "Sendezeit-Auslastung"
|
"label": "Sendezeit-Auslastung"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nodesTable": {
|
"nodesTable": {
|
||||||
"headings": {
|
"headings": {
|
||||||
"longName": "Langer Name",
|
"longName": "Langer Name",
|
||||||
"connection": "Verbindung",
|
"connection": "Verbindung",
|
||||||
"lastHeard": "Zuletzt gehört",
|
"lastHeard": "Zuletzt gehört",
|
||||||
"encryption": "Verschlüsselung",
|
"encryption": "Verschlüsselung",
|
||||||
"model": "Modell",
|
"model": "Modell",
|
||||||
"macAddress": "MAC Adresse"
|
"macAddress": "MAC Adresse"
|
||||||
},
|
},
|
||||||
"connectionStatus": {
|
"connectionStatus": {
|
||||||
"direct": "Direkt",
|
"direct": "Direkt",
|
||||||
"away": "abwesend",
|
"away": "abwesend",
|
||||||
"unknown": "-",
|
"unknown": "-",
|
||||||
"viaMqtt": ", über MQTT"
|
"viaMqtt": ", über MQTT"
|
||||||
},
|
},
|
||||||
"lastHeardStatus": {
|
"lastHeardStatus": {
|
||||||
"never": "Nie"
|
"never": "Nie"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"actions": {
|
"actions": {
|
||||||
"added": "Hinzugefügt",
|
"added": "Hinzugefügt",
|
||||||
"removed": "Entfernt",
|
"removed": "Entfernt",
|
||||||
"ignoreNode": "Knoten ignorieren",
|
"ignoreNode": "Knoten ignorieren",
|
||||||
"unignoreNode": "Knoten akzeptieren",
|
"unignoreNode": "Knoten akzeptieren",
|
||||||
"requestPosition": "Standort anfordern"
|
"requestPosition": "Standort anfordern"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,228 +1,228 @@
|
|||||||
{
|
{
|
||||||
"navigation": {
|
"navigation": {
|
||||||
"title": "Navigation",
|
"title": "Navigation",
|
||||||
"messages": "Nachrichten",
|
"messages": "Nachrichten",
|
||||||
"map": "Karte",
|
"map": "Karte",
|
||||||
"config": "Einstellungen",
|
"config": "Einstellungen",
|
||||||
"radioConfig": "Funkgerätekonfiguration",
|
"radioConfig": "Funkgerätekonfiguration",
|
||||||
"moduleConfig": "Moduleinstellungen",
|
"moduleConfig": "Moduleinstellungen",
|
||||||
"channels": "Kanäle",
|
"channels": "Kanäle",
|
||||||
"nodes": "Knoten"
|
"nodes": "Knoten"
|
||||||
},
|
},
|
||||||
"app": {
|
"app": {
|
||||||
"title": "Meshtastic",
|
"title": "Meshtastic",
|
||||||
"logo": "Meshtastic Logo"
|
"logo": "Meshtastic Logo"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"collapseToggle": {
|
"collapseToggle": {
|
||||||
"button": {
|
"button": {
|
||||||
"open": "Seitenleiste öffnen",
|
"open": "Seitenleiste öffnen",
|
||||||
"close": "Seitenleiste schließen"
|
"close": "Seitenleiste schließen"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"deviceInfo": {
|
"deviceInfo": {
|
||||||
"volts": "{{voltage}} Volt",
|
"volts": "{{voltage}} Volt",
|
||||||
"firmware": {
|
"firmware": {
|
||||||
"title": "Firmware",
|
"title": "Firmware",
|
||||||
"version": "v{{version}}",
|
"version": "v{{version}}",
|
||||||
"buildDate": "Erstelldatum: {{date}}"
|
"buildDate": "Erstelldatum: {{date}}"
|
||||||
},
|
},
|
||||||
"deviceName": {
|
"deviceName": {
|
||||||
"title": "Gerätename",
|
"title": "Gerätename",
|
||||||
"changeName": "Gerätename ändern",
|
"changeName": "Gerätename ändern",
|
||||||
"placeholder": "Gerätename eingeben"
|
"placeholder": "Gerätename eingeben"
|
||||||
},
|
},
|
||||||
"editDeviceName": "Gerätename bearbeiten"
|
"editDeviceName": "Gerätename bearbeiten"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"batteryStatus": {
|
"batteryStatus": {
|
||||||
"charging": "{{level}}% Ladung",
|
"charging": "{{level}}% Ladung",
|
||||||
"pluggedIn": "Wird geladen",
|
"pluggedIn": "Wird geladen",
|
||||||
"title": "Batterie"
|
"title": "Batterie"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"nodes": "Knoten suchen...",
|
"nodes": "Knoten suchen...",
|
||||||
"channels": "Kanäle suchen...",
|
"channels": "Kanäle suchen...",
|
||||||
"commandPalette": "Befehle suchen..."
|
"commandPalette": "Befehle suchen..."
|
||||||
},
|
},
|
||||||
"toast": {
|
"toast": {
|
||||||
"positionRequestSent": {
|
"positionRequestSent": {
|
||||||
"title": "Standortanfrage gesendet."
|
"title": "Standortanfrage gesendet."
|
||||||
},
|
},
|
||||||
"requestingPosition": {
|
"requestingPosition": {
|
||||||
"title": "Standort wird angefordert, bitte warten..."
|
"title": "Standort wird angefordert, bitte warten..."
|
||||||
},
|
},
|
||||||
"sendingTraceroute": {
|
"sendingTraceroute": {
|
||||||
"title": "Sende Traceroute, bitte warten..."
|
"title": "Sende Traceroute, bitte warten..."
|
||||||
},
|
},
|
||||||
"tracerouteSent": {
|
"tracerouteSent": {
|
||||||
"title": "Traceroute gesendet."
|
"title": "Traceroute gesendet."
|
||||||
},
|
},
|
||||||
"savedChannel": {
|
"savedChannel": {
|
||||||
"title": "Gespeicherter Kanal: {{channelName}}"
|
"title": "Gespeicherter Kanal: {{channelName}}"
|
||||||
},
|
},
|
||||||
"messages": {
|
"messages": {
|
||||||
"pkiEncryption": {
|
"pkiEncryption": {
|
||||||
"title": "Der Chat verwendet PKI-Verschlüsselung."
|
"title": "Der Chat verwendet PKI-Verschlüsselung."
|
||||||
},
|
},
|
||||||
"pskEncryption": {
|
"pskEncryption": {
|
||||||
"title": "Chat verwendet PSK-Verschlüsselung."
|
"title": "Chat verwendet PSK-Verschlüsselung."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"configSaveError": {
|
"configSaveError": {
|
||||||
"title": "Fehler beim Speichern von Einstellung",
|
"title": "Fehler beim Speichern von Einstellung",
|
||||||
"description": "Beim Speichern der Einstellungen ist ein Fehler aufgetreten."
|
"description": "Beim Speichern der Einstellungen ist ein Fehler aufgetreten."
|
||||||
},
|
},
|
||||||
"validationError": {
|
"validationError": {
|
||||||
"title": "Einstellungsfehler vorhanden",
|
"title": "Einstellungsfehler vorhanden",
|
||||||
"description": "Bitte korrigieren Sie die Einstellungsfehler vor dem Speichern."
|
"description": "Bitte korrigieren Sie die Einstellungsfehler vor dem Speichern."
|
||||||
},
|
},
|
||||||
"saveSuccess": {
|
"saveSuccess": {
|
||||||
"title": "Einstellungen speichern",
|
"title": "Einstellungen speichern",
|
||||||
"description": "Die Einstellungsänderung {{case}} wurde gespeichert."
|
"description": "Die Einstellungsänderung {{case}} wurde gespeichert."
|
||||||
},
|
},
|
||||||
"favoriteNode": {
|
"favoriteNode": {
|
||||||
"title": "{{action}} {{nodeName}} {{direction}} Favoriten.",
|
"title": "{{action}} {{nodeName}} {{direction}} Favoriten.",
|
||||||
"action": {
|
"action": {
|
||||||
"added": "Hinzugefügt",
|
"added": "Hinzugefügt",
|
||||||
"removed": "Entfernt",
|
"removed": "Entfernt",
|
||||||
"to": "bis",
|
"to": "bis",
|
||||||
"from": "von"
|
"from": "von"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ignoreNode": {
|
"ignoreNode": {
|
||||||
"title": "{{action}} {{nodeName}} {{direction}} Ignorierliste",
|
"title": "{{action}} {{nodeName}} {{direction}} Ignorierliste",
|
||||||
"action": {
|
"action": {
|
||||||
"added": "Hinzugefügt",
|
"added": "Hinzugefügt",
|
||||||
"removed": "Entfernt",
|
"removed": "Entfernt",
|
||||||
"to": "bis",
|
"to": "bis",
|
||||||
"from": "von"
|
"from": "von"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"copied": {
|
"copied": {
|
||||||
"label": "Kopiert!"
|
"label": "Kopiert!"
|
||||||
},
|
},
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"label": "In die Zwischenablage kopieren"
|
"label": "In die Zwischenablage kopieren"
|
||||||
},
|
},
|
||||||
"hidePassword": {
|
"hidePassword": {
|
||||||
"label": "Passwort verbergen"
|
"label": "Passwort verbergen"
|
||||||
},
|
},
|
||||||
"showPassword": {
|
"showPassword": {
|
||||||
"label": "Passwort anzeigen"
|
"label": "Passwort anzeigen"
|
||||||
},
|
},
|
||||||
"deliveryStatus": {
|
"deliveryStatus": {
|
||||||
"delivered": "Zugestellt",
|
"delivered": "Zugestellt",
|
||||||
"failed": "Zustellung fehlgeschlagen",
|
"failed": "Zustellung fehlgeschlagen",
|
||||||
"waiting": "Warte...",
|
"waiting": "Warte...",
|
||||||
"unknown": "Unbekannt"
|
"unknown": "Unbekannt"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"general": {
|
"general": {
|
||||||
"label": "Allgemein"
|
"label": "Allgemein"
|
||||||
},
|
},
|
||||||
"hardware": {
|
"hardware": {
|
||||||
"label": "Hardware"
|
"label": "Hardware"
|
||||||
},
|
},
|
||||||
"metrics": {
|
"metrics": {
|
||||||
"label": "Messgrößen"
|
"label": "Messgrößen"
|
||||||
},
|
},
|
||||||
"role": {
|
"role": {
|
||||||
"label": "Rolle"
|
"label": "Rolle"
|
||||||
},
|
},
|
||||||
"filter": {
|
"filter": {
|
||||||
"label": "Filter"
|
"label": "Filter"
|
||||||
},
|
},
|
||||||
"advanced": {
|
"advanced": {
|
||||||
"label": "Fortgeschritten"
|
"label": "Fortgeschritten"
|
||||||
},
|
},
|
||||||
"clearInput": {
|
"clearInput": {
|
||||||
"label": "Eingabe löschen"
|
"label": "Eingabe löschen"
|
||||||
},
|
},
|
||||||
"resetFilters": {
|
"resetFilters": {
|
||||||
"label": "Filter zurücksetzen"
|
"label": "Filter zurücksetzen"
|
||||||
},
|
},
|
||||||
"nodeName": {
|
"nodeName": {
|
||||||
"label": "Knotenname/-nummer",
|
"label": "Knotenname/-nummer",
|
||||||
"placeholder": "Meshtastic 1234"
|
"placeholder": "Meshtastic 1234"
|
||||||
},
|
},
|
||||||
"airtimeUtilization": {
|
"airtimeUtilization": {
|
||||||
"label": "Sendezeit-Auslastung (%)"
|
"label": "Sendezeit-Auslastung (%)"
|
||||||
},
|
},
|
||||||
"batteryLevel": {
|
"batteryLevel": {
|
||||||
"label": "Akkustand (%)",
|
"label": "Akkustand (%)",
|
||||||
"labelText": "Akkustand (%): {{value}}"
|
"labelText": "Akkustand (%): {{value}}"
|
||||||
},
|
},
|
||||||
"batteryVoltage": {
|
"batteryVoltage": {
|
||||||
"label": "Batteriespannung (V)",
|
"label": "Batteriespannung (V)",
|
||||||
"title": "Spannung"
|
"title": "Spannung"
|
||||||
},
|
},
|
||||||
"channelUtilization": {
|
"channelUtilization": {
|
||||||
"label": "Kanalauslastung (%)"
|
"label": "Kanalauslastung (%)"
|
||||||
},
|
},
|
||||||
"hops": {
|
"hops": {
|
||||||
"direct": "Direkt",
|
"direct": "Direkt",
|
||||||
"label": "Anzahl Hops",
|
"label": "Anzahl Hops",
|
||||||
"text": "Sprungweite: {{value}}"
|
"text": "Sprungweite: {{value}}"
|
||||||
},
|
},
|
||||||
"lastHeard": {
|
"lastHeard": {
|
||||||
"label": "Zuletzt gehört",
|
"label": "Zuletzt gehört",
|
||||||
"labelText": "Zuletzt gehört: {{value}}",
|
"labelText": "Zuletzt gehört: {{value}}",
|
||||||
"nowLabel": "Jetzt"
|
"nowLabel": "Jetzt"
|
||||||
},
|
},
|
||||||
"snr": {
|
"snr": {
|
||||||
"label": "SNR (dB)"
|
"label": "SNR (dB)"
|
||||||
},
|
},
|
||||||
"favorites": {
|
"favorites": {
|
||||||
"label": "Favoriten"
|
"label": "Favoriten"
|
||||||
},
|
},
|
||||||
"hide": {
|
"hide": {
|
||||||
"label": "Ausblenden"
|
"label": "Ausblenden"
|
||||||
},
|
},
|
||||||
"showOnly": {
|
"showOnly": {
|
||||||
"label": "Zeige nur"
|
"label": "Zeige nur"
|
||||||
},
|
},
|
||||||
"viaMqtt": {
|
"viaMqtt": {
|
||||||
"label": "Über MQTT verbunden"
|
"label": "Über MQTT verbunden"
|
||||||
},
|
},
|
||||||
"hopsUnknown": {
|
"hopsUnknown": {
|
||||||
"label": "Unbekannte Sprungweite"
|
"label": "Unbekannte Sprungweite"
|
||||||
},
|
},
|
||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Nie gehört"
|
"label": "Nie gehört"
|
||||||
},
|
},
|
||||||
"language": {
|
"language": {
|
||||||
"label": "Sprache",
|
"label": "Sprache",
|
||||||
"changeLanguage": "Sprache ändern"
|
"changeLanguage": "Sprache ändern"
|
||||||
},
|
},
|
||||||
"theme": {
|
"theme": {
|
||||||
"dark": "Dunkel",
|
"dark": "Dunkel",
|
||||||
"light": "Hell",
|
"light": "Hell",
|
||||||
"system": "Automatisch",
|
"system": "Automatisch",
|
||||||
"changeTheme": "Farbschema ändern"
|
"changeTheme": "Farbschema ändern"
|
||||||
},
|
},
|
||||||
"errorPage": {
|
"errorPage": {
|
||||||
"title": "Das ist ein wenig peinlich...",
|
"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.",
|
"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.",
|
"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:",
|
"reportInstructions": "Bitte fügen Sie folgende Informationen in Ihren Bericht ein:",
|
||||||
"reportSteps": {
|
"reportSteps": {
|
||||||
"step1": "Was haben Sie getan, als der Fehler aufgetreten ist",
|
"step1": "Was haben Sie getan, als der Fehler aufgetreten ist",
|
||||||
"step2": "Was haben Sie erwartet",
|
"step2": "Was haben Sie erwartet",
|
||||||
"step3": "Was tatsächlich passiert ist",
|
"step3": "Was tatsächlich passiert ist",
|
||||||
"step4": "Sonstige relevante Informationen"
|
"step4": "Sonstige relevante Informationen"
|
||||||
},
|
},
|
||||||
"reportLink": "Sie können das Problem auf unserem <0>GitHub</0> melden",
|
"reportLink": "Sie können das Problem auf unserem <0>GitHub</0> melden",
|
||||||
"dashboardLink": "Zurück zum <0>Dashboard</0>",
|
"dashboardLink": "Zurück zum <0>Dashboard</0>",
|
||||||
"detailsSummary": "Fehlerdetails",
|
"detailsSummary": "Fehlerdetails",
|
||||||
"errorMessageLabel": "Fehlermeldungen:",
|
"errorMessageLabel": "Fehlermeldungen:",
|
||||||
"stackTraceLabel": "Stapelabzug:",
|
"stackTraceLabel": "Stapelabzug:",
|
||||||
"fallbackError": "{{error}}"
|
"fallbackError": "{{error}}"
|
||||||
},
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"text": "Powered by <0>▲ Vercel</0> | Meshtastic®️ ist eine eingetragene Marke der Meshtastic LLC. | <1>Rechtliche Informationen</1>",
|
"text": "Powered by <0>▲ Vercel</0> | Meshtastic®️ ist eine eingetragene Marke der Meshtastic LLC. | <1>Rechtliche Informationen</1>",
|
||||||
"commitSha": "Commit SHA: {{sha}}"
|
"commitSha": "Commit SHA: {{sha}}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,69 +1,69 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"sectionLabel": "Channels",
|
"sectionLabel": "Channels",
|
||||||
"channelName": "Channel: {{channelName}}",
|
"channelName": "Channel: {{channelName}}",
|
||||||
"broadcastLabel": "Primary",
|
"broadcastLabel": "Primary",
|
||||||
"channelIndex": "Ch {{index}}"
|
"channelIndex": "Ch {{index}}"
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
|
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"label": "Channel Settings",
|
"label": "Channel Settings",
|
||||||
"description": "Crypto, MQTT & misc settings"
|
"description": "Crypto, MQTT & misc settings"
|
||||||
},
|
},
|
||||||
"role": {
|
"role": {
|
||||||
"label": "Role",
|
"label": "Role",
|
||||||
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
|
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
|
||||||
"options": {
|
"options": {
|
||||||
"primary": "PRIMARY",
|
"primary": "PRIMARY",
|
||||||
"disabled": "DISABLED",
|
"disabled": "DISABLED",
|
||||||
"secondary": "SECONDARY"
|
"secondary": "SECONDARY"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"psk": {
|
"psk": {
|
||||||
"label": "Pre-Shared Key",
|
"label": "Pre-Shared Key",
|
||||||
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
|
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
|
||||||
"generate": "Generate"
|
"generate": "Generate"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"label": "Name",
|
"label": "Name",
|
||||||
"description": "A unique name for the channel <12 bytes, leave blank for default"
|
"description": "A unique name for the channel <12 bytes, leave blank for default"
|
||||||
},
|
},
|
||||||
"uplinkEnabled": {
|
"uplinkEnabled": {
|
||||||
"label": "Uplink Enabled",
|
"label": "Uplink Enabled",
|
||||||
"description": "Send messages from the local mesh to MQTT"
|
"description": "Send messages from the local mesh to MQTT"
|
||||||
},
|
},
|
||||||
"downlinkEnabled": {
|
"downlinkEnabled": {
|
||||||
"label": "Downlink Enabled",
|
"label": "Downlink Enabled",
|
||||||
"description": "Send messages from MQTT to the local mesh"
|
"description": "Send messages from MQTT to the local mesh"
|
||||||
},
|
},
|
||||||
"positionPrecision": {
|
"positionPrecision": {
|
||||||
"label": "Location",
|
"label": "Location",
|
||||||
"description": "The precision of the location to share with the channel. Can be disabled.",
|
"description": "The precision of the location to share with the channel. Can be disabled.",
|
||||||
"options": {
|
"options": {
|
||||||
"none": "Do not share location",
|
"none": "Do not share location",
|
||||||
"precise": "Precise Location",
|
"precise": "Precise Location",
|
||||||
"metric_km23": "Within 23 kilometers",
|
"metric_km23": "Within 23 kilometers",
|
||||||
"metric_km12": "Within 12 kilometers",
|
"metric_km12": "Within 12 kilometers",
|
||||||
"metric_km5_8": "Within 5.8 kilometers",
|
"metric_km5_8": "Within 5.8 kilometers",
|
||||||
"metric_km2_9": "Within 2.9 kilometers",
|
"metric_km2_9": "Within 2.9 kilometers",
|
||||||
"metric_km1_5": "Within 1.5 kilometers",
|
"metric_km1_5": "Within 1.5 kilometers",
|
||||||
"metric_m700": "Within 700 meters",
|
"metric_m700": "Within 700 meters",
|
||||||
"metric_m350": "Within 350 meters",
|
"metric_m350": "Within 350 meters",
|
||||||
"metric_m200": "Within 200 meters",
|
"metric_m200": "Within 200 meters",
|
||||||
"metric_m90": "Within 90 meters",
|
"metric_m90": "Within 90 meters",
|
||||||
"metric_m50": "Within 50 meters",
|
"metric_m50": "Within 50 meters",
|
||||||
"imperial_mi15": "Within 15 miles",
|
"imperial_mi15": "Within 15 miles",
|
||||||
"imperial_mi7_3": "Within 7.3 miles",
|
"imperial_mi7_3": "Within 7.3 miles",
|
||||||
"imperial_mi3_6": "Within 3.6 miles",
|
"imperial_mi3_6": "Within 3.6 miles",
|
||||||
"imperial_mi1_8": "Within 1.8 miles",
|
"imperial_mi1_8": "Within 1.8 miles",
|
||||||
"imperial_mi0_9": "Within 0.9 miles",
|
"imperial_mi0_9": "Within 0.9 miles",
|
||||||
"imperial_mi0_5": "Within 0.5 miles",
|
"imperial_mi0_5": "Within 0.5 miles",
|
||||||
"imperial_mi0_2": "Within 0.2 miles",
|
"imperial_mi0_2": "Within 0.2 miles",
|
||||||
"imperial_ft600": "Within 600 feet",
|
"imperial_ft600": "Within 600 feet",
|
||||||
"imperial_ft300": "Within 300 feet",
|
"imperial_ft300": "Within 300 feet",
|
||||||
"imperial_ft150": "Within 150 feet"
|
"imperial_ft150": "Within 150 feet"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,112 +1,112 @@
|
|||||||
{
|
{
|
||||||
"button": {
|
"button": {
|
||||||
"apply": "Apply",
|
"apply": "Apply",
|
||||||
"backupKey": "Backup Key",
|
"backupKey": "Backup Key",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"clearMessages": "Clear Messages",
|
"clearMessages": "Clear Messages",
|
||||||
"close": "Close",
|
"close": "Close",
|
||||||
"confirm": "Confirm",
|
"confirm": "Confirm",
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"dismiss": "Dismiss",
|
"dismiss": "Dismiss",
|
||||||
"download": "Download",
|
"download": "Download",
|
||||||
"export": "Export",
|
"export": "Export",
|
||||||
"generate": "Generate",
|
"generate": "Generate",
|
||||||
"regenerate": "Regenerate",
|
"regenerate": "Regenerate",
|
||||||
"import": "Import",
|
"import": "Import",
|
||||||
"message": "Message",
|
"message": "Message",
|
||||||
"now": "Now",
|
"now": "Now",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"print": "Print",
|
"print": "Print",
|
||||||
"rebootOtaNow": "Reboot to OTA Mode Now",
|
"rebootOtaNow": "Reboot to OTA Mode Now",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"requestNewKeys": "Request New Keys",
|
"requestNewKeys": "Request New Keys",
|
||||||
"requestPosition": "Request Position",
|
"requestPosition": "Request Position",
|
||||||
"reset": "Reset",
|
"reset": "Reset",
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"scanQr": "Scan QR Code",
|
"scanQr": "Scan QR Code",
|
||||||
"traceRoute": "Trace Route",
|
"traceRoute": "Trace Route",
|
||||||
"submit": "Submit"
|
"submit": "Submit"
|
||||||
},
|
},
|
||||||
"app": {
|
"app": {
|
||||||
"title": "Meshtastic",
|
"title": "Meshtastic",
|
||||||
"fullTitle": "Meshtastic Web Client"
|
"fullTitle": "Meshtastic Web Client"
|
||||||
},
|
},
|
||||||
"loading": "Loading...",
|
"loading": "Loading...",
|
||||||
"unit": {
|
"unit": {
|
||||||
"cps": "CPS",
|
"cps": "CPS",
|
||||||
"dbm": "dBm",
|
"dbm": "dBm",
|
||||||
"hertz": "Hz",
|
"hertz": "Hz",
|
||||||
"hop": {
|
"hop": {
|
||||||
"one": "Hop",
|
"one": "Hop",
|
||||||
"plural": "Hops"
|
"plural": "Hops"
|
||||||
},
|
},
|
||||||
"hopsAway": {
|
"hopsAway": {
|
||||||
"one": "{{count}} hop away",
|
"one": "{{count}} hop away",
|
||||||
"plural": "{{count}} hops away",
|
"plural": "{{count}} hops away",
|
||||||
"unknown": "Unknown hops away"
|
"unknown": "Unknown hops away"
|
||||||
},
|
},
|
||||||
"megahertz": "MHz",
|
"megahertz": "MHz",
|
||||||
"raw": "raw",
|
"raw": "raw",
|
||||||
"meter": { "one": "Meter", "plural": "Meters", "suffix": "m" },
|
"meter": { "one": "Meter", "plural": "Meters", "suffix": "m" },
|
||||||
"minute": { "one": "Minute", "plural": "Minutes" },
|
"minute": { "one": "Minute", "plural": "Minutes" },
|
||||||
"hour": { "one": "Hour", "plural": "Hours" },
|
"hour": { "one": "Hour", "plural": "Hours" },
|
||||||
"millisecond": {
|
"millisecond": {
|
||||||
"one": "Millisecond",
|
"one": "Millisecond",
|
||||||
"plural": "Milliseconds",
|
"plural": "Milliseconds",
|
||||||
"suffix": "ms"
|
"suffix": "ms"
|
||||||
},
|
},
|
||||||
"second": { "one": "Second", "plural": "Seconds" },
|
"second": { "one": "Second", "plural": "Seconds" },
|
||||||
"day": { "one": "Day", "plural": "Days" },
|
"day": { "one": "Day", "plural": "Days" },
|
||||||
"month": { "one": "Month", "plural": "Months" },
|
"month": { "one": "Month", "plural": "Months" },
|
||||||
"year": { "one": "Year", "plural": "Years" },
|
"year": { "one": "Year", "plural": "Years" },
|
||||||
"snr": "SNR",
|
"snr": "SNR",
|
||||||
"volt": { "one": "Volt", "plural": "Volts", "suffix": "V" },
|
"volt": { "one": "Volt", "plural": "Volts", "suffix": "V" },
|
||||||
"record": { "one": "Records", "plural": "Records" }
|
"record": { "one": "Records", "plural": "Records" }
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"0bit": "Empty",
|
"0bit": "Empty",
|
||||||
"8bit": "8 bit",
|
"8bit": "8 bit",
|
||||||
"128bit": "128 bit",
|
"128bit": "128 bit",
|
||||||
"256bit": "256 bit"
|
"256bit": "256 bit"
|
||||||
},
|
},
|
||||||
"unknown": {
|
"unknown": {
|
||||||
"longName": "Unknown",
|
"longName": "Unknown",
|
||||||
"shortName": "UNK",
|
"shortName": "UNK",
|
||||||
"notAvailable": "N/A",
|
"notAvailable": "N/A",
|
||||||
"num": "??"
|
"num": "??"
|
||||||
},
|
},
|
||||||
"nodeUnknownPrefix": "!",
|
"nodeUnknownPrefix": "!",
|
||||||
"unset": "UNSET",
|
"unset": "UNSET",
|
||||||
"fallbackName": "Meshtastic {{last4}}",
|
"fallbackName": "Meshtastic {{last4}}",
|
||||||
"node": "Node",
|
"node": "Node",
|
||||||
"formValidation": {
|
"formValidation": {
|
||||||
"unsavedChanges": "Unsaved changes",
|
"unsavedChanges": "Unsaved changes",
|
||||||
"tooBig": {
|
"tooBig": {
|
||||||
"string": "Too long, expected less than or equal to {{maximum}} characters.",
|
"string": "Too long, expected less than or equal to {{maximum}} characters.",
|
||||||
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
|
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
|
||||||
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
|
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
|
||||||
},
|
},
|
||||||
"tooSmall": {
|
"tooSmall": {
|
||||||
"string": "Too short, expected more than or equal to {{minimum}} characters.",
|
"string": "Too short, expected more than or equal to {{minimum}} characters.",
|
||||||
"number": "Too small, expected a number larger than or equal to {{minimum}}."
|
"number": "Too small, expected a number larger than or equal to {{minimum}}."
|
||||||
},
|
},
|
||||||
"invalidFormat": {
|
"invalidFormat": {
|
||||||
"ipv4": "Invalid format, expected an IPv4 address.",
|
"ipv4": "Invalid format, expected an IPv4 address.",
|
||||||
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
|
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
|
||||||
},
|
},
|
||||||
"invalidType": {
|
"invalidType": {
|
||||||
"number": "Invalid type, expected a number."
|
"number": "Invalid type, expected a number."
|
||||||
},
|
},
|
||||||
"pskLength": {
|
"pskLength": {
|
||||||
"0bit": "Key is required to be empty.",
|
"0bit": "Key is required to be empty.",
|
||||||
"8bit": "Key is required to be an 8 bit pre-shared key (PSK).",
|
"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).",
|
"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)."
|
"256bit": "Key is required to be a 256 bit pre-shared key (PSK)."
|
||||||
},
|
},
|
||||||
"required": {
|
"required": {
|
||||||
"generic": "This field is required.",
|
"generic": "This field is required.",
|
||||||
"managed": "At least one admin key is requred if the node is managed.",
|
"managed": "At least one admin key is requred if the node is managed.",
|
||||||
"key": "Key is required."
|
"key": "Key is required."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
"title": "Connected Devices",
|
"title": "Connected Devices",
|
||||||
"description": "Manage your connected Meshtastic devices.",
|
"description": "Manage your connected Meshtastic devices.",
|
||||||
"connectionType_ble": "BLE",
|
"connectionType_ble": "BLE",
|
||||||
"connectionType_serial": "Serial",
|
"connectionType_serial": "Serial",
|
||||||
"connectionType_network": "Network",
|
"connectionType_network": "Network",
|
||||||
"noDevicesTitle": "No devices connected",
|
"noDevicesTitle": "No devices connected",
|
||||||
"noDevicesDescription": "Connect a new device to get started.",
|
"noDevicesDescription": "Connect a new device to get started.",
|
||||||
"button_newConnection": "New Connection"
|
"button_newConnection": "New Connection"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,428 +1,428 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"title": "Configuration",
|
"title": "Configuration",
|
||||||
"tabBluetooth": "Bluetooth",
|
"tabBluetooth": "Bluetooth",
|
||||||
"tabDevice": "Device",
|
"tabDevice": "Device",
|
||||||
"tabDisplay": "Display",
|
"tabDisplay": "Display",
|
||||||
"tabLora": "LoRa",
|
"tabLora": "LoRa",
|
||||||
"tabNetwork": "Network",
|
"tabNetwork": "Network",
|
||||||
"tabPosition": "Position",
|
"tabPosition": "Position",
|
||||||
"tabPower": "Power",
|
"tabPower": "Power",
|
||||||
"tabSecurity": "Security"
|
"tabSecurity": "Security"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"label": "Modules"
|
"label": "Modules"
|
||||||
},
|
},
|
||||||
"device": {
|
"device": {
|
||||||
"title": "Device Settings",
|
"title": "Device Settings",
|
||||||
"description": "Settings for the device",
|
"description": "Settings for the device",
|
||||||
"buttonPin": {
|
"buttonPin": {
|
||||||
"description": "Button pin override",
|
"description": "Button pin override",
|
||||||
"label": "Button Pin"
|
"label": "Button Pin"
|
||||||
},
|
},
|
||||||
"buzzerPin": {
|
"buzzerPin": {
|
||||||
"description": "Buzzer pin override",
|
"description": "Buzzer pin override",
|
||||||
"label": "Buzzer Pin"
|
"label": "Buzzer Pin"
|
||||||
},
|
},
|
||||||
"disableTripleClick": {
|
"disableTripleClick": {
|
||||||
"description": "Disable triple click",
|
"description": "Disable triple click",
|
||||||
"label": "Disable Triple Click"
|
"label": "Disable Triple Click"
|
||||||
},
|
},
|
||||||
"doubleTapAsButtonPress": {
|
"doubleTapAsButtonPress": {
|
||||||
"description": "Treat double tap as button press",
|
"description": "Treat double tap as button press",
|
||||||
"label": "Double Tap as Button Press"
|
"label": "Double Tap as Button Press"
|
||||||
},
|
},
|
||||||
"ledHeartbeatDisabled": {
|
"ledHeartbeatDisabled": {
|
||||||
"description": "Disable default blinking LED",
|
"description": "Disable default blinking LED",
|
||||||
"label": "LED Heartbeat Disabled"
|
"label": "LED Heartbeat Disabled"
|
||||||
},
|
},
|
||||||
"nodeInfoBroadcastInterval": {
|
"nodeInfoBroadcastInterval": {
|
||||||
"description": "How often to broadcast node info",
|
"description": "How often to broadcast node info",
|
||||||
"label": "Node Info Broadcast Interval"
|
"label": "Node Info Broadcast Interval"
|
||||||
},
|
},
|
||||||
"posixTimezone": {
|
"posixTimezone": {
|
||||||
"description": "The POSIX timezone string for the device",
|
"description": "The POSIX timezone string for the device",
|
||||||
"label": "POSIX Timezone"
|
"label": "POSIX Timezone"
|
||||||
},
|
},
|
||||||
"rebroadcastMode": {
|
"rebroadcastMode": {
|
||||||
"description": "How to handle rebroadcasting",
|
"description": "How to handle rebroadcasting",
|
||||||
"label": "Rebroadcast Mode"
|
"label": "Rebroadcast Mode"
|
||||||
},
|
},
|
||||||
"role": {
|
"role": {
|
||||||
"description": "What role the device performs on the mesh",
|
"description": "What role the device performs on the mesh",
|
||||||
"label": "Role"
|
"label": "Role"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"bluetooth": {
|
"bluetooth": {
|
||||||
"title": "Bluetooth Settings",
|
"title": "Bluetooth Settings",
|
||||||
"description": "Settings for the Bluetooth module",
|
"description": "Settings for the Bluetooth module",
|
||||||
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
|
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"description": "Enable or disable Bluetooth",
|
"description": "Enable or disable Bluetooth",
|
||||||
"label": "Enabled"
|
"label": "Enabled"
|
||||||
},
|
},
|
||||||
"pairingMode": {
|
"pairingMode": {
|
||||||
"description": "Pin selection behaviour.",
|
"description": "Pin selection behaviour.",
|
||||||
"label": "Pairing mode"
|
"label": "Pairing mode"
|
||||||
},
|
},
|
||||||
"pin": {
|
"pin": {
|
||||||
"description": "Pin to use when pairing",
|
"description": "Pin to use when pairing",
|
||||||
"label": "Pin"
|
"label": "Pin"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"display": {
|
"display": {
|
||||||
"description": "Settings for the device display",
|
"description": "Settings for the device display",
|
||||||
"title": "Display Settings",
|
"title": "Display Settings",
|
||||||
"headingBold": {
|
"headingBold": {
|
||||||
"description": "Bolden the heading text",
|
"description": "Bolden the heading text",
|
||||||
"label": "Bold Heading"
|
"label": "Bold Heading"
|
||||||
},
|
},
|
||||||
"carouselDelay": {
|
"carouselDelay": {
|
||||||
"description": "How fast to cycle through windows",
|
"description": "How fast to cycle through windows",
|
||||||
"label": "Carousel Delay"
|
"label": "Carousel Delay"
|
||||||
},
|
},
|
||||||
"compassNorthTop": {
|
"compassNorthTop": {
|
||||||
"description": "Fix north to the top of compass",
|
"description": "Fix north to the top of compass",
|
||||||
"label": "Compass North Top"
|
"label": "Compass North Top"
|
||||||
},
|
},
|
||||||
"displayMode": {
|
"displayMode": {
|
||||||
"description": "Screen layout variant",
|
"description": "Screen layout variant",
|
||||||
"label": "Display Mode"
|
"label": "Display Mode"
|
||||||
},
|
},
|
||||||
"displayUnits": {
|
"displayUnits": {
|
||||||
"description": "Display metric or imperial units",
|
"description": "Display metric or imperial units",
|
||||||
"label": "Display Units"
|
"label": "Display Units"
|
||||||
},
|
},
|
||||||
"flipScreen": {
|
"flipScreen": {
|
||||||
"description": "Flip display 180 degrees",
|
"description": "Flip display 180 degrees",
|
||||||
"label": "Flip Screen"
|
"label": "Flip Screen"
|
||||||
},
|
},
|
||||||
"gpsDisplayUnits": {
|
"gpsDisplayUnits": {
|
||||||
"description": "Coordinate display format",
|
"description": "Coordinate display format",
|
||||||
"label": "GPS Display Units"
|
"label": "GPS Display Units"
|
||||||
},
|
},
|
||||||
"oledType": {
|
"oledType": {
|
||||||
"description": "Type of OLED screen attached to the device",
|
"description": "Type of OLED screen attached to the device",
|
||||||
"label": "OLED Type"
|
"label": "OLED Type"
|
||||||
},
|
},
|
||||||
"screenTimeout": {
|
"screenTimeout": {
|
||||||
"description": "Turn off the display after this long",
|
"description": "Turn off the display after this long",
|
||||||
"label": "Screen Timeout"
|
"label": "Screen Timeout"
|
||||||
},
|
},
|
||||||
"twelveHourClock": {
|
"twelveHourClock": {
|
||||||
"description": "Use 12-hour clock format",
|
"description": "Use 12-hour clock format",
|
||||||
"label": "12-Hour Clock"
|
"label": "12-Hour Clock"
|
||||||
},
|
},
|
||||||
"wakeOnTapOrMotion": {
|
"wakeOnTapOrMotion": {
|
||||||
"description": "Wake the device on tap or motion",
|
"description": "Wake the device on tap or motion",
|
||||||
"label": "Wake on Tap or Motion"
|
"label": "Wake on Tap or Motion"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lora": {
|
"lora": {
|
||||||
"title": "Mesh Settings",
|
"title": "Mesh Settings",
|
||||||
"description": "Settings for the LoRa mesh",
|
"description": "Settings for the LoRa mesh",
|
||||||
"bandwidth": {
|
"bandwidth": {
|
||||||
"description": "Channel bandwidth in MHz",
|
"description": "Channel bandwidth in MHz",
|
||||||
"label": "Bandwidth"
|
"label": "Bandwidth"
|
||||||
},
|
},
|
||||||
"boostedRxGain": {
|
"boostedRxGain": {
|
||||||
"description": "Boosted RX gain",
|
"description": "Boosted RX gain",
|
||||||
"label": "Boosted RX Gain"
|
"label": "Boosted RX Gain"
|
||||||
},
|
},
|
||||||
"codingRate": {
|
"codingRate": {
|
||||||
"description": "The denominator of the coding rate",
|
"description": "The denominator of the coding rate",
|
||||||
"label": "Coding Rate"
|
"label": "Coding Rate"
|
||||||
},
|
},
|
||||||
"frequencyOffset": {
|
"frequencyOffset": {
|
||||||
"description": "Frequency offset to correct for crystal calibration errors",
|
"description": "Frequency offset to correct for crystal calibration errors",
|
||||||
"label": "Frequency Offset"
|
"label": "Frequency Offset"
|
||||||
},
|
},
|
||||||
"frequencySlot": {
|
"frequencySlot": {
|
||||||
"description": "LoRa frequency channel number",
|
"description": "LoRa frequency channel number",
|
||||||
"label": "Frequency Slot"
|
"label": "Frequency Slot"
|
||||||
},
|
},
|
||||||
"hopLimit": {
|
"hopLimit": {
|
||||||
"description": "Maximum number of hops",
|
"description": "Maximum number of hops",
|
||||||
"label": "Hop Limit"
|
"label": "Hop Limit"
|
||||||
},
|
},
|
||||||
"ignoreMqtt": {
|
"ignoreMqtt": {
|
||||||
"description": "Don't forward MQTT messages over the mesh",
|
"description": "Don't forward MQTT messages over the mesh",
|
||||||
"label": "Ignore MQTT"
|
"label": "Ignore MQTT"
|
||||||
},
|
},
|
||||||
"modemPreset": {
|
"modemPreset": {
|
||||||
"description": "Modem preset to use",
|
"description": "Modem preset to use",
|
||||||
"label": "Modem Preset"
|
"label": "Modem Preset"
|
||||||
},
|
},
|
||||||
"okToMqtt": {
|
"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",
|
"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"
|
"label": "OK to MQTT"
|
||||||
},
|
},
|
||||||
"overrideDutyCycle": {
|
"overrideDutyCycle": {
|
||||||
"description": "Override Duty Cycle",
|
"description": "Override Duty Cycle",
|
||||||
"label": "Override Duty Cycle"
|
"label": "Override Duty Cycle"
|
||||||
},
|
},
|
||||||
"overrideFrequency": {
|
"overrideFrequency": {
|
||||||
"description": "Override frequency",
|
"description": "Override frequency",
|
||||||
"label": "Override Frequency"
|
"label": "Override Frequency"
|
||||||
},
|
},
|
||||||
"region": {
|
"region": {
|
||||||
"description": "Sets the region for your node",
|
"description": "Sets the region for your node",
|
||||||
"label": "Region"
|
"label": "Region"
|
||||||
},
|
},
|
||||||
"spreadingFactor": {
|
"spreadingFactor": {
|
||||||
"description": "Indicates the number of chirps per symbol",
|
"description": "Indicates the number of chirps per symbol",
|
||||||
"label": "Spreading Factor"
|
"label": "Spreading Factor"
|
||||||
},
|
},
|
||||||
"transmitEnabled": {
|
"transmitEnabled": {
|
||||||
"description": "Enable/Disable transmit (TX) from the LoRa radio",
|
"description": "Enable/Disable transmit (TX) from the LoRa radio",
|
||||||
"label": "Transmit Enabled"
|
"label": "Transmit Enabled"
|
||||||
},
|
},
|
||||||
"transmitPower": {
|
"transmitPower": {
|
||||||
"description": "Max transmit power",
|
"description": "Max transmit power",
|
||||||
"label": "Transmit Power"
|
"label": "Transmit Power"
|
||||||
},
|
},
|
||||||
"usePreset": {
|
"usePreset": {
|
||||||
"description": "Use one of the predefined modem presets",
|
"description": "Use one of the predefined modem presets",
|
||||||
"label": "Use Preset"
|
"label": "Use Preset"
|
||||||
},
|
},
|
||||||
"meshSettings": {
|
"meshSettings": {
|
||||||
"description": "Settings for the LoRa mesh",
|
"description": "Settings for the LoRa mesh",
|
||||||
"label": "Mesh Settings"
|
"label": "Mesh Settings"
|
||||||
},
|
},
|
||||||
"waveformSettings": {
|
"waveformSettings": {
|
||||||
"description": "Settings for the LoRa waveform",
|
"description": "Settings for the LoRa waveform",
|
||||||
"label": "Waveform Settings"
|
"label": "Waveform Settings"
|
||||||
},
|
},
|
||||||
"radioSettings": {
|
"radioSettings": {
|
||||||
"label": "Radio Settings",
|
"label": "Radio Settings",
|
||||||
"description": "Settings for the LoRa radio"
|
"description": "Settings for the LoRa radio"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "WiFi Config",
|
"title": "WiFi Config",
|
||||||
"description": "WiFi radio configuration",
|
"description": "WiFi radio configuration",
|
||||||
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
|
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
|
||||||
"addressMode": {
|
"addressMode": {
|
||||||
"description": "Address assignment selection",
|
"description": "Address assignment selection",
|
||||||
"label": "Address Mode"
|
"label": "Address Mode"
|
||||||
},
|
},
|
||||||
"dns": {
|
"dns": {
|
||||||
"description": "DNS Server",
|
"description": "DNS Server",
|
||||||
"label": "DNS"
|
"label": "DNS"
|
||||||
},
|
},
|
||||||
"ethernetEnabled": {
|
"ethernetEnabled": {
|
||||||
"description": "Enable or disable the Ethernet port",
|
"description": "Enable or disable the Ethernet port",
|
||||||
"label": "Enabled"
|
"label": "Enabled"
|
||||||
},
|
},
|
||||||
"gateway": {
|
"gateway": {
|
||||||
"description": "Default Gateway",
|
"description": "Default Gateway",
|
||||||
"label": "Gateway"
|
"label": "Gateway"
|
||||||
},
|
},
|
||||||
"ip": {
|
"ip": {
|
||||||
"description": "IP Address",
|
"description": "IP Address",
|
||||||
"label": "IP"
|
"label": "IP"
|
||||||
},
|
},
|
||||||
"psk": {
|
"psk": {
|
||||||
"description": "Network password",
|
"description": "Network password",
|
||||||
"label": "PSK"
|
"label": "PSK"
|
||||||
},
|
},
|
||||||
"ssid": {
|
"ssid": {
|
||||||
"description": "Network name",
|
"description": "Network name",
|
||||||
"label": "SSID"
|
"label": "SSID"
|
||||||
},
|
},
|
||||||
"subnet": {
|
"subnet": {
|
||||||
"description": "Subnet Mask",
|
"description": "Subnet Mask",
|
||||||
"label": "Subnet"
|
"label": "Subnet"
|
||||||
},
|
},
|
||||||
"wifiEnabled": {
|
"wifiEnabled": {
|
||||||
"description": "Enable or disable the WiFi radio",
|
"description": "Enable or disable the WiFi radio",
|
||||||
"label": "Enabled"
|
"label": "Enabled"
|
||||||
},
|
},
|
||||||
"meshViaUdp": {
|
"meshViaUdp": {
|
||||||
"label": "Mesh via UDP"
|
"label": "Mesh via UDP"
|
||||||
},
|
},
|
||||||
"ntpServer": {
|
"ntpServer": {
|
||||||
"label": "NTP Server"
|
"label": "NTP Server"
|
||||||
},
|
},
|
||||||
"rsyslogServer": {
|
"rsyslogServer": {
|
||||||
"label": "Rsyslog Server"
|
"label": "Rsyslog Server"
|
||||||
},
|
},
|
||||||
"ethernetConfigSettings": {
|
"ethernetConfigSettings": {
|
||||||
"description": "Ethernet port configuration",
|
"description": "Ethernet port configuration",
|
||||||
"label": "Ethernet Config"
|
"label": "Ethernet Config"
|
||||||
},
|
},
|
||||||
"ipConfigSettings": {
|
"ipConfigSettings": {
|
||||||
"description": "IP configuration",
|
"description": "IP configuration",
|
||||||
"label": "IP Config"
|
"label": "IP Config"
|
||||||
},
|
},
|
||||||
"ntpConfigSettings": {
|
"ntpConfigSettings": {
|
||||||
"description": "NTP configuration",
|
"description": "NTP configuration",
|
||||||
"label": "NTP Config"
|
"label": "NTP Config"
|
||||||
},
|
},
|
||||||
"rsyslogConfigSettings": {
|
"rsyslogConfigSettings": {
|
||||||
"description": "Rsyslog configuration",
|
"description": "Rsyslog configuration",
|
||||||
"label": "Rsyslog Config"
|
"label": "Rsyslog Config"
|
||||||
},
|
},
|
||||||
"udpConfigSettings": {
|
"udpConfigSettings": {
|
||||||
"description": "UDP over Mesh configuration",
|
"description": "UDP over Mesh configuration",
|
||||||
"label": "UDP Config"
|
"label": "UDP Config"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"position": {
|
"position": {
|
||||||
"title": "Position Settings",
|
"title": "Position Settings",
|
||||||
"description": "Settings for the position module",
|
"description": "Settings for the position module",
|
||||||
"broadcastInterval": {
|
"broadcastInterval": {
|
||||||
"description": "How often your position is sent out over the mesh",
|
"description": "How often your position is sent out over the mesh",
|
||||||
"label": "Broadcast Interval"
|
"label": "Broadcast Interval"
|
||||||
},
|
},
|
||||||
"enablePin": {
|
"enablePin": {
|
||||||
"description": "GPS module enable pin override",
|
"description": "GPS module enable pin override",
|
||||||
"label": "Enable Pin"
|
"label": "Enable Pin"
|
||||||
},
|
},
|
||||||
"fixedPosition": {
|
"fixedPosition": {
|
||||||
"description": "Don't report GPS position, but a manually-specified one",
|
"description": "Don't report GPS position, but a manually-specified one",
|
||||||
"label": "Fixed Position"
|
"label": "Fixed Position"
|
||||||
},
|
},
|
||||||
"gpsMode": {
|
"gpsMode": {
|
||||||
"description": "Configure whether device GPS is Enabled, Disabled, or Not Present",
|
"description": "Configure whether device GPS is Enabled, Disabled, or Not Present",
|
||||||
"label": "GPS Mode"
|
"label": "GPS Mode"
|
||||||
},
|
},
|
||||||
"gpsUpdateInterval": {
|
"gpsUpdateInterval": {
|
||||||
"description": "How often a GPS fix should be acquired",
|
"description": "How often a GPS fix should be acquired",
|
||||||
"label": "GPS Update Interval"
|
"label": "GPS Update Interval"
|
||||||
},
|
},
|
||||||
"positionFlags": {
|
"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.",
|
"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"
|
"label": "Position Flags"
|
||||||
},
|
},
|
||||||
"receivePin": {
|
"receivePin": {
|
||||||
"description": "GPS module RX pin override",
|
"description": "GPS module RX pin override",
|
||||||
"label": "Receive Pin"
|
"label": "Receive Pin"
|
||||||
},
|
},
|
||||||
"smartPositionEnabled": {
|
"smartPositionEnabled": {
|
||||||
"description": "Only send position when there has been a meaningful change in location",
|
"description": "Only send position when there has been a meaningful change in location",
|
||||||
"label": "Enable Smart Position"
|
"label": "Enable Smart Position"
|
||||||
},
|
},
|
||||||
"smartPositionMinDistance": {
|
"smartPositionMinDistance": {
|
||||||
"description": "Minimum distance (in meters) that must be traveled before a position update is sent",
|
"description": "Minimum distance (in meters) that must be traveled before a position update is sent",
|
||||||
"label": "Smart Position Minimum Distance"
|
"label": "Smart Position Minimum Distance"
|
||||||
},
|
},
|
||||||
"smartPositionMinInterval": {
|
"smartPositionMinInterval": {
|
||||||
"description": "Minimum interval (in seconds) that must pass before a position update is sent",
|
"description": "Minimum interval (in seconds) that must pass before a position update is sent",
|
||||||
"label": "Smart Position Minimum Interval"
|
"label": "Smart Position Minimum Interval"
|
||||||
},
|
},
|
||||||
"transmitPin": {
|
"transmitPin": {
|
||||||
"description": "GPS module TX pin override",
|
"description": "GPS module TX pin override",
|
||||||
"label": "Transmit Pin"
|
"label": "Transmit Pin"
|
||||||
},
|
},
|
||||||
"intervalsSettings": {
|
"intervalsSettings": {
|
||||||
"description": "How often to send position updates",
|
"description": "How often to send position updates",
|
||||||
"label": "Intervals"
|
"label": "Intervals"
|
||||||
},
|
},
|
||||||
"flags": {
|
"flags": {
|
||||||
"placeholder": "Select position flags...",
|
"placeholder": "Select position flags...",
|
||||||
"altitude": "Altitude",
|
"altitude": "Altitude",
|
||||||
"altitudeGeoidalSeparation": "Altitude Geoidal Separation",
|
"altitudeGeoidalSeparation": "Altitude Geoidal Separation",
|
||||||
"altitudeMsl": "Altitude is Mean Sea Level",
|
"altitudeMsl": "Altitude is Mean Sea Level",
|
||||||
"dop": "Dilution of precision (DOP) PDOP used by default",
|
"dop": "Dilution of precision (DOP) PDOP used by default",
|
||||||
"hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP",
|
"hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP",
|
||||||
"numSatellites": "Number of satellites",
|
"numSatellites": "Number of satellites",
|
||||||
"sequenceNumber": "Sequence number",
|
"sequenceNumber": "Sequence number",
|
||||||
"timestamp": "Timestamp",
|
"timestamp": "Timestamp",
|
||||||
"unset": "Unset",
|
"unset": "Unset",
|
||||||
"vehicleHeading": "Vehicle heading",
|
"vehicleHeading": "Vehicle heading",
|
||||||
"vehicleSpeed": "Vehicle speed"
|
"vehicleSpeed": "Vehicle speed"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"power": {
|
"power": {
|
||||||
"adcMultiplierOverride": {
|
"adcMultiplierOverride": {
|
||||||
"description": "Used for tweaking battery voltage reading",
|
"description": "Used for tweaking battery voltage reading",
|
||||||
"label": "ADC Multiplier Override ratio"
|
"label": "ADC Multiplier Override ratio"
|
||||||
},
|
},
|
||||||
"ina219Address": {
|
"ina219Address": {
|
||||||
"description": "Address of the INA219 battery monitor",
|
"description": "Address of the INA219 battery monitor",
|
||||||
"label": "INA219 Address"
|
"label": "INA219 Address"
|
||||||
},
|
},
|
||||||
"lightSleepDuration": {
|
"lightSleepDuration": {
|
||||||
"description": "How long the device will be in light sleep for",
|
"description": "How long the device will be in light sleep for",
|
||||||
"label": "Light Sleep Duration"
|
"label": "Light Sleep Duration"
|
||||||
},
|
},
|
||||||
"minimumWakeTime": {
|
"minimumWakeTime": {
|
||||||
"description": "Minimum amount of time the device will stay awake for after receiving a packet",
|
"description": "Minimum amount of time the device will stay awake for after receiving a packet",
|
||||||
"label": "Minimum Wake Time"
|
"label": "Minimum Wake Time"
|
||||||
},
|
},
|
||||||
"noConnectionBluetoothDisabled": {
|
"noConnectionBluetoothDisabled": {
|
||||||
"description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long",
|
"description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long",
|
||||||
"label": "No Connection Bluetooth Disabled"
|
"label": "No Connection Bluetooth Disabled"
|
||||||
},
|
},
|
||||||
"powerSavingEnabled": {
|
"powerSavingEnabled": {
|
||||||
"description": "Select if powered from a low-current source (i.e. solar), to minimize power consumption as much as possible.",
|
"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"
|
"label": "Enable power saving mode"
|
||||||
},
|
},
|
||||||
"shutdownOnBatteryDelay": {
|
"shutdownOnBatteryDelay": {
|
||||||
"description": "Automatically shutdown node after this long when on battery, 0 for indefinite",
|
"description": "Automatically shutdown node after this long when on battery, 0 for indefinite",
|
||||||
"label": "Shutdown on battery delay"
|
"label": "Shutdown on battery delay"
|
||||||
},
|
},
|
||||||
"superDeepSleepDuration": {
|
"superDeepSleepDuration": {
|
||||||
"description": "How long the device will be in super deep sleep for",
|
"description": "How long the device will be in super deep sleep for",
|
||||||
"label": "Super Deep Sleep Duration"
|
"label": "Super Deep Sleep Duration"
|
||||||
},
|
},
|
||||||
"powerConfigSettings": {
|
"powerConfigSettings": {
|
||||||
"description": "Settings for the power module",
|
"description": "Settings for the power module",
|
||||||
"label": "Power Config"
|
"label": "Power Config"
|
||||||
},
|
},
|
||||||
"sleepSettings": {
|
"sleepSettings": {
|
||||||
"description": "Sleep settings for the power module",
|
"description": "Sleep settings for the power module",
|
||||||
"label": "Sleep Settings"
|
"label": "Sleep Settings"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"description": "Settings for the Security configuration",
|
"description": "Settings for the Security configuration",
|
||||||
"title": "Security Settings",
|
"title": "Security Settings",
|
||||||
"button_backupKey": "Backup Key",
|
"button_backupKey": "Backup Key",
|
||||||
"adminChannelEnabled": {
|
"adminChannelEnabled": {
|
||||||
"description": "Allow incoming device control over the insecure legacy admin channel",
|
"description": "Allow incoming device control over the insecure legacy admin channel",
|
||||||
"label": "Allow Legacy Admin"
|
"label": "Allow Legacy Admin"
|
||||||
},
|
},
|
||||||
"enableDebugLogApi": {
|
"enableDebugLogApi": {
|
||||||
"description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth",
|
"description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth",
|
||||||
"label": "Enable Debug Log API"
|
"label": "Enable Debug Log API"
|
||||||
},
|
},
|
||||||
"managed": {
|
"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.",
|
"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"
|
"label": "Managed"
|
||||||
},
|
},
|
||||||
"privateKey": {
|
"privateKey": {
|
||||||
"description": "Used to create a shared key with a remote device",
|
"description": "Used to create a shared key with a remote device",
|
||||||
"label": "Private Key"
|
"label": "Private Key"
|
||||||
},
|
},
|
||||||
"publicKey": {
|
"publicKey": {
|
||||||
"description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key",
|
"description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key",
|
||||||
"label": "Public Key"
|
"label": "Public Key"
|
||||||
},
|
},
|
||||||
"primaryAdminKey": {
|
"primaryAdminKey": {
|
||||||
"description": "The primary public key authorized to send admin messages to this node",
|
"description": "The primary public key authorized to send admin messages to this node",
|
||||||
"label": "Primary Admin Key"
|
"label": "Primary Admin Key"
|
||||||
},
|
},
|
||||||
"secondaryAdminKey": {
|
"secondaryAdminKey": {
|
||||||
"description": "The secondary public key authorized to send admin messages to this node",
|
"description": "The secondary public key authorized to send admin messages to this node",
|
||||||
"label": "Secondary Admin Key"
|
"label": "Secondary Admin Key"
|
||||||
},
|
},
|
||||||
"serialOutputEnabled": {
|
"serialOutputEnabled": {
|
||||||
"description": "Serial Console over the Stream API",
|
"description": "Serial Console over the Stream API",
|
||||||
"label": "Serial Output Enabled"
|
"label": "Serial Output Enabled"
|
||||||
},
|
},
|
||||||
"tertiaryAdminKey": {
|
"tertiaryAdminKey": {
|
||||||
"description": "The tertiary public key authorized to send admin messages to this node",
|
"description": "The tertiary public key authorized to send admin messages to this node",
|
||||||
"label": "Tertiary Admin Key"
|
"label": "Tertiary Admin Key"
|
||||||
},
|
},
|
||||||
"adminSettings": {
|
"adminSettings": {
|
||||||
"description": "Settings for Admin",
|
"description": "Settings for Admin",
|
||||||
"label": "Admin Settings"
|
"label": "Admin Settings"
|
||||||
},
|
},
|
||||||
"loggingSettings": {
|
"loggingSettings": {
|
||||||
"description": "Settings for Logging",
|
"description": "Settings for Logging",
|
||||||
"label": "Logging Settings"
|
"label": "Logging Settings"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,183 +1,183 @@
|
|||||||
{
|
{
|
||||||
"deleteMessages": {
|
"deleteMessages": {
|
||||||
"description": "This action will clear all message history. This cannot be undone. Are you sure you want to continue?",
|
"description": "This action will clear all message history. This cannot be undone. Are you sure you want to continue?",
|
||||||
"title": "Clear All Messages"
|
"title": "Clear All Messages"
|
||||||
},
|
},
|
||||||
"deviceName": {
|
"deviceName": {
|
||||||
"description": "The Device will restart once the config is saved.",
|
"description": "The Device will restart once the config is saved.",
|
||||||
"longName": "Long Name",
|
"longName": "Long Name",
|
||||||
"shortName": "Short Name",
|
"shortName": "Short Name",
|
||||||
"title": "Change Device Name",
|
"title": "Change Device Name",
|
||||||
"validation": {
|
"validation": {
|
||||||
"longNameMax": "Long name must not be more than 40 characters",
|
"longNameMax": "Long name must not be more than 40 characters",
|
||||||
"shortNameMax": "Short name must not be more than 4 characters",
|
"shortNameMax": "Short name must not be more than 4 characters",
|
||||||
"longNameMin": "Long name must have at least 1 character",
|
"longNameMin": "Long name must have at least 1 character",
|
||||||
"shortNameMin": "Short name must have at least 1 character"
|
"shortNameMin": "Short name must have at least 1 character"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"import": {
|
"import": {
|
||||||
"description": "The current LoRa configuration will be overridden.",
|
"description": "The current LoRa configuration will be overridden.",
|
||||||
"error": {
|
"error": {
|
||||||
"invalidUrl": "Invalid Meshtastic URL"
|
"invalidUrl": "Invalid Meshtastic URL"
|
||||||
},
|
},
|
||||||
"channelPrefix": "Channel: ",
|
"channelPrefix": "Channel: ",
|
||||||
"channelSetUrl": "Channel Set/QR Code URL",
|
"channelSetUrl": "Channel Set/QR Code URL",
|
||||||
"channels": "Channels:",
|
"channels": "Channels:",
|
||||||
"usePreset": "Use Preset?",
|
"usePreset": "Use Preset?",
|
||||||
"title": "Import Channel Set"
|
"title": "Import Channel Set"
|
||||||
},
|
},
|
||||||
"locationResponse": {
|
"locationResponse": {
|
||||||
"title": "Location: {{identifier}}",
|
"title": "Location: {{identifier}}",
|
||||||
"altitude": "Altitude: ",
|
"altitude": "Altitude: ",
|
||||||
"coordinates": "Coordinates: ",
|
"coordinates": "Coordinates: ",
|
||||||
"noCoordinates": "No Coordinates"
|
"noCoordinates": "No Coordinates"
|
||||||
},
|
},
|
||||||
"pkiRegenerateDialog": {
|
"pkiRegenerateDialog": {
|
||||||
"title": "Regenerate Pre-Shared Key?",
|
"title": "Regenerate Pre-Shared Key?",
|
||||||
"description": "Are you sure you want to regenerate the pre-shared key?",
|
"description": "Are you sure you want to regenerate the pre-shared key?",
|
||||||
"regenerate": "Regenerate"
|
"regenerate": "Regenerate"
|
||||||
},
|
},
|
||||||
"newDeviceDialog": {
|
"newDeviceDialog": {
|
||||||
"title": "Connect New Device",
|
"title": "Connect New Device",
|
||||||
"https": "https",
|
"https": "https",
|
||||||
"http": "http",
|
"http": "http",
|
||||||
"tabHttp": "HTTP",
|
"tabHttp": "HTTP",
|
||||||
"tabBluetooth": "Bluetooth",
|
"tabBluetooth": "Bluetooth",
|
||||||
"tabSerial": "Serial",
|
"tabSerial": "Serial",
|
||||||
|
|
||||||
"useHttps": "Use HTTPS",
|
"useHttps": "Use HTTPS",
|
||||||
"connecting": "Connecting...",
|
"connecting": "Connecting...",
|
||||||
"connect": "Connect",
|
"connect": "Connect",
|
||||||
"connectionFailedAlert": {
|
"connectionFailedAlert": {
|
||||||
"title": "Connection Failed",
|
"title": "Connection Failed",
|
||||||
"descriptionPrefix": "Could not connect to the device. ",
|
"descriptionPrefix": "Could not connect to the device. ",
|
||||||
"httpsHint": "If using HTTPS, you may need to accept a self-signed certificate first. ",
|
"httpsHint": "If using HTTPS, you may need to accept a self-signed certificate first. ",
|
||||||
"openLinkPrefix": "Please open ",
|
"openLinkPrefix": "Please open ",
|
||||||
"openLinkSuffix": " in a new tab",
|
"openLinkSuffix": " in a new tab",
|
||||||
"acceptTlsWarningSuffix": ", accept any TLS warnings if prompted, then try again",
|
"acceptTlsWarningSuffix": ", accept any TLS warnings if prompted, then try again",
|
||||||
"learnMoreLink": "Learn more"
|
"learnMoreLink": "Learn more"
|
||||||
},
|
},
|
||||||
"httpConnection": {
|
"httpConnection": {
|
||||||
"label": "IP Address/Hostname",
|
"label": "IP Address/Hostname",
|
||||||
"placeholder": "000.000.000.000 / meshtastic.local"
|
"placeholder": "000.000.000.000 / meshtastic.local"
|
||||||
},
|
},
|
||||||
"serialConnection": {
|
"serialConnection": {
|
||||||
"noDevicesPaired": "No devices paired yet.",
|
"noDevicesPaired": "No devices paired yet.",
|
||||||
"newDeviceButton": "New device",
|
"newDeviceButton": "New device",
|
||||||
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
|
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
|
||||||
},
|
},
|
||||||
"bluetoothConnection": {
|
"bluetoothConnection": {
|
||||||
"noDevicesPaired": "No devices paired yet.",
|
"noDevicesPaired": "No devices paired yet.",
|
||||||
"newDeviceButton": "New device",
|
"newDeviceButton": "New device",
|
||||||
"connectionFailed": "Connection failed",
|
"connectionFailed": "Connection failed",
|
||||||
"deviceDisconnected": "Device disconnected",
|
"deviceDisconnected": "Device disconnected",
|
||||||
"unknownDevice": "Unknown Device",
|
"unknownDevice": "Unknown Device",
|
||||||
"errorLoadingDevices": "Error loading devices",
|
"errorLoadingDevices": "Error loading devices",
|
||||||
"unknownErrorLoadingDevices": "Unknown error loading devices"
|
"unknownErrorLoadingDevices": "Unknown error loading devices"
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"requiresFeatures": "This connection type requires <0></0>. Please use a supported browser, like Chrome or Edge.",
|
"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.",
|
"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."
|
"additionallyRequiresSecureContext": "Additionally, it requires a <0>secure context</0>. Please connect using HTTPS or localhost."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nodeDetails": {
|
"nodeDetails": {
|
||||||
"message": "Message",
|
"message": "Message",
|
||||||
"requestPosition": "Request Position",
|
"requestPosition": "Request Position",
|
||||||
"traceRoute": "Trace Route",
|
"traceRoute": "Trace Route",
|
||||||
"airTxUtilization": "Air TX utilization",
|
"airTxUtilization": "Air TX utilization",
|
||||||
"allRawMetrics": "All Raw Metrics:",
|
"allRawMetrics": "All Raw Metrics:",
|
||||||
"batteryLevel": "Battery level",
|
"batteryLevel": "Battery level",
|
||||||
"channelUtilization": "Channel utilization",
|
"channelUtilization": "Channel utilization",
|
||||||
"details": "Details:",
|
"details": "Details:",
|
||||||
"deviceMetrics": "Device Metrics:",
|
"deviceMetrics": "Device Metrics:",
|
||||||
"hardware": "Hardware: ",
|
"hardware": "Hardware: ",
|
||||||
"lastHeard": "Last Heard: ",
|
"lastHeard": "Last Heard: ",
|
||||||
"nodeHexPrefix": "Node Hex: !",
|
"nodeHexPrefix": "Node Hex: !",
|
||||||
"nodeNumber": "Node Number: ",
|
"nodeNumber": "Node Number: ",
|
||||||
"position": "Position:",
|
"position": "Position:",
|
||||||
"role": "Role: ",
|
"role": "Role: ",
|
||||||
"uptime": "Uptime: ",
|
"uptime": "Uptime: ",
|
||||||
"voltage": "Voltage",
|
"voltage": "Voltage",
|
||||||
"title": "Node Details for {{identifier}}",
|
"title": "Node Details for {{identifier}}",
|
||||||
"ignoreNode": "Ignore node",
|
"ignoreNode": "Ignore node",
|
||||||
"removeNode": "Remove node",
|
"removeNode": "Remove node",
|
||||||
"unignoreNode": "Unignore node"
|
"unignoreNode": "Unignore node"
|
||||||
},
|
},
|
||||||
"pkiBackup": {
|
"pkiBackup": {
|
||||||
"loseKeysWarning": "If you lose your keys, you will need to reset your device.",
|
"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!",
|
"secureBackup": "Its important to backup your public and private keys and store your backup securely!",
|
||||||
"footer": "=== END OF KEYS ===",
|
"footer": "=== END OF KEYS ===",
|
||||||
"header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===",
|
"header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===",
|
||||||
"privateKey": "Private Key:",
|
"privateKey": "Private Key:",
|
||||||
"publicKey": "Public Key:",
|
"publicKey": "Public Key:",
|
||||||
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
|
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
|
||||||
"title": "Backup Keys"
|
"title": "Backup Keys"
|
||||||
},
|
},
|
||||||
"pkiBackupReminder": {
|
"pkiBackupReminder": {
|
||||||
"description": "We recommend backing up your key data regularly. Would you like to back up now?",
|
"description": "We recommend backing up your key data regularly. Would you like to back up now?",
|
||||||
"title": "Backup Reminder",
|
"title": "Backup Reminder",
|
||||||
"remindLaterPrefix": "Remind me in",
|
"remindLaterPrefix": "Remind me in",
|
||||||
"remindNever": "Never remind me",
|
"remindNever": "Never remind me",
|
||||||
"backupNow": "Back up now"
|
"backupNow": "Back up now"
|
||||||
},
|
},
|
||||||
"pkiRegenerate": {
|
"pkiRegenerate": {
|
||||||
"description": "Are you sure you want to regenerate key pair?",
|
"description": "Are you sure you want to regenerate key pair?",
|
||||||
"title": "Regenerate Key Pair"
|
"title": "Regenerate Key Pair"
|
||||||
},
|
},
|
||||||
"qr": {
|
"qr": {
|
||||||
"addChannels": "Add Channels",
|
"addChannels": "Add Channels",
|
||||||
"replaceChannels": "Replace Channels",
|
"replaceChannels": "Replace Channels",
|
||||||
"description": "The current LoRa configuration will also be shared.",
|
"description": "The current LoRa configuration will also be shared.",
|
||||||
"sharableUrl": "Sharable URL",
|
"sharableUrl": "Sharable URL",
|
||||||
"title": "Generate QR Code"
|
"title": "Generate QR Code"
|
||||||
},
|
},
|
||||||
"rebootOta": {
|
"rebootOta": {
|
||||||
"title": "Schedule Reboot",
|
"title": "Schedule Reboot",
|
||||||
"description": "Reboot the connected node after a delay into OTA (Over-the-Air) mode.",
|
"description": "Reboot the connected node after a delay into OTA (Over-the-Air) mode.",
|
||||||
"enterDelay": "Enter delay (sec)",
|
"enterDelay": "Enter delay (sec)",
|
||||||
"scheduled": "Reboot has been scheduled"
|
"scheduled": "Reboot has been scheduled"
|
||||||
},
|
},
|
||||||
"reboot": {
|
"reboot": {
|
||||||
"title": "Schedule Reboot",
|
"title": "Schedule Reboot",
|
||||||
"description": "Reboot the connected node after x minutes."
|
"description": "Reboot the connected node after x minutes."
|
||||||
},
|
},
|
||||||
"refreshKeys": {
|
"refreshKeys": {
|
||||||
"description": {
|
"description": {
|
||||||
"acceptNewKeys": "This will remove the node from device and request new keys.",
|
"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.",
|
"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: "
|
"unableToSendDmPrefix": "Your node is unable to send a direct message to node: "
|
||||||
},
|
},
|
||||||
"acceptNewKeys": "Accept New Keys",
|
"acceptNewKeys": "Accept New Keys",
|
||||||
"title": "Keys Mismatch - {{identifier}}"
|
"title": "Keys Mismatch - {{identifier}}"
|
||||||
},
|
},
|
||||||
"removeNode": {
|
"removeNode": {
|
||||||
"description": "Are you sure you want to remove this Node?",
|
"description": "Are you sure you want to remove this Node?",
|
||||||
"title": "Remove Node?"
|
"title": "Remove Node?"
|
||||||
},
|
},
|
||||||
"shutdown": {
|
"shutdown": {
|
||||||
"title": "Schedule Shutdown",
|
"title": "Schedule Shutdown",
|
||||||
"description": "Turn off the connected node after x minutes."
|
"description": "Turn off the connected node after x minutes."
|
||||||
},
|
},
|
||||||
"traceRoute": {
|
"traceRoute": {
|
||||||
"routeToDestination": "Route to destination:",
|
"routeToDestination": "Route to destination:",
|
||||||
"routeBack": "Route back:"
|
"routeBack": "Route back:"
|
||||||
},
|
},
|
||||||
"tracerouteResponse": {
|
"tracerouteResponse": {
|
||||||
"title": "Traceroute: {{identifier}}"
|
"title": "Traceroute: {{identifier}}"
|
||||||
},
|
},
|
||||||
"unsafeRoles": {
|
"unsafeRoles": {
|
||||||
"confirmUnderstanding": "Yes, I know what I'm doing",
|
"confirmUnderstanding": "Yes, I know what I'm doing",
|
||||||
"conjunction": " and the blog post about ",
|
"conjunction": " and the blog post about ",
|
||||||
"postamble": " and understand the implications of changing the role.",
|
"postamble": " and understand the implications of changing the role.",
|
||||||
"preamble": "I have read the ",
|
"preamble": "I have read the ",
|
||||||
"choosingRightDeviceRole": "Choosing The Right Device Role",
|
"choosingRightDeviceRole": "Choosing The Right Device Role",
|
||||||
"deviceRoleDocumentation": "Device Role Documentation",
|
"deviceRoleDocumentation": "Device Role Documentation",
|
||||||
"title": "Are you sure?"
|
"title": "Are you sure?"
|
||||||
},
|
},
|
||||||
"managedMode": {
|
"managedMode": {
|
||||||
"confirmUnderstanding": "Yes, I know what I'm doing",
|
"confirmUnderstanding": "Yes, I know what I'm doing",
|
||||||
"title": "Are you sure?",
|
"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."
|
"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."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,40 +1,40 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"title": "Messages: {{chatName}}",
|
"title": "Messages: {{chatName}}",
|
||||||
"placeholder": "Enter Message"
|
"placeholder": "Enter Message"
|
||||||
},
|
},
|
||||||
"emptyState": {
|
"emptyState": {
|
||||||
"title": "Select a Chat",
|
"title": "Select a Chat",
|
||||||
"text": "No messages yet."
|
"text": "No messages yet."
|
||||||
},
|
},
|
||||||
"selectChatPrompt": {
|
"selectChatPrompt": {
|
||||||
"text": "Select a channel or node to start messaging."
|
"text": "Select a channel or node to start messaging."
|
||||||
},
|
},
|
||||||
"sendMessage": {
|
"sendMessage": {
|
||||||
"placeholder": "Enter your message here...",
|
"placeholder": "Enter your message here...",
|
||||||
"sendButton": "Send"
|
"sendButton": "Send"
|
||||||
},
|
},
|
||||||
"actionsMenu": {
|
"actionsMenu": {
|
||||||
"addReactionLabel": "Add Reaction",
|
"addReactionLabel": "Add Reaction",
|
||||||
"replyLabel": "Reply"
|
"replyLabel": "Reply"
|
||||||
},
|
},
|
||||||
|
|
||||||
"deliveryStatus": {
|
"deliveryStatus": {
|
||||||
"delivered": {
|
"delivered": {
|
||||||
"label": "Message delivered",
|
"label": "Message delivered",
|
||||||
"displayText": "Message delivered"
|
"displayText": "Message delivered"
|
||||||
},
|
},
|
||||||
"failed": {
|
"failed": {
|
||||||
"label": "Message delivery failed",
|
"label": "Message delivery failed",
|
||||||
"displayText": "Delivery failed"
|
"displayText": "Delivery failed"
|
||||||
},
|
},
|
||||||
"unknown": {
|
"unknown": {
|
||||||
"label": "Message status unknown",
|
"label": "Message status unknown",
|
||||||
"displayText": "Unknown state"
|
"displayText": "Unknown state"
|
||||||
},
|
},
|
||||||
"waiting": {
|
"waiting": {
|
||||||
"label": "Sending message",
|
"label": "Sending message",
|
||||||
"displayText": "Waiting for delivery"
|
"displayText": "Waiting for delivery"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,448 +1,448 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"tabAmbientLighting": "Ambient Lighting",
|
"tabAmbientLighting": "Ambient Lighting",
|
||||||
"tabAudio": "Audio",
|
"tabAudio": "Audio",
|
||||||
"tabCannedMessage": "Canned",
|
"tabCannedMessage": "Canned",
|
||||||
"tabDetectionSensor": "Detection Sensor",
|
"tabDetectionSensor": "Detection Sensor",
|
||||||
"tabExternalNotification": "Ext Notif",
|
"tabExternalNotification": "Ext Notif",
|
||||||
"tabMqtt": "MQTT",
|
"tabMqtt": "MQTT",
|
||||||
"tabNeighborInfo": "Neighbor Info",
|
"tabNeighborInfo": "Neighbor Info",
|
||||||
"tabPaxcounter": "Paxcounter",
|
"tabPaxcounter": "Paxcounter",
|
||||||
"tabRangeTest": "Range Test",
|
"tabRangeTest": "Range Test",
|
||||||
"tabSerial": "Serial",
|
"tabSerial": "Serial",
|
||||||
"tabStoreAndForward": "S&F",
|
"tabStoreAndForward": "S&F",
|
||||||
"tabTelemetry": "Telemetry"
|
"tabTelemetry": "Telemetry"
|
||||||
},
|
},
|
||||||
"ambientLighting": {
|
"ambientLighting": {
|
||||||
"title": "Ambient Lighting Settings",
|
"title": "Ambient Lighting Settings",
|
||||||
"description": "Settings for the Ambient Lighting module",
|
"description": "Settings for the Ambient Lighting module",
|
||||||
"ledState": {
|
"ledState": {
|
||||||
"label": "LED State",
|
"label": "LED State",
|
||||||
"description": "Sets LED to on or off"
|
"description": "Sets LED to on or off"
|
||||||
},
|
},
|
||||||
"current": {
|
"current": {
|
||||||
"label": "Current",
|
"label": "Current",
|
||||||
"description": "Sets the current for the LED output. Default is 10"
|
"description": "Sets the current for the LED output. Default is 10"
|
||||||
},
|
},
|
||||||
"red": {
|
"red": {
|
||||||
"label": "Red",
|
"label": "Red",
|
||||||
"description": "Sets the red LED level. Values are 0-255"
|
"description": "Sets the red LED level. Values are 0-255"
|
||||||
},
|
},
|
||||||
"green": {
|
"green": {
|
||||||
"label": "Green",
|
"label": "Green",
|
||||||
"description": "Sets the green LED level. Values are 0-255"
|
"description": "Sets the green LED level. Values are 0-255"
|
||||||
},
|
},
|
||||||
"blue": {
|
"blue": {
|
||||||
"label": "Blue",
|
"label": "Blue",
|
||||||
"description": "Sets the blue LED level. Values are 0-255"
|
"description": "Sets the blue LED level. Values are 0-255"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"audio": {
|
"audio": {
|
||||||
"title": "Audio Settings",
|
"title": "Audio Settings",
|
||||||
"description": "Settings for the Audio module",
|
"description": "Settings for the Audio module",
|
||||||
"codec2Enabled": {
|
"codec2Enabled": {
|
||||||
"label": "Codec 2 Enabled",
|
"label": "Codec 2 Enabled",
|
||||||
"description": "Enable Codec 2 audio encoding"
|
"description": "Enable Codec 2 audio encoding"
|
||||||
},
|
},
|
||||||
"pttPin": {
|
"pttPin": {
|
||||||
"label": "PTT Pin",
|
"label": "PTT Pin",
|
||||||
"description": "GPIO pin to use for PTT"
|
"description": "GPIO pin to use for PTT"
|
||||||
},
|
},
|
||||||
"bitrate": {
|
"bitrate": {
|
||||||
"label": "Bitrate",
|
"label": "Bitrate",
|
||||||
"description": "Bitrate to use for audio encoding"
|
"description": "Bitrate to use for audio encoding"
|
||||||
},
|
},
|
||||||
"i2sWs": {
|
"i2sWs": {
|
||||||
"label": "i2S WS",
|
"label": "i2S WS",
|
||||||
"description": "GPIO pin to use for i2S WS"
|
"description": "GPIO pin to use for i2S WS"
|
||||||
},
|
},
|
||||||
"i2sSd": {
|
"i2sSd": {
|
||||||
"label": "i2S SD",
|
"label": "i2S SD",
|
||||||
"description": "GPIO pin to use for i2S SD"
|
"description": "GPIO pin to use for i2S SD"
|
||||||
},
|
},
|
||||||
"i2sDin": {
|
"i2sDin": {
|
||||||
"label": "i2S DIN",
|
"label": "i2S DIN",
|
||||||
"description": "GPIO pin to use for i2S DIN"
|
"description": "GPIO pin to use for i2S DIN"
|
||||||
},
|
},
|
||||||
"i2sSck": {
|
"i2sSck": {
|
||||||
"label": "i2S SCK",
|
"label": "i2S SCK",
|
||||||
"description": "GPIO pin to use for i2S SCK"
|
"description": "GPIO pin to use for i2S SCK"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"cannedMessage": {
|
"cannedMessage": {
|
||||||
"title": "Canned Message Settings",
|
"title": "Canned Message Settings",
|
||||||
"description": "Settings for the Canned Message module",
|
"description": "Settings for the Canned Message module",
|
||||||
"moduleEnabled": {
|
"moduleEnabled": {
|
||||||
"label": "Module Enabled",
|
"label": "Module Enabled",
|
||||||
"description": "Enable Canned Message"
|
"description": "Enable Canned Message"
|
||||||
},
|
},
|
||||||
"rotary1Enabled": {
|
"rotary1Enabled": {
|
||||||
"label": "Rotary Encoder #1 Enabled",
|
"label": "Rotary Encoder #1 Enabled",
|
||||||
"description": "Enable the rotary encoder"
|
"description": "Enable the rotary encoder"
|
||||||
},
|
},
|
||||||
"inputbrokerPinA": {
|
"inputbrokerPinA": {
|
||||||
"label": "Encoder Pin A",
|
"label": "Encoder Pin A",
|
||||||
"description": "GPIO Pin Value (1-39) For encoder port A"
|
"description": "GPIO Pin Value (1-39) For encoder port A"
|
||||||
},
|
},
|
||||||
"inputbrokerPinB": {
|
"inputbrokerPinB": {
|
||||||
"label": "Encoder Pin B",
|
"label": "Encoder Pin B",
|
||||||
"description": "GPIO Pin Value (1-39) For encoder port B"
|
"description": "GPIO Pin Value (1-39) For encoder port B"
|
||||||
},
|
},
|
||||||
"inputbrokerPinPress": {
|
"inputbrokerPinPress": {
|
||||||
"label": "Encoder Pin Press",
|
"label": "Encoder Pin Press",
|
||||||
"description": "GPIO Pin Value (1-39) For encoder Press"
|
"description": "GPIO Pin Value (1-39) For encoder Press"
|
||||||
},
|
},
|
||||||
"inputbrokerEventCw": {
|
"inputbrokerEventCw": {
|
||||||
"label": "Clockwise event",
|
"label": "Clockwise event",
|
||||||
"description": "Select input event."
|
"description": "Select input event."
|
||||||
},
|
},
|
||||||
"inputbrokerEventCcw": {
|
"inputbrokerEventCcw": {
|
||||||
"label": "Counter Clockwise event",
|
"label": "Counter Clockwise event",
|
||||||
"description": "Select input event."
|
"description": "Select input event."
|
||||||
},
|
},
|
||||||
"inputbrokerEventPress": {
|
"inputbrokerEventPress": {
|
||||||
"label": "Press event",
|
"label": "Press event",
|
||||||
"description": "Select input event"
|
"description": "Select input event"
|
||||||
},
|
},
|
||||||
"updown1Enabled": {
|
"updown1Enabled": {
|
||||||
"label": "Up Down enabled",
|
"label": "Up Down enabled",
|
||||||
"description": "Enable the up / down encoder"
|
"description": "Enable the up / down encoder"
|
||||||
},
|
},
|
||||||
"allowInputSource": {
|
"allowInputSource": {
|
||||||
"label": "Allow Input Source",
|
"label": "Allow Input Source",
|
||||||
"description": "Select from: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
|
"description": "Select from: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
|
||||||
},
|
},
|
||||||
"sendBell": {
|
"sendBell": {
|
||||||
"label": "Send Bell",
|
"label": "Send Bell",
|
||||||
"description": "Sends a bell character with each message"
|
"description": "Sends a bell character with each message"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"detectionSensor": {
|
"detectionSensor": {
|
||||||
"title": "Detection Sensor Settings",
|
"title": "Detection Sensor Settings",
|
||||||
"description": "Settings for the Detection Sensor module",
|
"description": "Settings for the Detection Sensor module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Enabled",
|
"label": "Enabled",
|
||||||
"description": "Enable or disable Detection Sensor Module"
|
"description": "Enable or disable Detection Sensor Module"
|
||||||
},
|
},
|
||||||
"minimumBroadcastSecs": {
|
"minimumBroadcastSecs": {
|
||||||
"label": "Minimum Broadcast Seconds",
|
"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"
|
"description": "The interval in seconds of how often we can send a message to the mesh when a state change is detected"
|
||||||
},
|
},
|
||||||
"stateBroadcastSecs": {
|
"stateBroadcastSecs": {
|
||||||
"label": "State Broadcast Seconds",
|
"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"
|
"description": "The interval in seconds of how often we should send a message to the mesh with the current state regardless of changes"
|
||||||
},
|
},
|
||||||
"sendBell": {
|
"sendBell": {
|
||||||
"label": "Send Bell",
|
"label": "Send Bell",
|
||||||
"description": "Send ASCII bell with alert message"
|
"description": "Send ASCII bell with alert message"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"label": "Friendly Name",
|
"label": "Friendly Name",
|
||||||
"description": "Used to format the message sent to mesh, max 20 Characters"
|
"description": "Used to format the message sent to mesh, max 20 Characters"
|
||||||
},
|
},
|
||||||
"monitorPin": {
|
"monitorPin": {
|
||||||
"label": "Monitor Pin",
|
"label": "Monitor Pin",
|
||||||
"description": "The GPIO pin to monitor for state changes"
|
"description": "The GPIO pin to monitor for state changes"
|
||||||
},
|
},
|
||||||
"detectionTriggerType": {
|
"detectionTriggerType": {
|
||||||
"label": "Detection Triggered Type",
|
"label": "Detection Triggered Type",
|
||||||
"description": "The type of trigger event to be used"
|
"description": "The type of trigger event to be used"
|
||||||
},
|
},
|
||||||
"usePullup": {
|
"usePullup": {
|
||||||
"label": "Use Pullup",
|
"label": "Use Pullup",
|
||||||
"description": "Whether or not use INPUT_PULLUP mode for GPIO pin"
|
"description": "Whether or not use INPUT_PULLUP mode for GPIO pin"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"externalNotification": {
|
"externalNotification": {
|
||||||
"title": "External Notification Settings",
|
"title": "External Notification Settings",
|
||||||
"description": "Configure the external notification module",
|
"description": "Configure the external notification module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Module Enabled",
|
"label": "Module Enabled",
|
||||||
"description": "Enable External Notification"
|
"description": "Enable External Notification"
|
||||||
},
|
},
|
||||||
"outputMs": {
|
"outputMs": {
|
||||||
"label": "Output MS",
|
"label": "Output MS",
|
||||||
"description": "Output MS"
|
"description": "Output MS"
|
||||||
},
|
},
|
||||||
"output": {
|
"output": {
|
||||||
"label": "Output",
|
"label": "Output",
|
||||||
"description": "Output"
|
"description": "Output"
|
||||||
},
|
},
|
||||||
"outputVibra": {
|
"outputVibra": {
|
||||||
"label": "Output Vibrate",
|
"label": "Output Vibrate",
|
||||||
"description": "Output Vibrate"
|
"description": "Output Vibrate"
|
||||||
},
|
},
|
||||||
"outputBuzzer": {
|
"outputBuzzer": {
|
||||||
"label": "Output Buzzer",
|
"label": "Output Buzzer",
|
||||||
"description": "Output Buzzer"
|
"description": "Output Buzzer"
|
||||||
},
|
},
|
||||||
"active": {
|
"active": {
|
||||||
"label": "Active",
|
"label": "Active",
|
||||||
"description": "Active"
|
"description": "Active"
|
||||||
},
|
},
|
||||||
"alertMessage": {
|
"alertMessage": {
|
||||||
"label": "Alert Message",
|
"label": "Alert Message",
|
||||||
"description": "Alert Message"
|
"description": "Alert Message"
|
||||||
},
|
},
|
||||||
"alertMessageVibra": {
|
"alertMessageVibra": {
|
||||||
"label": "Alert Message Vibrate",
|
"label": "Alert Message Vibrate",
|
||||||
"description": "Alert Message Vibrate"
|
"description": "Alert Message Vibrate"
|
||||||
},
|
},
|
||||||
"alertMessageBuzzer": {
|
"alertMessageBuzzer": {
|
||||||
"label": "Alert Message Buzzer",
|
"label": "Alert Message Buzzer",
|
||||||
"description": "Alert Message Buzzer"
|
"description": "Alert Message Buzzer"
|
||||||
},
|
},
|
||||||
"alertBell": {
|
"alertBell": {
|
||||||
"label": "Alert Bell",
|
"label": "Alert Bell",
|
||||||
"description": "Should an alert be triggered when receiving an incoming bell?"
|
"description": "Should an alert be triggered when receiving an incoming bell?"
|
||||||
},
|
},
|
||||||
"alertBellVibra": {
|
"alertBellVibra": {
|
||||||
"label": "Alert Bell Vibrate",
|
"label": "Alert Bell Vibrate",
|
||||||
"description": "Alert Bell Vibrate"
|
"description": "Alert Bell Vibrate"
|
||||||
},
|
},
|
||||||
"alertBellBuzzer": {
|
"alertBellBuzzer": {
|
||||||
"label": "Alert Bell Buzzer",
|
"label": "Alert Bell Buzzer",
|
||||||
"description": "Alert Bell Buzzer"
|
"description": "Alert Bell Buzzer"
|
||||||
},
|
},
|
||||||
"usePwm": {
|
"usePwm": {
|
||||||
"label": "Use PWM",
|
"label": "Use PWM",
|
||||||
"description": "Use PWM"
|
"description": "Use PWM"
|
||||||
},
|
},
|
||||||
"nagTimeout": {
|
"nagTimeout": {
|
||||||
"label": "Nag Timeout",
|
"label": "Nag Timeout",
|
||||||
"description": "Nag Timeout"
|
"description": "Nag Timeout"
|
||||||
},
|
},
|
||||||
"useI2sAsBuzzer": {
|
"useI2sAsBuzzer": {
|
||||||
"label": "Use I²S Pin as Buzzer",
|
"label": "Use I²S Pin as Buzzer",
|
||||||
"description": "Designate I²S Pin as Buzzer Output"
|
"description": "Designate I²S Pin as Buzzer Output"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"mqtt": {
|
"mqtt": {
|
||||||
"title": "MQTT Settings",
|
"title": "MQTT Settings",
|
||||||
"description": "Settings for the MQTT module",
|
"description": "Settings for the MQTT module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Enabled",
|
"label": "Enabled",
|
||||||
"description": "Enable or disable MQTT"
|
"description": "Enable or disable MQTT"
|
||||||
},
|
},
|
||||||
"address": {
|
"address": {
|
||||||
"label": "MQTT Server Address",
|
"label": "MQTT Server Address",
|
||||||
"description": "MQTT server address to use for default/custom servers"
|
"description": "MQTT server address to use for default/custom servers"
|
||||||
},
|
},
|
||||||
"username": {
|
"username": {
|
||||||
"label": "MQTT Username",
|
"label": "MQTT Username",
|
||||||
"description": "MQTT username to use for default/custom servers"
|
"description": "MQTT username to use for default/custom servers"
|
||||||
},
|
},
|
||||||
"password": {
|
"password": {
|
||||||
"label": "MQTT Password",
|
"label": "MQTT Password",
|
||||||
"description": "MQTT password to use for default/custom servers"
|
"description": "MQTT password to use for default/custom servers"
|
||||||
},
|
},
|
||||||
"encryptionEnabled": {
|
"encryptionEnabled": {
|
||||||
"label": "Encryption Enabled",
|
"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."
|
"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": {
|
"jsonEnabled": {
|
||||||
"label": "JSON Enabled",
|
"label": "JSON Enabled",
|
||||||
"description": "Whether to send/consume JSON packets on MQTT"
|
"description": "Whether to send/consume JSON packets on MQTT"
|
||||||
},
|
},
|
||||||
"tlsEnabled": {
|
"tlsEnabled": {
|
||||||
"label": "TLS Enabled",
|
"label": "TLS Enabled",
|
||||||
"description": "Enable or disable TLS"
|
"description": "Enable or disable TLS"
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"label": "Root topic",
|
"label": "Root topic",
|
||||||
"description": "MQTT root topic to use for default/custom servers"
|
"description": "MQTT root topic to use for default/custom servers"
|
||||||
},
|
},
|
||||||
"proxyToClientEnabled": {
|
"proxyToClientEnabled": {
|
||||||
"label": "MQTT Client Proxy Enabled",
|
"label": "MQTT Client Proxy Enabled",
|
||||||
"description": "Utilizes the network connection to proxy MQTT messages to the client."
|
"description": "Utilizes the network connection to proxy MQTT messages to the client."
|
||||||
},
|
},
|
||||||
"mapReportingEnabled": {
|
"mapReportingEnabled": {
|
||||||
"label": "Map Reporting Enabled",
|
"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."
|
"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": {
|
"mapReportSettings": {
|
||||||
"publishIntervalSecs": {
|
"publishIntervalSecs": {
|
||||||
"label": "Map Report Publish Interval (s)",
|
"label": "Map Report Publish Interval (s)",
|
||||||
"description": "Interval in seconds to publish map reports"
|
"description": "Interval in seconds to publish map reports"
|
||||||
},
|
},
|
||||||
"positionPrecision": {
|
"positionPrecision": {
|
||||||
"label": "Approximate Location",
|
"label": "Approximate Location",
|
||||||
"description": "Position shared will be accurate within this distance",
|
"description": "Position shared will be accurate within this distance",
|
||||||
"options": {
|
"options": {
|
||||||
"metric_km23": "Within 23 km",
|
"metric_km23": "Within 23 km",
|
||||||
"metric_km12": "Within 12 km",
|
"metric_km12": "Within 12 km",
|
||||||
"metric_km5_8": "Within 5.8 km",
|
"metric_km5_8": "Within 5.8 km",
|
||||||
"metric_km2_9": "Within 2.9 km",
|
"metric_km2_9": "Within 2.9 km",
|
||||||
"metric_km1_5": "Within 1.5 km",
|
"metric_km1_5": "Within 1.5 km",
|
||||||
"metric_m700": "Within 700 m",
|
"metric_m700": "Within 700 m",
|
||||||
"metric_m350": "Within 350 m",
|
"metric_m350": "Within 350 m",
|
||||||
"metric_m200": "Within 200 m",
|
"metric_m200": "Within 200 m",
|
||||||
"metric_m90": "Within 90 m",
|
"metric_m90": "Within 90 m",
|
||||||
"metric_m50": "Within 50 m",
|
"metric_m50": "Within 50 m",
|
||||||
"imperial_mi15": "Within 15 miles",
|
"imperial_mi15": "Within 15 miles",
|
||||||
"imperial_mi7_3": "Within 7.3 miles",
|
"imperial_mi7_3": "Within 7.3 miles",
|
||||||
"imperial_mi3_6": "Within 3.6 miles",
|
"imperial_mi3_6": "Within 3.6 miles",
|
||||||
"imperial_mi1_8": "Within 1.8 miles",
|
"imperial_mi1_8": "Within 1.8 miles",
|
||||||
"imperial_mi0_9": "Within 0.9 miles",
|
"imperial_mi0_9": "Within 0.9 miles",
|
||||||
"imperial_mi0_5": "Within 0.5 miles",
|
"imperial_mi0_5": "Within 0.5 miles",
|
||||||
"imperial_mi0_2": "Within 0.2 miles",
|
"imperial_mi0_2": "Within 0.2 miles",
|
||||||
"imperial_ft600": "Within 600 feet",
|
"imperial_ft600": "Within 600 feet",
|
||||||
"imperial_ft300": "Within 300 feet",
|
"imperial_ft300": "Within 300 feet",
|
||||||
"imperial_ft150": "Within 150 feet"
|
"imperial_ft150": "Within 150 feet"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"neighborInfo": {
|
"neighborInfo": {
|
||||||
"title": "Neighbor Info Settings",
|
"title": "Neighbor Info Settings",
|
||||||
"description": "Settings for the Neighbor Info module",
|
"description": "Settings for the Neighbor Info module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Enabled",
|
"label": "Enabled",
|
||||||
"description": "Enable or disable Neighbor Info Module"
|
"description": "Enable or disable Neighbor Info Module"
|
||||||
},
|
},
|
||||||
"updateInterval": {
|
"updateInterval": {
|
||||||
"label": "Update Interval",
|
"label": "Update Interval",
|
||||||
"description": "Interval in seconds of how often we should try to send our Neighbor Info to the mesh"
|
"description": "Interval in seconds of how often we should try to send our Neighbor Info to the mesh"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"paxcounter": {
|
"paxcounter": {
|
||||||
"title": "Paxcounter Settings",
|
"title": "Paxcounter Settings",
|
||||||
"description": "Settings for the Paxcounter module",
|
"description": "Settings for the Paxcounter module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Module Enabled",
|
"label": "Module Enabled",
|
||||||
"description": "Enable Paxcounter"
|
"description": "Enable Paxcounter"
|
||||||
},
|
},
|
||||||
"paxcounterUpdateInterval": {
|
"paxcounterUpdateInterval": {
|
||||||
"label": "Update Interval (seconds)",
|
"label": "Update Interval (seconds)",
|
||||||
"description": "How long to wait between sending paxcounter packets"
|
"description": "How long to wait between sending paxcounter packets"
|
||||||
},
|
},
|
||||||
"wifiThreshold": {
|
"wifiThreshold": {
|
||||||
"label": "WiFi RSSI Threshold",
|
"label": "WiFi RSSI Threshold",
|
||||||
"description": "At what WiFi RSSI level should the counter increase. Defaults to -80."
|
"description": "At what WiFi RSSI level should the counter increase. Defaults to -80."
|
||||||
},
|
},
|
||||||
"bleThreshold": {
|
"bleThreshold": {
|
||||||
"label": "BLE RSSI Threshold",
|
"label": "BLE RSSI Threshold",
|
||||||
"description": "At what BLE RSSI level should the counter increase. Defaults to -80."
|
"description": "At what BLE RSSI level should the counter increase. Defaults to -80."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rangeTest": {
|
"rangeTest": {
|
||||||
"title": "Range Test Settings",
|
"title": "Range Test Settings",
|
||||||
"description": "Settings for the Range Test module",
|
"description": "Settings for the Range Test module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Module Enabled",
|
"label": "Module Enabled",
|
||||||
"description": "Enable Range Test"
|
"description": "Enable Range Test"
|
||||||
},
|
},
|
||||||
"sender": {
|
"sender": {
|
||||||
"label": "Message Interval",
|
"label": "Message Interval",
|
||||||
"description": "How long to wait between sending test packets"
|
"description": "How long to wait between sending test packets"
|
||||||
},
|
},
|
||||||
"save": {
|
"save": {
|
||||||
"label": "Save CSV to storage",
|
"label": "Save CSV to storage",
|
||||||
"description": "ESP32 Only"
|
"description": "ESP32 Only"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"serial": {
|
"serial": {
|
||||||
"title": "Serial Settings",
|
"title": "Serial Settings",
|
||||||
"description": "Settings for the Serial module",
|
"description": "Settings for the Serial module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Module Enabled",
|
"label": "Module Enabled",
|
||||||
"description": "Enable Serial output"
|
"description": "Enable Serial output"
|
||||||
},
|
},
|
||||||
"echo": {
|
"echo": {
|
||||||
"label": "Echo",
|
"label": "Echo",
|
||||||
"description": "Any packets you send will be echoed back to your device"
|
"description": "Any packets you send will be echoed back to your device"
|
||||||
},
|
},
|
||||||
"rxd": {
|
"rxd": {
|
||||||
"label": "Receive Pin",
|
"label": "Receive Pin",
|
||||||
"description": "Set the GPIO pin to the RXD pin you have set up."
|
"description": "Set the GPIO pin to the RXD pin you have set up."
|
||||||
},
|
},
|
||||||
"txd": {
|
"txd": {
|
||||||
"label": "Transmit Pin",
|
"label": "Transmit Pin",
|
||||||
"description": "Set the GPIO pin to the TXD pin you have set up."
|
"description": "Set the GPIO pin to the TXD pin you have set up."
|
||||||
},
|
},
|
||||||
"baud": {
|
"baud": {
|
||||||
"label": "Baud Rate",
|
"label": "Baud Rate",
|
||||||
"description": "The serial baud rate"
|
"description": "The serial baud rate"
|
||||||
},
|
},
|
||||||
"timeout": {
|
"timeout": {
|
||||||
"label": "Timeout",
|
"label": "Timeout",
|
||||||
"description": "Seconds to wait before we consider your packet as 'done'"
|
"description": "Seconds to wait before we consider your packet as 'done'"
|
||||||
},
|
},
|
||||||
"mode": {
|
"mode": {
|
||||||
"label": "Mode",
|
"label": "Mode",
|
||||||
"description": "Select Mode"
|
"description": "Select Mode"
|
||||||
},
|
},
|
||||||
"overrideConsoleSerialPort": {
|
"overrideConsoleSerialPort": {
|
||||||
"label": "Override Console Serial Port",
|
"label": "Override Console Serial Port",
|
||||||
"description": "If you have a serial port connected to the console, this will override it."
|
"description": "If you have a serial port connected to the console, this will override it."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storeForward": {
|
"storeForward": {
|
||||||
"title": "Store & Forward Settings",
|
"title": "Store & Forward Settings",
|
||||||
"description": "Settings for the Store & Forward module",
|
"description": "Settings for the Store & Forward module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Module Enabled",
|
"label": "Module Enabled",
|
||||||
"description": "Enable Store & Forward"
|
"description": "Enable Store & Forward"
|
||||||
},
|
},
|
||||||
"heartbeat": {
|
"heartbeat": {
|
||||||
"label": "Heartbeat Enabled",
|
"label": "Heartbeat Enabled",
|
||||||
"description": "Enable Store & Forward heartbeat"
|
"description": "Enable Store & Forward heartbeat"
|
||||||
},
|
},
|
||||||
"records": {
|
"records": {
|
||||||
"label": "Number of records",
|
"label": "Number of records",
|
||||||
"description": "Number of records to store"
|
"description": "Number of records to store"
|
||||||
},
|
},
|
||||||
"historyReturnMax": {
|
"historyReturnMax": {
|
||||||
"label": "History return max",
|
"label": "History return max",
|
||||||
"description": "Max number of records to return"
|
"description": "Max number of records to return"
|
||||||
},
|
},
|
||||||
"historyReturnWindow": {
|
"historyReturnWindow": {
|
||||||
"label": "History return window",
|
"label": "History return window",
|
||||||
"description": "Max number of records to return"
|
"description": "Max number of records to return"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"telemetry": {
|
"telemetry": {
|
||||||
"title": "Telemetry Settings",
|
"title": "Telemetry Settings",
|
||||||
"description": "Settings for the Telemetry module",
|
"description": "Settings for the Telemetry module",
|
||||||
"deviceUpdateInterval": {
|
"deviceUpdateInterval": {
|
||||||
"label": "Device Metrics",
|
"label": "Device Metrics",
|
||||||
"description": "Device metrics update interval (seconds)"
|
"description": "Device metrics update interval (seconds)"
|
||||||
},
|
},
|
||||||
"environmentUpdateInterval": {
|
"environmentUpdateInterval": {
|
||||||
"label": "Environment metrics update interval (seconds)",
|
"label": "Environment metrics update interval (seconds)",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"environmentMeasurementEnabled": {
|
"environmentMeasurementEnabled": {
|
||||||
"label": "Module Enabled",
|
"label": "Module Enabled",
|
||||||
"description": "Enable the Environment Telemetry"
|
"description": "Enable the Environment Telemetry"
|
||||||
},
|
},
|
||||||
"environmentScreenEnabled": {
|
"environmentScreenEnabled": {
|
||||||
"label": "Displayed on Screen",
|
"label": "Displayed on Screen",
|
||||||
"description": "Show the Telemetry Module on the OLED"
|
"description": "Show the Telemetry Module on the OLED"
|
||||||
},
|
},
|
||||||
"environmentDisplayFahrenheit": {
|
"environmentDisplayFahrenheit": {
|
||||||
"label": "Display Fahrenheit",
|
"label": "Display Fahrenheit",
|
||||||
"description": "Display temp in Fahrenheit"
|
"description": "Display temp in Fahrenheit"
|
||||||
},
|
},
|
||||||
"airQualityEnabled": {
|
"airQualityEnabled": {
|
||||||
"label": "Air Quality Enabled",
|
"label": "Air Quality Enabled",
|
||||||
"description": "Enable the Air Quality Telemetry"
|
"description": "Enable the Air Quality Telemetry"
|
||||||
},
|
},
|
||||||
"airQualityInterval": {
|
"airQualityInterval": {
|
||||||
"label": "Air Quality Update Interval",
|
"label": "Air Quality Update Interval",
|
||||||
"description": "How often to send Air Quality data over the mesh"
|
"description": "How often to send Air Quality data over the mesh"
|
||||||
},
|
},
|
||||||
"powerMeasurementEnabled": {
|
"powerMeasurementEnabled": {
|
||||||
"label": "Power Measurement Enabled",
|
"label": "Power Measurement Enabled",
|
||||||
"description": "Enable the Power Measurement Telemetry"
|
"description": "Enable the Power Measurement Telemetry"
|
||||||
},
|
},
|
||||||
"powerUpdateInterval": {
|
"powerUpdateInterval": {
|
||||||
"label": "Power Update Interval",
|
"label": "Power Update Interval",
|
||||||
"description": "How often to send Power data over the mesh"
|
"description": "How often to send Power data over the mesh"
|
||||||
},
|
},
|
||||||
"powerScreenEnabled": {
|
"powerScreenEnabled": {
|
||||||
"label": "Power Screen Enabled",
|
"label": "Power Screen Enabled",
|
||||||
"description": "Enable the Power Telemetry Screen"
|
"description": "Enable the Power Telemetry Screen"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,64 +1,64 @@
|
|||||||
{
|
{
|
||||||
"nodeDetail": {
|
"nodeDetail": {
|
||||||
"publicKeyEnabled": {
|
"publicKeyEnabled": {
|
||||||
"label": "Public Key Enabled"
|
"label": "Public Key Enabled"
|
||||||
},
|
},
|
||||||
"noPublicKey": {
|
"noPublicKey": {
|
||||||
"label": "No Public Key"
|
"label": "No Public Key"
|
||||||
},
|
},
|
||||||
"directMessage": {
|
"directMessage": {
|
||||||
"label": "Direct Message {{shortName}}"
|
"label": "Direct Message {{shortName}}"
|
||||||
},
|
},
|
||||||
"favorite": {
|
"favorite": {
|
||||||
"label": "Favorite",
|
"label": "Favorite",
|
||||||
"tooltip": "Add or remove this node from your favorites"
|
"tooltip": "Add or remove this node from your favorites"
|
||||||
},
|
},
|
||||||
"notFavorite": {
|
"notFavorite": {
|
||||||
"label": "Not a Favorite"
|
"label": "Not a Favorite"
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"label": "Error",
|
"label": "Error",
|
||||||
"text": "An error occurred while fetching node details. Please try again later."
|
"text": "An error occurred while fetching node details. Please try again later."
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"heard": "Heard",
|
"heard": "Heard",
|
||||||
"mqtt": "MQTT"
|
"mqtt": "MQTT"
|
||||||
},
|
},
|
||||||
"elevation": {
|
"elevation": {
|
||||||
"label": "Elevation"
|
"label": "Elevation"
|
||||||
},
|
},
|
||||||
"channelUtil": {
|
"channelUtil": {
|
||||||
"label": "Channel Util"
|
"label": "Channel Util"
|
||||||
},
|
},
|
||||||
"airtimeUtil": {
|
"airtimeUtil": {
|
||||||
"label": "Airtime Util"
|
"label": "Airtime Util"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nodesTable": {
|
"nodesTable": {
|
||||||
"headings": {
|
"headings": {
|
||||||
"longName": "Long Name",
|
"longName": "Long Name",
|
||||||
"connection": "Connection",
|
"connection": "Connection",
|
||||||
"lastHeard": "Last Heard",
|
"lastHeard": "Last Heard",
|
||||||
"encryption": "Encryption",
|
"encryption": "Encryption",
|
||||||
"model": "Model",
|
"model": "Model",
|
||||||
"macAddress": "MAC Address"
|
"macAddress": "MAC Address"
|
||||||
},
|
},
|
||||||
"connectionStatus": {
|
"connectionStatus": {
|
||||||
"direct": "Direct",
|
"direct": "Direct",
|
||||||
"away": "away",
|
"away": "away",
|
||||||
"unknown": "-",
|
"unknown": "-",
|
||||||
"viaMqtt": ", via MQTT"
|
"viaMqtt": ", via MQTT"
|
||||||
},
|
},
|
||||||
"lastHeardStatus": {
|
"lastHeardStatus": {
|
||||||
"never": "Never"
|
"never": "Never"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"actions": {
|
"actions": {
|
||||||
"added": "Added",
|
"added": "Added",
|
||||||
"removed": "Removed",
|
"removed": "Removed",
|
||||||
"ignoreNode": "Ignore Node",
|
"ignoreNode": "Ignore Node",
|
||||||
"unignoreNode": "Unignore Node",
|
"unignoreNode": "Unignore Node",
|
||||||
"requestPosition": "Request Position"
|
"requestPosition": "Request Position"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,214 +1,214 @@
|
|||||||
{
|
{
|
||||||
"navigation": {
|
"navigation": {
|
||||||
"title": "Navigation",
|
"title": "Navigation",
|
||||||
"messages": "Messages",
|
"messages": "Messages",
|
||||||
"map": "Map",
|
"map": "Map",
|
||||||
"config": "Config",
|
"config": "Config",
|
||||||
"radioConfig": "Radio Config",
|
"radioConfig": "Radio Config",
|
||||||
"moduleConfig": "Module Config",
|
"moduleConfig": "Module Config",
|
||||||
"channels": "Channels",
|
"channels": "Channels",
|
||||||
"nodes": "Nodes"
|
"nodes": "Nodes"
|
||||||
},
|
},
|
||||||
"app": {
|
"app": {
|
||||||
"title": "Meshtastic",
|
"title": "Meshtastic",
|
||||||
"logo": "Meshtastic Logo"
|
"logo": "Meshtastic Logo"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"collapseToggle": {
|
"collapseToggle": {
|
||||||
"button": {
|
"button": {
|
||||||
"open": "Open sidebar",
|
"open": "Open sidebar",
|
||||||
"close": "Close sidebar"
|
"close": "Close sidebar"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"deviceInfo": {
|
"deviceInfo": {
|
||||||
"volts": "{{voltage}} volts",
|
"volts": "{{voltage}} volts",
|
||||||
"firmware": {
|
"firmware": {
|
||||||
"title": "Firmware",
|
"title": "Firmware",
|
||||||
"version": "v{{version}}",
|
"version": "v{{version}}",
|
||||||
"buildDate": "Build date: {{date}}"
|
"buildDate": "Build date: {{date}}"
|
||||||
},
|
},
|
||||||
"deviceName": {
|
"deviceName": {
|
||||||
"title": "Device Name",
|
"title": "Device Name",
|
||||||
"changeName": "Change Device Name",
|
"changeName": "Change Device Name",
|
||||||
"placeholder": "Enter device name"
|
"placeholder": "Enter device name"
|
||||||
},
|
},
|
||||||
"editDeviceName": "Edit device name"
|
"editDeviceName": "Edit device name"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"batteryStatus": {
|
"batteryStatus": {
|
||||||
"charging": "{{level}}% charging",
|
"charging": "{{level}}% charging",
|
||||||
"pluggedIn": "Plugged in",
|
"pluggedIn": "Plugged in",
|
||||||
"title": "Battery"
|
"title": "Battery"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"nodes": "Search nodes...",
|
"nodes": "Search nodes...",
|
||||||
"channels": "Search channels...",
|
"channels": "Search channels...",
|
||||||
"commandPalette": "Search commands..."
|
"commandPalette": "Search commands..."
|
||||||
},
|
},
|
||||||
"toast": {
|
"toast": {
|
||||||
"positionRequestSent": { "title": "Position request sent." },
|
"positionRequestSent": { "title": "Position request sent." },
|
||||||
"requestingPosition": { "title": "Requesting position, please wait..." },
|
"requestingPosition": { "title": "Requesting position, please wait..." },
|
||||||
"sendingTraceroute": { "title": "Sending Traceroute, please wait..." },
|
"sendingTraceroute": { "title": "Sending Traceroute, please wait..." },
|
||||||
"tracerouteSent": { "title": "Traceroute sent." },
|
"tracerouteSent": { "title": "Traceroute sent." },
|
||||||
"savedChannel": { "title": "Saved Channel: {{channelName}}" },
|
"savedChannel": { "title": "Saved Channel: {{channelName}}" },
|
||||||
"messages": {
|
"messages": {
|
||||||
"pkiEncryption": { "title": "Chat is using PKI encryption." },
|
"pkiEncryption": { "title": "Chat is using PKI encryption." },
|
||||||
"pskEncryption": { "title": "Chat is using PSK encryption." }
|
"pskEncryption": { "title": "Chat is using PSK encryption." }
|
||||||
},
|
},
|
||||||
"configSaveError": {
|
"configSaveError": {
|
||||||
"title": "Error Saving Config",
|
"title": "Error Saving Config",
|
||||||
"description": "An error occurred while saving the configuration."
|
"description": "An error occurred while saving the configuration."
|
||||||
},
|
},
|
||||||
"validationError": {
|
"validationError": {
|
||||||
"title": "Config Errors Exist",
|
"title": "Config Errors Exist",
|
||||||
"description": "Please fix the configuration errors before saving."
|
"description": "Please fix the configuration errors before saving."
|
||||||
},
|
},
|
||||||
"saveSuccess": {
|
"saveSuccess": {
|
||||||
"title": "Saving Config",
|
"title": "Saving Config",
|
||||||
"description": "The configuration change {{case}} has been saved."
|
"description": "The configuration change {{case}} has been saved."
|
||||||
},
|
},
|
||||||
"favoriteNode": {
|
"favoriteNode": {
|
||||||
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
|
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
|
||||||
"action": {
|
"action": {
|
||||||
"added": "Added",
|
"added": "Added",
|
||||||
"removed": "Removed",
|
"removed": "Removed",
|
||||||
"to": "to",
|
"to": "to",
|
||||||
"from": "from"
|
"from": "from"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ignoreNode": {
|
"ignoreNode": {
|
||||||
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
|
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
|
||||||
"action": {
|
"action": {
|
||||||
"added": "Added",
|
"added": "Added",
|
||||||
"removed": "Removed",
|
"removed": "Removed",
|
||||||
"to": "to",
|
"to": "to",
|
||||||
"from": "from"
|
"from": "from"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"copied": {
|
"copied": {
|
||||||
"label": "Copied!"
|
"label": "Copied!"
|
||||||
},
|
},
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"label": "Copy to clipboard"
|
"label": "Copy to clipboard"
|
||||||
},
|
},
|
||||||
"hidePassword": {
|
"hidePassword": {
|
||||||
"label": "Hide password"
|
"label": "Hide password"
|
||||||
},
|
},
|
||||||
"showPassword": {
|
"showPassword": {
|
||||||
"label": "Show password"
|
"label": "Show password"
|
||||||
},
|
},
|
||||||
"deliveryStatus": {
|
"deliveryStatus": {
|
||||||
"delivered": "Delivered",
|
"delivered": "Delivered",
|
||||||
"failed": "Delivery Failed",
|
"failed": "Delivery Failed",
|
||||||
"waiting": "Waiting",
|
"waiting": "Waiting",
|
||||||
"unknown": "Unknown"
|
"unknown": "Unknown"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"general": {
|
"general": {
|
||||||
"label": "General"
|
"label": "General"
|
||||||
},
|
},
|
||||||
"hardware": {
|
"hardware": {
|
||||||
"label": "Hardware"
|
"label": "Hardware"
|
||||||
},
|
},
|
||||||
"metrics": {
|
"metrics": {
|
||||||
"label": "Metrics"
|
"label": "Metrics"
|
||||||
},
|
},
|
||||||
"role": {
|
"role": {
|
||||||
"label": "Role"
|
"label": "Role"
|
||||||
},
|
},
|
||||||
"filter": {
|
"filter": {
|
||||||
"label": "Filter"
|
"label": "Filter"
|
||||||
},
|
},
|
||||||
"advanced": {
|
"advanced": {
|
||||||
"label": "Advanced"
|
"label": "Advanced"
|
||||||
},
|
},
|
||||||
"clearInput": {
|
"clearInput": {
|
||||||
"label": "Clear input"
|
"label": "Clear input"
|
||||||
},
|
},
|
||||||
"resetFilters": {
|
"resetFilters": {
|
||||||
"label": "Reset Filters"
|
"label": "Reset Filters"
|
||||||
},
|
},
|
||||||
"nodeName": {
|
"nodeName": {
|
||||||
"label": "Node name/number",
|
"label": "Node name/number",
|
||||||
"placeholder": "Meshtastic 1234"
|
"placeholder": "Meshtastic 1234"
|
||||||
},
|
},
|
||||||
"airtimeUtilization": {
|
"airtimeUtilization": {
|
||||||
"label": "Airtime Utilization (%)"
|
"label": "Airtime Utilization (%)"
|
||||||
},
|
},
|
||||||
"batteryLevel": {
|
"batteryLevel": {
|
||||||
"label": "Battery level (%)",
|
"label": "Battery level (%)",
|
||||||
"labelText": "Battery level (%): {{value}}"
|
"labelText": "Battery level (%): {{value}}"
|
||||||
},
|
},
|
||||||
"batteryVoltage": {
|
"batteryVoltage": {
|
||||||
"label": "Battery voltage (V)",
|
"label": "Battery voltage (V)",
|
||||||
"title": "Voltage"
|
"title": "Voltage"
|
||||||
},
|
},
|
||||||
"channelUtilization": {
|
"channelUtilization": {
|
||||||
"label": "Channel Utilization (%)"
|
"label": "Channel Utilization (%)"
|
||||||
},
|
},
|
||||||
"hops": {
|
"hops": {
|
||||||
"direct": "Direct",
|
"direct": "Direct",
|
||||||
"label": "Number of hops",
|
"label": "Number of hops",
|
||||||
"text": "Number of hops: {{value}}"
|
"text": "Number of hops: {{value}}"
|
||||||
},
|
},
|
||||||
"lastHeard": {
|
"lastHeard": {
|
||||||
"label": "Last heard",
|
"label": "Last heard",
|
||||||
"labelText": "Last heard: {{value}}",
|
"labelText": "Last heard: {{value}}",
|
||||||
"nowLabel": "Now"
|
"nowLabel": "Now"
|
||||||
},
|
},
|
||||||
"snr": {
|
"snr": {
|
||||||
"label": "SNR (db)"
|
"label": "SNR (db)"
|
||||||
},
|
},
|
||||||
"favorites": {
|
"favorites": {
|
||||||
"label": "Favorites"
|
"label": "Favorites"
|
||||||
},
|
},
|
||||||
"hide": {
|
"hide": {
|
||||||
"label": "Hide"
|
"label": "Hide"
|
||||||
},
|
},
|
||||||
"showOnly": {
|
"showOnly": {
|
||||||
"label": "Show Only"
|
"label": "Show Only"
|
||||||
},
|
},
|
||||||
"viaMqtt": {
|
"viaMqtt": {
|
||||||
"label": "Connected via MQTT"
|
"label": "Connected via MQTT"
|
||||||
},
|
},
|
||||||
"hopsUnknown": {
|
"hopsUnknown": {
|
||||||
"label": "Unknown number of hops"
|
"label": "Unknown number of hops"
|
||||||
},
|
},
|
||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Never heard"
|
"label": "Never heard"
|
||||||
},
|
},
|
||||||
"language": {
|
"language": {
|
||||||
"label": "Language",
|
"label": "Language",
|
||||||
"changeLanguage": "Change Language"
|
"changeLanguage": "Change Language"
|
||||||
},
|
},
|
||||||
"theme": {
|
"theme": {
|
||||||
"dark": "Dark",
|
"dark": "Dark",
|
||||||
"light": "Light",
|
"light": "Light",
|
||||||
"system": "Automatic",
|
"system": "Automatic",
|
||||||
"changeTheme": "Change Color Scheme"
|
"changeTheme": "Change Color Scheme"
|
||||||
},
|
},
|
||||||
"errorPage": {
|
"errorPage": {
|
||||||
"title": "This is a little embarrassing...",
|
"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.",
|
"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.",
|
"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:",
|
"reportInstructions": "Please include the following information in your report:",
|
||||||
"reportSteps": {
|
"reportSteps": {
|
||||||
"step1": "What you were doing when the error occurred",
|
"step1": "What you were doing when the error occurred",
|
||||||
"step2": "What you expected to happen",
|
"step2": "What you expected to happen",
|
||||||
"step3": "What actually happened",
|
"step3": "What actually happened",
|
||||||
"step4": "Any other relevant information"
|
"step4": "Any other relevant information"
|
||||||
},
|
},
|
||||||
"reportLink": "You can report the issue to our <0>GitHub</0>",
|
"reportLink": "You can report the issue to our <0>GitHub</0>",
|
||||||
"dashboardLink": "Return to the <0>dashboard</0>",
|
"dashboardLink": "Return to the <0>dashboard</0>",
|
||||||
"detailsSummary": "Error Details",
|
"detailsSummary": "Error Details",
|
||||||
"errorMessageLabel": "Error message:",
|
"errorMessageLabel": "Error message:",
|
||||||
"stackTraceLabel": "Stack trace:",
|
"stackTraceLabel": "Stack trace:",
|
||||||
"fallbackError": "{{error}}"
|
"fallbackError": "{{error}}"
|
||||||
},
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® is a registered trademark of Meshtastic LLC. | <1>Legal Information</1>",
|
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® is a registered trademark of Meshtastic LLC. | <1>Legal Information</1>",
|
||||||
"commitSha": "Commit SHA: {{sha}}"
|
"commitSha": "Commit SHA: {{sha}}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,69 +1,69 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"sectionLabel": "Canales",
|
"sectionLabel": "Canales",
|
||||||
"channelName": "Channel: {{channelName}}",
|
"channelName": "Channel: {{channelName}}",
|
||||||
"broadcastLabel": "Primary",
|
"broadcastLabel": "Primary",
|
||||||
"channelIndex": "Ch {{index}}"
|
"channelIndex": "Ch {{index}}"
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
|
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"label": "Ajustes del canal",
|
"label": "Ajustes del canal",
|
||||||
"description": "Crypto, MQTT & misc settings"
|
"description": "Crypto, MQTT & misc settings"
|
||||||
},
|
},
|
||||||
"role": {
|
"role": {
|
||||||
"label": "Role",
|
"label": "Role",
|
||||||
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
|
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
|
||||||
"options": {
|
"options": {
|
||||||
"primary": "PRIMARY",
|
"primary": "PRIMARY",
|
||||||
"disabled": "DISABLED",
|
"disabled": "DISABLED",
|
||||||
"secondary": "SECONDARY"
|
"secondary": "SECONDARY"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"psk": {
|
"psk": {
|
||||||
"label": "Pre-Shared Key",
|
"label": "Pre-Shared Key",
|
||||||
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
|
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
|
||||||
"generate": "Generate"
|
"generate": "Generate"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"label": "Nombre",
|
"label": "Nombre",
|
||||||
"description": "A unique name for the channel <12 bytes, leave blank for default"
|
"description": "A unique name for the channel <12 bytes, leave blank for default"
|
||||||
},
|
},
|
||||||
"uplinkEnabled": {
|
"uplinkEnabled": {
|
||||||
"label": "Uplink Enabled",
|
"label": "Uplink Enabled",
|
||||||
"description": "Send messages from the local mesh to MQTT"
|
"description": "Send messages from the local mesh to MQTT"
|
||||||
},
|
},
|
||||||
"downlinkEnabled": {
|
"downlinkEnabled": {
|
||||||
"label": "Downlink Enabled",
|
"label": "Downlink Enabled",
|
||||||
"description": "Send messages from MQTT to the local mesh"
|
"description": "Send messages from MQTT to the local mesh"
|
||||||
},
|
},
|
||||||
"positionPrecision": {
|
"positionPrecision": {
|
||||||
"label": "Location",
|
"label": "Location",
|
||||||
"description": "The precision of the location to share with the channel. Can be disabled.",
|
"description": "The precision of the location to share with the channel. Can be disabled.",
|
||||||
"options": {
|
"options": {
|
||||||
"none": "Do not share location",
|
"none": "Do not share location",
|
||||||
"precise": "Precise Location",
|
"precise": "Precise Location",
|
||||||
"metric_km23": "Within 23 kilometers",
|
"metric_km23": "Within 23 kilometers",
|
||||||
"metric_km12": "Within 12 kilometers",
|
"metric_km12": "Within 12 kilometers",
|
||||||
"metric_km5_8": "Within 5.8 kilometers",
|
"metric_km5_8": "Within 5.8 kilometers",
|
||||||
"metric_km2_9": "Within 2.9 kilometers",
|
"metric_km2_9": "Within 2.9 kilometers",
|
||||||
"metric_km1_5": "Within 1.5 kilometers",
|
"metric_km1_5": "Within 1.5 kilometers",
|
||||||
"metric_m700": "Within 700 meters",
|
"metric_m700": "Within 700 meters",
|
||||||
"metric_m350": "Within 350 meters",
|
"metric_m350": "Within 350 meters",
|
||||||
"metric_m200": "Within 200 meters",
|
"metric_m200": "Within 200 meters",
|
||||||
"metric_m90": "Within 90 meters",
|
"metric_m90": "Within 90 meters",
|
||||||
"metric_m50": "Within 50 meters",
|
"metric_m50": "Within 50 meters",
|
||||||
"imperial_mi15": "Within 15 miles",
|
"imperial_mi15": "Within 15 miles",
|
||||||
"imperial_mi7_3": "Within 7.3 miles",
|
"imperial_mi7_3": "Within 7.3 miles",
|
||||||
"imperial_mi3_6": "Within 3.6 miles",
|
"imperial_mi3_6": "Within 3.6 miles",
|
||||||
"imperial_mi1_8": "Within 1.8 miles",
|
"imperial_mi1_8": "Within 1.8 miles",
|
||||||
"imperial_mi0_9": "Within 0.9 miles",
|
"imperial_mi0_9": "Within 0.9 miles",
|
||||||
"imperial_mi0_5": "Within 0.5 miles",
|
"imperial_mi0_5": "Within 0.5 miles",
|
||||||
"imperial_mi0_2": "Within 0.2 miles",
|
"imperial_mi0_2": "Within 0.2 miles",
|
||||||
"imperial_ft600": "Within 600 feet",
|
"imperial_ft600": "Within 600 feet",
|
||||||
"imperial_ft300": "Within 300 feet",
|
"imperial_ft300": "Within 300 feet",
|
||||||
"imperial_ft150": "Within 150 feet"
|
"imperial_ft150": "Within 150 feet"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,50 +1,50 @@
|
|||||||
{
|
{
|
||||||
"emptyState": "No results found.",
|
"emptyState": "No results found.",
|
||||||
"page": {
|
"page": {
|
||||||
"title": "Command Menu"
|
"title": "Command Menu"
|
||||||
},
|
},
|
||||||
"pinGroup": {
|
"pinGroup": {
|
||||||
"label": "Pin command group"
|
"label": "Pin command group"
|
||||||
},
|
},
|
||||||
"unpinGroup": {
|
"unpinGroup": {
|
||||||
"label": "Unpin command group"
|
"label": "Unpin command group"
|
||||||
},
|
},
|
||||||
"goto": {
|
"goto": {
|
||||||
"label": "Goto",
|
"label": "Goto",
|
||||||
"command": {
|
"command": {
|
||||||
"messages": "Mensajes",
|
"messages": "Mensajes",
|
||||||
"map": "Mapa",
|
"map": "Mapa",
|
||||||
"config": "Config",
|
"config": "Config",
|
||||||
"channels": "Canales",
|
"channels": "Canales",
|
||||||
"nodes": "Nodes"
|
"nodes": "Nodes"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manage": {
|
"manage": {
|
||||||
"label": "Manage",
|
"label": "Manage",
|
||||||
"command": {
|
"command": {
|
||||||
"switchNode": "Switch Node",
|
"switchNode": "Switch Node",
|
||||||
"connectNewNode": "Connect New Node"
|
"connectNewNode": "Connect New Node"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"contextual": {
|
"contextual": {
|
||||||
"label": "Contextual",
|
"label": "Contextual",
|
||||||
"command": {
|
"command": {
|
||||||
"qrCode": "QR Code",
|
"qrCode": "QR Code",
|
||||||
"qrGenerator": "Generator",
|
"qrGenerator": "Generator",
|
||||||
"qrImport": "Import",
|
"qrImport": "Import",
|
||||||
"scheduleShutdown": "Schedule Shutdown",
|
"scheduleShutdown": "Schedule Shutdown",
|
||||||
"scheduleReboot": "Schedule Reboot",
|
"scheduleReboot": "Schedule Reboot",
|
||||||
"rebootToOtaMode": "Reboot To OTA Mode",
|
"rebootToOtaMode": "Reboot To OTA Mode",
|
||||||
"resetNodeDb": "Reset Node DB",
|
"resetNodeDb": "Reset Node DB",
|
||||||
"factoryResetDevice": "Factory Reset Device",
|
"factoryResetDevice": "Factory Reset Device",
|
||||||
"factoryResetConfig": "Factory Reset Config"
|
"factoryResetConfig": "Factory Reset Config"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"debug": {
|
"debug": {
|
||||||
"label": "Debug",
|
"label": "Debug",
|
||||||
"command": {
|
"command": {
|
||||||
"reconfigure": "Reconfigure",
|
"reconfigure": "Reconfigure",
|
||||||
"clearAllStoredMessages": "Clear All Stored Message"
|
"clearAllStoredMessages": "Clear All Stored Message"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,141 +1,141 @@
|
|||||||
{
|
{
|
||||||
"button": {
|
"button": {
|
||||||
"apply": "Aplique",
|
"apply": "Aplique",
|
||||||
"backupKey": "Backup Key",
|
"backupKey": "Backup Key",
|
||||||
"cancel": "Cancelar",
|
"cancel": "Cancelar",
|
||||||
"clearMessages": "Clear Messages",
|
"clearMessages": "Clear Messages",
|
||||||
"close": "Cerrar",
|
"close": "Cerrar",
|
||||||
"confirm": "Confirm",
|
"confirm": "Confirm",
|
||||||
"delete": "Eliminar",
|
"delete": "Eliminar",
|
||||||
"dismiss": "Dismiss",
|
"dismiss": "Dismiss",
|
||||||
"download": "Download",
|
"download": "Download",
|
||||||
"export": "Export",
|
"export": "Export",
|
||||||
"generate": "Generate",
|
"generate": "Generate",
|
||||||
"regenerate": "Regenerate",
|
"regenerate": "Regenerate",
|
||||||
"import": "Import",
|
"import": "Import",
|
||||||
"message": "Mensaje",
|
"message": "Mensaje",
|
||||||
"now": "Now",
|
"now": "Now",
|
||||||
"ok": "Vale",
|
"ok": "Vale",
|
||||||
"print": "Print",
|
"print": "Print",
|
||||||
"rebootOtaNow": "Reboot to OTA Mode Now",
|
"rebootOtaNow": "Reboot to OTA Mode Now",
|
||||||
"remove": "Quitar",
|
"remove": "Quitar",
|
||||||
"requestNewKeys": "Request New Keys",
|
"requestNewKeys": "Request New Keys",
|
||||||
"requestPosition": "Request Position",
|
"requestPosition": "Request Position",
|
||||||
"reset": "Reiniciar",
|
"reset": "Reiniciar",
|
||||||
"save": "Guardar",
|
"save": "Guardar",
|
||||||
"scanQr": "Scan QR Code",
|
"scanQr": "Scan QR Code",
|
||||||
"traceRoute": "Trace Route",
|
"traceRoute": "Trace Route",
|
||||||
"submit": "Submit"
|
"submit": "Submit"
|
||||||
},
|
},
|
||||||
"app": {
|
"app": {
|
||||||
"title": "Meshtastic",
|
"title": "Meshtastic",
|
||||||
"fullTitle": "Meshtastic Web Client"
|
"fullTitle": "Meshtastic Web Client"
|
||||||
},
|
},
|
||||||
"loading": "Loading...",
|
"loading": "Loading...",
|
||||||
"unit": {
|
"unit": {
|
||||||
"cps": "CPS",
|
"cps": "CPS",
|
||||||
"dbm": "dBm",
|
"dbm": "dBm",
|
||||||
"hertz": "Hz",
|
"hertz": "Hz",
|
||||||
"hop": {
|
"hop": {
|
||||||
"one": "Hop",
|
"one": "Hop",
|
||||||
"plural": "Hops"
|
"plural": "Hops"
|
||||||
},
|
},
|
||||||
"hopsAway": {
|
"hopsAway": {
|
||||||
"one": "{{count}} hop away",
|
"one": "{{count}} hop away",
|
||||||
"plural": "{{count}} hops away",
|
"plural": "{{count}} hops away",
|
||||||
"unknown": "Unknown hops away"
|
"unknown": "Unknown hops away"
|
||||||
},
|
},
|
||||||
"megahertz": "MHz",
|
"megahertz": "MHz",
|
||||||
"raw": "raw",
|
"raw": "raw",
|
||||||
"meter": {
|
"meter": {
|
||||||
"one": "Meter",
|
"one": "Meter",
|
||||||
"plural": "Meters",
|
"plural": "Meters",
|
||||||
"suffix": "m"
|
"suffix": "m"
|
||||||
},
|
},
|
||||||
"minute": {
|
"minute": {
|
||||||
"one": "Minute",
|
"one": "Minute",
|
||||||
"plural": "Minutes"
|
"plural": "Minutes"
|
||||||
},
|
},
|
||||||
"hour": {
|
"hour": {
|
||||||
"one": "Hour",
|
"one": "Hour",
|
||||||
"plural": "Hours"
|
"plural": "Hours"
|
||||||
},
|
},
|
||||||
"millisecond": {
|
"millisecond": {
|
||||||
"one": "Millisecond",
|
"one": "Millisecond",
|
||||||
"plural": "Milliseconds",
|
"plural": "Milliseconds",
|
||||||
"suffix": "ms"
|
"suffix": "ms"
|
||||||
},
|
},
|
||||||
"second": {
|
"second": {
|
||||||
"one": "Second",
|
"one": "Second",
|
||||||
"plural": "Seconds"
|
"plural": "Seconds"
|
||||||
},
|
},
|
||||||
"day": {
|
"day": {
|
||||||
"one": "Day",
|
"one": "Day",
|
||||||
"plural": "Days"
|
"plural": "Days"
|
||||||
},
|
},
|
||||||
"month": {
|
"month": {
|
||||||
"one": "Month",
|
"one": "Month",
|
||||||
"plural": "Months"
|
"plural": "Months"
|
||||||
},
|
},
|
||||||
"year": {
|
"year": {
|
||||||
"one": "Year",
|
"one": "Year",
|
||||||
"plural": "Years"
|
"plural": "Years"
|
||||||
},
|
},
|
||||||
"snr": "SNR",
|
"snr": "SNR",
|
||||||
"volt": {
|
"volt": {
|
||||||
"one": "Volt",
|
"one": "Volt",
|
||||||
"plural": "Volts",
|
"plural": "Volts",
|
||||||
"suffix": "V"
|
"suffix": "V"
|
||||||
},
|
},
|
||||||
"record": {
|
"record": {
|
||||||
"one": "Records",
|
"one": "Records",
|
||||||
"plural": "Records"
|
"plural": "Records"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"0bit": "Empty",
|
"0bit": "Empty",
|
||||||
"8bit": "8 bit",
|
"8bit": "8 bit",
|
||||||
"128bit": "128 bit",
|
"128bit": "128 bit",
|
||||||
"256bit": "256 bit"
|
"256bit": "256 bit"
|
||||||
},
|
},
|
||||||
"unknown": {
|
"unknown": {
|
||||||
"longName": "Unknown",
|
"longName": "Unknown",
|
||||||
"shortName": "UNK",
|
"shortName": "UNK",
|
||||||
"notAvailable": "N/A",
|
"notAvailable": "N/A",
|
||||||
"num": "??"
|
"num": "??"
|
||||||
},
|
},
|
||||||
"nodeUnknownPrefix": "!",
|
"nodeUnknownPrefix": "!",
|
||||||
"unset": "UNSET",
|
"unset": "UNSET",
|
||||||
"fallbackName": "Meshtastic {{last4}}",
|
"fallbackName": "Meshtastic {{last4}}",
|
||||||
"node": "Node",
|
"node": "Node",
|
||||||
"formValidation": {
|
"formValidation": {
|
||||||
"unsavedChanges": "Unsaved changes",
|
"unsavedChanges": "Unsaved changes",
|
||||||
"tooBig": {
|
"tooBig": {
|
||||||
"string": "Too long, expected less than or equal to {{maximum}} characters.",
|
"string": "Too long, expected less than or equal to {{maximum}} characters.",
|
||||||
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
|
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
|
||||||
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
|
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
|
||||||
},
|
},
|
||||||
"tooSmall": {
|
"tooSmall": {
|
||||||
"string": "Too short, expected more than or equal to {{minimum}} characters.",
|
"string": "Too short, expected more than or equal to {{minimum}} characters.",
|
||||||
"number": "Too small, expected a number larger than or equal to {{minimum}}."
|
"number": "Too small, expected a number larger than or equal to {{minimum}}."
|
||||||
},
|
},
|
||||||
"invalidFormat": {
|
"invalidFormat": {
|
||||||
"ipv4": "Invalid format, expected an IPv4 address.",
|
"ipv4": "Invalid format, expected an IPv4 address.",
|
||||||
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
|
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
|
||||||
},
|
},
|
||||||
"invalidType": {
|
"invalidType": {
|
||||||
"number": "Invalid type, expected a number."
|
"number": "Invalid type, expected a number."
|
||||||
},
|
},
|
||||||
"pskLength": {
|
"pskLength": {
|
||||||
"0bit": "Key is required to be empty.",
|
"0bit": "Key is required to be empty.",
|
||||||
"8bit": "Key is required to be an 8 bit pre-shared key (PSK).",
|
"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).",
|
"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)."
|
"256bit": "Key is required to be a 256 bit pre-shared key (PSK)."
|
||||||
},
|
},
|
||||||
"required": {
|
"required": {
|
||||||
"generic": "This field is required.",
|
"generic": "This field is required.",
|
||||||
"managed": "At least one admin key is requred if the node is managed.",
|
"managed": "At least one admin key is requred if the node is managed.",
|
||||||
"key": "Key is required."
|
"key": "Key is required."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
"title": "Connected Devices",
|
"title": "Connected Devices",
|
||||||
"description": "Manage your connected Meshtastic devices.",
|
"description": "Manage your connected Meshtastic devices.",
|
||||||
"connectionType_ble": "BLE",
|
"connectionType_ble": "BLE",
|
||||||
"connectionType_serial": "Serial",
|
"connectionType_serial": "Serial",
|
||||||
"connectionType_network": "Red",
|
"connectionType_network": "Red",
|
||||||
"noDevicesTitle": "No devices connected",
|
"noDevicesTitle": "No devices connected",
|
||||||
"noDevicesDescription": "Connect a new device to get started.",
|
"noDevicesDescription": "Connect a new device to get started.",
|
||||||
"button_newConnection": "New Connection"
|
"button_newConnection": "New Connection"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,428 +1,428 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"title": "Configuration",
|
"title": "Configuration",
|
||||||
"tabBluetooth": "Bluetooth",
|
"tabBluetooth": "Bluetooth",
|
||||||
"tabDevice": "Dispositivo",
|
"tabDevice": "Dispositivo",
|
||||||
"tabDisplay": "Pantalla",
|
"tabDisplay": "Pantalla",
|
||||||
"tabLora": "LoRa",
|
"tabLora": "LoRa",
|
||||||
"tabNetwork": "Red",
|
"tabNetwork": "Red",
|
||||||
"tabPosition": "Posición",
|
"tabPosition": "Posición",
|
||||||
"tabPower": "Energía",
|
"tabPower": "Energía",
|
||||||
"tabSecurity": "Seguridad"
|
"tabSecurity": "Seguridad"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"label": "Modules"
|
"label": "Modules"
|
||||||
},
|
},
|
||||||
"device": {
|
"device": {
|
||||||
"title": "Device Settings",
|
"title": "Device Settings",
|
||||||
"description": "Settings for the device",
|
"description": "Settings for the device",
|
||||||
"buttonPin": {
|
"buttonPin": {
|
||||||
"description": "Button pin override",
|
"description": "Button pin override",
|
||||||
"label": "Button Pin"
|
"label": "Button Pin"
|
||||||
},
|
},
|
||||||
"buzzerPin": {
|
"buzzerPin": {
|
||||||
"description": "Buzzer pin override",
|
"description": "Buzzer pin override",
|
||||||
"label": "Buzzer Pin"
|
"label": "Buzzer Pin"
|
||||||
},
|
},
|
||||||
"disableTripleClick": {
|
"disableTripleClick": {
|
||||||
"description": "Disable triple click",
|
"description": "Disable triple click",
|
||||||
"label": "Disable Triple Click"
|
"label": "Disable Triple Click"
|
||||||
},
|
},
|
||||||
"doubleTapAsButtonPress": {
|
"doubleTapAsButtonPress": {
|
||||||
"description": "Treat double tap as button press",
|
"description": "Treat double tap as button press",
|
||||||
"label": "Double Tap as Button Press"
|
"label": "Double Tap as Button Press"
|
||||||
},
|
},
|
||||||
"ledHeartbeatDisabled": {
|
"ledHeartbeatDisabled": {
|
||||||
"description": "Disable default blinking LED",
|
"description": "Disable default blinking LED",
|
||||||
"label": "LED Heartbeat Disabled"
|
"label": "LED Heartbeat Disabled"
|
||||||
},
|
},
|
||||||
"nodeInfoBroadcastInterval": {
|
"nodeInfoBroadcastInterval": {
|
||||||
"description": "How often to broadcast node info",
|
"description": "How often to broadcast node info",
|
||||||
"label": "Node Info Broadcast Interval"
|
"label": "Node Info Broadcast Interval"
|
||||||
},
|
},
|
||||||
"posixTimezone": {
|
"posixTimezone": {
|
||||||
"description": "The POSIX timezone string for the device",
|
"description": "The POSIX timezone string for the device",
|
||||||
"label": "POSIX Timezone"
|
"label": "POSIX Timezone"
|
||||||
},
|
},
|
||||||
"rebroadcastMode": {
|
"rebroadcastMode": {
|
||||||
"description": "How to handle rebroadcasting",
|
"description": "How to handle rebroadcasting",
|
||||||
"label": "Rebroadcast Mode"
|
"label": "Rebroadcast Mode"
|
||||||
},
|
},
|
||||||
"role": {
|
"role": {
|
||||||
"description": "What role the device performs on the mesh",
|
"description": "What role the device performs on the mesh",
|
||||||
"label": "Role"
|
"label": "Role"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"bluetooth": {
|
"bluetooth": {
|
||||||
"title": "Bluetooth Settings",
|
"title": "Bluetooth Settings",
|
||||||
"description": "Settings for the Bluetooth module",
|
"description": "Settings for the Bluetooth module",
|
||||||
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
|
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"description": "Enable or disable Bluetooth",
|
"description": "Enable or disable Bluetooth",
|
||||||
"label": "Enabled"
|
"label": "Enabled"
|
||||||
},
|
},
|
||||||
"pairingMode": {
|
"pairingMode": {
|
||||||
"description": "Pin selection behaviour.",
|
"description": "Pin selection behaviour.",
|
||||||
"label": "Modo de emparejamiento"
|
"label": "Modo de emparejamiento"
|
||||||
},
|
},
|
||||||
"pin": {
|
"pin": {
|
||||||
"description": "Pin to use when pairing",
|
"description": "Pin to use when pairing",
|
||||||
"label": "Pin"
|
"label": "Pin"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"display": {
|
"display": {
|
||||||
"description": "Settings for the device display",
|
"description": "Settings for the device display",
|
||||||
"title": "Display Settings",
|
"title": "Display Settings",
|
||||||
"headingBold": {
|
"headingBold": {
|
||||||
"description": "Bolden the heading text",
|
"description": "Bolden the heading text",
|
||||||
"label": "Bold Heading"
|
"label": "Bold Heading"
|
||||||
},
|
},
|
||||||
"carouselDelay": {
|
"carouselDelay": {
|
||||||
"description": "How fast to cycle through windows",
|
"description": "How fast to cycle through windows",
|
||||||
"label": "Carousel Delay"
|
"label": "Carousel Delay"
|
||||||
},
|
},
|
||||||
"compassNorthTop": {
|
"compassNorthTop": {
|
||||||
"description": "Fix north to the top of compass",
|
"description": "Fix north to the top of compass",
|
||||||
"label": "Compass North Top"
|
"label": "Compass North Top"
|
||||||
},
|
},
|
||||||
"displayMode": {
|
"displayMode": {
|
||||||
"description": "Screen layout variant",
|
"description": "Screen layout variant",
|
||||||
"label": "Display Mode"
|
"label": "Display Mode"
|
||||||
},
|
},
|
||||||
"displayUnits": {
|
"displayUnits": {
|
||||||
"description": "Display metric or imperial units",
|
"description": "Display metric or imperial units",
|
||||||
"label": "Display Units"
|
"label": "Display Units"
|
||||||
},
|
},
|
||||||
"flipScreen": {
|
"flipScreen": {
|
||||||
"description": "Flip display 180 degrees",
|
"description": "Flip display 180 degrees",
|
||||||
"label": "Flip Screen"
|
"label": "Flip Screen"
|
||||||
},
|
},
|
||||||
"gpsDisplayUnits": {
|
"gpsDisplayUnits": {
|
||||||
"description": "Coordinate display format",
|
"description": "Coordinate display format",
|
||||||
"label": "GPS Display Units"
|
"label": "GPS Display Units"
|
||||||
},
|
},
|
||||||
"oledType": {
|
"oledType": {
|
||||||
"description": "Type of OLED screen attached to the device",
|
"description": "Type of OLED screen attached to the device",
|
||||||
"label": "OLED Type"
|
"label": "OLED Type"
|
||||||
},
|
},
|
||||||
"screenTimeout": {
|
"screenTimeout": {
|
||||||
"description": "Turn off the display after this long",
|
"description": "Turn off the display after this long",
|
||||||
"label": "Screen Timeout"
|
"label": "Screen Timeout"
|
||||||
},
|
},
|
||||||
"twelveHourClock": {
|
"twelveHourClock": {
|
||||||
"description": "Use 12-hour clock format",
|
"description": "Use 12-hour clock format",
|
||||||
"label": "12-Hour Clock"
|
"label": "12-Hour Clock"
|
||||||
},
|
},
|
||||||
"wakeOnTapOrMotion": {
|
"wakeOnTapOrMotion": {
|
||||||
"description": "Wake the device on tap or motion",
|
"description": "Wake the device on tap or motion",
|
||||||
"label": "Wake on Tap or Motion"
|
"label": "Wake on Tap or Motion"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lora": {
|
"lora": {
|
||||||
"title": "Mesh Settings",
|
"title": "Mesh Settings",
|
||||||
"description": "Settings for the LoRa mesh",
|
"description": "Settings for the LoRa mesh",
|
||||||
"bandwidth": {
|
"bandwidth": {
|
||||||
"description": "Channel bandwidth in MHz",
|
"description": "Channel bandwidth in MHz",
|
||||||
"label": "Bandwidth"
|
"label": "Bandwidth"
|
||||||
},
|
},
|
||||||
"boostedRxGain": {
|
"boostedRxGain": {
|
||||||
"description": "Boosted RX gain",
|
"description": "Boosted RX gain",
|
||||||
"label": "Boosted RX Gain"
|
"label": "Boosted RX Gain"
|
||||||
},
|
},
|
||||||
"codingRate": {
|
"codingRate": {
|
||||||
"description": "The denominator of the coding rate",
|
"description": "The denominator of the coding rate",
|
||||||
"label": "Coding Rate"
|
"label": "Coding Rate"
|
||||||
},
|
},
|
||||||
"frequencyOffset": {
|
"frequencyOffset": {
|
||||||
"description": "Frequency offset to correct for crystal calibration errors",
|
"description": "Frequency offset to correct for crystal calibration errors",
|
||||||
"label": "Frequency Offset"
|
"label": "Frequency Offset"
|
||||||
},
|
},
|
||||||
"frequencySlot": {
|
"frequencySlot": {
|
||||||
"description": "LoRa frequency channel number",
|
"description": "LoRa frequency channel number",
|
||||||
"label": "Frequency Slot"
|
"label": "Frequency Slot"
|
||||||
},
|
},
|
||||||
"hopLimit": {
|
"hopLimit": {
|
||||||
"description": "Maximum number of hops",
|
"description": "Maximum number of hops",
|
||||||
"label": "Hop Limit"
|
"label": "Hop Limit"
|
||||||
},
|
},
|
||||||
"ignoreMqtt": {
|
"ignoreMqtt": {
|
||||||
"description": "Don't forward MQTT messages over the mesh",
|
"description": "Don't forward MQTT messages over the mesh",
|
||||||
"label": "Ignore MQTT"
|
"label": "Ignore MQTT"
|
||||||
},
|
},
|
||||||
"modemPreset": {
|
"modemPreset": {
|
||||||
"description": "Modem preset to use",
|
"description": "Modem preset to use",
|
||||||
"label": "Modem Preset"
|
"label": "Modem Preset"
|
||||||
},
|
},
|
||||||
"okToMqtt": {
|
"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",
|
"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"
|
"label": "OK to MQTT"
|
||||||
},
|
},
|
||||||
"overrideDutyCycle": {
|
"overrideDutyCycle": {
|
||||||
"description": "Override Duty Cycle",
|
"description": "Override Duty Cycle",
|
||||||
"label": "Override Duty Cycle"
|
"label": "Override Duty Cycle"
|
||||||
},
|
},
|
||||||
"overrideFrequency": {
|
"overrideFrequency": {
|
||||||
"description": "Override frequency",
|
"description": "Override frequency",
|
||||||
"label": "Override Frequency"
|
"label": "Override Frequency"
|
||||||
},
|
},
|
||||||
"region": {
|
"region": {
|
||||||
"description": "Sets the region for your node",
|
"description": "Sets the region for your node",
|
||||||
"label": "Región"
|
"label": "Región"
|
||||||
},
|
},
|
||||||
"spreadingFactor": {
|
"spreadingFactor": {
|
||||||
"description": "Indicates the number of chirps per symbol",
|
"description": "Indicates the number of chirps per symbol",
|
||||||
"label": "Spreading Factor"
|
"label": "Spreading Factor"
|
||||||
},
|
},
|
||||||
"transmitEnabled": {
|
"transmitEnabled": {
|
||||||
"description": "Enable/Disable transmit (TX) from the LoRa radio",
|
"description": "Enable/Disable transmit (TX) from the LoRa radio",
|
||||||
"label": "Transmit Enabled"
|
"label": "Transmit Enabled"
|
||||||
},
|
},
|
||||||
"transmitPower": {
|
"transmitPower": {
|
||||||
"description": "Max transmit power",
|
"description": "Max transmit power",
|
||||||
"label": "Transmit Power"
|
"label": "Transmit Power"
|
||||||
},
|
},
|
||||||
"usePreset": {
|
"usePreset": {
|
||||||
"description": "Use one of the predefined modem presets",
|
"description": "Use one of the predefined modem presets",
|
||||||
"label": "Use Preset"
|
"label": "Use Preset"
|
||||||
},
|
},
|
||||||
"meshSettings": {
|
"meshSettings": {
|
||||||
"description": "Settings for the LoRa mesh",
|
"description": "Settings for the LoRa mesh",
|
||||||
"label": "Mesh Settings"
|
"label": "Mesh Settings"
|
||||||
},
|
},
|
||||||
"waveformSettings": {
|
"waveformSettings": {
|
||||||
"description": "Settings for the LoRa waveform",
|
"description": "Settings for the LoRa waveform",
|
||||||
"label": "Waveform Settings"
|
"label": "Waveform Settings"
|
||||||
},
|
},
|
||||||
"radioSettings": {
|
"radioSettings": {
|
||||||
"label": "Radio Settings",
|
"label": "Radio Settings",
|
||||||
"description": "Settings for the LoRa radio"
|
"description": "Settings for the LoRa radio"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "WiFi Config",
|
"title": "WiFi Config",
|
||||||
"description": "WiFi radio configuration",
|
"description": "WiFi radio configuration",
|
||||||
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
|
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
|
||||||
"addressMode": {
|
"addressMode": {
|
||||||
"description": "Address assignment selection",
|
"description": "Address assignment selection",
|
||||||
"label": "Address Mode"
|
"label": "Address Mode"
|
||||||
},
|
},
|
||||||
"dns": {
|
"dns": {
|
||||||
"description": "DNS Server",
|
"description": "DNS Server",
|
||||||
"label": "DNS"
|
"label": "DNS"
|
||||||
},
|
},
|
||||||
"ethernetEnabled": {
|
"ethernetEnabled": {
|
||||||
"description": "Enable or disable the Ethernet port",
|
"description": "Enable or disable the Ethernet port",
|
||||||
"label": "Enabled"
|
"label": "Enabled"
|
||||||
},
|
},
|
||||||
"gateway": {
|
"gateway": {
|
||||||
"description": "Default Gateway",
|
"description": "Default Gateway",
|
||||||
"label": "Gateway"
|
"label": "Gateway"
|
||||||
},
|
},
|
||||||
"ip": {
|
"ip": {
|
||||||
"description": "IP Address",
|
"description": "IP Address",
|
||||||
"label": "IP"
|
"label": "IP"
|
||||||
},
|
},
|
||||||
"psk": {
|
"psk": {
|
||||||
"description": "Network password",
|
"description": "Network password",
|
||||||
"label": "PSK"
|
"label": "PSK"
|
||||||
},
|
},
|
||||||
"ssid": {
|
"ssid": {
|
||||||
"description": "Network name",
|
"description": "Network name",
|
||||||
"label": "SSID"
|
"label": "SSID"
|
||||||
},
|
},
|
||||||
"subnet": {
|
"subnet": {
|
||||||
"description": "Subnet Mask",
|
"description": "Subnet Mask",
|
||||||
"label": "Subnet"
|
"label": "Subnet"
|
||||||
},
|
},
|
||||||
"wifiEnabled": {
|
"wifiEnabled": {
|
||||||
"description": "Enable or disable the WiFi radio",
|
"description": "Enable or disable the WiFi radio",
|
||||||
"label": "Enabled"
|
"label": "Enabled"
|
||||||
},
|
},
|
||||||
"meshViaUdp": {
|
"meshViaUdp": {
|
||||||
"label": "Mesh via UDP"
|
"label": "Mesh via UDP"
|
||||||
},
|
},
|
||||||
"ntpServer": {
|
"ntpServer": {
|
||||||
"label": "NTP Server"
|
"label": "NTP Server"
|
||||||
},
|
},
|
||||||
"rsyslogServer": {
|
"rsyslogServer": {
|
||||||
"label": "Rsyslog Server"
|
"label": "Rsyslog Server"
|
||||||
},
|
},
|
||||||
"ethernetConfigSettings": {
|
"ethernetConfigSettings": {
|
||||||
"description": "Ethernet port configuration",
|
"description": "Ethernet port configuration",
|
||||||
"label": "Ethernet Config"
|
"label": "Ethernet Config"
|
||||||
},
|
},
|
||||||
"ipConfigSettings": {
|
"ipConfigSettings": {
|
||||||
"description": "IP configuration",
|
"description": "IP configuration",
|
||||||
"label": "IP Config"
|
"label": "IP Config"
|
||||||
},
|
},
|
||||||
"ntpConfigSettings": {
|
"ntpConfigSettings": {
|
||||||
"description": "NTP configuration",
|
"description": "NTP configuration",
|
||||||
"label": "NTP Config"
|
"label": "NTP Config"
|
||||||
},
|
},
|
||||||
"rsyslogConfigSettings": {
|
"rsyslogConfigSettings": {
|
||||||
"description": "Rsyslog configuration",
|
"description": "Rsyslog configuration",
|
||||||
"label": "Rsyslog Config"
|
"label": "Rsyslog Config"
|
||||||
},
|
},
|
||||||
"udpConfigSettings": {
|
"udpConfigSettings": {
|
||||||
"description": "UDP over Mesh configuration",
|
"description": "UDP over Mesh configuration",
|
||||||
"label": "Configuración UDP"
|
"label": "Configuración UDP"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"position": {
|
"position": {
|
||||||
"title": "Position Settings",
|
"title": "Position Settings",
|
||||||
"description": "Settings for the position module",
|
"description": "Settings for the position module",
|
||||||
"broadcastInterval": {
|
"broadcastInterval": {
|
||||||
"description": "How often your position is sent out over the mesh",
|
"description": "How often your position is sent out over the mesh",
|
||||||
"label": "Broadcast Interval"
|
"label": "Broadcast Interval"
|
||||||
},
|
},
|
||||||
"enablePin": {
|
"enablePin": {
|
||||||
"description": "GPS module enable pin override",
|
"description": "GPS module enable pin override",
|
||||||
"label": "Enable Pin"
|
"label": "Enable Pin"
|
||||||
},
|
},
|
||||||
"fixedPosition": {
|
"fixedPosition": {
|
||||||
"description": "Don't report GPS position, but a manually-specified one",
|
"description": "Don't report GPS position, but a manually-specified one",
|
||||||
"label": "Fixed Position"
|
"label": "Fixed Position"
|
||||||
},
|
},
|
||||||
"gpsMode": {
|
"gpsMode": {
|
||||||
"description": "Configure whether device GPS is Enabled, Disabled, or Not Present",
|
"description": "Configure whether device GPS is Enabled, Disabled, or Not Present",
|
||||||
"label": "GPS Mode"
|
"label": "GPS Mode"
|
||||||
},
|
},
|
||||||
"gpsUpdateInterval": {
|
"gpsUpdateInterval": {
|
||||||
"description": "How often a GPS fix should be acquired",
|
"description": "How often a GPS fix should be acquired",
|
||||||
"label": "GPS Update Interval"
|
"label": "GPS Update Interval"
|
||||||
},
|
},
|
||||||
"positionFlags": {
|
"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.",
|
"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"
|
"label": "Position Flags"
|
||||||
},
|
},
|
||||||
"receivePin": {
|
"receivePin": {
|
||||||
"description": "GPS module RX pin override",
|
"description": "GPS module RX pin override",
|
||||||
"label": "Receive Pin"
|
"label": "Receive Pin"
|
||||||
},
|
},
|
||||||
"smartPositionEnabled": {
|
"smartPositionEnabled": {
|
||||||
"description": "Only send position when there has been a meaningful change in location",
|
"description": "Only send position when there has been a meaningful change in location",
|
||||||
"label": "Enable Smart Position"
|
"label": "Enable Smart Position"
|
||||||
},
|
},
|
||||||
"smartPositionMinDistance": {
|
"smartPositionMinDistance": {
|
||||||
"description": "Minimum distance (in meters) that must be traveled before a position update is sent",
|
"description": "Minimum distance (in meters) that must be traveled before a position update is sent",
|
||||||
"label": "Smart Position Minimum Distance"
|
"label": "Smart Position Minimum Distance"
|
||||||
},
|
},
|
||||||
"smartPositionMinInterval": {
|
"smartPositionMinInterval": {
|
||||||
"description": "Minimum interval (in seconds) that must pass before a position update is sent",
|
"description": "Minimum interval (in seconds) that must pass before a position update is sent",
|
||||||
"label": "Smart Position Minimum Interval"
|
"label": "Smart Position Minimum Interval"
|
||||||
},
|
},
|
||||||
"transmitPin": {
|
"transmitPin": {
|
||||||
"description": "GPS module TX pin override",
|
"description": "GPS module TX pin override",
|
||||||
"label": "Transmit Pin"
|
"label": "Transmit Pin"
|
||||||
},
|
},
|
||||||
"intervalsSettings": {
|
"intervalsSettings": {
|
||||||
"description": "How often to send position updates",
|
"description": "How often to send position updates",
|
||||||
"label": "Intervals"
|
"label": "Intervals"
|
||||||
},
|
},
|
||||||
"flags": {
|
"flags": {
|
||||||
"placeholder": "Select position flags...",
|
"placeholder": "Select position flags...",
|
||||||
"altitude": "Altitude",
|
"altitude": "Altitude",
|
||||||
"altitudeGeoidalSeparation": "Altitude Geoidal Separation",
|
"altitudeGeoidalSeparation": "Altitude Geoidal Separation",
|
||||||
"altitudeMsl": "Altitude is Mean Sea Level",
|
"altitudeMsl": "Altitude is Mean Sea Level",
|
||||||
"dop": "Dilution of precision (DOP) PDOP used by default",
|
"dop": "Dilution of precision (DOP) PDOP used by default",
|
||||||
"hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP",
|
"hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP",
|
||||||
"numSatellites": "Number of satellites",
|
"numSatellites": "Number of satellites",
|
||||||
"sequenceNumber": "Sequence number",
|
"sequenceNumber": "Sequence number",
|
||||||
"timestamp": "Timestamp",
|
"timestamp": "Timestamp",
|
||||||
"unset": "Sin configurar",
|
"unset": "Sin configurar",
|
||||||
"vehicleHeading": "Vehicle heading",
|
"vehicleHeading": "Vehicle heading",
|
||||||
"vehicleSpeed": "Vehicle speed"
|
"vehicleSpeed": "Vehicle speed"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"power": {
|
"power": {
|
||||||
"adcMultiplierOverride": {
|
"adcMultiplierOverride": {
|
||||||
"description": "Used for tweaking battery voltage reading",
|
"description": "Used for tweaking battery voltage reading",
|
||||||
"label": "ADC Multiplier Override ratio"
|
"label": "ADC Multiplier Override ratio"
|
||||||
},
|
},
|
||||||
"ina219Address": {
|
"ina219Address": {
|
||||||
"description": "Address of the INA219 battery monitor",
|
"description": "Address of the INA219 battery monitor",
|
||||||
"label": "INA219 Address"
|
"label": "INA219 Address"
|
||||||
},
|
},
|
||||||
"lightSleepDuration": {
|
"lightSleepDuration": {
|
||||||
"description": "How long the device will be in light sleep for",
|
"description": "How long the device will be in light sleep for",
|
||||||
"label": "Light Sleep Duration"
|
"label": "Light Sleep Duration"
|
||||||
},
|
},
|
||||||
"minimumWakeTime": {
|
"minimumWakeTime": {
|
||||||
"description": "Minimum amount of time the device will stay awake for after receiving a packet",
|
"description": "Minimum amount of time the device will stay awake for after receiving a packet",
|
||||||
"label": "Minimum Wake Time"
|
"label": "Minimum Wake Time"
|
||||||
},
|
},
|
||||||
"noConnectionBluetoothDisabled": {
|
"noConnectionBluetoothDisabled": {
|
||||||
"description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long",
|
"description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long",
|
||||||
"label": "No Connection Bluetooth Disabled"
|
"label": "No Connection Bluetooth Disabled"
|
||||||
},
|
},
|
||||||
"powerSavingEnabled": {
|
"powerSavingEnabled": {
|
||||||
"description": "Select if powered from a low-current source (i.e. solar), to minimize power consumption as much as possible.",
|
"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"
|
"label": "Enable power saving mode"
|
||||||
},
|
},
|
||||||
"shutdownOnBatteryDelay": {
|
"shutdownOnBatteryDelay": {
|
||||||
"description": "Automatically shutdown node after this long when on battery, 0 for indefinite",
|
"description": "Automatically shutdown node after this long when on battery, 0 for indefinite",
|
||||||
"label": "Shutdown on battery delay"
|
"label": "Shutdown on battery delay"
|
||||||
},
|
},
|
||||||
"superDeepSleepDuration": {
|
"superDeepSleepDuration": {
|
||||||
"description": "How long the device will be in super deep sleep for",
|
"description": "How long the device will be in super deep sleep for",
|
||||||
"label": "Super Deep Sleep Duration"
|
"label": "Super Deep Sleep Duration"
|
||||||
},
|
},
|
||||||
"powerConfigSettings": {
|
"powerConfigSettings": {
|
||||||
"description": "Settings for the power module",
|
"description": "Settings for the power module",
|
||||||
"label": "Power Config"
|
"label": "Power Config"
|
||||||
},
|
},
|
||||||
"sleepSettings": {
|
"sleepSettings": {
|
||||||
"description": "Sleep settings for the power module",
|
"description": "Sleep settings for the power module",
|
||||||
"label": "Sleep Settings"
|
"label": "Sleep Settings"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"description": "Settings for the Security configuration",
|
"description": "Settings for the Security configuration",
|
||||||
"title": "Security Settings",
|
"title": "Security Settings",
|
||||||
"button_backupKey": "Backup Key",
|
"button_backupKey": "Backup Key",
|
||||||
"adminChannelEnabled": {
|
"adminChannelEnabled": {
|
||||||
"description": "Allow incoming device control over the insecure legacy admin channel",
|
"description": "Allow incoming device control over the insecure legacy admin channel",
|
||||||
"label": "Allow Legacy Admin"
|
"label": "Allow Legacy Admin"
|
||||||
},
|
},
|
||||||
"enableDebugLogApi": {
|
"enableDebugLogApi": {
|
||||||
"description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth",
|
"description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth",
|
||||||
"label": "Enable Debug Log API"
|
"label": "Enable Debug Log API"
|
||||||
},
|
},
|
||||||
"managed": {
|
"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.",
|
"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"
|
"label": "Managed"
|
||||||
},
|
},
|
||||||
"privateKey": {
|
"privateKey": {
|
||||||
"description": "Used to create a shared key with a remote device",
|
"description": "Used to create a shared key with a remote device",
|
||||||
"label": "Clave privada"
|
"label": "Clave privada"
|
||||||
},
|
},
|
||||||
"publicKey": {
|
"publicKey": {
|
||||||
"description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key",
|
"description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key",
|
||||||
"label": "Clave Pública"
|
"label": "Clave Pública"
|
||||||
},
|
},
|
||||||
"primaryAdminKey": {
|
"primaryAdminKey": {
|
||||||
"description": "The primary public key authorized to send admin messages to this node",
|
"description": "The primary public key authorized to send admin messages to this node",
|
||||||
"label": "Primary Admin Key"
|
"label": "Primary Admin Key"
|
||||||
},
|
},
|
||||||
"secondaryAdminKey": {
|
"secondaryAdminKey": {
|
||||||
"description": "The secondary public key authorized to send admin messages to this node",
|
"description": "The secondary public key authorized to send admin messages to this node",
|
||||||
"label": "Secondary Admin Key"
|
"label": "Secondary Admin Key"
|
||||||
},
|
},
|
||||||
"serialOutputEnabled": {
|
"serialOutputEnabled": {
|
||||||
"description": "Serial Console over the Stream API",
|
"description": "Serial Console over the Stream API",
|
||||||
"label": "Serial Output Enabled"
|
"label": "Serial Output Enabled"
|
||||||
},
|
},
|
||||||
"tertiaryAdminKey": {
|
"tertiaryAdminKey": {
|
||||||
"description": "The tertiary public key authorized to send admin messages to this node",
|
"description": "The tertiary public key authorized to send admin messages to this node",
|
||||||
"label": "Tertiary Admin Key"
|
"label": "Tertiary Admin Key"
|
||||||
},
|
},
|
||||||
"adminSettings": {
|
"adminSettings": {
|
||||||
"description": "Settings for Admin",
|
"description": "Settings for Admin",
|
||||||
"label": "Admin Settings"
|
"label": "Admin Settings"
|
||||||
},
|
},
|
||||||
"loggingSettings": {
|
"loggingSettings": {
|
||||||
"description": "Settings for Logging",
|
"description": "Settings for Logging",
|
||||||
"label": "Logging Settings"
|
"label": "Logging Settings"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,171 +1,171 @@
|
|||||||
{
|
{
|
||||||
"deleteMessages": {
|
"deleteMessages": {
|
||||||
"description": "This action will clear all message history. This cannot be undone. Are you sure you want to continue?",
|
"description": "This action will clear all message history. This cannot be undone. Are you sure you want to continue?",
|
||||||
"title": "Clear All Messages"
|
"title": "Clear All Messages"
|
||||||
},
|
},
|
||||||
"deviceName": {
|
"deviceName": {
|
||||||
"description": "The Device will restart once the config is saved.",
|
"description": "The Device will restart once the config is saved.",
|
||||||
"longName": "Long Name",
|
"longName": "Long Name",
|
||||||
"shortName": "Short Name",
|
"shortName": "Short Name",
|
||||||
"title": "Change Device Name"
|
"title": "Change Device Name"
|
||||||
},
|
},
|
||||||
"import": {
|
"import": {
|
||||||
"description": "The current LoRa configuration will be overridden.",
|
"description": "The current LoRa configuration will be overridden.",
|
||||||
"error": {
|
"error": {
|
||||||
"invalidUrl": "Invalid Meshtastic URL"
|
"invalidUrl": "Invalid Meshtastic URL"
|
||||||
},
|
},
|
||||||
"channelPrefix": "Channel: ",
|
"channelPrefix": "Channel: ",
|
||||||
"channelSetUrl": "Channel Set/QR Code URL",
|
"channelSetUrl": "Channel Set/QR Code URL",
|
||||||
"channels": "Channels:",
|
"channels": "Channels:",
|
||||||
"usePreset": "Use Preset?",
|
"usePreset": "Use Preset?",
|
||||||
"title": "Import Channel Set"
|
"title": "Import Channel Set"
|
||||||
},
|
},
|
||||||
"locationResponse": {
|
"locationResponse": {
|
||||||
"altitude": "Altitude: ",
|
"altitude": "Altitude: ",
|
||||||
"coordinates": "Coordinates: ",
|
"coordinates": "Coordinates: ",
|
||||||
"title": "Location: {{identifier}}"
|
"title": "Location: {{identifier}}"
|
||||||
},
|
},
|
||||||
"pkiRegenerateDialog": {
|
"pkiRegenerateDialog": {
|
||||||
"title": "Regenerate Pre-Shared Key?",
|
"title": "Regenerate Pre-Shared Key?",
|
||||||
"description": "Are you sure you want to regenerate the pre-shared key?",
|
"description": "Are you sure you want to regenerate the pre-shared key?",
|
||||||
"regenerate": "Regenerate"
|
"regenerate": "Regenerate"
|
||||||
},
|
},
|
||||||
"newDeviceDialog": {
|
"newDeviceDialog": {
|
||||||
"title": "Connect New Device",
|
"title": "Connect New Device",
|
||||||
"https": "https",
|
"https": "https",
|
||||||
"http": "http",
|
"http": "http",
|
||||||
"tabHttp": "HTTP",
|
"tabHttp": "HTTP",
|
||||||
"tabBluetooth": "Bluetooth",
|
"tabBluetooth": "Bluetooth",
|
||||||
"tabSerial": "Serial",
|
"tabSerial": "Serial",
|
||||||
"useHttps": "Use HTTPS",
|
"useHttps": "Use HTTPS",
|
||||||
"connecting": "Connecting...",
|
"connecting": "Connecting...",
|
||||||
"connect": "Connect",
|
"connect": "Connect",
|
||||||
"connectionFailedAlert": {
|
"connectionFailedAlert": {
|
||||||
"title": "Connection Failed",
|
"title": "Connection Failed",
|
||||||
"descriptionPrefix": "Could not connect to the device. ",
|
"descriptionPrefix": "Could not connect to the device. ",
|
||||||
"httpsHint": "If using HTTPS, you may need to accept a self-signed certificate first. ",
|
"httpsHint": "If using HTTPS, you may need to accept a self-signed certificate first. ",
|
||||||
"openLinkPrefix": "Please open ",
|
"openLinkPrefix": "Please open ",
|
||||||
"openLinkSuffix": " in a new tab",
|
"openLinkSuffix": " in a new tab",
|
||||||
"acceptTlsWarningSuffix": ", accept any TLS warnings if prompted, then try again",
|
"acceptTlsWarningSuffix": ", accept any TLS warnings if prompted, then try again",
|
||||||
"learnMoreLink": "Learn more"
|
"learnMoreLink": "Learn more"
|
||||||
},
|
},
|
||||||
"httpConnection": {
|
"httpConnection": {
|
||||||
"label": "IP Address/Hostname",
|
"label": "IP Address/Hostname",
|
||||||
"placeholder": "000.000.000.000 / meshtastic.local"
|
"placeholder": "000.000.000.000 / meshtastic.local"
|
||||||
},
|
},
|
||||||
"serialConnection": {
|
"serialConnection": {
|
||||||
"noDevicesPaired": "No devices paired yet.",
|
"noDevicesPaired": "No devices paired yet.",
|
||||||
"newDeviceButton": "New device",
|
"newDeviceButton": "New device",
|
||||||
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
|
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
|
||||||
},
|
},
|
||||||
"bluetoothConnection": {
|
"bluetoothConnection": {
|
||||||
"noDevicesPaired": "No devices paired yet.",
|
"noDevicesPaired": "No devices paired yet.",
|
||||||
"newDeviceButton": "New device"
|
"newDeviceButton": "New device"
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"requiresWebBluetooth": "This connection type requires <0>Web Bluetooth</0>. Please use a supported browser, like Chrome or Edge.",
|
"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.",
|
"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.",
|
"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."
|
"additionallyRequiresSecureContext": "Additionally, it requires a <0>secure context</0>. Please connect using HTTPS or localhost."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nodeDetails": {
|
"nodeDetails": {
|
||||||
"message": "Mensaje",
|
"message": "Mensaje",
|
||||||
"requestPosition": "Request Position",
|
"requestPosition": "Request Position",
|
||||||
"traceRoute": "Trace Route",
|
"traceRoute": "Trace Route",
|
||||||
"airTxUtilization": "Air TX utilization",
|
"airTxUtilization": "Air TX utilization",
|
||||||
"allRawMetrics": "All Raw Metrics:",
|
"allRawMetrics": "All Raw Metrics:",
|
||||||
"batteryLevel": "Battery level",
|
"batteryLevel": "Battery level",
|
||||||
"channelUtilization": "Channel utilization",
|
"channelUtilization": "Channel utilization",
|
||||||
"details": "Details:",
|
"details": "Details:",
|
||||||
"deviceMetrics": "Device Metrics:",
|
"deviceMetrics": "Device Metrics:",
|
||||||
"hardware": "Hardware: ",
|
"hardware": "Hardware: ",
|
||||||
"lastHeard": "Last Heard: ",
|
"lastHeard": "Last Heard: ",
|
||||||
"nodeHexPrefix": "Node Hex: !",
|
"nodeHexPrefix": "Node Hex: !",
|
||||||
"nodeNumber": "Node Number: ",
|
"nodeNumber": "Node Number: ",
|
||||||
"position": "Position:",
|
"position": "Position:",
|
||||||
"role": "Role: ",
|
"role": "Role: ",
|
||||||
"uptime": "Uptime: ",
|
"uptime": "Uptime: ",
|
||||||
"voltage": "Tensión",
|
"voltage": "Tensión",
|
||||||
"title": "Node Details for {{identifier}}",
|
"title": "Node Details for {{identifier}}",
|
||||||
"ignoreNode": "Ignore node",
|
"ignoreNode": "Ignore node",
|
||||||
"removeNode": "Remove node",
|
"removeNode": "Remove node",
|
||||||
"unignoreNode": "Unignore node"
|
"unignoreNode": "Unignore node"
|
||||||
},
|
},
|
||||||
"pkiBackup": {
|
"pkiBackup": {
|
||||||
"loseKeysWarning": "If you lose your keys, you will need to reset your device.",
|
"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!",
|
"secureBackup": "Its important to backup your public and private keys and store your backup securely!",
|
||||||
"footer": "=== END OF KEYS ===",
|
"footer": "=== END OF KEYS ===",
|
||||||
"header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===",
|
"header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===",
|
||||||
"privateKey": "Private Key:",
|
"privateKey": "Private Key:",
|
||||||
"publicKey": "Public Key:",
|
"publicKey": "Public Key:",
|
||||||
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
|
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
|
||||||
"title": "Backup Keys"
|
"title": "Backup Keys"
|
||||||
},
|
},
|
||||||
"pkiBackupReminder": {
|
"pkiBackupReminder": {
|
||||||
"description": "We recommend backing up your key data regularly. Would you like to back up now?",
|
"description": "We recommend backing up your key data regularly. Would you like to back up now?",
|
||||||
"title": "Backup Reminder",
|
"title": "Backup Reminder",
|
||||||
"remindLaterPrefix": "Remind me in",
|
"remindLaterPrefix": "Remind me in",
|
||||||
"remindNever": "Never remind me",
|
"remindNever": "Never remind me",
|
||||||
"backupNow": "Back up now"
|
"backupNow": "Back up now"
|
||||||
},
|
},
|
||||||
"pkiRegenerate": {
|
"pkiRegenerate": {
|
||||||
"description": "Are you sure you want to regenerate key pair?",
|
"description": "Are you sure you want to regenerate key pair?",
|
||||||
"title": "Regenerate Key Pair"
|
"title": "Regenerate Key Pair"
|
||||||
},
|
},
|
||||||
"qr": {
|
"qr": {
|
||||||
"addChannels": "Add Channels",
|
"addChannels": "Add Channels",
|
||||||
"replaceChannels": "Replace Channels",
|
"replaceChannels": "Replace Channels",
|
||||||
"description": "The current LoRa configuration will also be shared.",
|
"description": "The current LoRa configuration will also be shared.",
|
||||||
"sharableUrl": "Sharable URL",
|
"sharableUrl": "Sharable URL",
|
||||||
"title": "Generate QR Code"
|
"title": "Generate QR Code"
|
||||||
},
|
},
|
||||||
"rebootOta": {
|
"rebootOta": {
|
||||||
"title": "Schedule Reboot",
|
"title": "Schedule Reboot",
|
||||||
"description": "Reboot the connected node after a delay into OTA (Over-the-Air) mode.",
|
"description": "Reboot the connected node after a delay into OTA (Over-the-Air) mode.",
|
||||||
"enterDelay": "Enter delay (sec)",
|
"enterDelay": "Enter delay (sec)",
|
||||||
"scheduled": "Reboot has been scheduled"
|
"scheduled": "Reboot has been scheduled"
|
||||||
},
|
},
|
||||||
"reboot": {
|
"reboot": {
|
||||||
"title": "Schedule Reboot",
|
"title": "Schedule Reboot",
|
||||||
"description": "Reboot the connected node after x minutes."
|
"description": "Reboot the connected node after x minutes."
|
||||||
},
|
},
|
||||||
"refreshKeys": {
|
"refreshKeys": {
|
||||||
"description": {
|
"description": {
|
||||||
"acceptNewKeys": "This will remove the node from device and request new keys.",
|
"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.",
|
"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: "
|
"unableToSendDmPrefix": "Your node is unable to send a direct message to node: "
|
||||||
},
|
},
|
||||||
"acceptNewKeys": "Accept New Keys",
|
"acceptNewKeys": "Accept New Keys",
|
||||||
"title": "Keys Mismatch - {{identifier}}"
|
"title": "Keys Mismatch - {{identifier}}"
|
||||||
},
|
},
|
||||||
"removeNode": {
|
"removeNode": {
|
||||||
"description": "Are you sure you want to remove this Node?",
|
"description": "Are you sure you want to remove this Node?",
|
||||||
"title": "Remove Node?"
|
"title": "Remove Node?"
|
||||||
},
|
},
|
||||||
"shutdown": {
|
"shutdown": {
|
||||||
"title": "Schedule Shutdown",
|
"title": "Schedule Shutdown",
|
||||||
"description": "Turn off the connected node after x minutes."
|
"description": "Turn off the connected node after x minutes."
|
||||||
},
|
},
|
||||||
"traceRoute": {
|
"traceRoute": {
|
||||||
"routeToDestination": "Route to destination:",
|
"routeToDestination": "Route to destination:",
|
||||||
"routeBack": "Route back:"
|
"routeBack": "Route back:"
|
||||||
},
|
},
|
||||||
"tracerouteResponse": {
|
"tracerouteResponse": {
|
||||||
"title": "Traceroute: {{identifier}}"
|
"title": "Traceroute: {{identifier}}"
|
||||||
},
|
},
|
||||||
"unsafeRoles": {
|
"unsafeRoles": {
|
||||||
"confirmUnderstanding": "Yes, I know what I'm doing",
|
"confirmUnderstanding": "Yes, I know what I'm doing",
|
||||||
"conjunction": " and the blog post about ",
|
"conjunction": " and the blog post about ",
|
||||||
"postamble": " and understand the implications of changing the role.",
|
"postamble": " and understand the implications of changing the role.",
|
||||||
"preamble": "I have read the ",
|
"preamble": "I have read the ",
|
||||||
"choosingRightDeviceRole": "Choosing The Right Device Role",
|
"choosingRightDeviceRole": "Choosing The Right Device Role",
|
||||||
"deviceRoleDocumentation": "Device Role Documentation",
|
"deviceRoleDocumentation": "Device Role Documentation",
|
||||||
"title": "¿Estás seguro?"
|
"title": "¿Estás seguro?"
|
||||||
},
|
},
|
||||||
"managedMode": {
|
"managedMode": {
|
||||||
"confirmUnderstanding": "Yes, I know what I'm doing",
|
"confirmUnderstanding": "Yes, I know what I'm doing",
|
||||||
"title": "¿Estás seguro?",
|
"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."
|
"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."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,39 +1,39 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"title": "Messages: {{chatName}}",
|
"title": "Messages: {{chatName}}",
|
||||||
"placeholder": "Enter Message"
|
"placeholder": "Enter Message"
|
||||||
},
|
},
|
||||||
"emptyState": {
|
"emptyState": {
|
||||||
"title": "Select a Chat",
|
"title": "Select a Chat",
|
||||||
"text": "No messages yet."
|
"text": "No messages yet."
|
||||||
},
|
},
|
||||||
"selectChatPrompt": {
|
"selectChatPrompt": {
|
||||||
"text": "Select a channel or node to start messaging."
|
"text": "Select a channel or node to start messaging."
|
||||||
},
|
},
|
||||||
"sendMessage": {
|
"sendMessage": {
|
||||||
"placeholder": "Enter your message here...",
|
"placeholder": "Enter your message here...",
|
||||||
"sendButton": "Enviar"
|
"sendButton": "Enviar"
|
||||||
},
|
},
|
||||||
"actionsMenu": {
|
"actionsMenu": {
|
||||||
"addReactionLabel": "Add Reaction",
|
"addReactionLabel": "Add Reaction",
|
||||||
"replyLabel": "Reply"
|
"replyLabel": "Reply"
|
||||||
},
|
},
|
||||||
"deliveryStatus": {
|
"deliveryStatus": {
|
||||||
"delivered": {
|
"delivered": {
|
||||||
"label": "Message delivered",
|
"label": "Message delivered",
|
||||||
"displayText": "Message delivered"
|
"displayText": "Message delivered"
|
||||||
},
|
},
|
||||||
"failed": {
|
"failed": {
|
||||||
"label": "Message delivery failed",
|
"label": "Message delivery failed",
|
||||||
"displayText": "Delivery failed"
|
"displayText": "Delivery failed"
|
||||||
},
|
},
|
||||||
"unknown": {
|
"unknown": {
|
||||||
"label": "Message status unknown",
|
"label": "Message status unknown",
|
||||||
"displayText": "Unknown state"
|
"displayText": "Unknown state"
|
||||||
},
|
},
|
||||||
"waiting": {
|
"waiting": {
|
||||||
"label": "Sending message",
|
"label": "Sending message",
|
||||||
"displayText": "Waiting for delivery"
|
"displayText": "Waiting for delivery"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,448 +1,448 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"tabAmbientLighting": "Ambient Lighting",
|
"tabAmbientLighting": "Ambient Lighting",
|
||||||
"tabAudio": "Audio",
|
"tabAudio": "Audio",
|
||||||
"tabCannedMessage": "Canned",
|
"tabCannedMessage": "Canned",
|
||||||
"tabDetectionSensor": "Detection Sensor",
|
"tabDetectionSensor": "Detection Sensor",
|
||||||
"tabExternalNotification": "Ext Notif",
|
"tabExternalNotification": "Ext Notif",
|
||||||
"tabMqtt": "MQTT",
|
"tabMqtt": "MQTT",
|
||||||
"tabNeighborInfo": "Neighbor Info",
|
"tabNeighborInfo": "Neighbor Info",
|
||||||
"tabPaxcounter": "Paxcounter",
|
"tabPaxcounter": "Paxcounter",
|
||||||
"tabRangeTest": "Range Test",
|
"tabRangeTest": "Range Test",
|
||||||
"tabSerial": "Serial",
|
"tabSerial": "Serial",
|
||||||
"tabStoreAndForward": "S&F",
|
"tabStoreAndForward": "S&F",
|
||||||
"tabTelemetry": "Telemetry"
|
"tabTelemetry": "Telemetry"
|
||||||
},
|
},
|
||||||
"ambientLighting": {
|
"ambientLighting": {
|
||||||
"title": "Ambient Lighting Settings",
|
"title": "Ambient Lighting Settings",
|
||||||
"description": "Settings for the Ambient Lighting module",
|
"description": "Settings for the Ambient Lighting module",
|
||||||
"ledState": {
|
"ledState": {
|
||||||
"label": "LED State",
|
"label": "LED State",
|
||||||
"description": "Sets LED to on or off"
|
"description": "Sets LED to on or off"
|
||||||
},
|
},
|
||||||
"current": {
|
"current": {
|
||||||
"label": "Intensidad",
|
"label": "Intensidad",
|
||||||
"description": "Sets the current for the LED output. Default is 10"
|
"description": "Sets the current for the LED output. Default is 10"
|
||||||
},
|
},
|
||||||
"red": {
|
"red": {
|
||||||
"label": "Red",
|
"label": "Red",
|
||||||
"description": "Sets the red LED level. Values are 0-255"
|
"description": "Sets the red LED level. Values are 0-255"
|
||||||
},
|
},
|
||||||
"green": {
|
"green": {
|
||||||
"label": "Green",
|
"label": "Green",
|
||||||
"description": "Sets the green LED level. Values are 0-255"
|
"description": "Sets the green LED level. Values are 0-255"
|
||||||
},
|
},
|
||||||
"blue": {
|
"blue": {
|
||||||
"label": "Blue",
|
"label": "Blue",
|
||||||
"description": "Sets the blue LED level. Values are 0-255"
|
"description": "Sets the blue LED level. Values are 0-255"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"audio": {
|
"audio": {
|
||||||
"title": "Audio Settings",
|
"title": "Audio Settings",
|
||||||
"description": "Settings for the Audio module",
|
"description": "Settings for the Audio module",
|
||||||
"codec2Enabled": {
|
"codec2Enabled": {
|
||||||
"label": "Codec 2 Enabled",
|
"label": "Codec 2 Enabled",
|
||||||
"description": "Enable Codec 2 audio encoding"
|
"description": "Enable Codec 2 audio encoding"
|
||||||
},
|
},
|
||||||
"pttPin": {
|
"pttPin": {
|
||||||
"label": "PTT Pin",
|
"label": "PTT Pin",
|
||||||
"description": "GPIO pin to use for PTT"
|
"description": "GPIO pin to use for PTT"
|
||||||
},
|
},
|
||||||
"bitrate": {
|
"bitrate": {
|
||||||
"label": "Bitrate",
|
"label": "Bitrate",
|
||||||
"description": "Bitrate to use for audio encoding"
|
"description": "Bitrate to use for audio encoding"
|
||||||
},
|
},
|
||||||
"i2sWs": {
|
"i2sWs": {
|
||||||
"label": "i2S WS",
|
"label": "i2S WS",
|
||||||
"description": "GPIO pin to use for i2S WS"
|
"description": "GPIO pin to use for i2S WS"
|
||||||
},
|
},
|
||||||
"i2sSd": {
|
"i2sSd": {
|
||||||
"label": "i2S SD",
|
"label": "i2S SD",
|
||||||
"description": "GPIO pin to use for i2S SD"
|
"description": "GPIO pin to use for i2S SD"
|
||||||
},
|
},
|
||||||
"i2sDin": {
|
"i2sDin": {
|
||||||
"label": "i2S DIN",
|
"label": "i2S DIN",
|
||||||
"description": "GPIO pin to use for i2S DIN"
|
"description": "GPIO pin to use for i2S DIN"
|
||||||
},
|
},
|
||||||
"i2sSck": {
|
"i2sSck": {
|
||||||
"label": "i2S SCK",
|
"label": "i2S SCK",
|
||||||
"description": "GPIO pin to use for i2S SCK"
|
"description": "GPIO pin to use for i2S SCK"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"cannedMessage": {
|
"cannedMessage": {
|
||||||
"title": "Canned Message Settings",
|
"title": "Canned Message Settings",
|
||||||
"description": "Settings for the Canned Message module",
|
"description": "Settings for the Canned Message module",
|
||||||
"moduleEnabled": {
|
"moduleEnabled": {
|
||||||
"label": "Module Enabled",
|
"label": "Module Enabled",
|
||||||
"description": "Enable Canned Message"
|
"description": "Enable Canned Message"
|
||||||
},
|
},
|
||||||
"rotary1Enabled": {
|
"rotary1Enabled": {
|
||||||
"label": "Rotary Encoder #1 Enabled",
|
"label": "Rotary Encoder #1 Enabled",
|
||||||
"description": "Enable the rotary encoder"
|
"description": "Enable the rotary encoder"
|
||||||
},
|
},
|
||||||
"inputbrokerPinA": {
|
"inputbrokerPinA": {
|
||||||
"label": "Encoder Pin A",
|
"label": "Encoder Pin A",
|
||||||
"description": "GPIO Pin Value (1-39) For encoder port A"
|
"description": "GPIO Pin Value (1-39) For encoder port A"
|
||||||
},
|
},
|
||||||
"inputbrokerPinB": {
|
"inputbrokerPinB": {
|
||||||
"label": "Encoder Pin B",
|
"label": "Encoder Pin B",
|
||||||
"description": "GPIO Pin Value (1-39) For encoder port B"
|
"description": "GPIO Pin Value (1-39) For encoder port B"
|
||||||
},
|
},
|
||||||
"inputbrokerPinPress": {
|
"inputbrokerPinPress": {
|
||||||
"label": "Encoder Pin Press",
|
"label": "Encoder Pin Press",
|
||||||
"description": "GPIO Pin Value (1-39) For encoder Press"
|
"description": "GPIO Pin Value (1-39) For encoder Press"
|
||||||
},
|
},
|
||||||
"inputbrokerEventCw": {
|
"inputbrokerEventCw": {
|
||||||
"label": "Clockwise event",
|
"label": "Clockwise event",
|
||||||
"description": "Select input event."
|
"description": "Select input event."
|
||||||
},
|
},
|
||||||
"inputbrokerEventCcw": {
|
"inputbrokerEventCcw": {
|
||||||
"label": "Counter Clockwise event",
|
"label": "Counter Clockwise event",
|
||||||
"description": "Select input event."
|
"description": "Select input event."
|
||||||
},
|
},
|
||||||
"inputbrokerEventPress": {
|
"inputbrokerEventPress": {
|
||||||
"label": "Press event",
|
"label": "Press event",
|
||||||
"description": "Select input event"
|
"description": "Select input event"
|
||||||
},
|
},
|
||||||
"updown1Enabled": {
|
"updown1Enabled": {
|
||||||
"label": "Up Down enabled",
|
"label": "Up Down enabled",
|
||||||
"description": "Enable the up / down encoder"
|
"description": "Enable the up / down encoder"
|
||||||
},
|
},
|
||||||
"allowInputSource": {
|
"allowInputSource": {
|
||||||
"label": "Allow Input Source",
|
"label": "Allow Input Source",
|
||||||
"description": "Select from: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
|
"description": "Select from: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
|
||||||
},
|
},
|
||||||
"sendBell": {
|
"sendBell": {
|
||||||
"label": "Send Bell",
|
"label": "Send Bell",
|
||||||
"description": "Sends a bell character with each message"
|
"description": "Sends a bell character with each message"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"detectionSensor": {
|
"detectionSensor": {
|
||||||
"title": "Detection Sensor Settings",
|
"title": "Detection Sensor Settings",
|
||||||
"description": "Settings for the Detection Sensor module",
|
"description": "Settings for the Detection Sensor module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Enabled",
|
"label": "Enabled",
|
||||||
"description": "Enable or disable Detection Sensor Module"
|
"description": "Enable or disable Detection Sensor Module"
|
||||||
},
|
},
|
||||||
"minimumBroadcastSecs": {
|
"minimumBroadcastSecs": {
|
||||||
"label": "Minimum Broadcast Seconds",
|
"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"
|
"description": "The interval in seconds of how often we can send a message to the mesh when a state change is detected"
|
||||||
},
|
},
|
||||||
"stateBroadcastSecs": {
|
"stateBroadcastSecs": {
|
||||||
"label": "State Broadcast Seconds",
|
"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"
|
"description": "The interval in seconds of how often we should send a message to the mesh with the current state regardless of changes"
|
||||||
},
|
},
|
||||||
"sendBell": {
|
"sendBell": {
|
||||||
"label": "Send Bell",
|
"label": "Send Bell",
|
||||||
"description": "Send ASCII bell with alert message"
|
"description": "Send ASCII bell with alert message"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"label": "Friendly Name",
|
"label": "Friendly Name",
|
||||||
"description": "Used to format the message sent to mesh, max 20 Characters"
|
"description": "Used to format the message sent to mesh, max 20 Characters"
|
||||||
},
|
},
|
||||||
"monitorPin": {
|
"monitorPin": {
|
||||||
"label": "Monitor Pin",
|
"label": "Monitor Pin",
|
||||||
"description": "The GPIO pin to monitor for state changes"
|
"description": "The GPIO pin to monitor for state changes"
|
||||||
},
|
},
|
||||||
"detectionTriggerType": {
|
"detectionTriggerType": {
|
||||||
"label": "Detection Triggered Type",
|
"label": "Detection Triggered Type",
|
||||||
"description": "The type of trigger event to be used"
|
"description": "The type of trigger event to be used"
|
||||||
},
|
},
|
||||||
"usePullup": {
|
"usePullup": {
|
||||||
"label": "Use Pullup",
|
"label": "Use Pullup",
|
||||||
"description": "Whether or not use INPUT_PULLUP mode for GPIO pin"
|
"description": "Whether or not use INPUT_PULLUP mode for GPIO pin"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"externalNotification": {
|
"externalNotification": {
|
||||||
"title": "External Notification Settings",
|
"title": "External Notification Settings",
|
||||||
"description": "Configure the external notification module",
|
"description": "Configure the external notification module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Module Enabled",
|
"label": "Module Enabled",
|
||||||
"description": "Enable External Notification"
|
"description": "Enable External Notification"
|
||||||
},
|
},
|
||||||
"outputMs": {
|
"outputMs": {
|
||||||
"label": "Output MS",
|
"label": "Output MS",
|
||||||
"description": "Output MS"
|
"description": "Output MS"
|
||||||
},
|
},
|
||||||
"output": {
|
"output": {
|
||||||
"label": "Output",
|
"label": "Output",
|
||||||
"description": "Output"
|
"description": "Output"
|
||||||
},
|
},
|
||||||
"outputVibra": {
|
"outputVibra": {
|
||||||
"label": "Output Vibrate",
|
"label": "Output Vibrate",
|
||||||
"description": "Output Vibrate"
|
"description": "Output Vibrate"
|
||||||
},
|
},
|
||||||
"outputBuzzer": {
|
"outputBuzzer": {
|
||||||
"label": "Output Buzzer",
|
"label": "Output Buzzer",
|
||||||
"description": "Output Buzzer"
|
"description": "Output Buzzer"
|
||||||
},
|
},
|
||||||
"active": {
|
"active": {
|
||||||
"label": "Active",
|
"label": "Active",
|
||||||
"description": "Active"
|
"description": "Active"
|
||||||
},
|
},
|
||||||
"alertMessage": {
|
"alertMessage": {
|
||||||
"label": "Alert Message",
|
"label": "Alert Message",
|
||||||
"description": "Alert Message"
|
"description": "Alert Message"
|
||||||
},
|
},
|
||||||
"alertMessageVibra": {
|
"alertMessageVibra": {
|
||||||
"label": "Alert Message Vibrate",
|
"label": "Alert Message Vibrate",
|
||||||
"description": "Alert Message Vibrate"
|
"description": "Alert Message Vibrate"
|
||||||
},
|
},
|
||||||
"alertMessageBuzzer": {
|
"alertMessageBuzzer": {
|
||||||
"label": "Alert Message Buzzer",
|
"label": "Alert Message Buzzer",
|
||||||
"description": "Alert Message Buzzer"
|
"description": "Alert Message Buzzer"
|
||||||
},
|
},
|
||||||
"alertBell": {
|
"alertBell": {
|
||||||
"label": "Alert Bell",
|
"label": "Alert Bell",
|
||||||
"description": "Should an alert be triggered when receiving an incoming bell?"
|
"description": "Should an alert be triggered when receiving an incoming bell?"
|
||||||
},
|
},
|
||||||
"alertBellVibra": {
|
"alertBellVibra": {
|
||||||
"label": "Alert Bell Vibrate",
|
"label": "Alert Bell Vibrate",
|
||||||
"description": "Alert Bell Vibrate"
|
"description": "Alert Bell Vibrate"
|
||||||
},
|
},
|
||||||
"alertBellBuzzer": {
|
"alertBellBuzzer": {
|
||||||
"label": "Alert Bell Buzzer",
|
"label": "Alert Bell Buzzer",
|
||||||
"description": "Alert Bell Buzzer"
|
"description": "Alert Bell Buzzer"
|
||||||
},
|
},
|
||||||
"usePwm": {
|
"usePwm": {
|
||||||
"label": "Use PWM",
|
"label": "Use PWM",
|
||||||
"description": "Use PWM"
|
"description": "Use PWM"
|
||||||
},
|
},
|
||||||
"nagTimeout": {
|
"nagTimeout": {
|
||||||
"label": "Nag Timeout",
|
"label": "Nag Timeout",
|
||||||
"description": "Nag Timeout"
|
"description": "Nag Timeout"
|
||||||
},
|
},
|
||||||
"useI2sAsBuzzer": {
|
"useI2sAsBuzzer": {
|
||||||
"label": "Use I²S Pin as Buzzer",
|
"label": "Use I²S Pin as Buzzer",
|
||||||
"description": "Designate I²S Pin as Buzzer Output"
|
"description": "Designate I²S Pin as Buzzer Output"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"mqtt": {
|
"mqtt": {
|
||||||
"title": "MQTT Settings",
|
"title": "MQTT Settings",
|
||||||
"description": "Settings for the MQTT module",
|
"description": "Settings for the MQTT module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Enabled",
|
"label": "Enabled",
|
||||||
"description": "Enable or disable MQTT"
|
"description": "Enable or disable MQTT"
|
||||||
},
|
},
|
||||||
"address": {
|
"address": {
|
||||||
"label": "MQTT Server Address",
|
"label": "MQTT Server Address",
|
||||||
"description": "MQTT server address to use for default/custom servers"
|
"description": "MQTT server address to use for default/custom servers"
|
||||||
},
|
},
|
||||||
"username": {
|
"username": {
|
||||||
"label": "MQTT Username",
|
"label": "MQTT Username",
|
||||||
"description": "MQTT username to use for default/custom servers"
|
"description": "MQTT username to use for default/custom servers"
|
||||||
},
|
},
|
||||||
"password": {
|
"password": {
|
||||||
"label": "MQTT Password",
|
"label": "MQTT Password",
|
||||||
"description": "MQTT password to use for default/custom servers"
|
"description": "MQTT password to use for default/custom servers"
|
||||||
},
|
},
|
||||||
"encryptionEnabled": {
|
"encryptionEnabled": {
|
||||||
"label": "Encryption Enabled",
|
"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."
|
"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": {
|
"jsonEnabled": {
|
||||||
"label": "JSON Enabled",
|
"label": "JSON Enabled",
|
||||||
"description": "Whether to send/consume JSON packets on MQTT"
|
"description": "Whether to send/consume JSON packets on MQTT"
|
||||||
},
|
},
|
||||||
"tlsEnabled": {
|
"tlsEnabled": {
|
||||||
"label": "TLS Enabled",
|
"label": "TLS Enabled",
|
||||||
"description": "Enable or disable TLS"
|
"description": "Enable or disable TLS"
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"label": "Root topic",
|
"label": "Root topic",
|
||||||
"description": "MQTT root topic to use for default/custom servers"
|
"description": "MQTT root topic to use for default/custom servers"
|
||||||
},
|
},
|
||||||
"proxyToClientEnabled": {
|
"proxyToClientEnabled": {
|
||||||
"label": "MQTT Client Proxy Enabled",
|
"label": "MQTT Client Proxy Enabled",
|
||||||
"description": "Utilizes the network connection to proxy MQTT messages to the client."
|
"description": "Utilizes the network connection to proxy MQTT messages to the client."
|
||||||
},
|
},
|
||||||
"mapReportingEnabled": {
|
"mapReportingEnabled": {
|
||||||
"label": "Map Reporting Enabled",
|
"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."
|
"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": {
|
"mapReportSettings": {
|
||||||
"publishIntervalSecs": {
|
"publishIntervalSecs": {
|
||||||
"label": "Map Report Publish Interval (s)",
|
"label": "Map Report Publish Interval (s)",
|
||||||
"description": "Interval in seconds to publish map reports"
|
"description": "Interval in seconds to publish map reports"
|
||||||
},
|
},
|
||||||
"positionPrecision": {
|
"positionPrecision": {
|
||||||
"label": "Approximate Location",
|
"label": "Approximate Location",
|
||||||
"description": "Position shared will be accurate within this distance",
|
"description": "Position shared will be accurate within this distance",
|
||||||
"options": {
|
"options": {
|
||||||
"metric_km23": "Within 23 km",
|
"metric_km23": "Within 23 km",
|
||||||
"metric_km12": "Within 12 km",
|
"metric_km12": "Within 12 km",
|
||||||
"metric_km5_8": "Within 5.8 km",
|
"metric_km5_8": "Within 5.8 km",
|
||||||
"metric_km2_9": "Within 2.9 km",
|
"metric_km2_9": "Within 2.9 km",
|
||||||
"metric_km1_5": "Within 1.5 km",
|
"metric_km1_5": "Within 1.5 km",
|
||||||
"metric_m700": "Within 700 m",
|
"metric_m700": "Within 700 m",
|
||||||
"metric_m350": "Within 350 m",
|
"metric_m350": "Within 350 m",
|
||||||
"metric_m200": "Within 200 m",
|
"metric_m200": "Within 200 m",
|
||||||
"metric_m90": "Within 90 m",
|
"metric_m90": "Within 90 m",
|
||||||
"metric_m50": "Within 50 m",
|
"metric_m50": "Within 50 m",
|
||||||
"imperial_mi15": "Within 15 miles",
|
"imperial_mi15": "Within 15 miles",
|
||||||
"imperial_mi7_3": "Within 7.3 miles",
|
"imperial_mi7_3": "Within 7.3 miles",
|
||||||
"imperial_mi3_6": "Within 3.6 miles",
|
"imperial_mi3_6": "Within 3.6 miles",
|
||||||
"imperial_mi1_8": "Within 1.8 miles",
|
"imperial_mi1_8": "Within 1.8 miles",
|
||||||
"imperial_mi0_9": "Within 0.9 miles",
|
"imperial_mi0_9": "Within 0.9 miles",
|
||||||
"imperial_mi0_5": "Within 0.5 miles",
|
"imperial_mi0_5": "Within 0.5 miles",
|
||||||
"imperial_mi0_2": "Within 0.2 miles",
|
"imperial_mi0_2": "Within 0.2 miles",
|
||||||
"imperial_ft600": "Within 600 feet",
|
"imperial_ft600": "Within 600 feet",
|
||||||
"imperial_ft300": "Within 300 feet",
|
"imperial_ft300": "Within 300 feet",
|
||||||
"imperial_ft150": "Within 150 feet"
|
"imperial_ft150": "Within 150 feet"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"neighborInfo": {
|
"neighborInfo": {
|
||||||
"title": "Neighbor Info Settings",
|
"title": "Neighbor Info Settings",
|
||||||
"description": "Settings for the Neighbor Info module",
|
"description": "Settings for the Neighbor Info module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Enabled",
|
"label": "Enabled",
|
||||||
"description": "Enable or disable Neighbor Info Module"
|
"description": "Enable or disable Neighbor Info Module"
|
||||||
},
|
},
|
||||||
"updateInterval": {
|
"updateInterval": {
|
||||||
"label": "Update Interval",
|
"label": "Update Interval",
|
||||||
"description": "Interval in seconds of how often we should try to send our Neighbor Info to the mesh"
|
"description": "Interval in seconds of how often we should try to send our Neighbor Info to the mesh"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"paxcounter": {
|
"paxcounter": {
|
||||||
"title": "Paxcounter Settings",
|
"title": "Paxcounter Settings",
|
||||||
"description": "Settings for the Paxcounter module",
|
"description": "Settings for the Paxcounter module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Module Enabled",
|
"label": "Module Enabled",
|
||||||
"description": "Enable Paxcounter"
|
"description": "Enable Paxcounter"
|
||||||
},
|
},
|
||||||
"paxcounterUpdateInterval": {
|
"paxcounterUpdateInterval": {
|
||||||
"label": "Update Interval (seconds)",
|
"label": "Update Interval (seconds)",
|
||||||
"description": "How long to wait between sending paxcounter packets"
|
"description": "How long to wait between sending paxcounter packets"
|
||||||
},
|
},
|
||||||
"wifiThreshold": {
|
"wifiThreshold": {
|
||||||
"label": "WiFi RSSI Threshold",
|
"label": "WiFi RSSI Threshold",
|
||||||
"description": "At what WiFi RSSI level should the counter increase. Defaults to -80."
|
"description": "At what WiFi RSSI level should the counter increase. Defaults to -80."
|
||||||
},
|
},
|
||||||
"bleThreshold": {
|
"bleThreshold": {
|
||||||
"label": "BLE RSSI Threshold",
|
"label": "BLE RSSI Threshold",
|
||||||
"description": "At what BLE RSSI level should the counter increase. Defaults to -80."
|
"description": "At what BLE RSSI level should the counter increase. Defaults to -80."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rangeTest": {
|
"rangeTest": {
|
||||||
"title": "Range Test Settings",
|
"title": "Range Test Settings",
|
||||||
"description": "Settings for the Range Test module",
|
"description": "Settings for the Range Test module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Module Enabled",
|
"label": "Module Enabled",
|
||||||
"description": "Enable Range Test"
|
"description": "Enable Range Test"
|
||||||
},
|
},
|
||||||
"sender": {
|
"sender": {
|
||||||
"label": "Message Interval",
|
"label": "Message Interval",
|
||||||
"description": "How long to wait between sending test packets"
|
"description": "How long to wait between sending test packets"
|
||||||
},
|
},
|
||||||
"save": {
|
"save": {
|
||||||
"label": "Save CSV to storage",
|
"label": "Save CSV to storage",
|
||||||
"description": "ESP32 Only"
|
"description": "ESP32 Only"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"serial": {
|
"serial": {
|
||||||
"title": "Serial Settings",
|
"title": "Serial Settings",
|
||||||
"description": "Settings for the Serial module",
|
"description": "Settings for the Serial module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Module Enabled",
|
"label": "Module Enabled",
|
||||||
"description": "Enable Serial output"
|
"description": "Enable Serial output"
|
||||||
},
|
},
|
||||||
"echo": {
|
"echo": {
|
||||||
"label": "Echo",
|
"label": "Echo",
|
||||||
"description": "Any packets you send will be echoed back to your device"
|
"description": "Any packets you send will be echoed back to your device"
|
||||||
},
|
},
|
||||||
"rxd": {
|
"rxd": {
|
||||||
"label": "Receive Pin",
|
"label": "Receive Pin",
|
||||||
"description": "Set the GPIO pin to the RXD pin you have set up."
|
"description": "Set the GPIO pin to the RXD pin you have set up."
|
||||||
},
|
},
|
||||||
"txd": {
|
"txd": {
|
||||||
"label": "Transmit Pin",
|
"label": "Transmit Pin",
|
||||||
"description": "Set the GPIO pin to the TXD pin you have set up."
|
"description": "Set the GPIO pin to the TXD pin you have set up."
|
||||||
},
|
},
|
||||||
"baud": {
|
"baud": {
|
||||||
"label": "Baud Rate",
|
"label": "Baud Rate",
|
||||||
"description": "The serial baud rate"
|
"description": "The serial baud rate"
|
||||||
},
|
},
|
||||||
"timeout": {
|
"timeout": {
|
||||||
"label": "Tiempo agotado",
|
"label": "Tiempo agotado",
|
||||||
"description": "Seconds to wait before we consider your packet as 'done'"
|
"description": "Seconds to wait before we consider your packet as 'done'"
|
||||||
},
|
},
|
||||||
"mode": {
|
"mode": {
|
||||||
"label": "Mode",
|
"label": "Mode",
|
||||||
"description": "Select Mode"
|
"description": "Select Mode"
|
||||||
},
|
},
|
||||||
"overrideConsoleSerialPort": {
|
"overrideConsoleSerialPort": {
|
||||||
"label": "Override Console Serial Port",
|
"label": "Override Console Serial Port",
|
||||||
"description": "If you have a serial port connected to the console, this will override it."
|
"description": "If you have a serial port connected to the console, this will override it."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storeForward": {
|
"storeForward": {
|
||||||
"title": "Store & Forward Settings",
|
"title": "Store & Forward Settings",
|
||||||
"description": "Settings for the Store & Forward module",
|
"description": "Settings for the Store & Forward module",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Module Enabled",
|
"label": "Module Enabled",
|
||||||
"description": "Enable Store & Forward"
|
"description": "Enable Store & Forward"
|
||||||
},
|
},
|
||||||
"heartbeat": {
|
"heartbeat": {
|
||||||
"label": "Heartbeat Enabled",
|
"label": "Heartbeat Enabled",
|
||||||
"description": "Enable Store & Forward heartbeat"
|
"description": "Enable Store & Forward heartbeat"
|
||||||
},
|
},
|
||||||
"records": {
|
"records": {
|
||||||
"label": "Number of records",
|
"label": "Number of records",
|
||||||
"description": "Number of records to store"
|
"description": "Number of records to store"
|
||||||
},
|
},
|
||||||
"historyReturnMax": {
|
"historyReturnMax": {
|
||||||
"label": "History return max",
|
"label": "History return max",
|
||||||
"description": "Max number of records to return"
|
"description": "Max number of records to return"
|
||||||
},
|
},
|
||||||
"historyReturnWindow": {
|
"historyReturnWindow": {
|
||||||
"label": "History return window",
|
"label": "History return window",
|
||||||
"description": "Max number of records to return"
|
"description": "Max number of records to return"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"telemetry": {
|
"telemetry": {
|
||||||
"title": "Telemetry Settings",
|
"title": "Telemetry Settings",
|
||||||
"description": "Settings for the Telemetry module",
|
"description": "Settings for the Telemetry module",
|
||||||
"deviceUpdateInterval": {
|
"deviceUpdateInterval": {
|
||||||
"label": "Device Metrics",
|
"label": "Device Metrics",
|
||||||
"description": "Device metrics update interval (seconds)"
|
"description": "Device metrics update interval (seconds)"
|
||||||
},
|
},
|
||||||
"environmentUpdateInterval": {
|
"environmentUpdateInterval": {
|
||||||
"label": "Environment metrics update interval (seconds)",
|
"label": "Environment metrics update interval (seconds)",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"environmentMeasurementEnabled": {
|
"environmentMeasurementEnabled": {
|
||||||
"label": "Module Enabled",
|
"label": "Module Enabled",
|
||||||
"description": "Enable the Environment Telemetry"
|
"description": "Enable the Environment Telemetry"
|
||||||
},
|
},
|
||||||
"environmentScreenEnabled": {
|
"environmentScreenEnabled": {
|
||||||
"label": "Displayed on Screen",
|
"label": "Displayed on Screen",
|
||||||
"description": "Show the Telemetry Module on the OLED"
|
"description": "Show the Telemetry Module on the OLED"
|
||||||
},
|
},
|
||||||
"environmentDisplayFahrenheit": {
|
"environmentDisplayFahrenheit": {
|
||||||
"label": "Display Fahrenheit",
|
"label": "Display Fahrenheit",
|
||||||
"description": "Display temp in Fahrenheit"
|
"description": "Display temp in Fahrenheit"
|
||||||
},
|
},
|
||||||
"airQualityEnabled": {
|
"airQualityEnabled": {
|
||||||
"label": "Air Quality Enabled",
|
"label": "Air Quality Enabled",
|
||||||
"description": "Enable the Air Quality Telemetry"
|
"description": "Enable the Air Quality Telemetry"
|
||||||
},
|
},
|
||||||
"airQualityInterval": {
|
"airQualityInterval": {
|
||||||
"label": "Air Quality Update Interval",
|
"label": "Air Quality Update Interval",
|
||||||
"description": "How often to send Air Quality data over the mesh"
|
"description": "How often to send Air Quality data over the mesh"
|
||||||
},
|
},
|
||||||
"powerMeasurementEnabled": {
|
"powerMeasurementEnabled": {
|
||||||
"label": "Power Measurement Enabled",
|
"label": "Power Measurement Enabled",
|
||||||
"description": "Enable the Power Measurement Telemetry"
|
"description": "Enable the Power Measurement Telemetry"
|
||||||
},
|
},
|
||||||
"powerUpdateInterval": {
|
"powerUpdateInterval": {
|
||||||
"label": "Power Update Interval",
|
"label": "Power Update Interval",
|
||||||
"description": "How often to send Power data over the mesh"
|
"description": "How often to send Power data over the mesh"
|
||||||
},
|
},
|
||||||
"powerScreenEnabled": {
|
"powerScreenEnabled": {
|
||||||
"label": "Power Screen Enabled",
|
"label": "Power Screen Enabled",
|
||||||
"description": "Enable the Power Telemetry Screen"
|
"description": "Enable the Power Telemetry Screen"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,63 +1,63 @@
|
|||||||
{
|
{
|
||||||
"nodeDetail": {
|
"nodeDetail": {
|
||||||
"publicKeyEnabled": {
|
"publicKeyEnabled": {
|
||||||
"label": "Public Key Enabled"
|
"label": "Public Key Enabled"
|
||||||
},
|
},
|
||||||
"noPublicKey": {
|
"noPublicKey": {
|
||||||
"label": "No Public Key"
|
"label": "No Public Key"
|
||||||
},
|
},
|
||||||
"directMessage": {
|
"directMessage": {
|
||||||
"label": "Direct Message {{shortName}}"
|
"label": "Direct Message {{shortName}}"
|
||||||
},
|
},
|
||||||
"favorite": {
|
"favorite": {
|
||||||
"label": "Favorito",
|
"label": "Favorito",
|
||||||
"tooltip": "Add or remove this node from your favorites"
|
"tooltip": "Add or remove this node from your favorites"
|
||||||
},
|
},
|
||||||
"notFavorite": {
|
"notFavorite": {
|
||||||
"label": "Not a Favorite"
|
"label": "Not a Favorite"
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"label": "Error",
|
"label": "Error",
|
||||||
"text": "An error occurred while fetching node details. Please try again later."
|
"text": "An error occurred while fetching node details. Please try again later."
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"heard": "Heard",
|
"heard": "Heard",
|
||||||
"mqtt": "MQTT"
|
"mqtt": "MQTT"
|
||||||
},
|
},
|
||||||
"elevation": {
|
"elevation": {
|
||||||
"label": "Elevation"
|
"label": "Elevation"
|
||||||
},
|
},
|
||||||
"channelUtil": {
|
"channelUtil": {
|
||||||
"label": "Channel Util"
|
"label": "Channel Util"
|
||||||
},
|
},
|
||||||
"airtimeUtil": {
|
"airtimeUtil": {
|
||||||
"label": "Airtime Util"
|
"label": "Airtime Util"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nodesTable": {
|
"nodesTable": {
|
||||||
"headings": {
|
"headings": {
|
||||||
"longName": "Long Name",
|
"longName": "Long Name",
|
||||||
"connection": "Connection",
|
"connection": "Connection",
|
||||||
"lastHeard": "Last Heard",
|
"lastHeard": "Last Heard",
|
||||||
"encryption": "Encryption",
|
"encryption": "Encryption",
|
||||||
"model": "Model",
|
"model": "Model",
|
||||||
"macAddress": "MAC Address"
|
"macAddress": "MAC Address"
|
||||||
},
|
},
|
||||||
"connectionStatus": {
|
"connectionStatus": {
|
||||||
"direct": "Directo",
|
"direct": "Directo",
|
||||||
"away": "away",
|
"away": "away",
|
||||||
"unknown": "-",
|
"unknown": "-",
|
||||||
"viaMqtt": ", via MQTT"
|
"viaMqtt": ", via MQTT"
|
||||||
},
|
},
|
||||||
"lastHeardStatus": {
|
"lastHeardStatus": {
|
||||||
"never": "Never"
|
"never": "Never"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"actions": {
|
"actions": {
|
||||||
"added": "Added",
|
"added": "Added",
|
||||||
"removed": "Removed",
|
"removed": "Removed",
|
||||||
"ignoreNode": "Ignore Node",
|
"ignoreNode": "Ignore Node",
|
||||||
"unignoreNode": "Unignore Node",
|
"unignoreNode": "Unignore Node",
|
||||||
"requestPosition": "Request Position"
|
"requestPosition": "Request Position"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,228 +1,228 @@
|
|||||||
{
|
{
|
||||||
"navigation": {
|
"navigation": {
|
||||||
"title": "Navigation",
|
"title": "Navigation",
|
||||||
"messages": "Mensajes",
|
"messages": "Mensajes",
|
||||||
"map": "Mapa",
|
"map": "Mapa",
|
||||||
"config": "Config",
|
"config": "Config",
|
||||||
"radioConfig": "Radio Config",
|
"radioConfig": "Radio Config",
|
||||||
"moduleConfig": "Module Config",
|
"moduleConfig": "Module Config",
|
||||||
"channels": "Canales",
|
"channels": "Canales",
|
||||||
"nodes": "Nodes"
|
"nodes": "Nodes"
|
||||||
},
|
},
|
||||||
"app": {
|
"app": {
|
||||||
"title": "Meshtastic",
|
"title": "Meshtastic",
|
||||||
"logo": "Meshtastic Logo"
|
"logo": "Meshtastic Logo"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"collapseToggle": {
|
"collapseToggle": {
|
||||||
"button": {
|
"button": {
|
||||||
"open": "Open sidebar",
|
"open": "Open sidebar",
|
||||||
"close": "Close sidebar"
|
"close": "Close sidebar"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"deviceInfo": {
|
"deviceInfo": {
|
||||||
"volts": "{{voltage}} volts",
|
"volts": "{{voltage}} volts",
|
||||||
"firmware": {
|
"firmware": {
|
||||||
"title": "Firmware",
|
"title": "Firmware",
|
||||||
"version": "v{{version}}",
|
"version": "v{{version}}",
|
||||||
"buildDate": "Build date: {{date}}"
|
"buildDate": "Build date: {{date}}"
|
||||||
},
|
},
|
||||||
"deviceName": {
|
"deviceName": {
|
||||||
"title": "Device Name",
|
"title": "Device Name",
|
||||||
"changeName": "Change Device Name",
|
"changeName": "Change Device Name",
|
||||||
"placeholder": "Enter device name"
|
"placeholder": "Enter device name"
|
||||||
},
|
},
|
||||||
"editDeviceName": "Edit device name"
|
"editDeviceName": "Edit device name"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"batteryStatus": {
|
"batteryStatus": {
|
||||||
"charging": "{{level}}% charging",
|
"charging": "{{level}}% charging",
|
||||||
"pluggedIn": "Plugged in",
|
"pluggedIn": "Plugged in",
|
||||||
"title": "Batería"
|
"title": "Batería"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"nodes": "Search nodes...",
|
"nodes": "Search nodes...",
|
||||||
"channels": "Search channels...",
|
"channels": "Search channels...",
|
||||||
"commandPalette": "Search commands..."
|
"commandPalette": "Search commands..."
|
||||||
},
|
},
|
||||||
"toast": {
|
"toast": {
|
||||||
"positionRequestSent": {
|
"positionRequestSent": {
|
||||||
"title": "Position request sent."
|
"title": "Position request sent."
|
||||||
},
|
},
|
||||||
"requestingPosition": {
|
"requestingPosition": {
|
||||||
"title": "Requesting position, please wait..."
|
"title": "Requesting position, please wait..."
|
||||||
},
|
},
|
||||||
"sendingTraceroute": {
|
"sendingTraceroute": {
|
||||||
"title": "Sending Traceroute, please wait..."
|
"title": "Sending Traceroute, please wait..."
|
||||||
},
|
},
|
||||||
"tracerouteSent": {
|
"tracerouteSent": {
|
||||||
"title": "Traceroute sent."
|
"title": "Traceroute sent."
|
||||||
},
|
},
|
||||||
"savedChannel": {
|
"savedChannel": {
|
||||||
"title": "Saved Channel: {{channelName}}"
|
"title": "Saved Channel: {{channelName}}"
|
||||||
},
|
},
|
||||||
"messages": {
|
"messages": {
|
||||||
"pkiEncryption": {
|
"pkiEncryption": {
|
||||||
"title": "Chat is using PKI encryption."
|
"title": "Chat is using PKI encryption."
|
||||||
},
|
},
|
||||||
"pskEncryption": {
|
"pskEncryption": {
|
||||||
"title": "Chat is using PSK encryption."
|
"title": "Chat is using PSK encryption."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"configSaveError": {
|
"configSaveError": {
|
||||||
"title": "Error Saving Config",
|
"title": "Error Saving Config",
|
||||||
"description": "An error occurred while saving the configuration."
|
"description": "An error occurred while saving the configuration."
|
||||||
},
|
},
|
||||||
"validationError": {
|
"validationError": {
|
||||||
"title": "Config Errors Exist",
|
"title": "Config Errors Exist",
|
||||||
"description": "Please fix the configuration errors before saving."
|
"description": "Please fix the configuration errors before saving."
|
||||||
},
|
},
|
||||||
"saveSuccess": {
|
"saveSuccess": {
|
||||||
"title": "Saving Config",
|
"title": "Saving Config",
|
||||||
"description": "The configuration change {{case}} has been saved."
|
"description": "The configuration change {{case}} has been saved."
|
||||||
},
|
},
|
||||||
"favoriteNode": {
|
"favoriteNode": {
|
||||||
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
|
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
|
||||||
"action": {
|
"action": {
|
||||||
"added": "Added",
|
"added": "Added",
|
||||||
"removed": "Removed",
|
"removed": "Removed",
|
||||||
"to": "to",
|
"to": "to",
|
||||||
"from": "from"
|
"from": "from"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ignoreNode": {
|
"ignoreNode": {
|
||||||
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
|
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
|
||||||
"action": {
|
"action": {
|
||||||
"added": "Added",
|
"added": "Added",
|
||||||
"removed": "Removed",
|
"removed": "Removed",
|
||||||
"to": "to",
|
"to": "to",
|
||||||
"from": "from"
|
"from": "from"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"copied": {
|
"copied": {
|
||||||
"label": "Copied!"
|
"label": "Copied!"
|
||||||
},
|
},
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"label": "Copy to clipboard"
|
"label": "Copy to clipboard"
|
||||||
},
|
},
|
||||||
"hidePassword": {
|
"hidePassword": {
|
||||||
"label": "Hide password"
|
"label": "Hide password"
|
||||||
},
|
},
|
||||||
"showPassword": {
|
"showPassword": {
|
||||||
"label": "Mostrar contraseña"
|
"label": "Mostrar contraseña"
|
||||||
},
|
},
|
||||||
"deliveryStatus": {
|
"deliveryStatus": {
|
||||||
"delivered": "Delivered",
|
"delivered": "Delivered",
|
||||||
"failed": "Delivery Failed",
|
"failed": "Delivery Failed",
|
||||||
"waiting": "Waiting",
|
"waiting": "Waiting",
|
||||||
"unknown": "Unknown"
|
"unknown": "Unknown"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"general": {
|
"general": {
|
||||||
"label": "General"
|
"label": "General"
|
||||||
},
|
},
|
||||||
"hardware": {
|
"hardware": {
|
||||||
"label": "Hardware"
|
"label": "Hardware"
|
||||||
},
|
},
|
||||||
"metrics": {
|
"metrics": {
|
||||||
"label": "Metrics"
|
"label": "Metrics"
|
||||||
},
|
},
|
||||||
"role": {
|
"role": {
|
||||||
"label": "Role"
|
"label": "Role"
|
||||||
},
|
},
|
||||||
"filter": {
|
"filter": {
|
||||||
"label": "Filtro"
|
"label": "Filtro"
|
||||||
},
|
},
|
||||||
"advanced": {
|
"advanced": {
|
||||||
"label": "Advanced"
|
"label": "Advanced"
|
||||||
},
|
},
|
||||||
"clearInput": {
|
"clearInput": {
|
||||||
"label": "Clear input"
|
"label": "Clear input"
|
||||||
},
|
},
|
||||||
"resetFilters": {
|
"resetFilters": {
|
||||||
"label": "Reset Filters"
|
"label": "Reset Filters"
|
||||||
},
|
},
|
||||||
"nodeName": {
|
"nodeName": {
|
||||||
"label": "Node name/number",
|
"label": "Node name/number",
|
||||||
"placeholder": "Meshtastic 1234"
|
"placeholder": "Meshtastic 1234"
|
||||||
},
|
},
|
||||||
"airtimeUtilization": {
|
"airtimeUtilization": {
|
||||||
"label": "Airtime Utilization (%)"
|
"label": "Airtime Utilization (%)"
|
||||||
},
|
},
|
||||||
"batteryLevel": {
|
"batteryLevel": {
|
||||||
"label": "Battery level (%)",
|
"label": "Battery level (%)",
|
||||||
"labelText": "Battery level (%): {{value}}"
|
"labelText": "Battery level (%): {{value}}"
|
||||||
},
|
},
|
||||||
"batteryVoltage": {
|
"batteryVoltage": {
|
||||||
"label": "Battery voltage (V)",
|
"label": "Battery voltage (V)",
|
||||||
"title": "Tensión"
|
"title": "Tensión"
|
||||||
},
|
},
|
||||||
"channelUtilization": {
|
"channelUtilization": {
|
||||||
"label": "Channel Utilization (%)"
|
"label": "Channel Utilization (%)"
|
||||||
},
|
},
|
||||||
"hops": {
|
"hops": {
|
||||||
"direct": "Directo",
|
"direct": "Directo",
|
||||||
"label": "Number of hops",
|
"label": "Number of hops",
|
||||||
"text": "Number of hops: {{value}}"
|
"text": "Number of hops: {{value}}"
|
||||||
},
|
},
|
||||||
"lastHeard": {
|
"lastHeard": {
|
||||||
"label": "Última escucha",
|
"label": "Última escucha",
|
||||||
"labelText": "Last heard: {{value}}",
|
"labelText": "Last heard: {{value}}",
|
||||||
"nowLabel": "Now"
|
"nowLabel": "Now"
|
||||||
},
|
},
|
||||||
"snr": {
|
"snr": {
|
||||||
"label": "SNR (db)"
|
"label": "SNR (db)"
|
||||||
},
|
},
|
||||||
"favorites": {
|
"favorites": {
|
||||||
"label": "Favorites"
|
"label": "Favorites"
|
||||||
},
|
},
|
||||||
"hide": {
|
"hide": {
|
||||||
"label": "Hide"
|
"label": "Hide"
|
||||||
},
|
},
|
||||||
"showOnly": {
|
"showOnly": {
|
||||||
"label": "Show Only"
|
"label": "Show Only"
|
||||||
},
|
},
|
||||||
"viaMqtt": {
|
"viaMqtt": {
|
||||||
"label": "Connected via MQTT"
|
"label": "Connected via MQTT"
|
||||||
},
|
},
|
||||||
"hopsUnknown": {
|
"hopsUnknown": {
|
||||||
"label": "Unknown number of hops"
|
"label": "Unknown number of hops"
|
||||||
},
|
},
|
||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Never heard"
|
"label": "Never heard"
|
||||||
},
|
},
|
||||||
"language": {
|
"language": {
|
||||||
"label": "Idioma",
|
"label": "Idioma",
|
||||||
"changeLanguage": "Change Language"
|
"changeLanguage": "Change Language"
|
||||||
},
|
},
|
||||||
"theme": {
|
"theme": {
|
||||||
"dark": "Oscuro",
|
"dark": "Oscuro",
|
||||||
"light": "Claro",
|
"light": "Claro",
|
||||||
"system": "Automatic",
|
"system": "Automatic",
|
||||||
"changeTheme": "Change Color Scheme"
|
"changeTheme": "Change Color Scheme"
|
||||||
},
|
},
|
||||||
"errorPage": {
|
"errorPage": {
|
||||||
"title": "This is a little embarrassing...",
|
"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.",
|
"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.",
|
"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:",
|
"reportInstructions": "Please include the following information in your report:",
|
||||||
"reportSteps": {
|
"reportSteps": {
|
||||||
"step1": "What you were doing when the error occurred",
|
"step1": "What you were doing when the error occurred",
|
||||||
"step2": "What you expected to happen",
|
"step2": "What you expected to happen",
|
||||||
"step3": "What actually happened",
|
"step3": "What actually happened",
|
||||||
"step4": "Any other relevant information"
|
"step4": "Any other relevant information"
|
||||||
},
|
},
|
||||||
"reportLink": "You can report the issue to our <0>GitHub</0>",
|
"reportLink": "You can report the issue to our <0>GitHub</0>",
|
||||||
"dashboardLink": "Return to the <0>dashboard</0>",
|
"dashboardLink": "Return to the <0>dashboard</0>",
|
||||||
"detailsSummary": "Error Details",
|
"detailsSummary": "Error Details",
|
||||||
"errorMessageLabel": "Error message:",
|
"errorMessageLabel": "Error message:",
|
||||||
"stackTraceLabel": "Stack trace:",
|
"stackTraceLabel": "Stack trace:",
|
||||||
"fallbackError": "{{error}}"
|
"fallbackError": "{{error}}"
|
||||||
},
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® is a registered trademark of Meshtastic LLC. | <1>Legal Information</1>",
|
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® is a registered trademark of Meshtastic LLC. | <1>Legal Information</1>",
|
||||||
"commitSha": "Commit SHA: {{sha}}"
|
"commitSha": "Commit SHA: {{sha}}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,69 +1,69 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"sectionLabel": "Kanavat",
|
"sectionLabel": "Kanavat",
|
||||||
"channelName": "Kanava: {{channelName}}",
|
"channelName": "Kanava: {{channelName}}",
|
||||||
"broadcastLabel": "Ensisijainen",
|
"broadcastLabel": "Ensisijainen",
|
||||||
"channelIndex": "Ch {{index}}"
|
"channelIndex": "Ch {{index}}"
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"pskInvalid": "Syötä kelvollinen {{bits}} bittinen PSK."
|
"pskInvalid": "Syötä kelvollinen {{bits}} bittinen PSK."
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"label": "Kanava-asetukset",
|
"label": "Kanava-asetukset",
|
||||||
"description": "Crypto, MQTT ja muut asetukset"
|
"description": "Crypto, MQTT ja muut asetukset"
|
||||||
},
|
},
|
||||||
"role": {
|
"role": {
|
||||||
"label": "Rooli",
|
"label": "Rooli",
|
||||||
"description": "Laitteen telemetriatiedot lähetetään ENSISIJAISEN kanavan kautta. Vain yksi ENSISIJAINEN kanava sallitaan",
|
"description": "Laitteen telemetriatiedot lähetetään ENSISIJAISEN kanavan kautta. Vain yksi ENSISIJAINEN kanava sallitaan",
|
||||||
"options": {
|
"options": {
|
||||||
"primary": "ENSISIJAISEN",
|
"primary": "ENSISIJAISEN",
|
||||||
"disabled": "POIS KÄYTÖSTÄ",
|
"disabled": "POIS KÄYTÖSTÄ",
|
||||||
"secondary": "TOISIJAINEN"
|
"secondary": "TOISIJAINEN"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"psk": {
|
"psk": {
|
||||||
"label": "Esijaettu avain",
|
"label": "Esijaettu avain",
|
||||||
"description": "Tuetut PSK-pituudet: 256-bit, 128-bit, 8-bit, tyhjät (0-bit)",
|
"description": "Tuetut PSK-pituudet: 256-bit, 128-bit, 8-bit, tyhjät (0-bit)",
|
||||||
"generate": "Luo"
|
"generate": "Luo"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"label": "Nimi",
|
"label": "Nimi",
|
||||||
"description": "Kanavan yksilöllinen nimi (alle 12 merkkiä), jätä tyhjäksi käyttääksesi oletusta"
|
"description": "Kanavan yksilöllinen nimi (alle 12 merkkiä), jätä tyhjäksi käyttääksesi oletusta"
|
||||||
},
|
},
|
||||||
"uplinkEnabled": {
|
"uplinkEnabled": {
|
||||||
"label": "Lähetys käytössä",
|
"label": "Lähetys käytössä",
|
||||||
"description": "Lähetä viestejä paikallisesta verkosta MQTT-verkkoon"
|
"description": "Lähetä viestejä paikallisesta verkosta MQTT-verkkoon"
|
||||||
},
|
},
|
||||||
"downlinkEnabled": {
|
"downlinkEnabled": {
|
||||||
"label": "Vastaanotto käytössä",
|
"label": "Vastaanotto käytössä",
|
||||||
"description": "Lähetä viestejä MQTT:stä paikalliseen verkkoon"
|
"description": "Lähetä viestejä MQTT:stä paikalliseen verkkoon"
|
||||||
},
|
},
|
||||||
"positionPrecision": {
|
"positionPrecision": {
|
||||||
"label": "Sijainti",
|
"label": "Sijainti",
|
||||||
"description": "Kanavalle jaettavan sijainnin tarkkuus. Voi poistaa käytöstä.",
|
"description": "Kanavalle jaettavan sijainnin tarkkuus. Voi poistaa käytöstä.",
|
||||||
"options": {
|
"options": {
|
||||||
"none": "Älä jaa sijaintia",
|
"none": "Älä jaa sijaintia",
|
||||||
"precise": "Tarkka Sijainti",
|
"precise": "Tarkka Sijainti",
|
||||||
"metric_km23": "23 kilometrin säteellä",
|
"metric_km23": "23 kilometrin säteellä",
|
||||||
"metric_km12": "12 kilometrin säteellä",
|
"metric_km12": "12 kilometrin säteellä",
|
||||||
"metric_km5_8": "5,8 kilometrin säteellä",
|
"metric_km5_8": "5,8 kilometrin säteellä",
|
||||||
"metric_km2_9": "2,9 kilometrin säteellä",
|
"metric_km2_9": "2,9 kilometrin säteellä",
|
||||||
"metric_km1_5": "1,5 kilometrin säteellä",
|
"metric_km1_5": "1,5 kilometrin säteellä",
|
||||||
"metric_m700": "700 metrin säteellä",
|
"metric_m700": "700 metrin säteellä",
|
||||||
"metric_m350": "350 metrin säteellä",
|
"metric_m350": "350 metrin säteellä",
|
||||||
"metric_m200": "200 metrin säteellä",
|
"metric_m200": "200 metrin säteellä",
|
||||||
"metric_m90": "90 metrin säteellä",
|
"metric_m90": "90 metrin säteellä",
|
||||||
"metric_m50": "50 metrin säteellä",
|
"metric_m50": "50 metrin säteellä",
|
||||||
"imperial_mi15": "15 mailin säteellä",
|
"imperial_mi15": "15 mailin säteellä",
|
||||||
"imperial_mi7_3": "7,3 mailin säteellä",
|
"imperial_mi7_3": "7,3 mailin säteellä",
|
||||||
"imperial_mi3_6": "3,6 mailin säteellä",
|
"imperial_mi3_6": "3,6 mailin säteellä",
|
||||||
"imperial_mi1_8": "1,8 mailin säteellä",
|
"imperial_mi1_8": "1,8 mailin säteellä",
|
||||||
"imperial_mi0_9": "0,9 mailin säteellä",
|
"imperial_mi0_9": "0,9 mailin säteellä",
|
||||||
"imperial_mi0_5": "0,5 mailin säteellä",
|
"imperial_mi0_5": "0,5 mailin säteellä",
|
||||||
"imperial_mi0_2": "0,2 mailin säteellä",
|
"imperial_mi0_2": "0,2 mailin säteellä",
|
||||||
"imperial_ft600": "600 jalan säteellä",
|
"imperial_ft600": "600 jalan säteellä",
|
||||||
"imperial_ft300": "300 jalan säteellä",
|
"imperial_ft300": "300 jalan säteellä",
|
||||||
"imperial_ft150": "150 jalan säteellä"
|
"imperial_ft150": "150 jalan säteellä"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,50 +1,50 @@
|
|||||||
{
|
{
|
||||||
"emptyState": "Tuloksia ei löytynyt.",
|
"emptyState": "Tuloksia ei löytynyt.",
|
||||||
"page": {
|
"page": {
|
||||||
"title": "Komentovalikko"
|
"title": "Komentovalikko"
|
||||||
},
|
},
|
||||||
"pinGroup": {
|
"pinGroup": {
|
||||||
"label": "Kiinnitä komentoryhmä"
|
"label": "Kiinnitä komentoryhmä"
|
||||||
},
|
},
|
||||||
"unpinGroup": {
|
"unpinGroup": {
|
||||||
"label": "Irroita komentoryhmä"
|
"label": "Irroita komentoryhmä"
|
||||||
},
|
},
|
||||||
"goto": {
|
"goto": {
|
||||||
"label": "Siirry",
|
"label": "Siirry",
|
||||||
"command": {
|
"command": {
|
||||||
"messages": "Viestit",
|
"messages": "Viestit",
|
||||||
"map": "Kartta",
|
"map": "Kartta",
|
||||||
"config": "Asetukset",
|
"config": "Asetukset",
|
||||||
"channels": "Kanavat",
|
"channels": "Kanavat",
|
||||||
"nodes": "Laitteet"
|
"nodes": "Laitteet"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manage": {
|
"manage": {
|
||||||
"label": "Hallinnoi",
|
"label": "Hallinnoi",
|
||||||
"command": {
|
"command": {
|
||||||
"switchNode": "Vaihda laitetta",
|
"switchNode": "Vaihda laitetta",
|
||||||
"connectNewNode": "Yhdistä uusi laite"
|
"connectNewNode": "Yhdistä uusi laite"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"contextual": {
|
"contextual": {
|
||||||
"label": "Kontekstin mukainen",
|
"label": "Kontekstin mukainen",
|
||||||
"command": {
|
"command": {
|
||||||
"qrCode": "QR-koodi",
|
"qrCode": "QR-koodi",
|
||||||
"qrGenerator": "QR-koodigeneraattori",
|
"qrGenerator": "QR-koodigeneraattori",
|
||||||
"qrImport": "Tuo",
|
"qrImport": "Tuo",
|
||||||
"scheduleShutdown": "Ajasta sammutus",
|
"scheduleShutdown": "Ajasta sammutus",
|
||||||
"scheduleReboot": "Ajasta uudelleenkäynnistys",
|
"scheduleReboot": "Ajasta uudelleenkäynnistys",
|
||||||
"rebootToOtaMode": "Uudelleenkäynnistä OTA-tilaan",
|
"rebootToOtaMode": "Uudelleenkäynnistä OTA-tilaan",
|
||||||
"resetNodeDb": "Nollaa laitteen DB-tietokanta",
|
"resetNodeDb": "Nollaa laitteen DB-tietokanta",
|
||||||
"factoryResetDevice": "Palauta tehdasasetukset",
|
"factoryResetDevice": "Palauta tehdasasetukset",
|
||||||
"factoryResetConfig": "Tehdasasetusten palautusasetukset"
|
"factoryResetConfig": "Tehdasasetusten palautusasetukset"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"debug": {
|
"debug": {
|
||||||
"label": "Vianetsintä",
|
"label": "Vianetsintä",
|
||||||
"command": {
|
"command": {
|
||||||
"reconfigure": "Määritä uudelleen",
|
"reconfigure": "Määritä uudelleen",
|
||||||
"clearAllStoredMessages": "Tyhjennä kaikki tallennetut viesti"
|
"clearAllStoredMessages": "Tyhjennä kaikki tallennetut viesti"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,141 +1,141 @@
|
|||||||
{
|
{
|
||||||
"button": {
|
"button": {
|
||||||
"apply": "Hyväksy",
|
"apply": "Hyväksy",
|
||||||
"backupKey": "Varmuuskopioi avain",
|
"backupKey": "Varmuuskopioi avain",
|
||||||
"cancel": "Peruuta",
|
"cancel": "Peruuta",
|
||||||
"clearMessages": "Tyhjennä viestit",
|
"clearMessages": "Tyhjennä viestit",
|
||||||
"close": "Sulje",
|
"close": "Sulje",
|
||||||
"confirm": "Vahvista",
|
"confirm": "Vahvista",
|
||||||
"delete": "Poista",
|
"delete": "Poista",
|
||||||
"dismiss": "Hylkää",
|
"dismiss": "Hylkää",
|
||||||
"download": "Lataa",
|
"download": "Lataa",
|
||||||
"export": "Vie",
|
"export": "Vie",
|
||||||
"generate": "Luo",
|
"generate": "Luo",
|
||||||
"regenerate": "Luo uudelleen",
|
"regenerate": "Luo uudelleen",
|
||||||
"import": "Tuo",
|
"import": "Tuo",
|
||||||
"message": "Viesti",
|
"message": "Viesti",
|
||||||
"now": "Nyt",
|
"now": "Nyt",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"print": "Tulosta",
|
"print": "Tulosta",
|
||||||
"rebootOtaNow": "Käynnistä uudelleen OTA-tilaan nyt",
|
"rebootOtaNow": "Käynnistä uudelleen OTA-tilaan nyt",
|
||||||
"remove": "Poista",
|
"remove": "Poista",
|
||||||
"requestNewKeys": "Pyydä uudet avaimet",
|
"requestNewKeys": "Pyydä uudet avaimet",
|
||||||
"requestPosition": "Pyydä sijaintia",
|
"requestPosition": "Pyydä sijaintia",
|
||||||
"reset": "Palauta",
|
"reset": "Palauta",
|
||||||
"save": "Tallenna",
|
"save": "Tallenna",
|
||||||
"scanQr": "Skannaa QR-koodi",
|
"scanQr": "Skannaa QR-koodi",
|
||||||
"traceRoute": "Reitinselvitys",
|
"traceRoute": "Reitinselvitys",
|
||||||
"submit": "Lähetä"
|
"submit": "Lähetä"
|
||||||
},
|
},
|
||||||
"app": {
|
"app": {
|
||||||
"title": "Meshtastic",
|
"title": "Meshtastic",
|
||||||
"fullTitle": "Meshtastic Web Client"
|
"fullTitle": "Meshtastic Web Client"
|
||||||
},
|
},
|
||||||
"loading": "Ladataan...",
|
"loading": "Ladataan...",
|
||||||
"unit": {
|
"unit": {
|
||||||
"cps": "CPS",
|
"cps": "CPS",
|
||||||
"dbm": "dBm",
|
"dbm": "dBm",
|
||||||
"hertz": "Hz",
|
"hertz": "Hz",
|
||||||
"hop": {
|
"hop": {
|
||||||
"one": "Hyppy",
|
"one": "Hyppy",
|
||||||
"plural": "Hyppyä"
|
"plural": "Hyppyä"
|
||||||
},
|
},
|
||||||
"hopsAway": {
|
"hopsAway": {
|
||||||
"one": "{{count}} hypyn päässä",
|
"one": "{{count}} hypyn päässä",
|
||||||
"plural": "{{count}} hypyn päässä",
|
"plural": "{{count}} hypyn päässä",
|
||||||
"unknown": "Hyppyjen määrä tuntematon"
|
"unknown": "Hyppyjen määrä tuntematon"
|
||||||
},
|
},
|
||||||
"megahertz": "MHz",
|
"megahertz": "MHz",
|
||||||
"raw": "raakatieto",
|
"raw": "raakatieto",
|
||||||
"meter": {
|
"meter": {
|
||||||
"one": "Metri",
|
"one": "Metri",
|
||||||
"plural": "Metriä",
|
"plural": "Metriä",
|
||||||
"suffix": "m"
|
"suffix": "m"
|
||||||
},
|
},
|
||||||
"minute": {
|
"minute": {
|
||||||
"one": "Minuutti",
|
"one": "Minuutti",
|
||||||
"plural": "Minuuttia"
|
"plural": "Minuuttia"
|
||||||
},
|
},
|
||||||
"hour": {
|
"hour": {
|
||||||
"one": "Tunti",
|
"one": "Tunti",
|
||||||
"plural": "Tuntia"
|
"plural": "Tuntia"
|
||||||
},
|
},
|
||||||
"millisecond": {
|
"millisecond": {
|
||||||
"one": "Millisekunti",
|
"one": "Millisekunti",
|
||||||
"plural": "Millisekuntia",
|
"plural": "Millisekuntia",
|
||||||
"suffix": "ms"
|
"suffix": "ms"
|
||||||
},
|
},
|
||||||
"second": {
|
"second": {
|
||||||
"one": "Sekunti",
|
"one": "Sekunti",
|
||||||
"plural": "Sekuntia"
|
"plural": "Sekuntia"
|
||||||
},
|
},
|
||||||
"day": {
|
"day": {
|
||||||
"one": "Päivä",
|
"one": "Päivä",
|
||||||
"plural": "Päivää"
|
"plural": "Päivää"
|
||||||
},
|
},
|
||||||
"month": {
|
"month": {
|
||||||
"one": "Kuukausi",
|
"one": "Kuukausi",
|
||||||
"plural": "Kuukautta"
|
"plural": "Kuukautta"
|
||||||
},
|
},
|
||||||
"year": {
|
"year": {
|
||||||
"one": "Vuosi",
|
"one": "Vuosi",
|
||||||
"plural": "Vuotta"
|
"plural": "Vuotta"
|
||||||
},
|
},
|
||||||
"snr": "SNR",
|
"snr": "SNR",
|
||||||
"volt": {
|
"volt": {
|
||||||
"one": "Voltti",
|
"one": "Voltti",
|
||||||
"plural": "Voltit",
|
"plural": "Voltit",
|
||||||
"suffix": "V"
|
"suffix": "V"
|
||||||
},
|
},
|
||||||
"record": {
|
"record": {
|
||||||
"one": "Tiedot",
|
"one": "Tiedot",
|
||||||
"plural": "Tiedot"
|
"plural": "Tiedot"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"0bit": "Tyhjä",
|
"0bit": "Tyhjä",
|
||||||
"8bit": "8-bittiä",
|
"8bit": "8-bittiä",
|
||||||
"128bit": "128-bittiä",
|
"128bit": "128-bittiä",
|
||||||
"256bit": "256 bittiä"
|
"256bit": "256 bittiä"
|
||||||
},
|
},
|
||||||
"unknown": {
|
"unknown": {
|
||||||
"longName": "Tuntematon",
|
"longName": "Tuntematon",
|
||||||
"shortName": "UNK",
|
"shortName": "UNK",
|
||||||
"notAvailable": "N/A",
|
"notAvailable": "N/A",
|
||||||
"num": "??"
|
"num": "??"
|
||||||
},
|
},
|
||||||
"nodeUnknownPrefix": "!",
|
"nodeUnknownPrefix": "!",
|
||||||
"unset": "EI ASETETTU",
|
"unset": "EI ASETETTU",
|
||||||
"fallbackName": "Meshtastic {{last4}}",
|
"fallbackName": "Meshtastic {{last4}}",
|
||||||
"node": "Laite",
|
"node": "Laite",
|
||||||
"formValidation": {
|
"formValidation": {
|
||||||
"unsavedChanges": "Tallentamattomat muutokset",
|
"unsavedChanges": "Tallentamattomat muutokset",
|
||||||
"tooBig": {
|
"tooBig": {
|
||||||
"string": "Teksti on liian pitkä – sallittu enimmäispituus on {{maximum}} merkkiä.",
|
"string": "Teksti on liian pitkä – sallittu enimmäispituus on {{maximum}} merkkiä.",
|
||||||
"number": "Arvo on liian suuri – sallittu enimmäisarvo on {{maximum}}.",
|
"number": "Arvo on liian suuri – sallittu enimmäisarvo on {{maximum}}.",
|
||||||
"bytes": "Liian suuri koko – sallittu enimmäismäärä on {{params.maximum}} tavua."
|
"bytes": "Liian suuri koko – sallittu enimmäismäärä on {{params.maximum}} tavua."
|
||||||
},
|
},
|
||||||
"tooSmall": {
|
"tooSmall": {
|
||||||
"string": "Teksti on liian lyhyt – vähimmäispituus on {{minimum}} merkkiä.",
|
"string": "Teksti on liian lyhyt – vähimmäispituus on {{minimum}} merkkiä.",
|
||||||
"number": "Arvo on liian pieni – pienin sallittu arvo on {{minimum}}."
|
"number": "Arvo on liian pieni – pienin sallittu arvo on {{minimum}}."
|
||||||
},
|
},
|
||||||
"invalidFormat": {
|
"invalidFormat": {
|
||||||
"ipv4": "Virheellinen muoto – odotettu muoto on IPv4-osoite.",
|
"ipv4": "Virheellinen muoto – odotettu muoto on IPv4-osoite.",
|
||||||
"key": "Virheellinen muoto – odotettu muoto on Base64-koodattu jaettu avain (PSK)."
|
"key": "Virheellinen muoto – odotettu muoto on Base64-koodattu jaettu avain (PSK)."
|
||||||
},
|
},
|
||||||
"invalidType": {
|
"invalidType": {
|
||||||
"number": "Virheellinen tyyppi – arvon tulee olla numero."
|
"number": "Virheellinen tyyppi – arvon tulee olla numero."
|
||||||
},
|
},
|
||||||
"pskLength": {
|
"pskLength": {
|
||||||
"0bit": "Avainkentän on oltava tyhjä.",
|
"0bit": "Avainkentän on oltava tyhjä.",
|
||||||
"8bit": "Avaimen on oltava 8-bittinen jaettu avain (PSK).",
|
"8bit": "Avaimen on oltava 8-bittinen jaettu avain (PSK).",
|
||||||
"128bit": "Avaimen on oltava 128-bittinen jaettu avain (PSK).",
|
"128bit": "Avaimen on oltava 128-bittinen jaettu avain (PSK).",
|
||||||
"256bit": "Avaimen on oltava 256-bittinen jaettu avain (PSK)."
|
"256bit": "Avaimen on oltava 256-bittinen jaettu avain (PSK)."
|
||||||
},
|
},
|
||||||
"required": {
|
"required": {
|
||||||
"generic": "Tämä kenttä on pakollinen.",
|
"generic": "Tämä kenttä on pakollinen.",
|
||||||
"managed": "Vähintään yksi hallinta-avain vaaditaan, jos laitetta hallitaan.",
|
"managed": "Vähintään yksi hallinta-avain vaaditaan, jos laitetta hallitaan.",
|
||||||
"key": "Avain on pakollinen."
|
"key": "Avain on pakollinen."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
"title": "Yhdistetyt laitteet",
|
"title": "Yhdistetyt laitteet",
|
||||||
"description": "Hallitse yhdistettyjä Meshtastic laitteitasi.",
|
"description": "Hallitse yhdistettyjä Meshtastic laitteitasi.",
|
||||||
"connectionType_ble": "BLE",
|
"connectionType_ble": "BLE",
|
||||||
"connectionType_serial": "Sarjaliitäntä",
|
"connectionType_serial": "Sarjaliitäntä",
|
||||||
"connectionType_network": "Verkko",
|
"connectionType_network": "Verkko",
|
||||||
"noDevicesTitle": "Ei laitteita yhdistettynä",
|
"noDevicesTitle": "Ei laitteita yhdistettynä",
|
||||||
"noDevicesDescription": "Yhdistä uusi laite aloittaaksesi.",
|
"noDevicesDescription": "Yhdistä uusi laite aloittaaksesi.",
|
||||||
"button_newConnection": "Uusi yhteys"
|
"button_newConnection": "Uusi yhteys"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,428 +1,428 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"title": "Asetukset",
|
"title": "Asetukset",
|
||||||
"tabBluetooth": "Bluetooth",
|
"tabBluetooth": "Bluetooth",
|
||||||
"tabDevice": "Laite",
|
"tabDevice": "Laite",
|
||||||
"tabDisplay": "Näyttö",
|
"tabDisplay": "Näyttö",
|
||||||
"tabLora": "LoRa",
|
"tabLora": "LoRa",
|
||||||
"tabNetwork": "Verkko",
|
"tabNetwork": "Verkko",
|
||||||
"tabPosition": "Sijainti",
|
"tabPosition": "Sijainti",
|
||||||
"tabPower": "Virta",
|
"tabPower": "Virta",
|
||||||
"tabSecurity": "Turvallisuus"
|
"tabSecurity": "Turvallisuus"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"label": "Moduulit"
|
"label": "Moduulit"
|
||||||
},
|
},
|
||||||
"device": {
|
"device": {
|
||||||
"title": "Laitteen asetukset",
|
"title": "Laitteen asetukset",
|
||||||
"description": "Laitteen asetukset",
|
"description": "Laitteen asetukset",
|
||||||
"buttonPin": {
|
"buttonPin": {
|
||||||
"description": "Painikkeen pinnin ohitus",
|
"description": "Painikkeen pinnin ohitus",
|
||||||
"label": "Painikkeen pinni"
|
"label": "Painikkeen pinni"
|
||||||
},
|
},
|
||||||
"buzzerPin": {
|
"buzzerPin": {
|
||||||
"description": "Summerin pinnin ohitus",
|
"description": "Summerin pinnin ohitus",
|
||||||
"label": "Summerin pinni"
|
"label": "Summerin pinni"
|
||||||
},
|
},
|
||||||
"disableTripleClick": {
|
"disableTripleClick": {
|
||||||
"description": "Poista kolmoisklikkaus käytöstä",
|
"description": "Poista kolmoisklikkaus käytöstä",
|
||||||
"label": "Poista kolmoisklikkaus käytöstä"
|
"label": "Poista kolmoisklikkaus käytöstä"
|
||||||
},
|
},
|
||||||
"doubleTapAsButtonPress": {
|
"doubleTapAsButtonPress": {
|
||||||
"description": "Käsittele kaksoisnapautus painikkeen painalluksena",
|
"description": "Käsittele kaksoisnapautus painikkeen painalluksena",
|
||||||
"label": "Kaksoisnapautus painikkeen painalluksena"
|
"label": "Kaksoisnapautus painikkeen painalluksena"
|
||||||
},
|
},
|
||||||
"ledHeartbeatDisabled": {
|
"ledHeartbeatDisabled": {
|
||||||
"description": "Poista ledin vilkkuminen käytöstä",
|
"description": "Poista ledin vilkkuminen käytöstä",
|
||||||
"label": "Ledin vilkkuminen poistettu käytöstä"
|
"label": "Ledin vilkkuminen poistettu käytöstä"
|
||||||
},
|
},
|
||||||
"nodeInfoBroadcastInterval": {
|
"nodeInfoBroadcastInterval": {
|
||||||
"description": "Kuinka usein laitteen tiedot lähetetään verkkoon",
|
"description": "Kuinka usein laitteen tiedot lähetetään verkkoon",
|
||||||
"label": "Laitteen tietojen lähetyksen aikaväli"
|
"label": "Laitteen tietojen lähetyksen aikaväli"
|
||||||
},
|
},
|
||||||
"posixTimezone": {
|
"posixTimezone": {
|
||||||
"description": "POSIX-aikavyöhykkeen merkkijono laitetta varten",
|
"description": "POSIX-aikavyöhykkeen merkkijono laitetta varten",
|
||||||
"label": "POSIX-aikavyöhyke"
|
"label": "POSIX-aikavyöhyke"
|
||||||
},
|
},
|
||||||
"rebroadcastMode": {
|
"rebroadcastMode": {
|
||||||
"description": "Kuinka uudelleenlähetyksiä käsitellään",
|
"description": "Kuinka uudelleenlähetyksiä käsitellään",
|
||||||
"label": "Uudelleenlähetyksen tila"
|
"label": "Uudelleenlähetyksen tila"
|
||||||
},
|
},
|
||||||
"role": {
|
"role": {
|
||||||
"description": "Mikä rooli laitteella on mesh-verkossa",
|
"description": "Mikä rooli laitteella on mesh-verkossa",
|
||||||
"label": "Rooli"
|
"label": "Rooli"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"bluetooth": {
|
"bluetooth": {
|
||||||
"title": "Bluetooth asetukset",
|
"title": "Bluetooth asetukset",
|
||||||
"description": "Bluetooth moduulin asetukset",
|
"description": "Bluetooth moduulin asetukset",
|
||||||
"note": "Huomautus: Jotkin laitteet (ESP32) eivät voi käyttää bluetoothia sekä WiFiä samanaikaisesti.",
|
"note": "Huomautus: Jotkin laitteet (ESP32) eivät voi käyttää bluetoothia sekä WiFiä samanaikaisesti.",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"description": "Ota Bluetooth käyttöön tai poista käytöstä",
|
"description": "Ota Bluetooth käyttöön tai poista käytöstä",
|
||||||
"label": "Käytössä"
|
"label": "Käytössä"
|
||||||
},
|
},
|
||||||
"pairingMode": {
|
"pairingMode": {
|
||||||
"description": "PIN-koodin valinnan käyttäytyminen.",
|
"description": "PIN-koodin valinnan käyttäytyminen.",
|
||||||
"label": "Paritustila"
|
"label": "Paritustila"
|
||||||
},
|
},
|
||||||
"pin": {
|
"pin": {
|
||||||
"description": "Bluetooth PIN-koodi, jota käytetään pariliitettäessä",
|
"description": "Bluetooth PIN-koodi, jota käytetään pariliitettäessä",
|
||||||
"label": "PIN"
|
"label": "PIN"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"display": {
|
"display": {
|
||||||
"description": "Laitteen näytön asetukset",
|
"description": "Laitteen näytön asetukset",
|
||||||
"title": "Näyttöasetukset",
|
"title": "Näyttöasetukset",
|
||||||
"headingBold": {
|
"headingBold": {
|
||||||
"description": "Lihavoi otsikkoteksti",
|
"description": "Lihavoi otsikkoteksti",
|
||||||
"label": "Lihavoitu otsikko"
|
"label": "Lihavoitu otsikko"
|
||||||
},
|
},
|
||||||
"carouselDelay": {
|
"carouselDelay": {
|
||||||
"description": "Kuinka nopeasti ikkunat kulkevat",
|
"description": "Kuinka nopeasti ikkunat kulkevat",
|
||||||
"label": "Karusellin Viive"
|
"label": "Karusellin Viive"
|
||||||
},
|
},
|
||||||
"compassNorthTop": {
|
"compassNorthTop": {
|
||||||
"description": "Kiinnitä pohjoinen kompassin yläreunaan",
|
"description": "Kiinnitä pohjoinen kompassin yläreunaan",
|
||||||
"label": "Kompassin pohjoinen ylhäällä"
|
"label": "Kompassin pohjoinen ylhäällä"
|
||||||
},
|
},
|
||||||
"displayMode": {
|
"displayMode": {
|
||||||
"description": "Näytön asettelun vaihtoehdot",
|
"description": "Näytön asettelun vaihtoehdot",
|
||||||
"label": "Näyttötila"
|
"label": "Näyttötila"
|
||||||
},
|
},
|
||||||
"displayUnits": {
|
"displayUnits": {
|
||||||
"description": "Näytä metriset tai imperiaaliset yksiköt",
|
"description": "Näytä metriset tai imperiaaliset yksiköt",
|
||||||
"label": "Näyttöyksiköt"
|
"label": "Näyttöyksiköt"
|
||||||
},
|
},
|
||||||
"flipScreen": {
|
"flipScreen": {
|
||||||
"description": "Käännä näyttöä 180 astetta",
|
"description": "Käännä näyttöä 180 astetta",
|
||||||
"label": "Käännä näyttö"
|
"label": "Käännä näyttö"
|
||||||
},
|
},
|
||||||
"gpsDisplayUnits": {
|
"gpsDisplayUnits": {
|
||||||
"description": "Koordinaattien näyttömuoto",
|
"description": "Koordinaattien näyttömuoto",
|
||||||
"label": "GPS näyttöyksiköt"
|
"label": "GPS näyttöyksiköt"
|
||||||
},
|
},
|
||||||
"oledType": {
|
"oledType": {
|
||||||
"description": "Laitteeseen liitetyn OLED-näytön tyyppi",
|
"description": "Laitteeseen liitetyn OLED-näytön tyyppi",
|
||||||
"label": "OLED-tyyppi"
|
"label": "OLED-tyyppi"
|
||||||
},
|
},
|
||||||
"screenTimeout": {
|
"screenTimeout": {
|
||||||
"description": "Sammuta näyttö tämän ajan jälkeen",
|
"description": "Sammuta näyttö tämän ajan jälkeen",
|
||||||
"label": "Näytön aikakatkaisu"
|
"label": "Näytön aikakatkaisu"
|
||||||
},
|
},
|
||||||
"twelveHourClock": {
|
"twelveHourClock": {
|
||||||
"description": "Käytä 12 tunnin kelloa",
|
"description": "Käytä 12 tunnin kelloa",
|
||||||
"label": "12 tunnin kello"
|
"label": "12 tunnin kello"
|
||||||
},
|
},
|
||||||
"wakeOnTapOrMotion": {
|
"wakeOnTapOrMotion": {
|
||||||
"description": "Herätä laite napauttamalla tai liikkeestä",
|
"description": "Herätä laite napauttamalla tai liikkeestä",
|
||||||
"label": "Herätä napauttamalla tai liikkeellä"
|
"label": "Herätä napauttamalla tai liikkeellä"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lora": {
|
"lora": {
|
||||||
"title": "Mesh-verkon asetukset",
|
"title": "Mesh-verkon asetukset",
|
||||||
"description": "LoRa-verkon asetukset",
|
"description": "LoRa-verkon asetukset",
|
||||||
"bandwidth": {
|
"bandwidth": {
|
||||||
"description": "Kanavan kaistanleveys MHz",
|
"description": "Kanavan kaistanleveys MHz",
|
||||||
"label": "Kaistanleveys"
|
"label": "Kaistanleveys"
|
||||||
},
|
},
|
||||||
"boostedRxGain": {
|
"boostedRxGain": {
|
||||||
"description": "RX tehostettu vahvistus",
|
"description": "RX tehostettu vahvistus",
|
||||||
"label": "RX tehostettu vahvistus"
|
"label": "RX tehostettu vahvistus"
|
||||||
},
|
},
|
||||||
"codingRate": {
|
"codingRate": {
|
||||||
"description": "Koodausnopeuden nimittäjä",
|
"description": "Koodausnopeuden nimittäjä",
|
||||||
"label": "Koodausnopeus"
|
"label": "Koodausnopeus"
|
||||||
},
|
},
|
||||||
"frequencyOffset": {
|
"frequencyOffset": {
|
||||||
"description": "Taajuuskorjaus kalibrointivirheiden korjaamiseksi",
|
"description": "Taajuuskorjaus kalibrointivirheiden korjaamiseksi",
|
||||||
"label": "Taajuuspoikkeama"
|
"label": "Taajuuspoikkeama"
|
||||||
},
|
},
|
||||||
"frequencySlot": {
|
"frequencySlot": {
|
||||||
"description": "LoRa-taajuuden kanavanumero",
|
"description": "LoRa-taajuuden kanavanumero",
|
||||||
"label": "Taajuuspaikka"
|
"label": "Taajuuspaikka"
|
||||||
},
|
},
|
||||||
"hopLimit": {
|
"hopLimit": {
|
||||||
"description": "Maksimimäärä hyppyjä",
|
"description": "Maksimimäärä hyppyjä",
|
||||||
"label": "Hyppyraja"
|
"label": "Hyppyraja"
|
||||||
},
|
},
|
||||||
"ignoreMqtt": {
|
"ignoreMqtt": {
|
||||||
"description": "Älä välitä MQTT-viestejä mesh-verkon yli",
|
"description": "Älä välitä MQTT-viestejä mesh-verkon yli",
|
||||||
"label": "Ohita MQTT"
|
"label": "Ohita MQTT"
|
||||||
},
|
},
|
||||||
"modemPreset": {
|
"modemPreset": {
|
||||||
"description": "Käytössä olevan modeemin esiasetus",
|
"description": "Käytössä olevan modeemin esiasetus",
|
||||||
"label": "Modeemin esiasetus"
|
"label": "Modeemin esiasetus"
|
||||||
},
|
},
|
||||||
"okToMqtt": {
|
"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",
|
"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ä"
|
"label": "MQTT päällä"
|
||||||
},
|
},
|
||||||
"overrideDutyCycle": {
|
"overrideDutyCycle": {
|
||||||
"description": "Ohita käyttöaste (Duty Cycle)",
|
"description": "Ohita käyttöaste (Duty Cycle)",
|
||||||
"label": "Ohita käyttöaste (Duty Cycle)"
|
"label": "Ohita käyttöaste (Duty Cycle)"
|
||||||
},
|
},
|
||||||
"overrideFrequency": {
|
"overrideFrequency": {
|
||||||
"description": "Käytä mukautettua taajuutta",
|
"description": "Käytä mukautettua taajuutta",
|
||||||
"label": "Mukautettu taajuus"
|
"label": "Mukautettu taajuus"
|
||||||
},
|
},
|
||||||
"region": {
|
"region": {
|
||||||
"description": "Asettaa alueen laitteelle",
|
"description": "Asettaa alueen laitteelle",
|
||||||
"label": "Alue"
|
"label": "Alue"
|
||||||
},
|
},
|
||||||
"spreadingFactor": {
|
"spreadingFactor": {
|
||||||
"description": "Ilmaisee symbolia kohden lähetettävien taajuuksien määrän",
|
"description": "Ilmaisee symbolia kohden lähetettävien taajuuksien määrän",
|
||||||
"label": "Levennyskerroin"
|
"label": "Levennyskerroin"
|
||||||
},
|
},
|
||||||
"transmitEnabled": {
|
"transmitEnabled": {
|
||||||
"description": "LoRa-radion lähetyksen (TX) käyttöönotto tai poiskytkentä",
|
"description": "LoRa-radion lähetyksen (TX) käyttöönotto tai poiskytkentä",
|
||||||
"label": "Lähetys käytössä"
|
"label": "Lähetys käytössä"
|
||||||
},
|
},
|
||||||
"transmitPower": {
|
"transmitPower": {
|
||||||
"description": "Suurin lähetysteho",
|
"description": "Suurin lähetysteho",
|
||||||
"label": "Lähetysteho"
|
"label": "Lähetysteho"
|
||||||
},
|
},
|
||||||
"usePreset": {
|
"usePreset": {
|
||||||
"description": "Käytä ennalta määriteltyä modeemin esiasetusta",
|
"description": "Käytä ennalta määriteltyä modeemin esiasetusta",
|
||||||
"label": "Käytä esiasetusta"
|
"label": "Käytä esiasetusta"
|
||||||
},
|
},
|
||||||
"meshSettings": {
|
"meshSettings": {
|
||||||
"description": "LoRa-verkon asetukset",
|
"description": "LoRa-verkon asetukset",
|
||||||
"label": "Mesh-verkon asetukset"
|
"label": "Mesh-verkon asetukset"
|
||||||
},
|
},
|
||||||
"waveformSettings": {
|
"waveformSettings": {
|
||||||
"description": "LoRa-aaltomuodon asetukset",
|
"description": "LoRa-aaltomuodon asetukset",
|
||||||
"label": "Signaalimuodon asetukset"
|
"label": "Signaalimuodon asetukset"
|
||||||
},
|
},
|
||||||
"radioSettings": {
|
"radioSettings": {
|
||||||
"label": "Radioasetukset",
|
"label": "Radioasetukset",
|
||||||
"description": "LoRa-laitteen asetukset"
|
"description": "LoRa-laitteen asetukset"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "WiFi-asetukset",
|
"title": "WiFi-asetukset",
|
||||||
"description": "WiFi-radion asetukset",
|
"description": "WiFi-radion asetukset",
|
||||||
"note": "Huomautus: Jotkin laitteet (ESP32) eivät voi käyttää sekä Bluetoothia että WiFiä samanaikaisesti.",
|
"note": "Huomautus: Jotkin laitteet (ESP32) eivät voi käyttää sekä Bluetoothia että WiFiä samanaikaisesti.",
|
||||||
"addressMode": {
|
"addressMode": {
|
||||||
"description": "Osoitteen määrityksen valinta",
|
"description": "Osoitteen määrityksen valinta",
|
||||||
"label": "Osoitetila"
|
"label": "Osoitetila"
|
||||||
},
|
},
|
||||||
"dns": {
|
"dns": {
|
||||||
"description": "DNS-palvelin",
|
"description": "DNS-palvelin",
|
||||||
"label": "DNS"
|
"label": "DNS"
|
||||||
},
|
},
|
||||||
"ethernetEnabled": {
|
"ethernetEnabled": {
|
||||||
"description": "Ota käyttöön tai poista käytöstä ethernet-portti",
|
"description": "Ota käyttöön tai poista käytöstä ethernet-portti",
|
||||||
"label": "Käytössä"
|
"label": "Käytössä"
|
||||||
},
|
},
|
||||||
"gateway": {
|
"gateway": {
|
||||||
"description": "Oletusyhdyskäytävä",
|
"description": "Oletusyhdyskäytävä",
|
||||||
"label": "Yhdyskäytävä"
|
"label": "Yhdyskäytävä"
|
||||||
},
|
},
|
||||||
"ip": {
|
"ip": {
|
||||||
"description": "IP-osoite",
|
"description": "IP-osoite",
|
||||||
"label": "IP"
|
"label": "IP"
|
||||||
},
|
},
|
||||||
"psk": {
|
"psk": {
|
||||||
"description": "Verkon salasana",
|
"description": "Verkon salasana",
|
||||||
"label": "PSK"
|
"label": "PSK"
|
||||||
},
|
},
|
||||||
"ssid": {
|
"ssid": {
|
||||||
"description": "Verkon nimi",
|
"description": "Verkon nimi",
|
||||||
"label": "SSID"
|
"label": "SSID"
|
||||||
},
|
},
|
||||||
"subnet": {
|
"subnet": {
|
||||||
"description": "Aliverkon peite",
|
"description": "Aliverkon peite",
|
||||||
"label": "Aliverkko"
|
"label": "Aliverkko"
|
||||||
},
|
},
|
||||||
"wifiEnabled": {
|
"wifiEnabled": {
|
||||||
"description": "Ota WiFi käyttöön tai poista se käytöstä",
|
"description": "Ota WiFi käyttöön tai poista se käytöstä",
|
||||||
"label": "Käytössä"
|
"label": "Käytössä"
|
||||||
},
|
},
|
||||||
"meshViaUdp": {
|
"meshViaUdp": {
|
||||||
"label": "Mesh UDP:n kautta"
|
"label": "Mesh UDP:n kautta"
|
||||||
},
|
},
|
||||||
"ntpServer": {
|
"ntpServer": {
|
||||||
"label": "NTP-palvelin"
|
"label": "NTP-palvelin"
|
||||||
},
|
},
|
||||||
"rsyslogServer": {
|
"rsyslogServer": {
|
||||||
"label": "Rsyslog-palvelin"
|
"label": "Rsyslog-palvelin"
|
||||||
},
|
},
|
||||||
"ethernetConfigSettings": {
|
"ethernetConfigSettings": {
|
||||||
"description": "Ethernet-portin asetukset",
|
"description": "Ethernet-portin asetukset",
|
||||||
"label": "Ethernet-asetukset"
|
"label": "Ethernet-asetukset"
|
||||||
},
|
},
|
||||||
"ipConfigSettings": {
|
"ipConfigSettings": {
|
||||||
"description": "IP-osoitteen asetukset",
|
"description": "IP-osoitteen asetukset",
|
||||||
"label": "IP-osoitteen asetukset"
|
"label": "IP-osoitteen asetukset"
|
||||||
},
|
},
|
||||||
"ntpConfigSettings": {
|
"ntpConfigSettings": {
|
||||||
"description": "NTP-asetukset",
|
"description": "NTP-asetukset",
|
||||||
"label": "NTP-asetukset"
|
"label": "NTP-asetukset"
|
||||||
},
|
},
|
||||||
"rsyslogConfigSettings": {
|
"rsyslogConfigSettings": {
|
||||||
"description": "Rsyslog määritykset",
|
"description": "Rsyslog määritykset",
|
||||||
"label": "Rsyslog määritykset"
|
"label": "Rsyslog määritykset"
|
||||||
},
|
},
|
||||||
"udpConfigSettings": {
|
"udpConfigSettings": {
|
||||||
"description": "UDP-yhdeyden asetukset",
|
"description": "UDP-yhdeyden asetukset",
|
||||||
"label": "UDP-asetukset"
|
"label": "UDP-asetukset"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"position": {
|
"position": {
|
||||||
"title": "Sijainnin asetukset",
|
"title": "Sijainnin asetukset",
|
||||||
"description": "Sijaintimoduulin asetukset",
|
"description": "Sijaintimoduulin asetukset",
|
||||||
"broadcastInterval": {
|
"broadcastInterval": {
|
||||||
"description": "Kuinka usein sijainti lähetetään mesh-verkon yli",
|
"description": "Kuinka usein sijainti lähetetään mesh-verkon yli",
|
||||||
"label": "Lähetyksen aikaväli"
|
"label": "Lähetyksen aikaväli"
|
||||||
},
|
},
|
||||||
"enablePin": {
|
"enablePin": {
|
||||||
"description": "GPS-moduulin käyttöönottopinnin korvaus",
|
"description": "GPS-moduulin käyttöönottopinnin korvaus",
|
||||||
"label": "Ota pinni käytöön"
|
"label": "Ota pinni käytöön"
|
||||||
},
|
},
|
||||||
"fixedPosition": {
|
"fixedPosition": {
|
||||||
"description": "Älä raportoi GPS-sijaintia, vaan käytä manuaalisesti määritettyä sijaintia",
|
"description": "Älä raportoi GPS-sijaintia, vaan käytä manuaalisesti määritettyä sijaintia",
|
||||||
"label": "Kiinteä sijainti"
|
"label": "Kiinteä sijainti"
|
||||||
},
|
},
|
||||||
"gpsMode": {
|
"gpsMode": {
|
||||||
"description": "Määritä, onko laitteen GPS käytössä, pois päältä vai puuttuuko se kokonaan",
|
"description": "Määritä, onko laitteen GPS käytössä, pois päältä vai puuttuuko se kokonaan",
|
||||||
"label": "GSP-tila"
|
"label": "GSP-tila"
|
||||||
},
|
},
|
||||||
"gpsUpdateInterval": {
|
"gpsUpdateInterval": {
|
||||||
"description": "Kuinka usein GPS-paikannus suoritetaan",
|
"description": "Kuinka usein GPS-paikannus suoritetaan",
|
||||||
"label": "GPS-päivitysväli"
|
"label": "GPS-päivitysväli"
|
||||||
},
|
},
|
||||||
"positionFlags": {
|
"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.",
|
"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"
|
"label": "Sijaintimerkinnät"
|
||||||
},
|
},
|
||||||
"receivePin": {
|
"receivePin": {
|
||||||
"description": "GPS-moduulin käyttöönottopinnin korvaus",
|
"description": "GPS-moduulin käyttöönottopinnin korvaus",
|
||||||
"label": "Vastaanoton pinni"
|
"label": "Vastaanoton pinni"
|
||||||
},
|
},
|
||||||
"smartPositionEnabled": {
|
"smartPositionEnabled": {
|
||||||
"description": "Lähetä sijainti vain, kun sijainnissa on tapahtunut merkittävä muutos",
|
"description": "Lähetä sijainti vain, kun sijainnissa on tapahtunut merkittävä muutos",
|
||||||
"label": "Ota älykäs sijainti käyttöön"
|
"label": "Ota älykäs sijainti käyttöön"
|
||||||
},
|
},
|
||||||
"smartPositionMinDistance": {
|
"smartPositionMinDistance": {
|
||||||
"description": "Vähimmäisetäisyys (metreinä), joka on kuljettava ennen sijaintipäivityksen lähettämistä",
|
"description": "Vähimmäisetäisyys (metreinä), joka on kuljettava ennen sijaintipäivityksen lähettämistä",
|
||||||
"label": "Älykkään sijainnin minimietäisyys"
|
"label": "Älykkään sijainnin minimietäisyys"
|
||||||
},
|
},
|
||||||
"smartPositionMinInterval": {
|
"smartPositionMinInterval": {
|
||||||
"description": "Lyhin aikaväli (sekunteina), joka on kuluttava ennen sijaintipäivityksen lähettämistä",
|
"description": "Lyhin aikaväli (sekunteina), joka on kuluttava ennen sijaintipäivityksen lähettämistä",
|
||||||
"label": "Älykkään sijainnin vähimmäisetäisyys"
|
"label": "Älykkään sijainnin vähimmäisetäisyys"
|
||||||
},
|
},
|
||||||
"transmitPin": {
|
"transmitPin": {
|
||||||
"description": "GPS-moduulin käyttöönottopinnin korvaus",
|
"description": "GPS-moduulin käyttöönottopinnin korvaus",
|
||||||
"label": "Lähetyksen pinni"
|
"label": "Lähetyksen pinni"
|
||||||
},
|
},
|
||||||
"intervalsSettings": {
|
"intervalsSettings": {
|
||||||
"description": "Kuinka usein sijaintipäivitykset lähetetään",
|
"description": "Kuinka usein sijaintipäivitykset lähetetään",
|
||||||
"label": "Aikaväli"
|
"label": "Aikaväli"
|
||||||
},
|
},
|
||||||
"flags": {
|
"flags": {
|
||||||
"placeholder": "Valitse sijaintiasetukset...",
|
"placeholder": "Valitse sijaintiasetukset...",
|
||||||
"altitude": "Korkeus",
|
"altitude": "Korkeus",
|
||||||
"altitudeGeoidalSeparation": "Korkeuden geoidinen erotus",
|
"altitudeGeoidalSeparation": "Korkeuden geoidinen erotus",
|
||||||
"altitudeMsl": "Korkeus on mitattu merenpinnan tasosta",
|
"altitudeMsl": "Korkeus on mitattu merenpinnan tasosta",
|
||||||
"dop": "Tarkkuuden heikkenemä (DOP), oletuksena käytetään PDOP-arvoa",
|
"dop": "Tarkkuuden heikkenemä (DOP), oletuksena käytetään PDOP-arvoa",
|
||||||
"hdopVdop": "Jos DOP on asetettu, käytä HDOP- ja VDOP-arvoja PDOP:n sijaan",
|
"hdopVdop": "Jos DOP on asetettu, käytä HDOP- ja VDOP-arvoja PDOP:n sijaan",
|
||||||
"numSatellites": "Satelliittien määrä",
|
"numSatellites": "Satelliittien määrä",
|
||||||
"sequenceNumber": "Sekvenssinumero",
|
"sequenceNumber": "Sekvenssinumero",
|
||||||
"timestamp": "Aikaleima",
|
"timestamp": "Aikaleima",
|
||||||
"unset": "Ei yhdistetty",
|
"unset": "Ei yhdistetty",
|
||||||
"vehicleHeading": "Ajoneuvon suunta",
|
"vehicleHeading": "Ajoneuvon suunta",
|
||||||
"vehicleSpeed": "Ajoneuvon nopeus"
|
"vehicleSpeed": "Ajoneuvon nopeus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"power": {
|
"power": {
|
||||||
"adcMultiplierOverride": {
|
"adcMultiplierOverride": {
|
||||||
"description": "Käytetään akun jännitteen lukeman säätämiseen",
|
"description": "Käytetään akun jännitteen lukeman säätämiseen",
|
||||||
"label": "Korvaava AD-muuntimen kerroin"
|
"label": "Korvaava AD-muuntimen kerroin"
|
||||||
},
|
},
|
||||||
"ina219Address": {
|
"ina219Address": {
|
||||||
"description": "Akkunäytön INA219 osoite",
|
"description": "Akkunäytön INA219 osoite",
|
||||||
"label": "INA219 Osoite"
|
"label": "INA219 Osoite"
|
||||||
},
|
},
|
||||||
"lightSleepDuration": {
|
"lightSleepDuration": {
|
||||||
"description": "Kuinka kauan laite on kevyessä lepotilassa",
|
"description": "Kuinka kauan laite on kevyessä lepotilassa",
|
||||||
"label": "Kevyen lepotilan kesto"
|
"label": "Kevyen lepotilan kesto"
|
||||||
},
|
},
|
||||||
"minimumWakeTime": {
|
"minimumWakeTime": {
|
||||||
"description": "Vähimmäisaika, jonka laite pysyy hereillä paketin vastaanoton jälkeen",
|
"description": "Vähimmäisaika, jonka laite pysyy hereillä paketin vastaanoton jälkeen",
|
||||||
"label": "Minimi heräämisaika"
|
"label": "Minimi heräämisaika"
|
||||||
},
|
},
|
||||||
"noConnectionBluetoothDisabled": {
|
"noConnectionBluetoothDisabled": {
|
||||||
"description": "Jos laite ei saa Bluetooth-yhteyttä, BLE-radio poistetaan käytöstä tämän ajan kuluttua",
|
"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ä"
|
"label": "Ei yhteyttä. Bluetooth on pois käytöstä"
|
||||||
},
|
},
|
||||||
"powerSavingEnabled": {
|
"powerSavingEnabled": {
|
||||||
"description": "Valitse, jos laite saa virtaa matalavirtalähteestä (esim. aurinkopaneeli), jolloin virrankulutusta minimoidaan mahdollisimman paljon.",
|
"description": "Valitse, jos laite saa virtaa matalavirtalähteestä (esim. aurinkopaneeli), jolloin virrankulutusta minimoidaan mahdollisimman paljon.",
|
||||||
"label": "Ota virransäästötila käyttöön"
|
"label": "Ota virransäästötila käyttöön"
|
||||||
},
|
},
|
||||||
"shutdownOnBatteryDelay": {
|
"shutdownOnBatteryDelay": {
|
||||||
"description": "Sammuta laite automaattisesti tämän ajan kuluttua akkukäytöllä, 0 tarkoittaa toistaiseksi päällä",
|
"description": "Sammuta laite automaattisesti tämän ajan kuluttua akkukäytöllä, 0 tarkoittaa toistaiseksi päällä",
|
||||||
"label": "Viive laitteen sammuttamisessa akkukäytöllä"
|
"label": "Viive laitteen sammuttamisessa akkukäytöllä"
|
||||||
},
|
},
|
||||||
"superDeepSleepDuration": {
|
"superDeepSleepDuration": {
|
||||||
"description": "Kuinka pitkään laite on supersyvässä lepotilassa",
|
"description": "Kuinka pitkään laite on supersyvässä lepotilassa",
|
||||||
"label": "Supersyvän lepotilan kesto"
|
"label": "Supersyvän lepotilan kesto"
|
||||||
},
|
},
|
||||||
"powerConfigSettings": {
|
"powerConfigSettings": {
|
||||||
"description": "Virtamoduulin asetukset",
|
"description": "Virtamoduulin asetukset",
|
||||||
"label": "Virran asetukset"
|
"label": "Virran asetukset"
|
||||||
},
|
},
|
||||||
"sleepSettings": {
|
"sleepSettings": {
|
||||||
"description": "Virtamoduulin lepotila-asetukset",
|
"description": "Virtamoduulin lepotila-asetukset",
|
||||||
"label": "Lepotilan asetukset"
|
"label": "Lepotilan asetukset"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"description": "Turvallisuuskokoonpanon asetukset",
|
"description": "Turvallisuuskokoonpanon asetukset",
|
||||||
"title": "Turvallisuusasetukset",
|
"title": "Turvallisuusasetukset",
|
||||||
"button_backupKey": "Varmuuskopioi avain",
|
"button_backupKey": "Varmuuskopioi avain",
|
||||||
"adminChannelEnabled": {
|
"adminChannelEnabled": {
|
||||||
"description": "Salli saapuva laitteen ohjaus suojaamattoman vanhan admin-kanavan kautta",
|
"description": "Salli saapuva laitteen ohjaus suojaamattoman vanhan admin-kanavan kautta",
|
||||||
"label": "Salli vanha admin ylläpitäjä"
|
"label": "Salli vanha admin ylläpitäjä"
|
||||||
},
|
},
|
||||||
"enableDebugLogApi": {
|
"enableDebugLogApi": {
|
||||||
"description": "Lähetä reaaliaikainen debug-loki sarjaportin kautta, katso ja vie laitteen lokitiedostot, joista sijaintitiedot on poistettu, Bluetoothin kautta",
|
"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"
|
"label": "Ota käyttöön virheenkorjauslokin API-rajapinta"
|
||||||
},
|
},
|
||||||
"managed": {
|
"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ä.",
|
"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"
|
"label": "Hallinnoitu"
|
||||||
},
|
},
|
||||||
"privateKey": {
|
"privateKey": {
|
||||||
"description": "Käytetään jaetun avaimen luomiseen etälaitteen kanssa",
|
"description": "Käytetään jaetun avaimen luomiseen etälaitteen kanssa",
|
||||||
"label": "Yksityinen avain"
|
"label": "Yksityinen avain"
|
||||||
},
|
},
|
||||||
"publicKey": {
|
"publicKey": {
|
||||||
"description": "Lähetetään muille mesh-verkon laitteille, jotta ne voivat laskea jaetun salaisen avaimen",
|
"description": "Lähetetään muille mesh-verkon laitteille, jotta ne voivat laskea jaetun salaisen avaimen",
|
||||||
"label": "Julkinen avain"
|
"label": "Julkinen avain"
|
||||||
},
|
},
|
||||||
"primaryAdminKey": {
|
"primaryAdminKey": {
|
||||||
"description": "Ensisijainen julkinen avain, jolla on oikeus lähettää hallintaviestejä tälle laitteelle",
|
"description": "Ensisijainen julkinen avain, jolla on oikeus lähettää hallintaviestejä tälle laitteelle",
|
||||||
"label": "Ensisijainen järjestelmänvalvojan avain"
|
"label": "Ensisijainen järjestelmänvalvojan avain"
|
||||||
},
|
},
|
||||||
"secondaryAdminKey": {
|
"secondaryAdminKey": {
|
||||||
"description": "Toissijainen julkinen avain, jolla on oikeus lähettää hallintaviestejä tälle laitteelle",
|
"description": "Toissijainen julkinen avain, jolla on oikeus lähettää hallintaviestejä tälle laitteelle",
|
||||||
"label": "Toissijainen järjestelmänvalvojan avain"
|
"label": "Toissijainen järjestelmänvalvojan avain"
|
||||||
},
|
},
|
||||||
"serialOutputEnabled": {
|
"serialOutputEnabled": {
|
||||||
"description": "Sarjakonsoli Stream API:n yli",
|
"description": "Sarjakonsoli Stream API:n yli",
|
||||||
"label": "Sarjaulostulo Käytössä"
|
"label": "Sarjaulostulo Käytössä"
|
||||||
},
|
},
|
||||||
"tertiaryAdminKey": {
|
"tertiaryAdminKey": {
|
||||||
"description": "Kolmas julkinen avain, jolla on oikeus lähettää hallintaviestejä tälle laitteelle",
|
"description": "Kolmas julkinen avain, jolla on oikeus lähettää hallintaviestejä tälle laitteelle",
|
||||||
"label": "Kolmas järjestelmänvalvojan hallinta-avain"
|
"label": "Kolmas järjestelmänvalvojan hallinta-avain"
|
||||||
},
|
},
|
||||||
"adminSettings": {
|
"adminSettings": {
|
||||||
"description": "Järjestelmänvalvojan asetukset",
|
"description": "Järjestelmänvalvojan asetukset",
|
||||||
"label": "Ylläpitäjän asetukset"
|
"label": "Ylläpitäjän asetukset"
|
||||||
},
|
},
|
||||||
"loggingSettings": {
|
"loggingSettings": {
|
||||||
"description": "Kirjautumisen asetukset",
|
"description": "Kirjautumisen asetukset",
|
||||||
"label": "Kirjautumisen asetukset"
|
"label": "Kirjautumisen asetukset"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,171 +1,171 @@
|
|||||||
{
|
{
|
||||||
"deleteMessages": {
|
"deleteMessages": {
|
||||||
"description": "Tämä toiminto poistaa kaiken viestihistorian. Toimintoa ei voi perua. Haluatko varmasti jatkaa?",
|
"description": "Tämä toiminto poistaa kaiken viestihistorian. Toimintoa ei voi perua. Haluatko varmasti jatkaa?",
|
||||||
"title": "Tyhjennä kaikki viestit"
|
"title": "Tyhjennä kaikki viestit"
|
||||||
},
|
},
|
||||||
"deviceName": {
|
"deviceName": {
|
||||||
"description": "Laite käynnistyy uudelleen, kun asetus on tallennettu.",
|
"description": "Laite käynnistyy uudelleen, kun asetus on tallennettu.",
|
||||||
"longName": "Pitkä nimi",
|
"longName": "Pitkä nimi",
|
||||||
"shortName": "Lyhytnimi",
|
"shortName": "Lyhytnimi",
|
||||||
"title": "Vaihda laitteen nimi"
|
"title": "Vaihda laitteen nimi"
|
||||||
},
|
},
|
||||||
"import": {
|
"import": {
|
||||||
"description": "Nykyinen LoRa-asetus ylikirjoitetaan.",
|
"description": "Nykyinen LoRa-asetus ylikirjoitetaan.",
|
||||||
"error": {
|
"error": {
|
||||||
"invalidUrl": "Virheellinen Meshtastic verkko-osoite"
|
"invalidUrl": "Virheellinen Meshtastic verkko-osoite"
|
||||||
},
|
},
|
||||||
"channelPrefix": "Kanava: ",
|
"channelPrefix": "Kanava: ",
|
||||||
"channelSetUrl": "Kanavan asetus / QR-koodin URL-osoite",
|
"channelSetUrl": "Kanavan asetus / QR-koodin URL-osoite",
|
||||||
"channels": "Kanavat:",
|
"channels": "Kanavat:",
|
||||||
"usePreset": "Käytä esiasetusta?",
|
"usePreset": "Käytä esiasetusta?",
|
||||||
"title": "Tuo kanava-asetukset"
|
"title": "Tuo kanava-asetukset"
|
||||||
},
|
},
|
||||||
"locationResponse": {
|
"locationResponse": {
|
||||||
"altitude": "Korkeus: ",
|
"altitude": "Korkeus: ",
|
||||||
"coordinates": "Koordinaatit: ",
|
"coordinates": "Koordinaatit: ",
|
||||||
"title": "Sijainti: {{identifier}}"
|
"title": "Sijainti: {{identifier}}"
|
||||||
},
|
},
|
||||||
"pkiRegenerateDialog": {
|
"pkiRegenerateDialog": {
|
||||||
"title": "Luodaanko ennalta jaettu avain uudelleen?",
|
"title": "Luodaanko ennalta jaettu avain uudelleen?",
|
||||||
"description": "Haluatko varmasti luoda ennalta jaetun avaimen uudelleen?",
|
"description": "Haluatko varmasti luoda ennalta jaetun avaimen uudelleen?",
|
||||||
"regenerate": "Luo uudelleen"
|
"regenerate": "Luo uudelleen"
|
||||||
},
|
},
|
||||||
"newDeviceDialog": {
|
"newDeviceDialog": {
|
||||||
"title": "Yhdistä uuteen laitteeseen",
|
"title": "Yhdistä uuteen laitteeseen",
|
||||||
"https": "https",
|
"https": "https",
|
||||||
"http": "http",
|
"http": "http",
|
||||||
"tabHttp": "HTTP",
|
"tabHttp": "HTTP",
|
||||||
"tabBluetooth": "Bluetooth",
|
"tabBluetooth": "Bluetooth",
|
||||||
"tabSerial": "Sarjaliitäntä",
|
"tabSerial": "Sarjaliitäntä",
|
||||||
"useHttps": "Käytä HTTPS",
|
"useHttps": "Käytä HTTPS",
|
||||||
"connecting": "Yhdistetään...",
|
"connecting": "Yhdistetään...",
|
||||||
"connect": "Yhdistä",
|
"connect": "Yhdistä",
|
||||||
"connectionFailedAlert": {
|
"connectionFailedAlert": {
|
||||||
"title": "Yhteys epäonnistui",
|
"title": "Yhteys epäonnistui",
|
||||||
"descriptionPrefix": "Laitteeseen ei saatu yhteyttä. ",
|
"descriptionPrefix": "Laitteeseen ei saatu yhteyttä. ",
|
||||||
"httpsHint": "Jos käytät HTTPS:ää, sinun on ehkä ensin hyväksyttävä itse allekirjoitettu varmenne. ",
|
"httpsHint": "Jos käytät HTTPS:ää, sinun on ehkä ensin hyväksyttävä itse allekirjoitettu varmenne. ",
|
||||||
"openLinkPrefix": "Avaa ",
|
"openLinkPrefix": "Avaa ",
|
||||||
"openLinkSuffix": " uuteen välilehteen",
|
"openLinkSuffix": " uuteen välilehteen",
|
||||||
"acceptTlsWarningSuffix": ", hyväksy mahdolliset TLS-varoitukset, jos niitä ilmenee ja yritä sitten uudelleen.",
|
"acceptTlsWarningSuffix": ", hyväksy mahdolliset TLS-varoitukset, jos niitä ilmenee ja yritä sitten uudelleen.",
|
||||||
"learnMoreLink": "Lue lisää"
|
"learnMoreLink": "Lue lisää"
|
||||||
},
|
},
|
||||||
"httpConnection": {
|
"httpConnection": {
|
||||||
"label": "IP-osoite / isäntänimi",
|
"label": "IP-osoite / isäntänimi",
|
||||||
"placeholder": "000.000.000 / meshtastinen.paikallinen"
|
"placeholder": "000.000.000 / meshtastinen.paikallinen"
|
||||||
},
|
},
|
||||||
"serialConnection": {
|
"serialConnection": {
|
||||||
"noDevicesPaired": "Yhtään laitetta ei ole vielä yhdistetty.",
|
"noDevicesPaired": "Yhtään laitetta ei ole vielä yhdistetty.",
|
||||||
"newDeviceButton": "Uusi laite",
|
"newDeviceButton": "Uusi laite",
|
||||||
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
|
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
|
||||||
},
|
},
|
||||||
"bluetoothConnection": {
|
"bluetoothConnection": {
|
||||||
"noDevicesPaired": "Yhtään laitetta ei ole vielä yhdistetty.",
|
"noDevicesPaired": "Yhtään laitetta ei ole vielä yhdistetty.",
|
||||||
"newDeviceButton": "Uusi laite"
|
"newDeviceButton": "Uusi laite"
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"requiresWebBluetooth": "Tämä yhteystyyppi vaatii <0>Web-sarjaportti bluetooth</0> -tuen. Käytä tuettua selainta, kuten Chromea tai Edgeä.",
|
"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ä.",
|
"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.",
|
"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."
|
"additionallyRequiresSecureContext": "Lisäksi se vaatii <0>suojatun yhteyden</0>. Yhdistä käyttämällä HTTPS:ää tai localhostia."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nodeDetails": {
|
"nodeDetails": {
|
||||||
"message": "Viesti",
|
"message": "Viesti",
|
||||||
"requestPosition": "Pyydä sijaintia",
|
"requestPosition": "Pyydä sijaintia",
|
||||||
"traceRoute": "Reitinselvitys",
|
"traceRoute": "Reitinselvitys",
|
||||||
"airTxUtilization": "Ilmatien TX käyttöaste",
|
"airTxUtilization": "Ilmatien TX käyttöaste",
|
||||||
"allRawMetrics": "Kaikki raakatiedot:",
|
"allRawMetrics": "Kaikki raakatiedot:",
|
||||||
"batteryLevel": "Akun varaus",
|
"batteryLevel": "Akun varaus",
|
||||||
"channelUtilization": "Kanavan käyttöaste",
|
"channelUtilization": "Kanavan käyttöaste",
|
||||||
"details": "Tiedot:",
|
"details": "Tiedot:",
|
||||||
"deviceMetrics": "Laitteen mittausloki:",
|
"deviceMetrics": "Laitteen mittausloki:",
|
||||||
"hardware": "Laitteisto: ",
|
"hardware": "Laitteisto: ",
|
||||||
"lastHeard": "Viimeksi kuultu: ",
|
"lastHeard": "Viimeksi kuultu: ",
|
||||||
"nodeHexPrefix": "Laitteen Hex: !",
|
"nodeHexPrefix": "Laitteen Hex: !",
|
||||||
"nodeNumber": "Laitteen numero: ",
|
"nodeNumber": "Laitteen numero: ",
|
||||||
"position": "Sijainti:",
|
"position": "Sijainti:",
|
||||||
"role": "Rooli: ",
|
"role": "Rooli: ",
|
||||||
"uptime": "Käyttöaika: ",
|
"uptime": "Käyttöaika: ",
|
||||||
"voltage": "Jännite",
|
"voltage": "Jännite",
|
||||||
"title": "Tiedot laitteelle {{identifier}}",
|
"title": "Tiedot laitteelle {{identifier}}",
|
||||||
"ignoreNode": "Älä huomioi laitetta",
|
"ignoreNode": "Älä huomioi laitetta",
|
||||||
"removeNode": "Poista laite",
|
"removeNode": "Poista laite",
|
||||||
"unignoreNode": "Poista laitteen ohitus käytöstä"
|
"unignoreNode": "Poista laitteen ohitus käytöstä"
|
||||||
},
|
},
|
||||||
"pkiBackup": {
|
"pkiBackup": {
|
||||||
"loseKeysWarning": "Jos menetät avaimesi, sinun täytyy palauttaa laite tehdasasetuksiin.",
|
"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!",
|
"secureBackup": "On tärkeää varmuuskopioida julkiset ja yksityiset avaimet ja säilyttää niiden varmuuskopioita turvallisesti!",
|
||||||
"footer": "=== AVAIMIEN LOPPU ===",
|
"footer": "=== AVAIMIEN LOPPU ===",
|
||||||
"header": "=== MESHTASTIC AVAIMET {{longName}} ({{shortName}}) LAITTEELLE ===",
|
"header": "=== MESHTASTIC AVAIMET {{longName}} ({{shortName}}) LAITTEELLE ===",
|
||||||
"privateKey": "Yksityinen avain:",
|
"privateKey": "Yksityinen avain:",
|
||||||
"publicKey": "Julkinen avain:",
|
"publicKey": "Julkinen avain:",
|
||||||
"fileName": "meshtastic_avaimet_{{longName}}_{{shortName}}.txt",
|
"fileName": "meshtastic_avaimet_{{longName}}_{{shortName}}.txt",
|
||||||
"title": "Varmuuskopioi avaimet"
|
"title": "Varmuuskopioi avaimet"
|
||||||
},
|
},
|
||||||
"pkiBackupReminder": {
|
"pkiBackupReminder": {
|
||||||
"description": "Suosittelemme avaintietojen säännöllistä varmuuskopiointia. Haluatko varmuuskopioida nyt?",
|
"description": "Suosittelemme avaintietojen säännöllistä varmuuskopiointia. Haluatko varmuuskopioida nyt?",
|
||||||
"title": "Varmuuskopion Muistutus",
|
"title": "Varmuuskopion Muistutus",
|
||||||
"remindLaterPrefix": "Muistuta minua",
|
"remindLaterPrefix": "Muistuta minua",
|
||||||
"remindNever": "Älä muistuta minua koskaan",
|
"remindNever": "Älä muistuta minua koskaan",
|
||||||
"backupNow": "Varmuuskopioi nyt"
|
"backupNow": "Varmuuskopioi nyt"
|
||||||
},
|
},
|
||||||
"pkiRegenerate": {
|
"pkiRegenerate": {
|
||||||
"description": "Haluatko varmasti luoda avainparin uudelleen?",
|
"description": "Haluatko varmasti luoda avainparin uudelleen?",
|
||||||
"title": "Luo avainpari uudelleen"
|
"title": "Luo avainpari uudelleen"
|
||||||
},
|
},
|
||||||
"qr": {
|
"qr": {
|
||||||
"addChannels": "Lisää kanavia",
|
"addChannels": "Lisää kanavia",
|
||||||
"replaceChannels": "Korvaa kanavia",
|
"replaceChannels": "Korvaa kanavia",
|
||||||
"description": "Nykyinen LoRa-kokoonpano tullaan myös jakamaan.",
|
"description": "Nykyinen LoRa-kokoonpano tullaan myös jakamaan.",
|
||||||
"sharableUrl": "Jaettava URL",
|
"sharableUrl": "Jaettava URL",
|
||||||
"title": "Generoi QR-koodi"
|
"title": "Generoi QR-koodi"
|
||||||
},
|
},
|
||||||
"rebootOta": {
|
"rebootOta": {
|
||||||
"title": "Ajasta uudelleenkäynnistys",
|
"title": "Ajasta uudelleenkäynnistys",
|
||||||
"description": "Käynnistä yhdistetty laite uudelleen viiveen jälkeen OTA-tilaan (langaton päivitys).",
|
"description": "Käynnistä yhdistetty laite uudelleen viiveen jälkeen OTA-tilaan (langaton päivitys).",
|
||||||
"enterDelay": "Anna viive (sekuntia)",
|
"enterDelay": "Anna viive (sekuntia)",
|
||||||
"scheduled": "Uudelleenkäynnistys on ajastettu"
|
"scheduled": "Uudelleenkäynnistys on ajastettu"
|
||||||
},
|
},
|
||||||
"reboot": {
|
"reboot": {
|
||||||
"title": "Ajasta uudelleenkäynnistys",
|
"title": "Ajasta uudelleenkäynnistys",
|
||||||
"description": "Käynnistä yhdistetty laite x minuutin jälkeen."
|
"description": "Käynnistä yhdistetty laite x minuutin jälkeen."
|
||||||
},
|
},
|
||||||
"refreshKeys": {
|
"refreshKeys": {
|
||||||
"description": {
|
"description": {
|
||||||
"acceptNewKeys": "Tämä poistaa laitteen laitteesta ja pyytää uusia avaimia.",
|
"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.",
|
"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: "
|
"unableToSendDmPrefix": "Laitteesi ei pysty lähettämään suoraa viestiä laitteelle: "
|
||||||
},
|
},
|
||||||
"acceptNewKeys": "Hyväksy uudet avaimet",
|
"acceptNewKeys": "Hyväksy uudet avaimet",
|
||||||
"title": "Avaimet eivät täsmää - {{identifier}}"
|
"title": "Avaimet eivät täsmää - {{identifier}}"
|
||||||
},
|
},
|
||||||
"removeNode": {
|
"removeNode": {
|
||||||
"description": "Haluatko varmasti poistaa tämän laitteen?",
|
"description": "Haluatko varmasti poistaa tämän laitteen?",
|
||||||
"title": "Poista laite?"
|
"title": "Poista laite?"
|
||||||
},
|
},
|
||||||
"shutdown": {
|
"shutdown": {
|
||||||
"title": "Ajasta sammutus",
|
"title": "Ajasta sammutus",
|
||||||
"description": "Sammuta yhdistetty laite x minuutin päästä."
|
"description": "Sammuta yhdistetty laite x minuutin päästä."
|
||||||
},
|
},
|
||||||
"traceRoute": {
|
"traceRoute": {
|
||||||
"routeToDestination": "Reitin määränpää:",
|
"routeToDestination": "Reitin määränpää:",
|
||||||
"routeBack": "Reitti takaisin:"
|
"routeBack": "Reitti takaisin:"
|
||||||
},
|
},
|
||||||
"tracerouteResponse": {
|
"tracerouteResponse": {
|
||||||
"title": "Reitinselvitys: {{identifier}}"
|
"title": "Reitinselvitys: {{identifier}}"
|
||||||
},
|
},
|
||||||
"unsafeRoles": {
|
"unsafeRoles": {
|
||||||
"confirmUnderstanding": "Kyllä, tiedän mitä teen",
|
"confirmUnderstanding": "Kyllä, tiedän mitä teen",
|
||||||
"conjunction": " ja blogikirjoitukset ",
|
"conjunction": " ja blogikirjoitukset ",
|
||||||
"postamble": " ja ymmärrän roolin muuttamisen vaikutukset.",
|
"postamble": " ja ymmärrän roolin muuttamisen vaikutukset.",
|
||||||
"preamble": "Olen lukenut ",
|
"preamble": "Olen lukenut ",
|
||||||
"choosingRightDeviceRole": "Valitse laitteelle oikea rooli",
|
"choosingRightDeviceRole": "Valitse laitteelle oikea rooli",
|
||||||
"deviceRoleDocumentation": "Roolien dokumentaatio laitteelle",
|
"deviceRoleDocumentation": "Roolien dokumentaatio laitteelle",
|
||||||
"title": "Oletko varma?"
|
"title": "Oletko varma?"
|
||||||
},
|
},
|
||||||
"managedMode": {
|
"managedMode": {
|
||||||
"confirmUnderstanding": "Kyllä, tiedän mitä teen",
|
"confirmUnderstanding": "Kyllä, tiedän mitä teen",
|
||||||
"title": "Oletko varma?",
|
"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."
|
"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."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,39 +1,39 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"title": "Viestit: {{chatName}}",
|
"title": "Viestit: {{chatName}}",
|
||||||
"placeholder": "Kirjoita viesti"
|
"placeholder": "Kirjoita viesti"
|
||||||
},
|
},
|
||||||
"emptyState": {
|
"emptyState": {
|
||||||
"title": "Valitse keskustelu",
|
"title": "Valitse keskustelu",
|
||||||
"text": "Ei vielä viestejä."
|
"text": "Ei vielä viestejä."
|
||||||
},
|
},
|
||||||
"selectChatPrompt": {
|
"selectChatPrompt": {
|
||||||
"text": "Valitse kanava tai laite aloittaaksesi viestinnän."
|
"text": "Valitse kanava tai laite aloittaaksesi viestinnän."
|
||||||
},
|
},
|
||||||
"sendMessage": {
|
"sendMessage": {
|
||||||
"placeholder": "Kirjoita viesti tähän...",
|
"placeholder": "Kirjoita viesti tähän...",
|
||||||
"sendButton": "Lähetä"
|
"sendButton": "Lähetä"
|
||||||
},
|
},
|
||||||
"actionsMenu": {
|
"actionsMenu": {
|
||||||
"addReactionLabel": "Lisää reaktio",
|
"addReactionLabel": "Lisää reaktio",
|
||||||
"replyLabel": "Vastaa"
|
"replyLabel": "Vastaa"
|
||||||
},
|
},
|
||||||
"deliveryStatus": {
|
"deliveryStatus": {
|
||||||
"delivered": {
|
"delivered": {
|
||||||
"label": "Viesti toimitettu",
|
"label": "Viesti toimitettu",
|
||||||
"displayText": "Viesti toimitettu"
|
"displayText": "Viesti toimitettu"
|
||||||
},
|
},
|
||||||
"failed": {
|
"failed": {
|
||||||
"label": "Viestin toimitus epäonnistui",
|
"label": "Viestin toimitus epäonnistui",
|
||||||
"displayText": "Toimitus epäonnistui"
|
"displayText": "Toimitus epäonnistui"
|
||||||
},
|
},
|
||||||
"unknown": {
|
"unknown": {
|
||||||
"label": "Viestin tila tuntematon",
|
"label": "Viestin tila tuntematon",
|
||||||
"displayText": "Tuntematon tila"
|
"displayText": "Tuntematon tila"
|
||||||
},
|
},
|
||||||
"waiting": {
|
"waiting": {
|
||||||
"label": "Lähetetään viestiä",
|
"label": "Lähetetään viestiä",
|
||||||
"displayText": "Odottaa toimitusta"
|
"displayText": "Odottaa toimitusta"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,448 +1,448 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"tabAmbientLighting": "Ympäristövalaistus",
|
"tabAmbientLighting": "Ympäristövalaistus",
|
||||||
"tabAudio": "Ääni",
|
"tabAudio": "Ääni",
|
||||||
"tabCannedMessage": "Ennalta asetettu",
|
"tabCannedMessage": "Ennalta asetettu",
|
||||||
"tabDetectionSensor": "Havaitsemisanturi",
|
"tabDetectionSensor": "Havaitsemisanturi",
|
||||||
"tabExternalNotification": "Ext-ilmoitus",
|
"tabExternalNotification": "Ext-ilmoitus",
|
||||||
"tabMqtt": "MQTT",
|
"tabMqtt": "MQTT",
|
||||||
"tabNeighborInfo": "Naapuritieto",
|
"tabNeighborInfo": "Naapuritieto",
|
||||||
"tabPaxcounter": "PAX-laskuri",
|
"tabPaxcounter": "PAX-laskuri",
|
||||||
"tabRangeTest": "Kuuluvuustesti",
|
"tabRangeTest": "Kuuluvuustesti",
|
||||||
"tabSerial": "Sarjaliitäntä",
|
"tabSerial": "Sarjaliitäntä",
|
||||||
"tabStoreAndForward": "S&V",
|
"tabStoreAndForward": "S&V",
|
||||||
"tabTelemetry": "Telemetria"
|
"tabTelemetry": "Telemetria"
|
||||||
},
|
},
|
||||||
"ambientLighting": {
|
"ambientLighting": {
|
||||||
"title": "Ympäristövalaistuksen asetukset",
|
"title": "Ympäristövalaistuksen asetukset",
|
||||||
"description": "Ympäristövalaistuksen moduulin asetukset",
|
"description": "Ympäristövalaistuksen moduulin asetukset",
|
||||||
"ledState": {
|
"ledState": {
|
||||||
"label": "Ledin tila",
|
"label": "Ledin tila",
|
||||||
"description": "Aseta ledi päälle tai pois päältä"
|
"description": "Aseta ledi päälle tai pois päältä"
|
||||||
},
|
},
|
||||||
"current": {
|
"current": {
|
||||||
"label": "Virta",
|
"label": "Virta",
|
||||||
"description": "Asettaa nykyisen ledin ulostulon. Oletus on 10"
|
"description": "Asettaa nykyisen ledin ulostulon. Oletus on 10"
|
||||||
},
|
},
|
||||||
"red": {
|
"red": {
|
||||||
"label": "Punainen",
|
"label": "Punainen",
|
||||||
"description": "Asettaa punaisen ledin tason. Arvot ovat 0-255"
|
"description": "Asettaa punaisen ledin tason. Arvot ovat 0-255"
|
||||||
},
|
},
|
||||||
"green": {
|
"green": {
|
||||||
"label": "Vihreä",
|
"label": "Vihreä",
|
||||||
"description": "Asettaa vihreän ledin tason. Arvot ovat 0-255"
|
"description": "Asettaa vihreän ledin tason. Arvot ovat 0-255"
|
||||||
},
|
},
|
||||||
"blue": {
|
"blue": {
|
||||||
"label": "Sininen",
|
"label": "Sininen",
|
||||||
"description": "Asettaa sinisen ledin tason. Arvot ovat 0-255"
|
"description": "Asettaa sinisen ledin tason. Arvot ovat 0-255"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"audio": {
|
"audio": {
|
||||||
"title": "Ääniasetukset",
|
"title": "Ääniasetukset",
|
||||||
"description": "Äänimoduulin asetukset",
|
"description": "Äänimoduulin asetukset",
|
||||||
"codec2Enabled": {
|
"codec2Enabled": {
|
||||||
"label": "Codec 2 käytössä",
|
"label": "Codec 2 käytössä",
|
||||||
"description": "Ota Codec 2 äänenkoodaus käyttöön"
|
"description": "Ota Codec 2 äänenkoodaus käyttöön"
|
||||||
},
|
},
|
||||||
"pttPin": {
|
"pttPin": {
|
||||||
"label": "PTT pinni",
|
"label": "PTT pinni",
|
||||||
"description": "PTT:lle käytettävä GPIO-pinni"
|
"description": "PTT:lle käytettävä GPIO-pinni"
|
||||||
},
|
},
|
||||||
"bitrate": {
|
"bitrate": {
|
||||||
"label": "Tiedonsiirtonopeus",
|
"label": "Tiedonsiirtonopeus",
|
||||||
"description": "Tiedonsiirtonopeus äänenkoodaukselle"
|
"description": "Tiedonsiirtonopeus äänenkoodaukselle"
|
||||||
},
|
},
|
||||||
"i2sWs": {
|
"i2sWs": {
|
||||||
"label": "i2S WS",
|
"label": "i2S WS",
|
||||||
"description": "GPIO-pinni jota käytetään i2S WS:ssä"
|
"description": "GPIO-pinni jota käytetään i2S WS:ssä"
|
||||||
},
|
},
|
||||||
"i2sSd": {
|
"i2sSd": {
|
||||||
"label": "i2S SD",
|
"label": "i2S SD",
|
||||||
"description": "GPIO-pinni jota käytetään i2S SD:ssä"
|
"description": "GPIO-pinni jota käytetään i2S SD:ssä"
|
||||||
},
|
},
|
||||||
"i2sDin": {
|
"i2sDin": {
|
||||||
"label": "i2S DIN",
|
"label": "i2S DIN",
|
||||||
"description": "GPIO-pinni jota käytetään i2S DIN:ssä"
|
"description": "GPIO-pinni jota käytetään i2S DIN:ssä"
|
||||||
},
|
},
|
||||||
"i2sSck": {
|
"i2sSck": {
|
||||||
"label": "i2S SD",
|
"label": "i2S SD",
|
||||||
"description": "GPIO-pinni jota käytetään i2S SCK:ssa"
|
"description": "GPIO-pinni jota käytetään i2S SCK:ssa"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"cannedMessage": {
|
"cannedMessage": {
|
||||||
"title": "Välitettyjen viestien asetukset",
|
"title": "Välitettyjen viestien asetukset",
|
||||||
"description": "Asetukset välitettyjen viestien moduulissa",
|
"description": "Asetukset välitettyjen viestien moduulissa",
|
||||||
"moduleEnabled": {
|
"moduleEnabled": {
|
||||||
"label": "Moduuli Käytössä",
|
"label": "Moduuli Käytössä",
|
||||||
"description": "Ota käyttöön välitetyt viestit"
|
"description": "Ota käyttöön välitetyt viestit"
|
||||||
},
|
},
|
||||||
"rotary1Enabled": {
|
"rotary1Enabled": {
|
||||||
"label": "Kiertovalitsin #1 käytössä",
|
"label": "Kiertovalitsin #1 käytössä",
|
||||||
"description": "Ota kiertovalitsimen kooderi käyttöön"
|
"description": "Ota kiertovalitsimen kooderi käyttöön"
|
||||||
},
|
},
|
||||||
"inputbrokerPinA": {
|
"inputbrokerPinA": {
|
||||||
"label": "Kooderin pinni A",
|
"label": "Kooderin pinni A",
|
||||||
"description": "GPIO-pinni (1–39) kooderin portille A"
|
"description": "GPIO-pinni (1–39) kooderin portille A"
|
||||||
},
|
},
|
||||||
"inputbrokerPinB": {
|
"inputbrokerPinB": {
|
||||||
"label": "Kooderin pinni B",
|
"label": "Kooderin pinni B",
|
||||||
"description": "GPIO-pinni (1–39) kooderin portille B"
|
"description": "GPIO-pinni (1–39) kooderin portille B"
|
||||||
},
|
},
|
||||||
"inputbrokerPinPress": {
|
"inputbrokerPinPress": {
|
||||||
"label": "Kooderin pinni painallukselle",
|
"label": "Kooderin pinni painallukselle",
|
||||||
"description": "GPIO-pinni (1–39) kooderin painallukselle"
|
"description": "GPIO-pinni (1–39) kooderin painallukselle"
|
||||||
},
|
},
|
||||||
"inputbrokerEventCw": {
|
"inputbrokerEventCw": {
|
||||||
"label": "Myötäpäiväinen liike",
|
"label": "Myötäpäiväinen liike",
|
||||||
"description": "Valitse syöttötapahtuma."
|
"description": "Valitse syöttötapahtuma."
|
||||||
},
|
},
|
||||||
"inputbrokerEventCcw": {
|
"inputbrokerEventCcw": {
|
||||||
"label": "Myötäpäiväisen liikkeen laskuri",
|
"label": "Myötäpäiväisen liikkeen laskuri",
|
||||||
"description": "Valitse syöttötapahtuma."
|
"description": "Valitse syöttötapahtuma."
|
||||||
},
|
},
|
||||||
"inputbrokerEventPress": {
|
"inputbrokerEventPress": {
|
||||||
"label": "Painamisen tapahtuma",
|
"label": "Painamisen tapahtuma",
|
||||||
"description": "Valitse syöttötapahtuma"
|
"description": "Valitse syöttötapahtuma"
|
||||||
},
|
},
|
||||||
"updown1Enabled": {
|
"updown1Enabled": {
|
||||||
"label": "Ylös alas käytössä",
|
"label": "Ylös alas käytössä",
|
||||||
"description": "Ota käyttöön ylös / alas-suuntaa tunnistava kooderi"
|
"description": "Ota käyttöön ylös / alas-suuntaa tunnistava kooderi"
|
||||||
},
|
},
|
||||||
"allowInputSource": {
|
"allowInputSource": {
|
||||||
"label": "Salli syöttölaitteen lähde",
|
"label": "Salli syöttölaitteen lähde",
|
||||||
"description": "Valitse '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
|
"description": "Valitse '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
|
||||||
},
|
},
|
||||||
"sendBell": {
|
"sendBell": {
|
||||||
"label": "Lähetä äänimerkki",
|
"label": "Lähetä äänimerkki",
|
||||||
"description": "Lähettää äänimerkkimerkin jokaisen viestin mukana"
|
"description": "Lähettää äänimerkkimerkin jokaisen viestin mukana"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"detectionSensor": {
|
"detectionSensor": {
|
||||||
"title": "Tunnistinsensorin asetukset",
|
"title": "Tunnistinsensorin asetukset",
|
||||||
"description": "Tunnistinsensori-moduulin asetukset",
|
"description": "Tunnistinsensori-moduulin asetukset",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Käytössä",
|
"label": "Käytössä",
|
||||||
"description": "Ota käyttöön tai poista käytöstä tunnistinsensorin moduuli"
|
"description": "Ota käyttöön tai poista käytöstä tunnistinsensorin moduuli"
|
||||||
},
|
},
|
||||||
"minimumBroadcastSecs": {
|
"minimumBroadcastSecs": {
|
||||||
"label": "Minimilähetys (sekuntia)",
|
"label": "Minimilähetys (sekuntia)",
|
||||||
"description": "Aikaväli sekunteina kuinka usein viestejä voi lähettää mesh-verkkoon tilamuutoksen havaitsemisen jälkeen"
|
"description": "Aikaväli sekunteina kuinka usein viestejä voi lähettää mesh-verkkoon tilamuutoksen havaitsemisen jälkeen"
|
||||||
},
|
},
|
||||||
"stateBroadcastSecs": {
|
"stateBroadcastSecs": {
|
||||||
"label": "Tilatiedon lähetys (sekuntia)",
|
"label": "Tilatiedon lähetys (sekuntia)",
|
||||||
"description": "Kuinka usein sekunteina lähetetään viesti mesh-verkkoon nykytilasta, vaikka tilassa ei olisi muutoksia"
|
"description": "Kuinka usein sekunteina lähetetään viesti mesh-verkkoon nykytilasta, vaikka tilassa ei olisi muutoksia"
|
||||||
},
|
},
|
||||||
"sendBell": {
|
"sendBell": {
|
||||||
"label": "Lähetä äänimerkki",
|
"label": "Lähetä äänimerkki",
|
||||||
"description": "Lähetä ASCII-äänimerkki hälytyssanoman mukana"
|
"description": "Lähetä ASCII-äänimerkki hälytyssanoman mukana"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"label": "Käyttäjäystävälinen nimi",
|
"label": "Käyttäjäystävälinen nimi",
|
||||||
"description": "Käytetään muotoilemaan mesh-verkkoon lähetettävä viesti, enintään 20 merkkiä"
|
"description": "Käytetään muotoilemaan mesh-verkkoon lähetettävä viesti, enintään 20 merkkiä"
|
||||||
},
|
},
|
||||||
"monitorPin": {
|
"monitorPin": {
|
||||||
"label": "Valvonta pinni",
|
"label": "Valvonta pinni",
|
||||||
"description": "GPIO-pinni valvonnan tilan muutoksien seurantaan"
|
"description": "GPIO-pinni valvonnan tilan muutoksien seurantaan"
|
||||||
},
|
},
|
||||||
"detectionTriggerType": {
|
"detectionTriggerType": {
|
||||||
"label": "Tunnistuksen havaintotyyppi",
|
"label": "Tunnistuksen havaintotyyppi",
|
||||||
"description": "Käytettävän tunnistustapahtuman tyyppi"
|
"description": "Käytettävän tunnistustapahtuman tyyppi"
|
||||||
},
|
},
|
||||||
"usePullup": {
|
"usePullup": {
|
||||||
"label": "Käytä vetokytkintä (pullup)",
|
"label": "Käytä vetokytkintä (pullup)",
|
||||||
"description": "Käytetäänkö GPIO-pinnin INPUT_PULLUP-tilaa"
|
"description": "Käytetäänkö GPIO-pinnin INPUT_PULLUP-tilaa"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"externalNotification": {
|
"externalNotification": {
|
||||||
"title": "Ulkoisten ilmoituksien asetukset",
|
"title": "Ulkoisten ilmoituksien asetukset",
|
||||||
"description": "Määritä ulkoisten ilmoitusten moduulin asetukset",
|
"description": "Määritä ulkoisten ilmoitusten moduulin asetukset",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Moduuli käytössä",
|
"label": "Moduuli käytössä",
|
||||||
"description": "Ota ulkoiset ilmoitukset käyttöön"
|
"description": "Ota ulkoiset ilmoitukset käyttöön"
|
||||||
},
|
},
|
||||||
"outputMs": {
|
"outputMs": {
|
||||||
"label": "Ulostulo MS",
|
"label": "Ulostulo MS",
|
||||||
"description": "Ulostulo MS"
|
"description": "Ulostulo MS"
|
||||||
},
|
},
|
||||||
"output": {
|
"output": {
|
||||||
"label": "Ulostulo",
|
"label": "Ulostulo",
|
||||||
"description": "Ulostulo"
|
"description": "Ulostulo"
|
||||||
},
|
},
|
||||||
"outputVibra": {
|
"outputVibra": {
|
||||||
"label": "Värinän ulostulo",
|
"label": "Värinän ulostulo",
|
||||||
"description": "Värinän ulostulo"
|
"description": "Värinän ulostulo"
|
||||||
},
|
},
|
||||||
"outputBuzzer": {
|
"outputBuzzer": {
|
||||||
"label": "Summerin ulostulo",
|
"label": "Summerin ulostulo",
|
||||||
"description": "Summerin ulostulo"
|
"description": "Summerin ulostulo"
|
||||||
},
|
},
|
||||||
"active": {
|
"active": {
|
||||||
"label": "Käytössä",
|
"label": "Käytössä",
|
||||||
"description": "Käytössä"
|
"description": "Käytössä"
|
||||||
},
|
},
|
||||||
"alertMessage": {
|
"alertMessage": {
|
||||||
"label": "Hälytysviesti",
|
"label": "Hälytysviesti",
|
||||||
"description": "Hälytysviesti"
|
"description": "Hälytysviesti"
|
||||||
},
|
},
|
||||||
"alertMessageVibra": {
|
"alertMessageVibra": {
|
||||||
"label": "Hälytysviestin värinä",
|
"label": "Hälytysviestin värinä",
|
||||||
"description": "Hälytysviestin värinä"
|
"description": "Hälytysviestin värinä"
|
||||||
},
|
},
|
||||||
"alertMessageBuzzer": {
|
"alertMessageBuzzer": {
|
||||||
"label": "Hälytysviestin summeri",
|
"label": "Hälytysviestin summeri",
|
||||||
"description": "Hälytysviestin summeri"
|
"description": "Hälytysviestin summeri"
|
||||||
},
|
},
|
||||||
"alertBell": {
|
"alertBell": {
|
||||||
"label": "Hälytysääni",
|
"label": "Hälytysääni",
|
||||||
"description": "Pitäisikö hälytyksen aktivoitua, kun vastaanotetaan äänimerkki?"
|
"description": "Pitäisikö hälytyksen aktivoitua, kun vastaanotetaan äänimerkki?"
|
||||||
},
|
},
|
||||||
"alertBellVibra": {
|
"alertBellVibra": {
|
||||||
"label": "Hälytysäänen värinä",
|
"label": "Hälytysäänen värinä",
|
||||||
"description": "Hälytysäänen värinä"
|
"description": "Hälytysäänen värinä"
|
||||||
},
|
},
|
||||||
"alertBellBuzzer": {
|
"alertBellBuzzer": {
|
||||||
"label": "Hälytysäänen summeri",
|
"label": "Hälytysäänen summeri",
|
||||||
"description": "Hälytysäänen summeri"
|
"description": "Hälytysäänen summeri"
|
||||||
},
|
},
|
||||||
"usePwm": {
|
"usePwm": {
|
||||||
"label": "Käytä PWM",
|
"label": "Käytä PWM",
|
||||||
"description": "Käytä PWM"
|
"description": "Käytä PWM"
|
||||||
},
|
},
|
||||||
"nagTimeout": {
|
"nagTimeout": {
|
||||||
"label": "Toistokehotuksen aikakatkaisu",
|
"label": "Toistokehotuksen aikakatkaisu",
|
||||||
"description": "Toistokehotuksen aikakatkaisu"
|
"description": "Toistokehotuksen aikakatkaisu"
|
||||||
},
|
},
|
||||||
"useI2sAsBuzzer": {
|
"useI2sAsBuzzer": {
|
||||||
"label": "Use I²S pinniä summerille",
|
"label": "Use I²S pinniä summerille",
|
||||||
"description": "Määritä I²S-pinni summerin ulostuloon"
|
"description": "Määritä I²S-pinni summerin ulostuloon"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"mqtt": {
|
"mqtt": {
|
||||||
"title": "MQTT-asetukset",
|
"title": "MQTT-asetukset",
|
||||||
"description": "MQTT-moduulin asetukset",
|
"description": "MQTT-moduulin asetukset",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Käytössä",
|
"label": "Käytössä",
|
||||||
"description": "Ota MQTT käyttöön tai poista se käytöstä"
|
"description": "Ota MQTT käyttöön tai poista se käytöstä"
|
||||||
},
|
},
|
||||||
"address": {
|
"address": {
|
||||||
"label": "MQTT-palvelimen osoite",
|
"label": "MQTT-palvelimen osoite",
|
||||||
"description": "MQTT-palvelimen osoite, jota käytetään oletus- tai mukautetuissa palvelimissa"
|
"description": "MQTT-palvelimen osoite, jota käytetään oletus- tai mukautetuissa palvelimissa"
|
||||||
},
|
},
|
||||||
"username": {
|
"username": {
|
||||||
"label": "MQTT käyttäjänimi",
|
"label": "MQTT käyttäjänimi",
|
||||||
"description": "MQTT käyttäjänimi, jota käytetään oletus- tai mukautetuissa palvelimissa"
|
"description": "MQTT käyttäjänimi, jota käytetään oletus- tai mukautetuissa palvelimissa"
|
||||||
},
|
},
|
||||||
"password": {
|
"password": {
|
||||||
"label": "MQTT salasana",
|
"label": "MQTT salasana",
|
||||||
"description": "MQTT salasana, jota käytetään oletus- tai mukautetuissa palvelimissa"
|
"description": "MQTT salasana, jota käytetään oletus- tai mukautetuissa palvelimissa"
|
||||||
},
|
},
|
||||||
"encryptionEnabled": {
|
"encryptionEnabled": {
|
||||||
"label": "Salaus käytössä",
|
"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."
|
"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": {
|
"jsonEnabled": {
|
||||||
"label": "JSON käytössä",
|
"label": "JSON käytössä",
|
||||||
"description": "Lähetetäänkö / otetaanko vastaan JSON-paketteja MQTT:llä"
|
"description": "Lähetetäänkö / otetaanko vastaan JSON-paketteja MQTT:llä"
|
||||||
},
|
},
|
||||||
"tlsEnabled": {
|
"tlsEnabled": {
|
||||||
"label": "TLS käytössä",
|
"label": "TLS käytössä",
|
||||||
"description": "Ota TLS käyttöön tai poista se käytöstä"
|
"description": "Ota TLS käyttöön tai poista se käytöstä"
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"label": "Palvelimen osoite (root topic)",
|
"label": "Palvelimen osoite (root topic)",
|
||||||
"description": "MQTT-palvelimen osoite, jota käytetään oletus- tai mukautetuissa palvelimissa"
|
"description": "MQTT-palvelimen osoite, jota käytetään oletus- tai mukautetuissa palvelimissa"
|
||||||
},
|
},
|
||||||
"proxyToClientEnabled": {
|
"proxyToClientEnabled": {
|
||||||
"label": "MQTT-välityspalvelin käytössä",
|
"label": "MQTT-välityspalvelin käytössä",
|
||||||
"description": "Käyttää verkkoyhteyttä välittämään MQTT-viestejä asiakkaalle."
|
"description": "Käyttää verkkoyhteyttä välittämään MQTT-viestejä asiakkaalle."
|
||||||
},
|
},
|
||||||
"mapReportingEnabled": {
|
"mapReportingEnabled": {
|
||||||
"label": "Karttaraportointi käytössä",
|
"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."
|
"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": {
|
"mapReportSettings": {
|
||||||
"publishIntervalSecs": {
|
"publishIntervalSecs": {
|
||||||
"label": "Karttaraportoinnin aikaväli (s)",
|
"label": "Karttaraportoinnin aikaväli (s)",
|
||||||
"description": "Aikaväli sekunneissa karttaraporttien julkaisemiseksi"
|
"description": "Aikaväli sekunneissa karttaraporttien julkaisemiseksi"
|
||||||
},
|
},
|
||||||
"positionPrecision": {
|
"positionPrecision": {
|
||||||
"label": "Arvioitu sijainti",
|
"label": "Arvioitu sijainti",
|
||||||
"description": "Jaetun sijainnin tarkkuus on tämän etäisyyden rajoissa",
|
"description": "Jaetun sijainnin tarkkuus on tämän etäisyyden rajoissa",
|
||||||
"options": {
|
"options": {
|
||||||
"metric_km23": "23 kilometrin säteellä",
|
"metric_km23": "23 kilometrin säteellä",
|
||||||
"metric_km12": "12 kilometrin säteellä",
|
"metric_km12": "12 kilometrin säteellä",
|
||||||
"metric_km5_8": "5,8 kilometrin säteellä",
|
"metric_km5_8": "5,8 kilometrin säteellä",
|
||||||
"metric_km2_9": "2,9 kilometrin säteellä",
|
"metric_km2_9": "2,9 kilometrin säteellä",
|
||||||
"metric_km1_5": "1,5 kilometrin säteellä",
|
"metric_km1_5": "1,5 kilometrin säteellä",
|
||||||
"metric_m700": "700 metrin säteellä",
|
"metric_m700": "700 metrin säteellä",
|
||||||
"metric_m350": "350 metrin säteellä",
|
"metric_m350": "350 metrin säteellä",
|
||||||
"metric_m200": "200 metrin säteellä",
|
"metric_m200": "200 metrin säteellä",
|
||||||
"metric_m90": "90 metrin säteellä",
|
"metric_m90": "90 metrin säteellä",
|
||||||
"metric_m50": "50 metrin säteellä",
|
"metric_m50": "50 metrin säteellä",
|
||||||
"imperial_mi15": "15 mailin säteellä",
|
"imperial_mi15": "15 mailin säteellä",
|
||||||
"imperial_mi7_3": "7,3 mailin säteellä",
|
"imperial_mi7_3": "7,3 mailin säteellä",
|
||||||
"imperial_mi3_6": "3,6 mailin säteellä",
|
"imperial_mi3_6": "3,6 mailin säteellä",
|
||||||
"imperial_mi1_8": "1,8 mailin säteellä",
|
"imperial_mi1_8": "1,8 mailin säteellä",
|
||||||
"imperial_mi0_9": "0,9 mailin säteellä",
|
"imperial_mi0_9": "0,9 mailin säteellä",
|
||||||
"imperial_mi0_5": "0,5 mailin säteellä",
|
"imperial_mi0_5": "0,5 mailin säteellä",
|
||||||
"imperial_mi0_2": "0,2 mailin säteellä",
|
"imperial_mi0_2": "0,2 mailin säteellä",
|
||||||
"imperial_ft600": "600 jalan säteellä",
|
"imperial_ft600": "600 jalan säteellä",
|
||||||
"imperial_ft300": "300 jalan säteellä",
|
"imperial_ft300": "300 jalan säteellä",
|
||||||
"imperial_ft150": "150 jalan säteellä"
|
"imperial_ft150": "150 jalan säteellä"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"neighborInfo": {
|
"neighborInfo": {
|
||||||
"title": "Naapuritiedon asetukset",
|
"title": "Naapuritiedon asetukset",
|
||||||
"description": "Naapuritietojen moduulin asetukset",
|
"description": "Naapuritietojen moduulin asetukset",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Käytössä",
|
"label": "Käytössä",
|
||||||
"description": "Ota käyttöön tai poista käytöstä naapuruustietomoduuli"
|
"description": "Ota käyttöön tai poista käytöstä naapuruustietomoduuli"
|
||||||
},
|
},
|
||||||
"updateInterval": {
|
"updateInterval": {
|
||||||
"label": "Päivitysväli",
|
"label": "Päivitysväli",
|
||||||
"description": "Aikaväli sekunneissa siitä, kuinka usein mesh-verkossa lähetetään naapuritietoja verkkoon"
|
"description": "Aikaväli sekunneissa siitä, kuinka usein mesh-verkossa lähetetään naapuritietoja verkkoon"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"paxcounter": {
|
"paxcounter": {
|
||||||
"title": "Pax-laskurin asetukset",
|
"title": "Pax-laskurin asetukset",
|
||||||
"description": "Pax-laskurin moduulin asetukset",
|
"description": "Pax-laskurin moduulin asetukset",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Moduuli käytössä",
|
"label": "Moduuli käytössä",
|
||||||
"description": "Ota pax-laskuri käyttöön"
|
"description": "Ota pax-laskuri käyttöön"
|
||||||
},
|
},
|
||||||
"paxcounterUpdateInterval": {
|
"paxcounterUpdateInterval": {
|
||||||
"label": "Päivityksen aikaväli (sekuntia)",
|
"label": "Päivityksen aikaväli (sekuntia)",
|
||||||
"description": "Kuinka kauan odotetaan pax-laskurin pakettien lähettämisen välillä"
|
"description": "Kuinka kauan odotetaan pax-laskurin pakettien lähettämisen välillä"
|
||||||
},
|
},
|
||||||
"wifiThreshold": {
|
"wifiThreshold": {
|
||||||
"label": "WiFi-RSSI kynnysarvo",
|
"label": "WiFi-RSSI kynnysarvo",
|
||||||
"description": "Millä WiFi RSSI tasolla laskurin täytyisi kasvaa. Oletus on -80."
|
"description": "Millä WiFi RSSI tasolla laskurin täytyisi kasvaa. Oletus on -80."
|
||||||
},
|
},
|
||||||
"bleThreshold": {
|
"bleThreshold": {
|
||||||
"label": "WiFi-RSSI kynnysarvo",
|
"label": "WiFi-RSSI kynnysarvo",
|
||||||
"description": "Millä BLE RSSI-arvolla laskuri kasvaa. Oletus: -80."
|
"description": "Millä BLE RSSI-arvolla laskuri kasvaa. Oletus: -80."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rangeTest": {
|
"rangeTest": {
|
||||||
"title": "Kuuluvuustestin asetukset",
|
"title": "Kuuluvuustestin asetukset",
|
||||||
"description": "Kuuluvuustesti moduulin asetukset",
|
"description": "Kuuluvuustesti moduulin asetukset",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Moduuli käytössä",
|
"label": "Moduuli käytössä",
|
||||||
"description": "Ota kuuluvuustesti käytöön"
|
"description": "Ota kuuluvuustesti käytöön"
|
||||||
},
|
},
|
||||||
"sender": {
|
"sender": {
|
||||||
"label": "Viestin aikaväli",
|
"label": "Viestin aikaväli",
|
||||||
"description": "Kuinka kauan odotetaan testipakettien lähettämisen välillä"
|
"description": "Kuinka kauan odotetaan testipakettien lähettämisen välillä"
|
||||||
},
|
},
|
||||||
"save": {
|
"save": {
|
||||||
"label": "Tallenna CSV tallennustilaan",
|
"label": "Tallenna CSV tallennustilaan",
|
||||||
"description": "Vain ESP32"
|
"description": "Vain ESP32"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"serial": {
|
"serial": {
|
||||||
"title": "Sarjaliitännän asetukset",
|
"title": "Sarjaliitännän asetukset",
|
||||||
"description": "Sarjaliitäntä-moduulin asetukset",
|
"description": "Sarjaliitäntä-moduulin asetukset",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Sarjaliitäntä käytössä",
|
"label": "Sarjaliitäntä käytössä",
|
||||||
"description": "Ota sarjaliitäntä käyttöön"
|
"description": "Ota sarjaliitäntä käyttöön"
|
||||||
},
|
},
|
||||||
"echo": {
|
"echo": {
|
||||||
"label": "Toista",
|
"label": "Toista",
|
||||||
"description": "Kaikki lähettämäsi paketit toistetaan takaisin laitteellesi"
|
"description": "Kaikki lähettämäsi paketit toistetaan takaisin laitteellesi"
|
||||||
},
|
},
|
||||||
"rxd": {
|
"rxd": {
|
||||||
"label": "Vastaanota PIN-koodi",
|
"label": "Vastaanota PIN-koodi",
|
||||||
"description": "Määritä GPIO-pinni käyttämään aiemmin asetettua RXD-pinniä."
|
"description": "Määritä GPIO-pinni käyttämään aiemmin asetettua RXD-pinniä."
|
||||||
},
|
},
|
||||||
"txd": {
|
"txd": {
|
||||||
"label": "Lähetä PIN-koodi",
|
"label": "Lähetä PIN-koodi",
|
||||||
"description": "Määritä GPIO-pinni käyttämään aiemmin asetettua TXD-pinniä."
|
"description": "Määritä GPIO-pinni käyttämään aiemmin asetettua TXD-pinniä."
|
||||||
},
|
},
|
||||||
"baud": {
|
"baud": {
|
||||||
"label": "Baud-siirtonopeus",
|
"label": "Baud-siirtonopeus",
|
||||||
"description": "Sarjaliitännän baud-siirtonopeus"
|
"description": "Sarjaliitännän baud-siirtonopeus"
|
||||||
},
|
},
|
||||||
"timeout": {
|
"timeout": {
|
||||||
"label": "Aikakatkaisu",
|
"label": "Aikakatkaisu",
|
||||||
"description": "Kuinka monta sekuntia odotetaan, ennen kuin paketti merkitään valmiiksi"
|
"description": "Kuinka monta sekuntia odotetaan, ennen kuin paketti merkitään valmiiksi"
|
||||||
},
|
},
|
||||||
"mode": {
|
"mode": {
|
||||||
"label": "Tila",
|
"label": "Tila",
|
||||||
"description": "Valitse tila"
|
"description": "Valitse tila"
|
||||||
},
|
},
|
||||||
"overrideConsoleSerialPort": {
|
"overrideConsoleSerialPort": {
|
||||||
"label": "Ohita konsolin sarjaliitännän portti",
|
"label": "Ohita konsolin sarjaliitännän portti",
|
||||||
"description": "Jos sinulla on sarjaportti kytkettynä konsoliin, tämä ohittaa sen."
|
"description": "Jos sinulla on sarjaportti kytkettynä konsoliin, tämä ohittaa sen."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storeForward": {
|
"storeForward": {
|
||||||
"title": "Varastoi & välitä asetukset",
|
"title": "Varastoi & välitä asetukset",
|
||||||
"description": "Varastoi & välitä moduulin asetukset",
|
"description": "Varastoi & välitä moduulin asetukset",
|
||||||
"enabled": {
|
"enabled": {
|
||||||
"label": "Moduuli käytössä",
|
"label": "Moduuli käytössä",
|
||||||
"description": "Ota varastoi & välitä käyttöön"
|
"description": "Ota varastoi & välitä käyttöön"
|
||||||
},
|
},
|
||||||
"heartbeat": {
|
"heartbeat": {
|
||||||
"label": "Heartbeat käytössä",
|
"label": "Heartbeat käytössä",
|
||||||
"description": "Ota varastoi & välitä heartbeat käyttöön"
|
"description": "Ota varastoi & välitä heartbeat käyttöön"
|
||||||
},
|
},
|
||||||
"records": {
|
"records": {
|
||||||
"label": "Kirjausten määrä",
|
"label": "Kirjausten määrä",
|
||||||
"description": "Tallennettavien tietueiden määrä"
|
"description": "Tallennettavien tietueiden määrä"
|
||||||
},
|
},
|
||||||
"historyReturnMax": {
|
"historyReturnMax": {
|
||||||
"label": "Historian maksimimäärä",
|
"label": "Historian maksimimäärä",
|
||||||
"description": "Enimmäismäärä tietueita palautettaviksi"
|
"description": "Enimmäismäärä tietueita palautettaviksi"
|
||||||
},
|
},
|
||||||
"historyReturnWindow": {
|
"historyReturnWindow": {
|
||||||
"label": "Historian aikamäärä",
|
"label": "Historian aikamäärä",
|
||||||
"description": "Enimmäismäärä tietueita palautettaviksi"
|
"description": "Enimmäismäärä tietueita palautettaviksi"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"telemetry": {
|
"telemetry": {
|
||||||
"title": "Telemetrian asetukset",
|
"title": "Telemetrian asetukset",
|
||||||
"description": "Telemetria-moduulin asetukset",
|
"description": "Telemetria-moduulin asetukset",
|
||||||
"deviceUpdateInterval": {
|
"deviceUpdateInterval": {
|
||||||
"label": "Laitteen mittausloki",
|
"label": "Laitteen mittausloki",
|
||||||
"description": "Laitteen mittaustietojen päivitysväli (sekuntia)"
|
"description": "Laitteen mittaustietojen päivitysväli (sekuntia)"
|
||||||
},
|
},
|
||||||
"environmentUpdateInterval": {
|
"environmentUpdateInterval": {
|
||||||
"label": "Ympäristötietojen päivitysväli (sekuntia)",
|
"label": "Ympäristötietojen päivitysväli (sekuntia)",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"environmentMeasurementEnabled": {
|
"environmentMeasurementEnabled": {
|
||||||
"label": "Moduuli käytössä",
|
"label": "Moduuli käytössä",
|
||||||
"description": "Ota käyttöön ympäristön telemetria"
|
"description": "Ota käyttöön ympäristön telemetria"
|
||||||
},
|
},
|
||||||
"environmentScreenEnabled": {
|
"environmentScreenEnabled": {
|
||||||
"label": "Näytetään näytöllä",
|
"label": "Näytetään näytöllä",
|
||||||
"description": "Näytä moduulin telemetriatiedot OLED-näytöllä"
|
"description": "Näytä moduulin telemetriatiedot OLED-näytöllä"
|
||||||
},
|
},
|
||||||
"environmentDisplayFahrenheit": {
|
"environmentDisplayFahrenheit": {
|
||||||
"label": "Näytä fahrenheitissa",
|
"label": "Näytä fahrenheitissa",
|
||||||
"description": "Näytä lämpötila fahrenheitissa"
|
"description": "Näytä lämpötila fahrenheitissa"
|
||||||
},
|
},
|
||||||
"airQualityEnabled": {
|
"airQualityEnabled": {
|
||||||
"label": "Ilmanlaatu käytössä",
|
"label": "Ilmanlaatu käytössä",
|
||||||
"description": "Ota ilmanlaadun telemetria käyttöön"
|
"description": "Ota ilmanlaadun telemetria käyttöön"
|
||||||
},
|
},
|
||||||
"airQualityInterval": {
|
"airQualityInterval": {
|
||||||
"label": "Ilmanlaadun päivitysväli",
|
"label": "Ilmanlaadun päivitysväli",
|
||||||
"description": "Kuinka usein ilmanlaadun tiedot lähetetään mesh-verkon kautta"
|
"description": "Kuinka usein ilmanlaadun tiedot lähetetään mesh-verkon kautta"
|
||||||
},
|
},
|
||||||
"powerMeasurementEnabled": {
|
"powerMeasurementEnabled": {
|
||||||
"label": "Tehomittaus käytössä",
|
"label": "Tehomittaus käytössä",
|
||||||
"description": "Ota tehomittauksen telemetria käyttöön"
|
"description": "Ota tehomittauksen telemetria käyttöön"
|
||||||
},
|
},
|
||||||
"powerUpdateInterval": {
|
"powerUpdateInterval": {
|
||||||
"label": "Tehomittauksen päivitysväli",
|
"label": "Tehomittauksen päivitysväli",
|
||||||
"description": "Kuinka usein tehomittauksen tiedot lähetetään mesh-verkon kautta"
|
"description": "Kuinka usein tehomittauksen tiedot lähetetään mesh-verkon kautta"
|
||||||
},
|
},
|
||||||
"powerScreenEnabled": {
|
"powerScreenEnabled": {
|
||||||
"label": "Tehomittauksen näyttö käytössä",
|
"label": "Tehomittauksen näyttö käytössä",
|
||||||
"description": "Ota tehomittauksen telemetrian näyttö käyttöön"
|
"description": "Ota tehomittauksen telemetrian näyttö käyttöön"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,63 +1,63 @@
|
|||||||
{
|
{
|
||||||
"nodeDetail": {
|
"nodeDetail": {
|
||||||
"publicKeyEnabled": {
|
"publicKeyEnabled": {
|
||||||
"label": "Julkinen avain käytössä"
|
"label": "Julkinen avain käytössä"
|
||||||
},
|
},
|
||||||
"noPublicKey": {
|
"noPublicKey": {
|
||||||
"label": "Ei julkinen avain"
|
"label": "Ei julkinen avain"
|
||||||
},
|
},
|
||||||
"directMessage": {
|
"directMessage": {
|
||||||
"label": "Suora Viesti {{shortName}}"
|
"label": "Suora Viesti {{shortName}}"
|
||||||
},
|
},
|
||||||
"favorite": {
|
"favorite": {
|
||||||
"label": "Suosikki",
|
"label": "Suosikki",
|
||||||
"tooltip": "Lisää tai poista tämä laite suosikeistasi"
|
"tooltip": "Lisää tai poista tämä laite suosikeistasi"
|
||||||
},
|
},
|
||||||
"notFavorite": {
|
"notFavorite": {
|
||||||
"label": "Ei suosikki"
|
"label": "Ei suosikki"
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"label": "Virhe",
|
"label": "Virhe",
|
||||||
"text": "Tapahtui virhe haettaessa laitteen tietoja. Yritä uudelleen myöhemmin."
|
"text": "Tapahtui virhe haettaessa laitteen tietoja. Yritä uudelleen myöhemmin."
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"heard": "Kuultu",
|
"heard": "Kuultu",
|
||||||
"mqtt": "MQTT"
|
"mqtt": "MQTT"
|
||||||
},
|
},
|
||||||
"elevation": {
|
"elevation": {
|
||||||
"label": "Korkeus"
|
"label": "Korkeus"
|
||||||
},
|
},
|
||||||
"channelUtil": {
|
"channelUtil": {
|
||||||
"label": "Kanavan käyttö"
|
"label": "Kanavan käyttö"
|
||||||
},
|
},
|
||||||
"airtimeUtil": {
|
"airtimeUtil": {
|
||||||
"label": "Lähetysajan käyttö"
|
"label": "Lähetysajan käyttö"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nodesTable": {
|
"nodesTable": {
|
||||||
"headings": {
|
"headings": {
|
||||||
"longName": "Pitkä nimi",
|
"longName": "Pitkä nimi",
|
||||||
"connection": "Yhteys",
|
"connection": "Yhteys",
|
||||||
"lastHeard": "Viimeksi kuultu",
|
"lastHeard": "Viimeksi kuultu",
|
||||||
"encryption": "Salaus",
|
"encryption": "Salaus",
|
||||||
"model": "Malli",
|
"model": "Malli",
|
||||||
"macAddress": "MAC-osoite"
|
"macAddress": "MAC-osoite"
|
||||||
},
|
},
|
||||||
"connectionStatus": {
|
"connectionStatus": {
|
||||||
"direct": "Suora",
|
"direct": "Suora",
|
||||||
"away": "poissa",
|
"away": "poissa",
|
||||||
"unknown": "-",
|
"unknown": "-",
|
||||||
"viaMqtt": ", MQTT välityksellä"
|
"viaMqtt": ", MQTT välityksellä"
|
||||||
},
|
},
|
||||||
"lastHeardStatus": {
|
"lastHeardStatus": {
|
||||||
"never": "Ei koskaan"
|
"never": "Ei koskaan"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"actions": {
|
"actions": {
|
||||||
"added": "Lisätty",
|
"added": "Lisätty",
|
||||||
"removed": "Poistettu",
|
"removed": "Poistettu",
|
||||||
"ignoreNode": "Älä huomioi laitetta",
|
"ignoreNode": "Älä huomioi laitetta",
|
||||||
"unignoreNode": "Huomioi laite uudelleen",
|
"unignoreNode": "Huomioi laite uudelleen",
|
||||||
"requestPosition": "Pyydä sijaintia"
|
"requestPosition": "Pyydä sijaintia"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,228 +1,228 @@
|
|||||||
{
|
{
|
||||||
"navigation": {
|
"navigation": {
|
||||||
"title": "Navigointi",
|
"title": "Navigointi",
|
||||||
"messages": "Viestit",
|
"messages": "Viestit",
|
||||||
"map": "Kartta",
|
"map": "Kartta",
|
||||||
"config": "Asetukset",
|
"config": "Asetukset",
|
||||||
"radioConfig": "Radion asetukset",
|
"radioConfig": "Radion asetukset",
|
||||||
"moduleConfig": "Moduulin asetukset",
|
"moduleConfig": "Moduulin asetukset",
|
||||||
"channels": "Kanavat",
|
"channels": "Kanavat",
|
||||||
"nodes": "Laitteet"
|
"nodes": "Laitteet"
|
||||||
},
|
},
|
||||||
"app": {
|
"app": {
|
||||||
"title": "Meshtastic",
|
"title": "Meshtastic",
|
||||||
"logo": "Meshtastic Logo"
|
"logo": "Meshtastic Logo"
|
||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"collapseToggle": {
|
"collapseToggle": {
|
||||||
"button": {
|
"button": {
|
||||||
"open": "Avaa sivupalkki",
|
"open": "Avaa sivupalkki",
|
||||||
"close": "Sulje sivupalkki"
|
"close": "Sulje sivupalkki"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"deviceInfo": {
|
"deviceInfo": {
|
||||||
"volts": "{{voltage}} volttia",
|
"volts": "{{voltage}} volttia",
|
||||||
"firmware": {
|
"firmware": {
|
||||||
"title": "Laiteohjelmisto",
|
"title": "Laiteohjelmisto",
|
||||||
"version": "v{{version}}",
|
"version": "v{{version}}",
|
||||||
"buildDate": "Koontipäivä: {{date}}"
|
"buildDate": "Koontipäivä: {{date}}"
|
||||||
},
|
},
|
||||||
"deviceName": {
|
"deviceName": {
|
||||||
"title": "Laitteen nimi",
|
"title": "Laitteen nimi",
|
||||||
"changeName": "Vaihda laitteen nimi",
|
"changeName": "Vaihda laitteen nimi",
|
||||||
"placeholder": "Anna laitteelle nimi"
|
"placeholder": "Anna laitteelle nimi"
|
||||||
},
|
},
|
||||||
"editDeviceName": "Muokkaa laitteen nimeä"
|
"editDeviceName": "Muokkaa laitteen nimeä"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"batteryStatus": {
|
"batteryStatus": {
|
||||||
"charging": "{{level}} % latauksessa",
|
"charging": "{{level}} % latauksessa",
|
||||||
"pluggedIn": "Kytketty verkkovirtaan",
|
"pluggedIn": "Kytketty verkkovirtaan",
|
||||||
"title": "Akku"
|
"title": "Akku"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"nodes": "Etsi laitteita...",
|
"nodes": "Etsi laitteita...",
|
||||||
"channels": "Etsi kanavia...",
|
"channels": "Etsi kanavia...",
|
||||||
"commandPalette": "Etsi komentoja..."
|
"commandPalette": "Etsi komentoja..."
|
||||||
},
|
},
|
||||||
"toast": {
|
"toast": {
|
||||||
"positionRequestSent": {
|
"positionRequestSent": {
|
||||||
"title": "Sijaintipyyntö lähetetty."
|
"title": "Sijaintipyyntö lähetetty."
|
||||||
},
|
},
|
||||||
"requestingPosition": {
|
"requestingPosition": {
|
||||||
"title": "Pyydetään sijaintia, odota..."
|
"title": "Pyydetään sijaintia, odota..."
|
||||||
},
|
},
|
||||||
"sendingTraceroute": {
|
"sendingTraceroute": {
|
||||||
"title": "Reitinselvitys lähetetty, odota..."
|
"title": "Reitinselvitys lähetetty, odota..."
|
||||||
},
|
},
|
||||||
"tracerouteSent": {
|
"tracerouteSent": {
|
||||||
"title": "Reitinselvitys lähetetty."
|
"title": "Reitinselvitys lähetetty."
|
||||||
},
|
},
|
||||||
"savedChannel": {
|
"savedChannel": {
|
||||||
"title": "Tallennettu Kanava: {{channelName}}"
|
"title": "Tallennettu Kanava: {{channelName}}"
|
||||||
},
|
},
|
||||||
"messages": {
|
"messages": {
|
||||||
"pkiEncryption": {
|
"pkiEncryption": {
|
||||||
"title": "Keskustelu käyttää PKI-salausta."
|
"title": "Keskustelu käyttää PKI-salausta."
|
||||||
},
|
},
|
||||||
"pskEncryption": {
|
"pskEncryption": {
|
||||||
"title": "Keskustelu käyttää PKI-salausta."
|
"title": "Keskustelu käyttää PKI-salausta."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"configSaveError": {
|
"configSaveError": {
|
||||||
"title": "Virhe asetusten tallentamisessa",
|
"title": "Virhe asetusten tallentamisessa",
|
||||||
"description": "Asetusten tallennuksessa tapahtui virhe."
|
"description": "Asetusten tallennuksessa tapahtui virhe."
|
||||||
},
|
},
|
||||||
"validationError": {
|
"validationError": {
|
||||||
"title": "Asetuksissa on virheitä",
|
"title": "Asetuksissa on virheitä",
|
||||||
"description": "Ole hyvä ja korjaa asetusvirheet ennen tallentamista."
|
"description": "Ole hyvä ja korjaa asetusvirheet ennen tallentamista."
|
||||||
},
|
},
|
||||||
"saveSuccess": {
|
"saveSuccess": {
|
||||||
"title": "Tallennetaan asetukset",
|
"title": "Tallennetaan asetukset",
|
||||||
"description": "Asetuksien muutos {{case}} on tallennettu."
|
"description": "Asetuksien muutos {{case}} on tallennettu."
|
||||||
},
|
},
|
||||||
"favoriteNode": {
|
"favoriteNode": {
|
||||||
"title": "{{action}} {{nodeName}} {{direction}} suosikit.",
|
"title": "{{action}} {{nodeName}} {{direction}} suosikit.",
|
||||||
"action": {
|
"action": {
|
||||||
"added": "Lisätty",
|
"added": "Lisätty",
|
||||||
"removed": "Poistettu",
|
"removed": "Poistettu",
|
||||||
"to": "saakka",
|
"to": "saakka",
|
||||||
"from": "alkaen"
|
"from": "alkaen"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ignoreNode": {
|
"ignoreNode": {
|
||||||
"title": "{{action}} {{nodeName}} {{direction}} estolista",
|
"title": "{{action}} {{nodeName}} {{direction}} estolista",
|
||||||
"action": {
|
"action": {
|
||||||
"added": "Lisätty",
|
"added": "Lisätty",
|
||||||
"removed": "Poistettu",
|
"removed": "Poistettu",
|
||||||
"to": "saakka",
|
"to": "saakka",
|
||||||
"from": "alkaen"
|
"from": "alkaen"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"copied": {
|
"copied": {
|
||||||
"label": "Kopioitu!"
|
"label": "Kopioitu!"
|
||||||
},
|
},
|
||||||
"copyToClipboard": {
|
"copyToClipboard": {
|
||||||
"label": "Kopioi leikepöydälle"
|
"label": "Kopioi leikepöydälle"
|
||||||
},
|
},
|
||||||
"hidePassword": {
|
"hidePassword": {
|
||||||
"label": "Piilota salasana"
|
"label": "Piilota salasana"
|
||||||
},
|
},
|
||||||
"showPassword": {
|
"showPassword": {
|
||||||
"label": "Näytä salasana"
|
"label": "Näytä salasana"
|
||||||
},
|
},
|
||||||
"deliveryStatus": {
|
"deliveryStatus": {
|
||||||
"delivered": "Toimitettu",
|
"delivered": "Toimitettu",
|
||||||
"failed": "Toimitus epäonnistui",
|
"failed": "Toimitus epäonnistui",
|
||||||
"waiting": "Odottaa",
|
"waiting": "Odottaa",
|
||||||
"unknown": "Tuntematon"
|
"unknown": "Tuntematon"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"general": {
|
"general": {
|
||||||
"label": "Yleinen"
|
"label": "Yleinen"
|
||||||
},
|
},
|
||||||
"hardware": {
|
"hardware": {
|
||||||
"label": "Laite"
|
"label": "Laite"
|
||||||
},
|
},
|
||||||
"metrics": {
|
"metrics": {
|
||||||
"label": "Mittaustiedot"
|
"label": "Mittaustiedot"
|
||||||
},
|
},
|
||||||
"role": {
|
"role": {
|
||||||
"label": "Rooli"
|
"label": "Rooli"
|
||||||
},
|
},
|
||||||
"filter": {
|
"filter": {
|
||||||
"label": "Suodatus"
|
"label": "Suodatus"
|
||||||
},
|
},
|
||||||
"advanced": {
|
"advanced": {
|
||||||
"label": "Lisäasetukset"
|
"label": "Lisäasetukset"
|
||||||
},
|
},
|
||||||
"clearInput": {
|
"clearInput": {
|
||||||
"label": "Tyhjennä kenttä"
|
"label": "Tyhjennä kenttä"
|
||||||
},
|
},
|
||||||
"resetFilters": {
|
"resetFilters": {
|
||||||
"label": "Tyhjennä suodattimet"
|
"label": "Tyhjennä suodattimet"
|
||||||
},
|
},
|
||||||
"nodeName": {
|
"nodeName": {
|
||||||
"label": "Laitteen nimi tai numero",
|
"label": "Laitteen nimi tai numero",
|
||||||
"placeholder": "Meshtastic 1234"
|
"placeholder": "Meshtastic 1234"
|
||||||
},
|
},
|
||||||
"airtimeUtilization": {
|
"airtimeUtilization": {
|
||||||
"label": "Ajan käyttöaste (%)"
|
"label": "Ajan käyttöaste (%)"
|
||||||
},
|
},
|
||||||
"batteryLevel": {
|
"batteryLevel": {
|
||||||
"label": "Akun varaus (%)",
|
"label": "Akun varaus (%)",
|
||||||
"labelText": "Akun varaus (%): {{value}}"
|
"labelText": "Akun varaus (%): {{value}}"
|
||||||
},
|
},
|
||||||
"batteryVoltage": {
|
"batteryVoltage": {
|
||||||
"label": "Akun jännite (V)",
|
"label": "Akun jännite (V)",
|
||||||
"title": "Jännite"
|
"title": "Jännite"
|
||||||
},
|
},
|
||||||
"channelUtilization": {
|
"channelUtilization": {
|
||||||
"label": "Kanavan käyttö (%)"
|
"label": "Kanavan käyttö (%)"
|
||||||
},
|
},
|
||||||
"hops": {
|
"hops": {
|
||||||
"direct": "Suora",
|
"direct": "Suora",
|
||||||
"label": "Hyppyjen määrä",
|
"label": "Hyppyjen määrä",
|
||||||
"text": "Hyppyjen määrä: {{value}}"
|
"text": "Hyppyjen määrä: {{value}}"
|
||||||
},
|
},
|
||||||
"lastHeard": {
|
"lastHeard": {
|
||||||
"label": "Viimeksi kuultu",
|
"label": "Viimeksi kuultu",
|
||||||
"labelText": "Viimeksi kuultu: {{value}}",
|
"labelText": "Viimeksi kuultu: {{value}}",
|
||||||
"nowLabel": "Nyt"
|
"nowLabel": "Nyt"
|
||||||
},
|
},
|
||||||
"snr": {
|
"snr": {
|
||||||
"label": "SNR (db)"
|
"label": "SNR (db)"
|
||||||
},
|
},
|
||||||
"favorites": {
|
"favorites": {
|
||||||
"label": "Suosikit"
|
"label": "Suosikit"
|
||||||
},
|
},
|
||||||
"hide": {
|
"hide": {
|
||||||
"label": "Piilota"
|
"label": "Piilota"
|
||||||
},
|
},
|
||||||
"showOnly": {
|
"showOnly": {
|
||||||
"label": "Näytä pelkästään"
|
"label": "Näytä pelkästään"
|
||||||
},
|
},
|
||||||
"viaMqtt": {
|
"viaMqtt": {
|
||||||
"label": "Yhdistetty MQTT-yhteydellä"
|
"label": "Yhdistetty MQTT-yhteydellä"
|
||||||
},
|
},
|
||||||
"hopsUnknown": {
|
"hopsUnknown": {
|
||||||
"label": "Tuntematon määrä hyppyjä"
|
"label": "Tuntematon määrä hyppyjä"
|
||||||
},
|
},
|
||||||
"showUnheard": {
|
"showUnheard": {
|
||||||
"label": "Ei koskaan kuultu"
|
"label": "Ei koskaan kuultu"
|
||||||
},
|
},
|
||||||
"language": {
|
"language": {
|
||||||
"label": "Kieli",
|
"label": "Kieli",
|
||||||
"changeLanguage": "Vaihda kieli"
|
"changeLanguage": "Vaihda kieli"
|
||||||
},
|
},
|
||||||
"theme": {
|
"theme": {
|
||||||
"dark": "Tumma",
|
"dark": "Tumma",
|
||||||
"light": "Vaalea",
|
"light": "Vaalea",
|
||||||
"system": "Automaattinen",
|
"system": "Automaattinen",
|
||||||
"changeTheme": "Vaihda väriteema"
|
"changeTheme": "Vaihda väriteema"
|
||||||
},
|
},
|
||||||
"errorPage": {
|
"errorPage": {
|
||||||
"title": "Tämä on hieman noloa...",
|
"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.",
|
"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.",
|
"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:",
|
"reportInstructions": "Lisääthän raporttiisi seuraavat tiedot:",
|
||||||
"reportSteps": {
|
"reportSteps": {
|
||||||
"step1": "Mitä olit tekemässä virheen tapahtuessa",
|
"step1": "Mitä olit tekemässä virheen tapahtuessa",
|
||||||
"step2": "Mitä odotit tapahtuvan",
|
"step2": "Mitä odotit tapahtuvan",
|
||||||
"step3": "Mitä todellisuudessa tapahtui",
|
"step3": "Mitä todellisuudessa tapahtui",
|
||||||
"step4": "Muut mahdollisesti oleelliset tiedot"
|
"step4": "Muut mahdollisesti oleelliset tiedot"
|
||||||
},
|
},
|
||||||
"reportLink": "Voit raportoida ongelmasta <0>GitHubissa</0>",
|
"reportLink": "Voit raportoida ongelmasta <0>GitHubissa</0>",
|
||||||
"dashboardLink": "Palaa takaisin <0>hallintapaneeliin</0>",
|
"dashboardLink": "Palaa takaisin <0>hallintapaneeliin</0>",
|
||||||
"detailsSummary": "Virheen tiedot",
|
"detailsSummary": "Virheen tiedot",
|
||||||
"errorMessageLabel": "Virheilmoitus:",
|
"errorMessageLabel": "Virheilmoitus:",
|
||||||
"stackTraceLabel": "Virheen jäljityslista:",
|
"stackTraceLabel": "Virheen jäljityslista:",
|
||||||
"fallbackError": "{{error}}"
|
"fallbackError": "{{error}}"
|
||||||
},
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® on Meshtastic LLC:n rekisteröity tavaramerkki. | <1>Oikeudelliset tiedot</1>",
|
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® on Meshtastic LLC:n rekisteröity tavaramerkki. | <1>Oikeudelliset tiedot</1>",
|
||||||
"commitSha": "Ohjelmistokehitysversion SHA-tunniste: {{sha}}"
|
"commitSha": "Ohjelmistokehitysversion SHA-tunniste: {{sha}}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,69 +1,69 @@
|
|||||||
{
|
{
|
||||||
"page": {
|
"page": {
|
||||||
"sectionLabel": "Canaux",
|
"sectionLabel": "Canaux",
|
||||||
"channelName": "Channel: {{channelName}}",
|
"channelName": "Channel: {{channelName}}",
|
||||||
"broadcastLabel": "Principal",
|
"broadcastLabel": "Principal",
|
||||||
"channelIndex": "Ch {{index}}"
|
"channelIndex": "Ch {{index}}"
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
|
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"label": "Paramètres du canal",
|
"label": "Paramètres du canal",
|
||||||
"description": "Crypto, MQTT & misc settings"
|
"description": "Crypto, MQTT & misc settings"
|
||||||
},
|
},
|
||||||
"role": {
|
"role": {
|
||||||
"label": "Rôle",
|
"label": "Rôle",
|
||||||
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
|
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
|
||||||
"options": {
|
"options": {
|
||||||
"primary": "PRIMARY",
|
"primary": "PRIMARY",
|
||||||
"disabled": "DISABLED",
|
"disabled": "DISABLED",
|
||||||
"secondary": "SECONDARY"
|
"secondary": "SECONDARY"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"psk": {
|
"psk": {
|
||||||
"label": "Pre-Shared Key",
|
"label": "Pre-Shared Key",
|
||||||
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
|
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
|
||||||
"generate": "Generate"
|
"generate": "Generate"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"label": "Nom",
|
"label": "Nom",
|
||||||
"description": "A unique name for the channel <12 bytes, leave blank for default"
|
"description": "A unique name for the channel <12 bytes, leave blank for default"
|
||||||
},
|
},
|
||||||
"uplinkEnabled": {
|
"uplinkEnabled": {
|
||||||
"label": "Uplink Enabled",
|
"label": "Uplink Enabled",
|
||||||
"description": "Send messages from the local mesh to MQTT"
|
"description": "Send messages from the local mesh to MQTT"
|
||||||
},
|
},
|
||||||
"downlinkEnabled": {
|
"downlinkEnabled": {
|
||||||
"label": "Downlink Enabled",
|
"label": "Downlink Enabled",
|
||||||
"description": "Send messages from MQTT to the local mesh"
|
"description": "Send messages from MQTT to the local mesh"
|
||||||
},
|
},
|
||||||
"positionPrecision": {
|
"positionPrecision": {
|
||||||
"label": "Location",
|
"label": "Location",
|
||||||
"description": "The precision of the location to share with the channel. Can be disabled.",
|
"description": "The precision of the location to share with the channel. Can be disabled.",
|
||||||
"options": {
|
"options": {
|
||||||
"none": "Do not share location",
|
"none": "Do not share location",
|
||||||
"precise": "Precise Location",
|
"precise": "Precise Location",
|
||||||
"metric_km23": "Within 23 kilometers",
|
"metric_km23": "Within 23 kilometers",
|
||||||
"metric_km12": "Within 12 kilometers",
|
"metric_km12": "Within 12 kilometers",
|
||||||
"metric_km5_8": "Within 5.8 kilometers",
|
"metric_km5_8": "Within 5.8 kilometers",
|
||||||
"metric_km2_9": "Within 2.9 kilometers",
|
"metric_km2_9": "Within 2.9 kilometers",
|
||||||
"metric_km1_5": "Within 1.5 kilometers",
|
"metric_km1_5": "Within 1.5 kilometers",
|
||||||
"metric_m700": "Within 700 meters",
|
"metric_m700": "Within 700 meters",
|
||||||
"metric_m350": "Within 350 meters",
|
"metric_m350": "Within 350 meters",
|
||||||
"metric_m200": "Within 200 meters",
|
"metric_m200": "Within 200 meters",
|
||||||
"metric_m90": "Within 90 meters",
|
"metric_m90": "Within 90 meters",
|
||||||
"metric_m50": "Within 50 meters",
|
"metric_m50": "Within 50 meters",
|
||||||
"imperial_mi15": "Within 15 miles",
|
"imperial_mi15": "Within 15 miles",
|
||||||
"imperial_mi7_3": "Within 7.3 miles",
|
"imperial_mi7_3": "Within 7.3 miles",
|
||||||
"imperial_mi3_6": "Within 3.6 miles",
|
"imperial_mi3_6": "Within 3.6 miles",
|
||||||
"imperial_mi1_8": "Within 1.8 miles",
|
"imperial_mi1_8": "Within 1.8 miles",
|
||||||
"imperial_mi0_9": "Within 0.9 miles",
|
"imperial_mi0_9": "Within 0.9 miles",
|
||||||
"imperial_mi0_5": "Within 0.5 miles",
|
"imperial_mi0_5": "Within 0.5 miles",
|
||||||
"imperial_mi0_2": "Within 0.2 miles",
|
"imperial_mi0_2": "Within 0.2 miles",
|
||||||
"imperial_ft600": "Within 600 feet",
|
"imperial_ft600": "Within 600 feet",
|
||||||
"imperial_ft300": "Within 300 feet",
|
"imperial_ft300": "Within 300 feet",
|
||||||
"imperial_ft150": "Within 150 feet"
|
"imperial_ft150": "Within 150 feet"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,50 +1,50 @@
|
|||||||
{
|
{
|
||||||
"emptyState": "No results found.",
|
"emptyState": "No results found.",
|
||||||
"page": {
|
"page": {
|
||||||
"title": "Command Menu"
|
"title": "Command Menu"
|
||||||
},
|
},
|
||||||
"pinGroup": {
|
"pinGroup": {
|
||||||
"label": "Pin command group"
|
"label": "Pin command group"
|
||||||
},
|
},
|
||||||
"unpinGroup": {
|
"unpinGroup": {
|
||||||
"label": "Unpin command group"
|
"label": "Unpin command group"
|
||||||
},
|
},
|
||||||
"goto": {
|
"goto": {
|
||||||
"label": "Goto",
|
"label": "Goto",
|
||||||
"command": {
|
"command": {
|
||||||
"messages": "Messages",
|
"messages": "Messages",
|
||||||
"map": "Carte",
|
"map": "Carte",
|
||||||
"config": "Config",
|
"config": "Config",
|
||||||
"channels": "Canaux",
|
"channels": "Canaux",
|
||||||
"nodes": "Noeuds"
|
"nodes": "Noeuds"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"manage": {
|
"manage": {
|
||||||
"label": "Manage",
|
"label": "Manage",
|
||||||
"command": {
|
"command": {
|
||||||
"switchNode": "Switch Node",
|
"switchNode": "Switch Node",
|
||||||
"connectNewNode": "Connect New Node"
|
"connectNewNode": "Connect New Node"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"contextual": {
|
"contextual": {
|
||||||
"label": "Contextual",
|
"label": "Contextual",
|
||||||
"command": {
|
"command": {
|
||||||
"qrCode": "QR Code",
|
"qrCode": "QR Code",
|
||||||
"qrGenerator": "Generator",
|
"qrGenerator": "Generator",
|
||||||
"qrImport": "Import",
|
"qrImport": "Import",
|
||||||
"scheduleShutdown": "Schedule Shutdown",
|
"scheduleShutdown": "Schedule Shutdown",
|
||||||
"scheduleReboot": "Schedule Reboot",
|
"scheduleReboot": "Schedule Reboot",
|
||||||
"rebootToOtaMode": "Reboot To OTA Mode",
|
"rebootToOtaMode": "Reboot To OTA Mode",
|
||||||
"resetNodeDb": "Reset Node DB",
|
"resetNodeDb": "Reset Node DB",
|
||||||
"factoryResetDevice": "Factory Reset Device",
|
"factoryResetDevice": "Factory Reset Device",
|
||||||
"factoryResetConfig": "Factory Reset Config"
|
"factoryResetConfig": "Factory Reset Config"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"debug": {
|
"debug": {
|
||||||
"label": "Debug",
|
"label": "Debug",
|
||||||
"command": {
|
"command": {
|
||||||
"reconfigure": "Reconfigure",
|
"reconfigure": "Reconfigure",
|
||||||
"clearAllStoredMessages": "Clear All Stored Message"
|
"clearAllStoredMessages": "Clear All Stored Message"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,141 +1,141 @@
|
|||||||
{
|
{
|
||||||
"button": {
|
"button": {
|
||||||
"apply": "Appliquer",
|
"apply": "Appliquer",
|
||||||
"backupKey": "Backup Key",
|
"backupKey": "Backup Key",
|
||||||
"cancel": "Annuler",
|
"cancel": "Annuler",
|
||||||
"clearMessages": "Clear Messages",
|
"clearMessages": "Clear Messages",
|
||||||
"close": "Fermer",
|
"close": "Fermer",
|
||||||
"confirm": "Confirm",
|
"confirm": "Confirm",
|
||||||
"delete": "Effacer",
|
"delete": "Effacer",
|
||||||
"dismiss": "Annuler",
|
"dismiss": "Annuler",
|
||||||
"download": "Download",
|
"download": "Download",
|
||||||
"export": "Export",
|
"export": "Export",
|
||||||
"generate": "Generate",
|
"generate": "Generate",
|
||||||
"regenerate": "Regenerate",
|
"regenerate": "Regenerate",
|
||||||
"import": "Import",
|
"import": "Import",
|
||||||
"message": "Message",
|
"message": "Message",
|
||||||
"now": "Now",
|
"now": "Now",
|
||||||
"ok": "D'accord",
|
"ok": "D'accord",
|
||||||
"print": "Print",
|
"print": "Print",
|
||||||
"rebootOtaNow": "Reboot to OTA Mode Now",
|
"rebootOtaNow": "Reboot to OTA Mode Now",
|
||||||
"remove": "Supprimer",
|
"remove": "Supprimer",
|
||||||
"requestNewKeys": "Request New Keys",
|
"requestNewKeys": "Request New Keys",
|
||||||
"requestPosition": "Request Position",
|
"requestPosition": "Request Position",
|
||||||
"reset": "Réinitialiser",
|
"reset": "Réinitialiser",
|
||||||
"save": "Sauvegarder",
|
"save": "Sauvegarder",
|
||||||
"scanQr": "Scan QR Code",
|
"scanQr": "Scan QR Code",
|
||||||
"traceRoute": "Trace Route",
|
"traceRoute": "Trace Route",
|
||||||
"submit": "Submit"
|
"submit": "Submit"
|
||||||
},
|
},
|
||||||
"app": {
|
"app": {
|
||||||
"title": "Meshtastic",
|
"title": "Meshtastic",
|
||||||
"fullTitle": "Meshtastic Web Client"
|
"fullTitle": "Meshtastic Web Client"
|
||||||
},
|
},
|
||||||
"loading": "Loading...",
|
"loading": "Loading...",
|
||||||
"unit": {
|
"unit": {
|
||||||
"cps": "CPS",
|
"cps": "CPS",
|
||||||
"dbm": "dBm",
|
"dbm": "dBm",
|
||||||
"hertz": "Hz",
|
"hertz": "Hz",
|
||||||
"hop": {
|
"hop": {
|
||||||
"one": "Hop",
|
"one": "Hop",
|
||||||
"plural": "Hops"
|
"plural": "Hops"
|
||||||
},
|
},
|
||||||
"hopsAway": {
|
"hopsAway": {
|
||||||
"one": "{{count}} hop away",
|
"one": "{{count}} hop away",
|
||||||
"plural": "{{count}} hops away",
|
"plural": "{{count}} hops away",
|
||||||
"unknown": "Unknown hops away"
|
"unknown": "Unknown hops away"
|
||||||
},
|
},
|
||||||
"megahertz": "MHz",
|
"megahertz": "MHz",
|
||||||
"raw": "raw",
|
"raw": "raw",
|
||||||
"meter": {
|
"meter": {
|
||||||
"one": "Meter",
|
"one": "Meter",
|
||||||
"plural": "Meters",
|
"plural": "Meters",
|
||||||
"suffix": "m"
|
"suffix": "m"
|
||||||
},
|
},
|
||||||
"minute": {
|
"minute": {
|
||||||
"one": "Minute",
|
"one": "Minute",
|
||||||
"plural": "Minutes"
|
"plural": "Minutes"
|
||||||
},
|
},
|
||||||
"hour": {
|
"hour": {
|
||||||
"one": "Hour",
|
"one": "Hour",
|
||||||
"plural": "Hours"
|
"plural": "Hours"
|
||||||
},
|
},
|
||||||
"millisecond": {
|
"millisecond": {
|
||||||
"one": "Millisecond",
|
"one": "Millisecond",
|
||||||
"plural": "Milliseconds",
|
"plural": "Milliseconds",
|
||||||
"suffix": "ms"
|
"suffix": "ms"
|
||||||
},
|
},
|
||||||
"second": {
|
"second": {
|
||||||
"one": "Second",
|
"one": "Second",
|
||||||
"plural": "Seconds"
|
"plural": "Seconds"
|
||||||
},
|
},
|
||||||
"day": {
|
"day": {
|
||||||
"one": "Day",
|
"one": "Day",
|
||||||
"plural": "Days"
|
"plural": "Days"
|
||||||
},
|
},
|
||||||
"month": {
|
"month": {
|
||||||
"one": "Month",
|
"one": "Month",
|
||||||
"plural": "Months"
|
"plural": "Months"
|
||||||
},
|
},
|
||||||
"year": {
|
"year": {
|
||||||
"one": "Year",
|
"one": "Year",
|
||||||
"plural": "Years"
|
"plural": "Years"
|
||||||
},
|
},
|
||||||
"snr": "SNR",
|
"snr": "SNR",
|
||||||
"volt": {
|
"volt": {
|
||||||
"one": "Volt",
|
"one": "Volt",
|
||||||
"plural": "Volts",
|
"plural": "Volts",
|
||||||
"suffix": "V"
|
"suffix": "V"
|
||||||
},
|
},
|
||||||
"record": {
|
"record": {
|
||||||
"one": "Records",
|
"one": "Records",
|
||||||
"plural": "Records"
|
"plural": "Records"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"0bit": "Empty",
|
"0bit": "Empty",
|
||||||
"8bit": "8 bit",
|
"8bit": "8 bit",
|
||||||
"128bit": "128 bit",
|
"128bit": "128 bit",
|
||||||
"256bit": "256 bit"
|
"256bit": "256 bit"
|
||||||
},
|
},
|
||||||
"unknown": {
|
"unknown": {
|
||||||
"longName": "Inconnu",
|
"longName": "Inconnu",
|
||||||
"shortName": "UNK",
|
"shortName": "UNK",
|
||||||
"notAvailable": "N/A",
|
"notAvailable": "N/A",
|
||||||
"num": "??"
|
"num": "??"
|
||||||
},
|
},
|
||||||
"nodeUnknownPrefix": "!",
|
"nodeUnknownPrefix": "!",
|
||||||
"unset": "UNSET",
|
"unset": "UNSET",
|
||||||
"fallbackName": "Meshtastic {{last4}}",
|
"fallbackName": "Meshtastic {{last4}}",
|
||||||
"node": "Node",
|
"node": "Node",
|
||||||
"formValidation": {
|
"formValidation": {
|
||||||
"unsavedChanges": "Unsaved changes",
|
"unsavedChanges": "Unsaved changes",
|
||||||
"tooBig": {
|
"tooBig": {
|
||||||
"string": "Too long, expected less than or equal to {{maximum}} characters.",
|
"string": "Too long, expected less than or equal to {{maximum}} characters.",
|
||||||
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
|
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
|
||||||
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
|
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
|
||||||
},
|
},
|
||||||
"tooSmall": {
|
"tooSmall": {
|
||||||
"string": "Too short, expected more than or equal to {{minimum}} characters.",
|
"string": "Too short, expected more than or equal to {{minimum}} characters.",
|
||||||
"number": "Too small, expected a number larger than or equal to {{minimum}}."
|
"number": "Too small, expected a number larger than or equal to {{minimum}}."
|
||||||
},
|
},
|
||||||
"invalidFormat": {
|
"invalidFormat": {
|
||||||
"ipv4": "Invalid format, expected an IPv4 address.",
|
"ipv4": "Invalid format, expected an IPv4 address.",
|
||||||
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
|
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
|
||||||
},
|
},
|
||||||
"invalidType": {
|
"invalidType": {
|
||||||
"number": "Invalid type, expected a number."
|
"number": "Invalid type, expected a number."
|
||||||
},
|
},
|
||||||
"pskLength": {
|
"pskLength": {
|
||||||
"0bit": "Key is required to be empty.",
|
"0bit": "Key is required to be empty.",
|
||||||
"8bit": "Key is required to be an 8 bit pre-shared key (PSK).",
|
"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).",
|
"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)."
|
"256bit": "Key is required to be a 256 bit pre-shared key (PSK)."
|
||||||
},
|
},
|
||||||
"required": {
|
"required": {
|
||||||
"generic": "This field is required.",
|
"generic": "This field is required.",
|
||||||
"managed": "At least one admin key is requred if the node is managed.",
|
"managed": "At least one admin key is requred if the node is managed.",
|
||||||
"key": "Key is required."
|
"key": "Key is required."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user