Add monorepo support to project (#682)

* feat: add monorepo support

* fix: correct relatedProjects structure in vercel.json

* update github actions with monorepo support

* removed legacy dep

* moved jsr config into web package
This commit is contained in:
Dan Ditomaso
2025-06-25 21:56:55 -04:00
committed by GitHub
parent 85ee0747d1
commit 1c13343e8a
463 changed files with 7568 additions and 2196 deletions
+1
View File
@@ -0,0 +1 @@
@jsr:registry=https://npm.jsr.io
@@ -0,0 +1,111 @@
# i18n Developer Guide
When developing new components, all user-facing text must be added as an i18n
key and rendered using our translation functions. This ensures your UI can be
translated into multiple languages.
## Adding New i18n Keys
### Search Before Creating
Before adding a new key, please perform a quick search to see if one that fits
your needs already exists. Many common labels like "Save," "Cancel," "Name,"
"Description," "Loading...," or "Error" are likely already present, especially
in the common.json namespace. Reusing existing keys prevents duplication and
ensures consistency across the application. Using your code editor's search
function across the /i18n/locales/en/ directory is an effective way to do this.
### Key Naming and Structure Rules
To maintain consistency and ease of use, please adhere to the following rules
when creating new keys in the JSON files.
- **Keys are camelCase:** `exampleKey`, `anotherExampleKey`.
- **Avoid Deep Nesting:** One or two levels of nesting are acceptable for
grouping related keys (e.g., all labels for a specific menu). However, nesting
deeper than two levels should be avoided to maintain readability and ease of
use.
- **Good (1 level):**
```json
"buttons": {
"save": "Save",
"cancel": "Cancel"
}
```
- **Acceptable (2 levels):**
```json
"userMenu": {
"items": {
"profile": "Profile",
"settings": "Settings"
}
}
```
- **Avoid (3+ levels):**
```json
"userMenu": {
"items": {
"actions": {
"viewProfile": "View Profile"
}
}
}
```
- **Organize for Retrieval, Not UI Layout:** Keys should be named logically for
easy retrieval, not to mirror the layout of your component.
### Namespace Rules
We use namespaces to organize keys. All source keys are added to the English
(`en`) files located at `/i18n/locales/en/`. Place your new keys in the
appropriate file based on these rules:
- `common.json`:
- All button labels (`save`, `cancel`, `submit`, etc.).
- Any text that is repeated and used throughout the application (e.g.,
"Loading...", "Error").
- `ui.json`:
- Labels and text specific to a distinct UI element or view that isn't a
dialog or a config page.
- `dialog.json`:
- All text specific to modal dialogs (titles, body text, prompts).
- `messages.json`:
- Text specifically related to the messaging interface.
- `deviceConfig.json` & `moduleConfig.json`:
- Labels and descriptions for the settings on the Device and Module
configuration pages.
## Using i18n Keys in Components
We use the `useTranslation` hook from `react-i18next` to access the translation
function, `t`.
### Default Namespaces
Our i18next configuration has fallback namespaces configured which includes
`common`, `ui`, and `dialog`. This means you **do not** need to explicitly
specify these namespaces when calling the hook. The system will automatically
check these files for your key.
For any keys in `common.json`, `ui.json`, or `dialog.json`, you can instantiate
the hook simply:
```typescript
import { useTranslation } from "react-i18next";
// In your component
const { t } = useTranslation(["messages"]);
// Usage
return <p>{t("someMessageLabel")}</p>;
```
You can also specify the namespace on a per-call basis using the options object.
This is useful if a component primarily uses a default namespace but needs a
single key from another.
```typescript
const { t } = useTranslation();
return <p>{t("someMessageLabel", { ns: "messages" })}</p>;
```
+31
View File
@@ -0,0 +1,31 @@
# Contributing Translations
Thank you for your interest in making the Meshtastic Web Client accessible to a
global audience! Your translation efforts are greatly appreciated.
## Our Translation Platform: Crowdin
We manage all our translations through a platform called
[Crowdin](https://crowdin.com/). This allows for a collaborative and streamlined
translation process. All translation work should be done on our Crowdin project,
not directly in the code repository via Pull Requests.
### How to Get Started
1. **Create a Crowdin Account:** If you don't already have one, sign up for a
free account on Crowdin.
2. **Join Our Project:** Please ask for a link to our specific Crowdin project
on the Meshtastic Discord.
3. **Request Translator Role:** Once you have an account, join the Meshtastic
Discord and notify an admin in the `#web` channel. They will grant you the
necessary permissions to start translating.
4. **Start Translating:** Once you have your role, you can begin translating the
source labels into your native language directly on the Crowdin platform.
### Language Activation
A new language will only be added to the web client and appear in the language
picker once its translation is 100% complete on Crowdin. The repository
maintainers will handle this process once the milestone is reached.
Thank you for helping us bring Meshtastic to more users around the world!
+674
View File
@@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
+175
View File
@@ -0,0 +1,175 @@
# Meshtastic Web
<!--Project specific badges here-->
[![CI](https://img.shields.io/github/actions/workflow/status/meshtastic/web/ci.yml?branch=main&label=actions&logo=github&color=yellow)](https://github.com/meshtastic/web/actions/workflows/ci.yml)
[![CLA assistant](https://cla-assistant.io/readme/badge/meshtastic/web)](https://cla-assistant.io/meshtastic/web)
[![Fiscal Contributors](https://opencollective.com/meshtastic/tiers/badge.svg?label=Fiscal%20Contributors&color=deeppink)](https://opencollective.com/meshtastic/)
[![Vercel](https://img.shields.io/static/v1?label=Powered%20by&message=Vercel&style=flat&logo=vercel&color=000000)](https://vercel.com?utm_source=meshtastic&utm_campaign=oss)
## Overview
Official [Meshtastic](https://meshtastic.org) web interface, that can be hosted
or served from a node
**[Hosted version](https://client.meshtastic.org)**
## Stats
![Alt](https://repobeats.axiom.co/api/embed/e5b062db986cb005d83e81724c00cb2b9cce8e4c.svg "Repobeats analytics image")
## Progress Web App Support (PWA)
Meshtastic Web Client now includes Progressive Web App (PWA) functionality,
allowing users to:
- Install the app on desktop and mobile devices
- Access the interface offline
- Receive updates automatically
- Experience faster load times with caching
To install as a PWA:
- On desktop: Look for the install icon in your browser's address bar
- On mobile: Use "Add to Home Screen" option in your browser menu
PWA functionality works with both the hosted version and self-hosted instances.
## Self-host
The client can be self hosted using the precompiled container images with an OCI
compatible runtime such as [Docker](https://www.docker.com/) or
[Podman](https://podman.io/). The base image used is
[Nginx 1.27](https://hub.docker.com/_/nginx)
```bash
# With Docker
docker run -d -p 8080:8080 --restart always --name Meshtastic-Web ghcr.io/meshtastic/web
#With Podman
podman run -d -p 8080:8080 --restart always --name Meshtastic-Web ghcr.io/meshtastic/web
```
## Release Schedule
Our release process follows these guidelines:
- **Versioning:** We use Semantic Versioning (`Major.Minor.Patch`).
- **Stable Releases:** Published around the beginning of each month (e.g.,
`v2.3.4`).
- **Pre-releases:** A pre-release is typically issued mid-month for testing and
early adoption.
- **Nightly Builds:** An experimental Docker image containing the latest
cutting-edge features and fixes is automatically built nightly from the
`main` branch.
### Nightly Builds
```bash
# With Docker
docker run -d -p 8080:8080 --restart always --name Meshtastic-Web ghcr.io/meshtastic/web:nightly
#With Podman
podman run -d -p 8080:8080 --restart always --name Meshtastic-Web ghcr.io/meshtastic/web:nightly
```
> [!WARNING]
>
> - Nightly builds represent the latest development state and may contain
> breaking changes
> - These builds undergo automated testing but may be less stable than tagged
> release versions
> - Not recommended for production environments unless you are actively testing
> new features
> - No guarantee of backward compatibility between nightly builds
#### Version Information
Each nightly build is tagged with:
- The nightly tag for the latest build
- A specific SHA for build reproducibility
### Feedback
If you encounter any issues with nightly builds, please report them in our
[issues tracker](https://github.com/meshtastic/web/issues). Your feedback helps
improve the stability of future releases
## Development & Building
You'll need to download the package manager used with this repo. You can install
it by visiting [deno.com](https://deno.com/) and following the installation
instructions listed on the home page.
### Development
Install the dependencies.
```bash
deno i
```
Start the development server:
```bash
deno task dev
```
### Building and Packaging
Build the project:
```bash
deno task build
```
GZip the output:
```bash
deno task package
```
### Why Deno?
Meshtastic Web uses Deno as its development platform for several compelling
reasons:
- **Built-in Security**: Deno's security-first approach requires explicit
permissions for file, network, and environment access, reducing vulnerability
risks.
- **TypeScript Support**: Native TypeScript support without additional
configuration, enhancing code quality and developer experience.
- **Modern JavaScript**: First-class support for ESM imports, top-level await,
and other modern JavaScript features.
- **Simplified Tooling**: Built-in formatter, linter, test runner, and bundler
eliminate the need for multiple third-party tools.
- **Reproducible Builds**: Lockfile ensures consistent builds across all
environments.
- **Web Standard APIs**: Uses browser-compatible APIs, making code more portable
between server and client environments.
### Contributing
We welcome contributions! Here’s how the deployment flow works for pull
requests:
- **Preview Deployments:**\
Every pull request automatically generates a preview deployment on Vercel.
This allows you and reviewers to easily preview changes before merging.
- **Staging Environment (`client-test`):**\
Once your PR is merged, your changes will be available on our staging site:
[client-test.meshtastic.org](https://client-test.meshtastic.org/).\
This environment supports rapid feature iteration and testing without
impacting the production site.
- **Production Releases:**\
At regular intervals, stable and fully tested releases are promoted to our
production site: [client.meshtastic.org](https://client.meshtastic.org/).\
This is the primary interface used by the public to connect with their
Meshtastic nodes.
Please review our
[Contribution Guidelines](https://github.com/meshtastic/web/blob/main/CONTRIBUTING.md)
before submitting a pull request. We appreciate your help in making the project
better!
+10
View File
@@ -0,0 +1,10 @@
project_id_env: CROWDIN_PROJECT_ID
api_token_env: CROWDIN_PERSONAL_TOKEN
base_path: "."
base_url: "https://meshtastic.crowdin.com/api/v2"
preserve_hierarchy: true
files:
- source: "/i18n/locales/en/*.json"
translation: "/i18n/locales/%locale%/%original_file_name%"
+44
View File
@@ -0,0 +1,44 @@
{
"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"
},
"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"
]
}
+7229
View File
File diff suppressed because it is too large Load Diff
+29
View File
@@ -0,0 +1,29 @@
<!DOCTYPE html>
<html lang="en" data-theme="system">
<head>
<meta charset="utf-8" />
<link rel="icon" type="image/svg+xml" href="/icon.svg" />
<link rel="icon" href="/favicon.ico" />
<link rel="apple-touch-icon" href="/apple-touch-icon.png" sizes="180x180" />
<link rel="manifest" href="site.webmanifest" />
<link rel="mask-icon" href="Logo_Black.svg" color="#67ea94" />
<link rel="stylesheet" href="https://rsms.me/inter/inter.css" />
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@xz/fonts@1/serve/cascadia-code.min.css"
/>
<meta name="theme-color" content="#67ea94" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=0"
/>
<meta name="description" content="Meshtastic Web Client" />
<title>Meshtastic Web</title>
</head>
<body>
<div id="root"></div>
<noscript>You need to enable JavaScript to run this app.</noscript>
<script type="module" src="src/index.tsx"></script>
</body>
</html>
+2
View File
@@ -0,0 +1,2 @@
../dist/build.tar
../dist/output
+15
View File
@@ -0,0 +1,15 @@
FROM nginx:1.27-alpine
RUN rm -r /usr/share/nginx/html \
&& mkdir -p /usr/share/nginx/html \
&& mkdir -p /etc/nginx/conf.d
WORKDIR /usr/share/nginx/html
ADD dist .
COPY ./infra/default.conf /etc/nginx/conf.d/default.conf
EXPOSE 8080
CMD ["nginx", "-g", "daemon off;"]
+42
View File
@@ -0,0 +1,42 @@
server {
listen 8080;
server_name localhost;
root /usr/share/nginx/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
internal;
}
location ~ /\.ht {
deny all;
}
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types
text/plain
text/css
text/xml
text/javascript
application/javascript
application/x-javascript
application/json
application/xml
application/xml+rss
font/ttf
font/otf
image/svg+xml;
}
+115
View File
@@ -0,0 +1,115 @@
{
"name": "meshtastic-web",
"version": "2.7.0-0",
"type": "module",
"description": "Meshtastic web client",
"license": "GPL-3.0-only",
"scripts": {
"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/ ."
},
"repository": {
"type": "git",
"url": "git+https://github.com/meshtastic/web.git"
},
"bugs": {
"url": "https://github.com/meshtastic/web/issues"
},
"simple-git-hooks": {
"pre-commit": "deno task lint:fix && deno task format"
},
"homepage": "https://meshtastic.org",
"dependencies": {
"@bufbuild/protobuf": "^2.2.5",
"@hookform/resolvers": "^5.1.1",
"@meshtastic/core": "npm:@jsr/meshtastic__core@2.6.4",
"@meshtastic/js": "npm:@jsr/meshtastic__js@2.6.0-0",
"@meshtastic/transport-http": "npm:@jsr/meshtastic__transport-http",
"@meshtastic/transport-web-bluetooth": "npm:@jsr/meshtastic__transport-web-bluetooth",
"@meshtastic/transport-web-serial": "npm:@jsr/meshtastic__transport-web-serial",
"@noble/curves": "^1.9.0",
"@radix-ui/react-accordion": "^1.2.8",
"@radix-ui/react-checkbox": "^1.2.3",
"@radix-ui/react-dialog": "^1.1.11",
"@radix-ui/react-dropdown-menu": "^2.1.12",
"@radix-ui/react-label": "^2.1.4",
"@radix-ui/react-menubar": "^1.1.12",
"@radix-ui/react-popover": "^1.1.11",
"@radix-ui/react-scroll-area": "^1.2.6",
"@radix-ui/react-select": "^2.2.2",
"@radix-ui/react-separator": "^1.1.4",
"@radix-ui/react-slider": "^1.3.2",
"@radix-ui/react-switch": "^1.2.2",
"@radix-ui/react-tabs": "^1.1.9",
"@radix-ui/react-toast": "^1.2.11",
"@radix-ui/react-toggle-group": "^1.1.9",
"@radix-ui/react-tooltip": "^1.2.4",
"@tanstack/react-router": "^1.120.15",
"@tanstack/react-router-devtools": "^1.120.16",
"@tanstack/router-cli": "^1.121.37",
"@tanstack/router-devtools": "^1.120.15",
"@turf/turf": "^7.2.0",
"@types/node": "^24.0.4",
"@types/web-bluetooth": "^0.0.21",
"base64-js": "^1.5.1",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"cmdk": "^1.1.1",
"crypto-random-string": "^5.0.0",
"i18next": "^25.2.0",
"i18next-browser-languagedetector": "^8.1.0",
"i18next-http-backend": "^3.0.2",
"idb-keyval": "^6.2.1",
"immer": "^10.1.1",
"js-cookie": "^3.0.5",
"lucide-react": "^0.507.0",
"maplibre-gl": "5.4.0",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-error-boundary": "^6.0.0",
"react-hook-form": "^7.56.2",
"react-i18next": "^15.5.1",
"react-map-gl": "8.0.4",
"react-qrcode-logo": "^3.0.0",
"rfc4648": "^1.5.4",
"zod": "^3.25.67",
"zustand": "5.0.5"
},
"devDependencies": {
"@tailwindcss/postcss": "^4.1.5",
"@tanstack/router-plugin": "^1.120.15",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^16.3.0",
"@testing-library/user-event": "^14.6.1",
"@types/chrome": "^0.0.318",
"@types/react": "^19.1.2",
"@types/react-dom": "^19.1.3",
"@types/serviceworker": "^0.0.133",
"@types/js-cookie": "^3.0.6",
"@types/w3c-web-serial": "^1.0.8",
"@vitejs/plugin-react": "^4.4.1",
"autoprefixer": "^10.4.21",
"gzipper": "^8.2.1",
"happy-dom": "^17.4.6",
"postcss": "^8.5.3",
"simple-git-hooks": "^2.13.0",
"tailwind-merge": "^3.2.0",
"tailwindcss": "^4.1.5",
"tailwindcss-animate": "^1.0.7",
"tar": "^7.4.3",
"testing-library": "^0.0.2",
"typescript": "^5.8.3",
"vite": "^7.0.0",
"vitest": "^3.2.4"
}
}
+5
View File
@@ -0,0 +1,5 @@
module.exports = {
plugins: {
'@tailwindcss/postcss': {},
},
};
+16
View File
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="512" height="512" viewBox="0 0 512 512" xml:space="preserve">
<desc>Created with Fabric.js 4.6.0</desc>
<defs>
</defs>
<g transform="matrix(1 0 0 1 256 256)" id="xYQ9Gk9Jwpgj_HMOXB3F_" >
<path style="stroke: rgb(213,130,139); stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(103,234,148); fill-rule: nonzero; opacity: 1;" vector-effect="non-scaling-stroke" transform=" translate(-256, -256)" d="M 0 0 L 512 0 L 512 512 L 0 512 z" stroke-linecap="round" />
</g>
<g transform="matrix(1.79 0 0 1.79 313.74 258.36)" id="1xBsk2n9FZp60Rz1O-ceJ" >
<path style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: round; stroke-miterlimit: 2; fill: rgb(44,45,60); fill-rule: evenodd; opacity: 1;" vector-effect="non-scaling-stroke" transform=" translate(-250.97, -362.41)" d="M 250.908 330.267 L 193.126 415.005 L 180.938 406.694 L 244.802 313.037 C 246.174 311.024 248.453 309.819 250.889 309.816 C 253.326 309.814 255.606 311.015 256.982 313.026 L 320.994 406.536 L 308.821 414.869 L 250.908 330.267 Z" stroke-linecap="round" />
</g>
<g transform="matrix(1.81 0 0 1.81 145 256.15)" id="KxN7E9YpbyPgz0S4z4Cl6" >
<path style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: round; stroke-miterlimit: 2; fill: rgb(44,45,60); fill-rule: evenodd; opacity: 1;" vector-effect="non-scaling-stroke" transform=" translate(-115.14, -528.06)" d="M 87.642 581.398 L 154.757 482.977 L 142.638 474.713 L 75.523 573.134 L 87.642 581.398 Z" stroke-linecap="round" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 100 55" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<g transform="matrix(0.802386,0,0,0.460028,-421.748,-122.127)">
<g transform="matrix(0.579082,0,0,1.01004,460.975,-39.6867)">
<path d="M250.908,330.267L193.126,415.005L180.938,406.694L244.802,313.037C246.174,311.024 248.453,309.819 250.889,309.816C253.326,309.814 255.606,311.015 256.982,313.026L320.994,406.536L308.821,414.869L250.908,330.267Z"/>
</g>
<g transform="matrix(0.582378,0,0,1.01579,485.019,-211.182)">
<path d="M87.642,581.398L154.757,482.977L142.638,474.713L75.523,573.134L87.642,581.398Z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 100 55" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<g transform="matrix(0.802386,0,0,0.460028,-421.748,-122.127)">
<g transform="matrix(0.579082,0,0,1.01004,460.975,-39.6867)">
<path d="M250.908,330.267L193.126,415.005L180.938,406.694L244.802,313.037C246.174,311.024 248.453,309.819 250.889,309.816C253.326,309.814 255.606,311.015 256.982,313.026L320.994,406.536L308.821,414.869L250.908,330.267Z" style="fill:white;"/>
</g>
<g transform="matrix(0.582378,0,0,1.01579,485.019,-211.182)">
<path d="M87.642,581.398L154.757,482.977L142.638,474.713L75.523,573.134L87.642,581.398Z" style="fill:white;"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 62 KiB

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="795.27 277.13 409.46 1319.35"><defs><style>.cls-1{fill:#353535;}.cls-2{fill:#1e1e1d;}.cls-3{fill:#b1a368;}.cls-10,.cls-11,.cls-4,.cls-6,.cls-8,.cls-9{fill:none;}.cls-4,.cls-6{stroke:#050606;}.cls-10,.cls-11,.cls-4,.cls-6,.cls-8{stroke-miterlimit:10;}.cls-4{stroke-width:2.41px;}.cls-5{fill:#30c2db;}.cls-6{stroke-width:3.91px;}.cls-7{fill:#dcf0f2;}.cls-10,.cls-11,.cls-8{stroke:#dcf0f2;}.cls-8{stroke-width:1.81px;}.cls-9{stroke:#17afbf;stroke-linecap:round;stroke-linejoin:round;stroke-width:7.23px;}.cls-10{stroke-width:1.78px;}.cls-11{stroke-width:1.81px;}</style></defs><g id="Layer_7" data-name="Layer 7"><path class="cls-1" d="M915.62,278.34h22.61a35,35,0,0,1,35,35V715.74a0,0,0,0,1,0,0H880.6a0,0,0,0,1,0,0V313.36A35,35,0,0,1,915.62,278.34Z"></path><rect class="cls-2" x="880.6" y="340.15" width="92.65" height="7.54"></rect><rect class="cls-2" x="880.6" y="356.68" width="92.65" height="7.54"></rect><rect class="cls-3" x="885.8" y="844.3" width="84.14" height="19.02"></rect><rect class="cls-3" x="880.6" y="819.07" width="92.65" height="25.23"></rect><rect class="cls-3" x="885.8" y="790.65" width="84.14" height="28.41"></rect><rect class="cls-3" x="880.6" y="723.02" width="92.65" height="67.63"></rect><rect class="cls-3" x="885.8" y="715.74" width="84.14" height="7.28"></rect><rect class="cls-4" x="885.8" y="844.3" width="84.14" height="19.02"></rect><rect class="cls-4" x="880.6" y="819.07" width="92.65" height="25.23"></rect><rect class="cls-4" x="885.8" y="790.65" width="84.14" height="28.41"></rect><rect class="cls-4" x="880.6" y="723.02" width="92.65" height="67.63"></rect><rect class="cls-4" x="885.8" y="715.74" width="84.14" height="7.28"></rect><path class="cls-4" d="M915.62,278.34h22.61a35,35,0,0,1,35,35V715.74a0,0,0,0,1,0,0H880.6a0,0,0,0,1,0,0V313.36A35,35,0,0,1,915.62,278.34Z"></path><rect class="cls-4" x="880.6" y="340.15" width="92.65" height="7.54"></rect><rect class="cls-4" x="880.6" y="356.68" width="92.65" height="7.54"></rect><rect class="cls-5" x="796.48" y="856.3" width="407.05" height="738.98" rx="47.74"></rect><rect class="cls-1" x="900.05" y="973.19" width="202.03" height="354.65" rx="16.4"></rect><rect class="cls-6" x="900.05" y="973.19" width="202.03" height="354.65" rx="16.4"></rect><rect class="cls-7" x="871.51" y="890.41" width="55.42" height="31.12" rx="15.56"></rect><rect class="cls-7" x="1070.16" y="890.41" width="55.42" height="31.12" rx="15.56"></rect><rect class="cls-4" x="871.51" y="890.41" width="55.42" height="31.12" rx="15.56"></rect><rect class="cls-4" x="1070.16" y="890.41" width="55.42" height="31.12" rx="15.56"></rect><circle class="cls-8" cx="841.7" cy="1537.01" r="16.25"></circle><circle class="cls-8" cx="841.7" cy="913.26" r="16.25"></circle><circle class="cls-8" cx="1157.32" cy="913.26" r="16.25"></circle><circle class="cls-8" cx="1157.32" cy="1504.51" r="16.25"></circle><line class="cls-9" x1="942.51" y1="1592.42" x2="942.51" y2="1381.55"></line><line class="cls-9" x1="966.52" y1="1592.42" x2="966.52" y2="1381.55"></line><line class="cls-9" x1="990.57" y1="1592.42" x2="990.57" y2="1381.55"></line><line class="cls-9" x1="1014.59" y1="1592.42" x2="1014.59" y2="1381.55"></line><line class="cls-9" x1="1038.63" y1="1592.42" x2="1038.63" y2="1381.55"></line><line class="cls-9" x1="1062.65" y1="1592.42" x2="1062.65" y2="1381.55"></line><rect class="cls-4" x="796.48" y="856.3" width="407.05" height="738.98" rx="47.74"></rect><path class="cls-10" d="M1040.1,947.74H960.65A13.93,13.93,0,0,1,947,936.64l-10.23-49.2a13.93,13.93,0,0,1,13.64-16.77h97.72a13.93,13.93,0,0,1,13.75,16.18l-8,49.2A13.94,13.94,0,0,1,1040.1,947.74Z"></path><rect class="cls-11" x="816.35" y="870.67" width="365.51" height="703.12" rx="32.37"></rect><rect class="cls-11" x="888.77" y="963.84" width="223.2" height="374.66" rx="25.21"></rect></g></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.8 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="404.68 390.65 1217.15 959.26"><defs><style>.cls-1{fill:#dfeaf7;}.cls-2{fill:#17907f;}.cls-3{fill:#2b2b2b;}.cls-4,.cls-5{fill:none;stroke:#050606;stroke-miterlimit:10;}.cls-4{stroke-width:2.25px;}.cls-5{stroke-width:4px;}.cls-6{fill:#050606;}</style></defs><g id="Layer_5" data-name="Layer 5"><path class="cls-1" d="M1517.73,392.65h0a102.1,102.1,0,0,0-102.1,102.1V770.37A40.62,40.62,0,0,1,1375,811H455.16a48.49,48.49,0,0,0-48.48,48.48v126a11.85,11.85,0,0,0,3.46,8.37l15.34,15.34a11.81,11.81,0,0,1,3.47,8.37v137.16a11.81,11.81,0,0,1-3.47,8.37l-15.34,15.34a11.85,11.85,0,0,0-3.46,8.37v112.67a48.49,48.49,0,0,0,48.48,48.49H1571.34a48.51,48.51,0,0,0,48.49-48.5V494.75A102.1,102.1,0,0,0,1517.73,392.65Zm-110.61,815V954a33.14,33.14,0,0,1,66.27,0v253.65a33.14,33.14,0,0,1-66.27,0Z"></path><path class="cls-2" d="M1516,439.16c-30.23.91-53.92,26.54-53.92,56.79V770.37A87.11,87.11,0,0,1,1375,857.48H732.31A27.51,27.51,0,0,0,704.8,885v388.93a27.51,27.51,0,0,0,27.51,27.51h828.38a12.7,12.7,0,0,0,12.65-12.65v-794A55.69,55.69,0,0,0,1516,439.16Zm-108.9,768.47V954a33.14,33.14,0,0,1,66.27,0v253.65a33.14,33.14,0,0,1-66.27,0Z"></path><rect class="cls-3" x="787.14" y="943.38" width="429.45" height="224.42"></rect><path class="cls-1" d="M1478.6,915.35A54.23,54.23,0,0,0,1386,953.69v254.23a54.23,54.23,0,1,0,108.45,0V953.69A54,54,0,0,0,1478.6,915.35Zm-5.21,292.28a33.14,33.14,0,0,1-66.27,0V954a33.14,33.14,0,0,1,66.27,0Z"></path></g><g id="Layer_2" data-name="Layer 2"><path class="cls-4" d="M1573.34,494.75v794a12.68,12.68,0,0,1-12.65,12.65H732.31a27.51,27.51,0,0,1-27.51-27.51V885a27.51,27.51,0,0,1,27.51-27.51H1375a87.11,87.11,0,0,0,87.11-87.11V496c0-30.25,23.69-55.88,53.92-56.79A55.69,55.69,0,0,1,1573.34,494.75Z"></path><path class="cls-5" d="M410.14,1178.39,425.49,1163a11.78,11.78,0,0,0,3.46-8.35V1017.5a11.8,11.8,0,0,0-3.46-8.35l-15.35-15.36a11.77,11.77,0,0,1-3.46-8.35v-126A48.47,48.47,0,0,1,455.16,811H1375a40.63,40.63,0,0,0,40.63-40.63V494.75a102.1,102.1,0,0,1,102.1-102.1h0a102.1,102.1,0,0,1,102.1,102.1v804.66a48.51,48.51,0,0,1-48.49,48.5H455.16a48.48,48.48,0,0,1-48.48-48.49V1186.74A11.78,11.78,0,0,1,410.14,1178.39Z"></path><rect class="cls-4" x="1407.12" y="920.85" width="66.26" height="319.9" rx="33.13"></rect><rect class="cls-4" x="1386.03" y="899.46" width="108.46" height="362.69" rx="54.23"></rect><path class="cls-6" d="M639.76,1070.55a2.91,2.91,0,0,1-2.91-2.91v-30.53a5.42,5.42,0,0,0-1.6-3.86l-32.44-32.44a11.86,11.86,0,0,1-3.5-8.44V901a12.52,12.52,0,0,0-12.51-12.51H483.92a12.7,12.7,0,0,0-12.68,12.69v76.78a24.13,24.13,0,0,0,7.11,17.18l14.33,14.33a24.13,24.13,0,0,0,17.18,7.11h50.75a11.86,11.86,0,0,1,8.44,3.5l24.26,24.26a12.47,12.47,0,0,1,3.68,8.88v14.46a2.91,2.91,0,1,1-5.81,0v-14.46a6.72,6.72,0,0,0-2-4.77l-24.26-24.26a6.09,6.09,0,0,0-4.33-1.8H509.86a29.91,29.91,0,0,1-21.29-8.81l-14.33-14.33a29.87,29.87,0,0,1-8.81-21.29V901.14a18.51,18.51,0,0,1,18.49-18.5H586.8A18.34,18.34,0,0,1,605.12,901v91.41a6.09,6.09,0,0,0,1.8,4.33l32.44,32.44a11.19,11.19,0,0,1,3.3,8v30.53A2.9,2.9,0,0,1,639.76,1070.55Z"></path><path class="cls-6" d="M586.8,1289.46H483.92a18.51,18.51,0,0,1-18.49-18.5v-76.78a29.87,29.87,0,0,1,8.81-21.29l14.33-14.34a29.91,29.91,0,0,1,21.29-8.81h50.75a6.09,6.09,0,0,0,4.33-1.8l24.26-24.25a6.74,6.74,0,0,0,2-4.78v-14.46a2.91,2.91,0,0,1,5.81,0v14.46a12.51,12.51,0,0,1-3.68,8.89l-24.26,24.25a11.86,11.86,0,0,1-8.44,3.5H509.86a24.17,24.17,0,0,0-17.18,7.11L478.35,1177a24.09,24.09,0,0,0-7.11,17.18V1271a12.71,12.71,0,0,0,12.68,12.69H586.8a12.53,12.53,0,0,0,12.51-12.52v-91.4a11.83,11.83,0,0,1,3.5-8.44l32.44-32.44a5.46,5.46,0,0,0,1.6-3.87v-30.53a2.91,2.91,0,0,1,5.81,0V1135a11.19,11.19,0,0,1-3.3,8l-32.44,32.45a6.06,6.06,0,0,0-1.8,4.33v91.4A18.35,18.35,0,0,1,586.8,1289.46Z"></path><rect class="cls-4" x="787.14" y="943.38" width="429.45" height="224.42"></rect></g></svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 32 KiB

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="528.89 806.04 942.22 446.84"><defs><style>.cls-1{fill:#e8eae8;}.cls-2{fill:#dbdddb;}.cls-3{fill:#c6842a;}.cls-4,.cls-5,.cls-7,.cls-9{fill:none;stroke-miterlimit:10;}.cls-4,.cls-5{stroke:#050606;}.cls-4,.cls-9{stroke-width:2.44px;}.cls-5,.cls-7{stroke-width:1.22px;}.cls-6{fill:#b7b7b7;}.cls-7,.cls-9{stroke:#b7b7b7;}.cls-8{fill:#cbcccb;}.cls-10{fill:#434543;}</style></defs><g id="Layer_4" data-name="Layer 4"><path class="cls-1" d="M1469.9,826.68v390.94a19.43,19.43,0,0,1-19.43,19.43H549.53a19.43,19.43,0,0,1-19.43-19.43V826.68a19.42,19.42,0,0,1,19.43-19.42h900.94A19.42,19.42,0,0,1,1469.9,826.68Z"></path><path class="cls-2" d="M574.23,807.26v429.79h-24.7a19.43,19.43,0,0,1-19.43-19.43V826.68a19.42,19.42,0,0,1,19.43-19.42Z"></path><path class="cls-2" d="M1469.9,826.68v390.94a19.43,19.43,0,0,1-19.43,19.43h-37.56V807.26h37.56A19.42,19.42,0,0,1,1469.9,826.68Z"></path><path class="cls-3" d="M574.23,1129.8h-7.47a4.55,4.55,0,0,1-4.55-4.54V919.05a4.55,4.55,0,0,1,4.55-4.55h7.47"></path><rect class="cls-4" x="530.11" y="807.26" width="939.78" height="429.79" rx="19.42"></rect><line class="cls-5" x1="574.23" y1="807.26" x2="574.23" y2="1237.05"></line><path class="cls-5" d="M574.23,1129.8h-7.47a4.55,4.55,0,0,1-4.55-4.54V919.05a4.55,4.55,0,0,1,4.55-4.55h7.47"></path><rect class="cls-6" x="599.01" y="970.1" width="11.52" height="104.11"></rect><rect class="cls-5" x="599.01" y="970.1" width="11.52" height="104.11"></rect><path class="cls-2" d="M610.53,816.78V935.32l38.37,11.55a7.85,7.85,0,0,1,5.6,7.53V1107a7.87,7.87,0,0,1-7.87,7.87h-36.1v110.58H1406V816.78Zm775.41,384.75H631.43a3.66,3.66,0,0,1-3.66-3.66V1138a3.65,3.65,0,0,1,3.66-3.65h28.3a14.7,14.7,0,0,0,14.71-14.71V931a14.7,14.7,0,0,0-14.71-14.71h-28.3a3.65,3.65,0,0,1-3.66-3.66V844.11a3.66,3.66,0,0,1,3.66-3.66h754.51Z"></path><path class="cls-1" d="M1385.94,840.45v361.08H631.43a3.66,3.66,0,0,1-3.66-3.66V1138a3.65,3.65,0,0,1,3.66-3.65h28.3a14.7,14.7,0,0,0,14.71-14.71V931a14.7,14.7,0,0,0-14.71-14.71h-28.3a3.65,3.65,0,0,1-3.66-3.66V844.11a3.66,3.66,0,0,1,3.66-3.66Z"></path><path class="cls-7" d="M610.53,816.78V935.32l38.37,11.55a7.85,7.85,0,0,1,5.6,7.53V1107a7.87,7.87,0,0,1-7.87,7.87h-36.1v110.58H1406V816.78Zm775.41,384.75H631.43a3.66,3.66,0,0,1-3.66-3.66V1138a3.65,3.65,0,0,1,3.66-3.65h28.3a14.7,14.7,0,0,0,14.71-14.71V931a14.7,14.7,0,0,0-14.71-14.71h-28.3a3.65,3.65,0,0,1-3.66-3.66V844.11a3.66,3.66,0,0,1,3.66-3.66h754.51Z"></path><path class="cls-7" d="M1385.94,840.45v361.08H631.43a3.66,3.66,0,0,1-3.66-3.66V1138a3.65,3.65,0,0,1,3.66-3.65h28.3a14.7,14.7,0,0,0,14.71-14.71V931a14.7,14.7,0,0,0-14.71-14.71h-28.3a3.65,3.65,0,0,1-3.66-3.66V844.11a3.66,3.66,0,0,1,3.66-3.66Z"></path><path class="cls-7" d="M1385.94,840.45v361.08H631.43a3.66,3.66,0,0,1-3.66-3.66V1138a3.65,3.65,0,0,1,3.66-3.65h28.3a14.7,14.7,0,0,0,14.71-14.71V931a14.7,14.7,0,0,0-14.71-14.71h-28.3a3.65,3.65,0,0,1-3.66-3.66V844.11a3.66,3.66,0,0,1,3.66-3.66Z"></path><line class="cls-7" x1="666.4" y1="1132.79" x2="666.4" y2="1201.53"></line><line class="cls-7" x1="663.66" y1="916.86" x2="663.66" y2="840.45"></line><circle class="cls-8" cx="644.99" cy="878.66" r="10.7"></circle><circle class="cls-8" cx="644.99" cy="1171.55" r="10.7"></circle><circle class="cls-9" cx="644.99" cy="878.66" r="10.7"></circle><circle class="cls-9" cx="644.99" cy="1171.55" r="10.7"></circle><path class="cls-10" d="M1225,1237.05l2.23,11.19a4.25,4.25,0,0,0,4.17,3.42H1249a4.26,4.26,0,0,0,4.18-3.42l2.22-11.19"></path><path class="cls-10" d="M1306.87,1237.05l2.22,11.19a4.26,4.26,0,0,0,4.18,3.42h17.62a4.25,4.25,0,0,0,4.17-3.42l2.22-11.19"></path><path class="cls-10" d="M1388.77,1237.05l2.23,11.19a4.24,4.24,0,0,0,4.17,3.42h17.62a4.25,4.25,0,0,0,4.17-3.42l2.23-11.19"></path><path class="cls-4" d="M1225,1237.05l2.23,11.19a4.25,4.25,0,0,0,4.17,3.42H1249a4.26,4.26,0,0,0,4.18-3.42l2.22-11.19"></path><path class="cls-4" d="M1306.87,1237.05l2.22,11.19a4.26,4.26,0,0,0,4.18,3.42h17.62a4.25,4.25,0,0,0,4.17-3.42l2.22-11.19"></path><path class="cls-4" d="M1388.77,1237.05l2.23,11.19a4.24,4.24,0,0,0,4.17,3.42h17.62a4.25,4.25,0,0,0,4.17-3.42l2.23-11.19"></path><line class="cls-4" x1="1412.9" y1="807.26" x2="1412.9" y2="1237.05"></line></g></svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.1 KiB

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="479.57 786.58 1040.84 433.17"><defs><style>.cls-1{fill:#cccccb;}.cls-2{fill:#2b2b2b;}.cls-3,.cls-6,.cls-7,.cls-8{fill:none;stroke-miterlimit:10;}.cls-3,.cls-6,.cls-7{stroke:#050606;}.cls-3,.cls-8{stroke-width:1.65px;}.cls-4{fill:#40403f;}.cls-5{fill:#ddd;}.cls-6{stroke-width:1.62px;}.cls-7{stroke-width:1.64px;}.cls-8{stroke:#fff;}.cls-9{fill:#353535;}.cls-10{fill:#c08c2d;}</style></defs><g id="Layer_4" data-name="Layer 4"><path class="cls-1" d="M595,923.44H519.6A10.46,10.46,0,0,1,509.14,913V802.7a15.28,15.28,0,0,1,15.28-15.28h979.89a15.29,15.29,0,0,1,15.29,15.29v400.93a15.3,15.3,0,0,1-15.29,15.29H524.42a15.28,15.28,0,0,1-15.28-15.28V1102.1a10.46,10.46,0,0,1,10.46-10.46H595"></path><rect class="cls-2" x="611.37" y="796.48" width="819.83" height="411.47"></rect><line class="cls-3" x1="1441.99" y1="787.41" x2="1441.99" y2="1218.92"></line><path class="cls-4" d="M620.91,851.7v302.78a1.87,1.87,0,0,1-1.87,1.87h-13.8a8.7,8.7,0,0,1-.89,0,10.23,10.23,0,0,1-9.35-10.2v-286a10.24,10.24,0,0,1,9.35-10.2,8.7,8.7,0,0,1,.89,0H619A1.87,1.87,0,0,1,620.91,851.7Z"></path><rect class="cls-5" x="480.4" y="942.42" width="114.6" height="127.58"></rect><rect class="cls-3" x="480.4" y="942.42" width="114.6" height="127.58"></rect><path class="cls-6" d="M595,923.44H519.6A10.46,10.46,0,0,1,509.14,913V802.7a15.28,15.28,0,0,1,15.28-15.28h979.89a15.29,15.29,0,0,1,15.29,15.29v400.93a15.3,15.3,0,0,1-15.29,15.29H524.42a15.28,15.28,0,0,1-15.28-15.28V1102.1a10.46,10.46,0,0,1,10.46-10.46H595"></path><path class="cls-2" d="M584.65,970.14H595a0,0,0,0,1,0,0v24.44a0,0,0,0,1,0,0H584.65a3,3,0,0,1-3-3V973.11A3,3,0,0,1,584.65,970.14Z"></path><rect class="cls-2" x="560.58" y="976.5" width="9.04" height="16.58" rx="2.72"></rect><path class="cls-2" d="M584.65,1026.63H595a0,0,0,0,1,0,0v24.44a0,0,0,0,1,0,0H584.65a3,3,0,0,1-3-3v-18.49A3,3,0,0,1,584.65,1026.63Z"></path><rect class="cls-2" x="560.58" y="1028.91" width="9.04" height="16.58" rx="2.72"></rect><path class="cls-3" d="M584.65,970.14H595a0,0,0,0,1,0,0v24.44a0,0,0,0,1,0,0H584.65a3,3,0,0,1-3-3V973.11A3,3,0,0,1,584.65,970.14Z"></path><rect class="cls-3" x="560.58" y="976.5" width="9.04" height="16.58" rx="2.72"></rect><path class="cls-3" d="M584.65,1026.63H595a0,0,0,0,1,0,0v24.44a0,0,0,0,1,0,0H584.65a3,3,0,0,1-3-3v-18.49A3,3,0,0,1,584.65,1026.63Z"></path><rect class="cls-3" x="560.58" y="1028.91" width="9.04" height="16.58" rx="2.72"></rect><polyline class="cls-7" points="611.37 1156.35 611.37 1207.95 1431.2 1207.95 1431.2 796.48 611.37 796.48 611.37 849.83"></polyline><line class="cls-3" x1="611.37" y1="1207.95" x2="611.37" y2="1218.93"></line><line class="cls-3" x1="611.37" y1="796.48" x2="611.37" y2="787.42"></line><rect class="cls-8" x="560.58" y="1107.17" width="18.37" height="41.67" rx="4.91"></rect><rect class="cls-8" x="528.51" y="1107.17" width="18.37" height="41.67" rx="4.91"></rect><rect class="cls-8" x="560.58" y="1166.28" width="18.37" height="41.67" rx="4.91"></rect><rect class="cls-8" x="528.51" y="1166.28" width="18.37" height="41.67" rx="4.91"></rect><rect class="cls-8" x="560.58" y="804.46" width="18.37" height="41.67" rx="4.91"></rect><rect class="cls-8" x="528.51" y="804.46" width="18.37" height="41.67" rx="4.91"></rect><rect class="cls-8" x="560.58" y="863.57" width="18.37" height="41.67" rx="4.91"></rect><rect class="cls-8" x="528.51" y="863.57" width="18.37" height="41.67" rx="4.91"></rect><circle class="cls-8" cx="1476.63" cy="831.74" r="27.15"></circle><circle class="cls-8" cx="1476.63" cy="1173.49" r="27.15"></circle><rect class="cls-9" x="676.15" y="804.6" width="742.79" height="396.03"></rect><path class="cls-10" d="M604.35,849.87v306.44a10.23,10.23,0,0,1-9.35-10.2v-286A10.24,10.24,0,0,1,604.35,849.87Z"></path><path class="cls-3" d="M605.24,849.83H619a1.87,1.87,0,0,1,1.87,1.87v302.78a1.87,1.87,0,0,1-1.87,1.87h-13.8A10.24,10.24,0,0,1,595,1146.11v-286A10.24,10.24,0,0,1,605.24,849.83Z"></path><rect class="cls-6" x="676.15" y="804.6" width="742.79" height="396.03"></rect></g></svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 83 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 83 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 43 KiB

@@ -0,0 +1,69 @@
{
"page": {
"sectionLabel": "Канали",
"channelName": "Канал: {{channelName}}",
"broadcastLabel": "Primary",
"channelIndex": "Ch {{index}}"
},
"validation": {
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
},
"settings": {
"label": "Настройки на канала",
"description": "Crypto, MQTT & misc settings"
},
"role": {
"label": "Роля",
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
"options": {
"primary": "PRIMARY",
"disabled": "DISABLED",
"secondary": "SECONDARY"
}
},
"psk": {
"label": "Pre-Shared Key",
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
"generate": "Генериране"
},
"name": {
"label": "Име",
"description": "A unique name for the channel <12 bytes, leave blank for default"
},
"uplinkEnabled": {
"label": "Uplink Enabled",
"description": "Send messages from the local mesh to MQTT"
},
"downlinkEnabled": {
"label": "Downlink Enabled",
"description": "Send messages from MQTT to the local mesh"
},
"positionPrecision": {
"label": "Местоположение",
"description": "The precision of the location to share with the channel. Can be disabled.",
"options": {
"none": "Да не се споделя местоположението",
"precise": "Точно местоположение",
"metric_km23": "Within 23 kilometers",
"metric_km12": "Within 12 kilometers",
"metric_km5_8": "Within 5.8 kilometers",
"metric_km2_9": "Within 2.9 kilometers",
"metric_km1_5": "Within 1.5 kilometers",
"metric_m700": "Within 700 meters",
"metric_m350": "Within 350 meters",
"metric_m200": "Within 200 meters",
"metric_m90": "Within 90 meters",
"metric_m50": "Within 50 meters",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
}
@@ -0,0 +1,50 @@
{
"emptyState": "Няма намерени резултати.",
"page": {
"title": "Command Menu"
},
"pinGroup": {
"label": "Pin command group"
},
"unpinGroup": {
"label": "Unpin command group"
},
"goto": {
"label": "Goto",
"command": {
"messages": "Съобщения",
"map": "Карта",
"config": "Конфигурация",
"channels": "Канали",
"nodes": "Възли"
}
},
"manage": {
"label": "Управление",
"command": {
"switchNode": "Switch Node",
"connectNewNode": "Свързване на нов възел"
}
},
"contextual": {
"label": "Contextual",
"command": {
"qrCode": "QR код",
"qrGenerator": "Генератор",
"qrImport": "Импортиране",
"scheduleShutdown": "Планирано изключване",
"scheduleReboot": "Планирано рестартиране",
"rebootToOtaMode": "Рестартиране в режим OTA",
"resetNodeDb": "Нулиране на базата данни с възли",
"factoryResetDevice": "Фабрично нулиране на устройството",
"factoryResetConfig": "Фабрично нулиране на конфигурацията"
}
},
"debug": {
"label": "Отстраняване на грешки",
"command": {
"reconfigure": "Преконфигуриране",
"clearAllStoredMessages": "Изчистване на всички съхранени съобщения"
}
}
}
@@ -0,0 +1,141 @@
{
"button": {
"apply": "Приложи",
"backupKey": "Backup Key",
"cancel": "Отказ",
"clearMessages": "Изчистване на съобщенията",
"close": "Затвори",
"confirm": "Потвърждаване",
"delete": "Изтриване",
"dismiss": "Отхвърляне",
"download": "Изтегляне",
"export": "Експортиране",
"generate": "Генериране",
"regenerate": "Регенериране",
"import": "Импортиране",
"message": "Съобщение",
"now": "Сега",
"ok": "Добре",
"print": "Отпечатване",
"rebootOtaNow": "Reboot to OTA Mode Now",
"remove": "Изтрий",
"requestNewKeys": "Request New Keys",
"requestPosition": "Request Position",
"reset": "Нулиране",
"save": "Запис",
"scanQr": "Сканиране на QR кода",
"traceRoute": "Trace Route",
"submit": "Submit"
},
"app": {
"title": "Meshtastic",
"fullTitle": "Meshtastic Web клиент"
},
"loading": "Зареждане...",
"unit": {
"cps": "CPS",
"dbm": "dBm",
"hertz": "Hz",
"hop": {
"one": "Hop",
"plural": "Hops"
},
"hopsAway": {
"one": "{{count}} hop away",
"plural": "{{count}} hops away",
"unknown": "Unknown hops away"
},
"megahertz": "MHz",
"raw": "raw",
"meter": {
"one": "Метър",
"plural": "Метри",
"suffix": "m"
},
"minute": {
"one": "Минута",
"plural": "Минути"
},
"hour": {
"one": "Час",
"plural": "Часа"
},
"millisecond": {
"one": "Милисекунда",
"plural": "Милисекунди",
"suffix": "ms"
},
"second": {
"one": "Секунда",
"plural": "Секунди"
},
"day": {
"one": "Ден",
"plural": "Дни"
},
"month": {
"one": "Месец",
"plural": "Месеца"
},
"year": {
"one": "Година",
"plural": "Години"
},
"snr": "SNR",
"volt": {
"one": "Волт",
"plural": "Волта",
"suffix": "V"
},
"record": {
"one": "Записи",
"plural": "Записи"
}
},
"security": {
"0bit": "Empty",
"8bit": "8 bit",
"128bit": "128 bit",
"256bit": "256 bit"
},
"unknown": {
"longName": "Неизвестно",
"shortName": "НЕИЗВ.",
"notAvailable": "N/A",
"num": "??"
},
"nodeUnknownPrefix": "!",
"unset": "НЕЗАДАДЕН",
"fallbackName": "Meshtastic {{last4}}",
"node": "Възел",
"formValidation": {
"unsavedChanges": "Unsaved changes",
"tooBig": {
"string": "Too long, expected less than or equal to {{maximum}} characters.",
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
},
"tooSmall": {
"string": "Too short, expected more than or equal to {{minimum}} characters.",
"number": "Too small, expected a number larger than or equal to {{minimum}}."
},
"invalidFormat": {
"ipv4": "Невалиден формат, очаква се IPv4 адрес.",
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
},
"invalidType": {
"number": "Невалиден тип, очаква се число."
},
"pskLength": {
"0bit": "Ключът трябва да е празен.",
"8bit": "Key is required to be an 8 bit pre-shared key (PSK).",
"128bit": "Key is required to be a 128 bit pre-shared key (PSK).",
"256bit": "Key is required to be a 256 bit pre-shared key (PSK)."
},
"required": {
"generic": "Това поле е задължително.",
"managed": "At least one admin key is requred if the node is managed.",
"key": "Ключът е задължителен."
}
}
}
@@ -0,0 +1,12 @@
{
"dashboard": {
"title": "Свързани устройства",
"description": "Управлявайте свързаните си устройства Meshtastic.",
"connectionType_ble": "BLE",
"connectionType_serial": "Серийна",
"connectionType_network": "Мрежа",
"noDevicesTitle": "Няма свързани устройства",
"noDevicesDescription": "Свържете ново устройство, за да започнете.",
"button_newConnection": "Нова връзка"
}
}
@@ -0,0 +1,428 @@
{
"page": {
"title": "Конфигурация",
"tabBluetooth": "Bluetooth",
"tabDevice": "Устройство",
"tabDisplay": "Дисплей",
"tabLora": "LoRa",
"tabNetwork": "Мрежа",
"tabPosition": "Позиция",
"tabPower": "Захранване",
"tabSecurity": "Сигурност"
},
"sidebar": {
"label": "Модули"
},
"device": {
"title": "Настройки на устройството",
"description": "Настройки за устройството",
"buttonPin": {
"description": "Button pin override",
"label": "Button Pin"
},
"buzzerPin": {
"description": "Buzzer pin override",
"label": "Buzzer Pin"
},
"disableTripleClick": {
"description": "Disable triple click",
"label": "Disable Triple Click"
},
"doubleTapAsButtonPress": {
"description": "Treat double tap as button press",
"label": "Double Tap as Button Press"
},
"ledHeartbeatDisabled": {
"description": "Disable default blinking LED",
"label": "LED Heartbeat Disabled"
},
"nodeInfoBroadcastInterval": {
"description": "How often to broadcast node info",
"label": "Node Info Broadcast Interval"
},
"posixTimezone": {
"description": "The POSIX timezone string for the device",
"label": "POSIX часова зона"
},
"rebroadcastMode": {
"description": "How to handle rebroadcasting",
"label": "Rebroadcast Mode"
},
"role": {
"description": "What role the device performs on the mesh",
"label": "Роля"
}
},
"bluetooth": {
"title": "Настройки за Bluetooth",
"description": "Настройки за Bluetooth модула",
"note": "Забележка: Някои устройства (ESP32) не могат да използват едновременно Bluetooth и WiFi.",
"enabled": {
"description": "Активиране или дезактивиране на Bluetooth",
"label": "Активиран"
},
"pairingMode": {
"description": "Поведение при избор на ПИН.",
"label": "Режим на сдвояване"
},
"pin": {
"description": "Pin to use when pairing",
"label": "ПИН"
}
},
"display": {
"description": "Настройки за дисплея на устройството",
"title": "Настройки на дисплея",
"headingBold": {
"description": "Bolden the heading text",
"label": "Bold Heading"
},
"carouselDelay": {
"description": "Колко бързо да се превключва между прозорците",
"label": "Carousel Delay"
},
"compassNorthTop": {
"description": "Fix north to the top of compass",
"label": "Compass North Top"
},
"displayMode": {
"description": "Screen layout variant",
"label": "Display Mode"
},
"displayUnits": {
"description": "Показване на метрични или имперски мерни единици",
"label": "Display Units"
},
"flipScreen": {
"description": "Flip display 180 degrees",
"label": "Flip Screen"
},
"gpsDisplayUnits": {
"description": "Coordinate display format",
"label": "GPS Display Units"
},
"oledType": {
"description": "Type of OLED screen attached to the device",
"label": "OLED Type"
},
"screenTimeout": {
"description": "Turn off the display after this long",
"label": "Screen Timeout"
},
"twelveHourClock": {
"description": "Използване на 12-часов формат на часовника",
"label": "12-часов часовник"
},
"wakeOnTapOrMotion": {
"description": "Wake the device on tap or motion",
"label": "Wake on Tap or Motion"
}
},
"lora": {
"title": "Настройки на Mesh",
"description": "Settings for the LoRa mesh",
"bandwidth": {
"description": "Широчина на канала в MHz",
"label": "Широчина на честотната лента"
},
"boostedRxGain": {
"description": "Boosted RX gain",
"label": "Boosted RX Gain"
},
"codingRate": {
"description": "The denominator of the coding rate",
"label": "Coding Rate"
},
"frequencyOffset": {
"description": "Frequency offset to correct for crystal calibration errors",
"label": "Отместване на честотата"
},
"frequencySlot": {
"description": "LoRa frequency channel number",
"label": "Честотен слот"
},
"hopLimit": {
"description": "Maximum number of hops",
"label": "Hop Limit"
},
"ignoreMqtt": {
"description": "Don't forward MQTT messages over the mesh",
"label": "Ignore MQTT"
},
"modemPreset": {
"description": "Използване на предварително настроен модем",
"label": "Предварително настроен модем"
},
"okToMqtt": {
"description": "When set to true, this configuration indicates that the user approves the packet to be uploaded to MQTT. If set to false, remote nodes are requested not to forward packets to MQTT",
"label": "OK to MQTT"
},
"overrideDutyCycle": {
"description": "Override Duty Cycle",
"label": "Override Duty Cycle"
},
"overrideFrequency": {
"description": "Override frequency",
"label": "Override Frequency"
},
"region": {
"description": "Sets the region for your node",
"label": "Регион"
},
"spreadingFactor": {
"description": "Indicates the number of chirps per symbol",
"label": "Spreading Factor"
},
"transmitEnabled": {
"description": "Активиране/дезактивиране на предаването (TX) от LoRa радиото",
"label": "Предаването е активирано"
},
"transmitPower": {
"description": "Максимална мощност на предаване",
"label": "Мощност на предаване"
},
"usePreset": {
"description": "Use one of the predefined modem presets",
"label": "Използване на предварително зададени настройки"
},
"meshSettings": {
"description": "Settings for the LoRa mesh",
"label": "Настройки на Mesh"
},
"waveformSettings": {
"description": "Settings for the LoRa waveform",
"label": "Waveform Settings"
},
"radioSettings": {
"label": "Настройки на радиото",
"description": "Настройки за LoRa радиото"
}
},
"network": {
"title": "Конфигурация на WiFi",
"description": "Конфигурация на WiFi радиото",
"note": "Забележка: Някои устройства (ESP32) не могат да използват едновременно Bluetooth и WiFi.",
"addressMode": {
"description": "Address assignment selection",
"label": "Address Mode"
},
"dns": {
"description": "DNS сървър",
"label": "DNS"
},
"ethernetEnabled": {
"description": "Активиране или дезактивиране на Ethernet порта",
"label": "Активиран"
},
"gateway": {
"description": "Шлюз по подразбиране",
"label": "Шлюз"
},
"ip": {
"description": "IP адрес",
"label": "IP"
},
"psk": {
"description": "Парола за мрежата",
"label": "PSK"
},
"ssid": {
"description": "Име на мрежата",
"label": "SSID"
},
"subnet": {
"description": "Subnet Mask",
"label": "Subnet"
},
"wifiEnabled": {
"description": "Активиране или дезактивиране на WiFi радиото",
"label": "Активиран"
},
"meshViaUdp": {
"label": "Mesh via UDP"
},
"ntpServer": {
"label": "NTP сървър"
},
"rsyslogServer": {
"label": "Rsyslog Server"
},
"ethernetConfigSettings": {
"description": "Ethernet port configuration",
"label": "Конфигурация на Ethernet "
},
"ipConfigSettings": {
"description": "Конфигуриране на IP",
"label": "Конфигурация на IP"
},
"ntpConfigSettings": {
"description": "Конфигуриране на NTP",
"label": "Конфигурация на NTP"
},
"rsyslogConfigSettings": {
"description": "Rsyslog configuration",
"label": "Rsyslog Config"
},
"udpConfigSettings": {
"description": "UDP over Mesh configuration",
"label": "Конфигурация на UDP"
}
},
"position": {
"title": "Настройки на позицията",
"description": "Настройки за модула за позиция",
"broadcastInterval": {
"description": "How often your position is sent out over the mesh",
"label": "Broadcast Interval"
},
"enablePin": {
"description": "GPS module enable pin override",
"label": "Enable Pin"
},
"fixedPosition": {
"description": "Don't report GPS position, but a manually-specified one",
"label": "Фиксирана позиция"
},
"gpsMode": {
"description": "Configure whether device GPS is Enabled, Disabled, or Not Present",
"label": "Режим на GPS"
},
"gpsUpdateInterval": {
"description": "How often a GPS fix should be acquired",
"label": "Интервал на актуализиране на GPS"
},
"positionFlags": {
"description": "Optional fields to include when assembling position messages. The more fields are selected, the larger the message will be leading to longer airtime usage and a higher risk of packet loss.",
"label": "Position Flags"
},
"receivePin": {
"description": "GPS module RX pin override",
"label": "Receive Pin"
},
"smartPositionEnabled": {
"description": "Only send position when there has been a meaningful change in location",
"label": "Enable Smart Position"
},
"smartPositionMinDistance": {
"description": "Minimum distance (in meters) that must be traveled before a position update is sent",
"label": "Smart Position Minimum Distance"
},
"smartPositionMinInterval": {
"description": "Minimum interval (in seconds) that must pass before a position update is sent",
"label": "Smart Position Minimum Interval"
},
"transmitPin": {
"description": "GPS module TX pin override",
"label": "Transmit Pin"
},
"intervalsSettings": {
"description": "How often to send position updates",
"label": "Интервали"
},
"flags": {
"placeholder": "Select position flags...",
"altitude": "Надморска височина",
"altitudeGeoidalSeparation": "Altitude Geoidal Separation",
"altitudeMsl": "Altitude is Mean Sea Level",
"dop": "Dilution of precision (DOP) PDOP used by default",
"hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP",
"numSatellites": "Number of satellites",
"sequenceNumber": "Sequence number",
"timestamp": "Времево клеймо",
"unset": "Отказ",
"vehicleHeading": "Vehicle heading",
"vehicleSpeed": "Скорост на превозното средство"
}
},
"power": {
"adcMultiplierOverride": {
"description": "Used for tweaking battery voltage reading",
"label": "ADC Multiplier Override ratio"
},
"ina219Address": {
"description": "Address of the INA219 battery monitor",
"label": "INA219 Address"
},
"lightSleepDuration": {
"description": "How long the device will be in light sleep for",
"label": "Light Sleep Duration"
},
"minimumWakeTime": {
"description": "Minimum amount of time the device will stay awake for after receiving a packet",
"label": "Minimum Wake Time"
},
"noConnectionBluetoothDisabled": {
"description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long",
"label": "No Connection Bluetooth Disabled"
},
"powerSavingEnabled": {
"description": "Select if powered from a low-current source (i.e. solar), to minimize power consumption as much as possible.",
"label": "Активиране на енергоспестяващ режим"
},
"shutdownOnBatteryDelay": {
"description": "Automatically shutdown node after this long when on battery, 0 for indefinite",
"label": "Shutdown on battery delay"
},
"superDeepSleepDuration": {
"description": "How long the device will be in super deep sleep for",
"label": "Super Deep Sleep Duration"
},
"powerConfigSettings": {
"description": "Settings for the power module",
"label": "Конфигурация на захранването"
},
"sleepSettings": {
"description": "Sleep settings for the power module",
"label": "Sleep Settings"
}
},
"security": {
"description": "Settings for the Security configuration",
"title": "Насртойки на сигурността",
"button_backupKey": "Backup Key",
"adminChannelEnabled": {
"description": "Allow incoming device control over the insecure legacy admin channel",
"label": "Allow Legacy Admin"
},
"enableDebugLogApi": {
"description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth",
"label": "Enable Debug Log API"
},
"managed": {
"description": "If enabled, device configuration options are only able to be changed remotely by a Remote Admin node via admin messages. Do not enable this option unless at least one suitable Remote Admin node has been setup, and the public key is stored in one of the fields above.",
"label": "Managed"
},
"privateKey": {
"description": "Used to create a shared key with a remote device",
"label": "Частен ключ"
},
"publicKey": {
"description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key",
"label": "Публичен ключ"
},
"primaryAdminKey": {
"description": "The primary public key authorized to send admin messages to this node",
"label": "Primary Admin Key"
},
"secondaryAdminKey": {
"description": "The secondary public key authorized to send admin messages to this node",
"label": "Secondary Admin Key"
},
"serialOutputEnabled": {
"description": "Serial Console over the Stream API",
"label": "Serial Output Enabled"
},
"tertiaryAdminKey": {
"description": "The tertiary public key authorized to send admin messages to this node",
"label": "Tertiary Admin Key"
},
"adminSettings": {
"description": "Настройки за Admin",
"label": "Admin Settings"
},
"loggingSettings": {
"description": "Settings for Logging",
"label": "Logging Settings"
}
}
}
@@ -0,0 +1,171 @@
{
"deleteMessages": {
"description": "Това действие ще изчисти цялата история на съобщенията. Това не може да бъде отменено. Сигурни ли сте, че искате да продължите?",
"title": "Изчистване на всички съобщения"
},
"deviceName": {
"description": "Устройството ще се рестартира, след като конфигурацията бъде запазена.",
"longName": "Дълго име",
"shortName": "Кратко име",
"title": "Промяна на името на устройството"
},
"import": {
"description": "The current LoRa configuration will be overridden.",
"error": {
"invalidUrl": "Невалиден Meshtastic URL"
},
"channelPrefix": "Канал: ",
"channelSetUrl": "Channel Set/QR Code URL",
"channels": "Канали:",
"usePreset": "Use Preset?",
"title": "Import Channel Set"
},
"locationResponse": {
"altitude": "Надморска височина: ",
"coordinates": "Координати:",
"title": "Местоположение: {{identifier}}"
},
"pkiRegenerateDialog": {
"title": "Regenerate Pre-Shared Key?",
"description": "Are you sure you want to regenerate the pre-shared key?",
"regenerate": "Регенериране"
},
"newDeviceDialog": {
"title": "Свързване на ново устройство",
"https": "https",
"http": "http",
"tabHttp": "HTTP",
"tabBluetooth": "Bluetooth",
"tabSerial": "Serial",
"useHttps": "Използване на HTTPS",
"connecting": "Свързване...",
"connect": "Свързване",
"connectionFailedAlert": {
"title": "Връзката е неуспешна",
"descriptionPrefix": "Не може да се свърже с устройството.",
"httpsHint": "Ако използвате HTTPS, може да се наложи първо да приемете самоподписан сертификат. ",
"openLinkPrefix": "Моля, отворете",
"openLinkSuffix": "в нов раздел",
"acceptTlsWarningSuffix": "",
"learnMoreLink": "Научете повече"
},
"httpConnection": {
"label": "IP адрес/Име на хост",
"placeholder": "000.000.000.000 / meshtastic.local"
},
"serialConnection": {
"noDevicesPaired": "Все още няма сдвоени устройства.",
"newDeviceButton": "Ново устройство",
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
},
"bluetoothConnection": {
"noDevicesPaired": "Все още няма сдвоени устройства.",
"newDeviceButton": "Ново устройство"
},
"validation": {
"requiresWebBluetooth": "This connection type requires <0>Web Bluetooth</0>. Please use a supported browser, like Chrome or Edge.",
"requiresWebSerial": "This connection type requires <0>Web Serial</0>. Please use a supported browser, like Chrome or Edge.",
"requiresSecureContext": "This application requires a <0>secure context</0>. Please connect using HTTPS or localhost.",
"additionallyRequiresSecureContext": "Additionally, it requires a <0>secure context</0>. Please connect using HTTPS or localhost."
}
},
"nodeDetails": {
"message": "Съобщение",
"requestPosition": "Request Position",
"traceRoute": "Trace Route",
"airTxUtilization": "Air TX utilization",
"allRawMetrics": "All Raw Metrics:",
"batteryLevel": "Ниво на батерията",
"channelUtilization": "Използване на канала",
"details": "Подробности:",
"deviceMetrics": "Device Metrics:",
"hardware": "Хардуер: ",
"lastHeard": "Последно чут: ",
"nodeHexPrefix": "Node Hex: !",
"nodeNumber": "Номер на възела: ",
"position": "Позиция:",
"role": "Роля: ",
"uptime": "Време на работа: ",
"voltage": "Напрежение",
"title": "Node Details for {{identifier}}",
"ignoreNode": "Ignore node",
"removeNode": "Remove node",
"unignoreNode": "Unignore node"
},
"pkiBackup": {
"loseKeysWarning": "Ако загубите ключовете си, ще трябва да нулирате устройството си.",
"secureBackup": "Важно е да направите резервно копие на публичните и частните си ключове и да съхранявате резервното си копие сигурно!",
"footer": "=== КРАЙ НА КЛЮЧОВЕТЕ ===",
"header": "=== MESHTASTIC КЛЮЧОВЕ ЗА {{longName}} ({{shortName}}) ===",
"privateKey": "Частен ключ:",
"publicKey": "Публичен ключ:",
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
"title": "Backup Keys"
},
"pkiBackupReminder": {
"description": "We recommend backing up your key data regularly. Would you like to back up now?",
"title": "Backup Reminder",
"remindLaterPrefix": "Remind me in",
"remindNever": "Never remind me",
"backupNow": "Back up now"
},
"pkiRegenerate": {
"description": "Сигурни ли сте, че искате да регенерирате двойката ключове?",
"title": "Регенериране на двойката ключове"
},
"qr": {
"addChannels": "Добавяне на канали",
"replaceChannels": "Замяна на канали",
"description": "Текущата конфигурация на LoRa също ще бъде споделена.",
"sharableUrl": "Sharable URL",
"title": "Генериране на QR код"
},
"rebootOta": {
"title": "Планирано рестартиране",
"description": "Reboot the connected node after a delay into OTA (Over-the-Air) mode.",
"enterDelay": "Въведете забавяне (сек)",
"scheduled": "Насрочено е рестартиране"
},
"reboot": {
"title": "Планирано рестартиране",
"description": "Рестартиране на свързания възел след x минути."
},
"refreshKeys": {
"description": {
"acceptNewKeys": "This will remove the node from device and request new keys.",
"keyMismatchReasonSuffix": ". This is due to the remote node's current public key does not match the previously stored key for this node.",
"unableToSendDmPrefix": "Your node is unable to send a direct message to node: "
},
"acceptNewKeys": "Accept New Keys",
"title": "Keys Mismatch - {{identifier}}"
},
"removeNode": {
"description": "Сигурни ли сте, че искате да премахнете този възел?",
"title": "Премахване на възела?"
},
"shutdown": {
"title": "Планирано изключване",
"description": "Изключване на свързания възел след x минути."
},
"traceRoute": {
"routeToDestination": "Route to destination:",
"routeBack": "Route back:"
},
"tracerouteResponse": {
"title": "Traceroute: {{identifier}}"
},
"unsafeRoles": {
"confirmUnderstanding": "Да, знам какво правя",
"conjunction": " and the blog post about ",
"postamble": " and understand the implications of changing the role.",
"preamble": "I have read the ",
"choosingRightDeviceRole": "Choosing The Right Device Role",
"deviceRoleDocumentation": "Device Role Documentation",
"title": "Сигурни ли сте?"
},
"managedMode": {
"confirmUnderstanding": "Да, знам какво правя",
"title": "Сигурни ли сте?",
"description": "Enabling Managed Mode blocks client applications (including the web client) from writing configurations to a radio. Once enabled, radio configurations can <bold>only</bold> be changed through Remote Admin messages. This setting is not required for remote node administration."
}
}
@@ -0,0 +1,39 @@
{
"page": {
"title": "Съобщения: {{chatName}}",
"placeholder": "Enter Message"
},
"emptyState": {
"title": "Изберете чат",
"text": "Все още няма съобщения."
},
"selectChatPrompt": {
"text": "Select a channel or node to start messaging."
},
"sendMessage": {
"placeholder": "Въведете Вашето съобщение тук...",
"sendButton": "Изпрати"
},
"actionsMenu": {
"addReactionLabel": "Добавяне на реакция",
"replyLabel": "Отговор"
},
"deliveryStatus": {
"delivered": {
"label": "Съобщението е доставено",
"displayText": "Съобщението е доставено"
},
"failed": {
"label": "Message delivery failed",
"displayText": "Delivery failed"
},
"unknown": {
"label": "Статусът на съобщението е неизвестен",
"displayText": "Неизвестно състояние"
},
"waiting": {
"label": "Sending message",
"displayText": "Waiting for delivery"
}
}
}
@@ -0,0 +1,448 @@
{
"page": {
"tabAmbientLighting": "Ambient Lighting",
"tabAudio": "Аудио",
"tabCannedMessage": "Canned",
"tabDetectionSensor": "Detection Sensor",
"tabExternalNotification": "Ext Notif",
"tabMqtt": "MQTT",
"tabNeighborInfo": "Neighbor Info",
"tabPaxcounter": "Paxcounter",
"tabRangeTest": "Range Test",
"tabSerial": "Serial",
"tabStoreAndForward": "S&F",
"tabTelemetry": "Телеметрия"
},
"ambientLighting": {
"title": "Ambient Lighting Settings",
"description": "Settings for the Ambient Lighting module",
"ledState": {
"label": "LED State",
"description": "Sets LED to on or off"
},
"current": {
"label": "Current",
"description": "Sets the current for the LED output. Default is 10"
},
"red": {
"label": "Червен",
"description": "Sets the red LED level. Values are 0-255"
},
"green": {
"label": "Зелен",
"description": "Sets the green LED level. Values are 0-255"
},
"blue": {
"label": "Син",
"description": "Sets the blue LED level. Values are 0-255"
}
},
"audio": {
"title": "Настройки на аудиото",
"description": "Настройки за аудио модула",
"codec2Enabled": {
"label": "Codec 2 е активиран",
"description": "Enable Codec 2 audio encoding"
},
"pttPin": {
"label": "PTT Pin",
"description": "GPIO pin to use for PTT"
},
"bitrate": {
"label": "Bitrate",
"description": "Bitrate to use for audio encoding"
},
"i2sWs": {
"label": "i2S WS",
"description": "GPIO pin to use for i2S WS"
},
"i2sSd": {
"label": "i2S SD",
"description": "GPIO pin to use for i2S SD"
},
"i2sDin": {
"label": "i2S DIN",
"description": "GPIO pin to use for i2S DIN"
},
"i2sSck": {
"label": "i2S SCK",
"description": "GPIO pin to use for i2S SCK"
}
},
"cannedMessage": {
"title": "Canned Message Settings",
"description": "Settings for the Canned Message module",
"moduleEnabled": {
"label": "Модулът е активиран",
"description": "Enable Canned Message"
},
"rotary1Enabled": {
"label": "Ротационен енкодер #1 е активиран",
"description": "Активиране на ротационния енкодер"
},
"inputbrokerPinA": {
"label": "Encoder Pin A",
"description": "GPIO Pin Value (1-39) For encoder port A"
},
"inputbrokerPinB": {
"label": "Encoder Pin B",
"description": "GPIO Pin Value (1-39) For encoder port B"
},
"inputbrokerPinPress": {
"label": "Encoder Pin Press",
"description": "GPIO Pin Value (1-39) For encoder Press"
},
"inputbrokerEventCw": {
"label": "Clockwise event",
"description": "Select input event."
},
"inputbrokerEventCcw": {
"label": "Counter Clockwise event",
"description": "Select input event."
},
"inputbrokerEventPress": {
"label": "Press event",
"description": "Select input event"
},
"updown1Enabled": {
"label": "Up Down enabled",
"description": "Enable the up / down encoder"
},
"allowInputSource": {
"label": "Allow Input Source",
"description": "Изберете от: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
},
"sendBell": {
"label": "Send Bell",
"description": "Sends a bell character with each message"
}
},
"detectionSensor": {
"title": "Detection Sensor Settings",
"description": "Settings for the Detection Sensor module",
"enabled": {
"label": "Активиран",
"description": "Enable or disable Detection Sensor Module"
},
"minimumBroadcastSecs": {
"label": "Minimum Broadcast Seconds",
"description": "The interval in seconds of how often we can send a message to the mesh when a state change is detected"
},
"stateBroadcastSecs": {
"label": "State Broadcast Seconds",
"description": "The interval in seconds of how often we should send a message to the mesh with the current state regardless of changes"
},
"sendBell": {
"label": "Send Bell",
"description": "Send ASCII bell with alert message"
},
"name": {
"label": "Приятелско име",
"description": "Използва се за форматиране на съобщението, изпратено до mesh, максимум 20 знака"
},
"monitorPin": {
"label": "Monitor Pin",
"description": "The GPIO pin to monitor for state changes"
},
"detectionTriggerType": {
"label": "Detection Triggered Type",
"description": "The type of trigger event to be used"
},
"usePullup": {
"label": "Use Pullup",
"description": "Whether or not use INPUT_PULLUP mode for GPIO pin"
}
},
"externalNotification": {
"title": "External Notification Settings",
"description": "Configure the external notification module",
"enabled": {
"label": "Модулът е активиран",
"description": "Enable External Notification"
},
"outputMs": {
"label": "Output MS",
"description": "Output MS"
},
"output": {
"label": "Output",
"description": "Output"
},
"outputVibra": {
"label": "Output Vibrate",
"description": "Output Vibrate"
},
"outputBuzzer": {
"label": "Output Buzzer",
"description": "Output Buzzer"
},
"active": {
"label": "Active",
"description": "Active"
},
"alertMessage": {
"label": "Предупредително съобщение",
"description": "Предупредително съобщение"
},
"alertMessageVibra": {
"label": "Alert Message Vibrate",
"description": "Alert Message Vibrate"
},
"alertMessageBuzzer": {
"label": "Alert Message Buzzer",
"description": "Alert Message Buzzer"
},
"alertBell": {
"label": "Alert Bell",
"description": "Should an alert be triggered when receiving an incoming bell?"
},
"alertBellVibra": {
"label": "Alert Bell Vibrate",
"description": "Alert Bell Vibrate"
},
"alertBellBuzzer": {
"label": "Alert Bell Buzzer",
"description": "Alert Bell Buzzer"
},
"usePwm": {
"label": "Use PWM",
"description": "Use PWM"
},
"nagTimeout": {
"label": "Nag Timeout",
"description": "Nag Timeout"
},
"useI2sAsBuzzer": {
"label": "Use I²S Pin as Buzzer",
"description": "Designate I²S Pin as Buzzer Output"
}
},
"mqtt": {
"title": "Настройки на MQTT",
"description": "Настройки за MQTT модула",
"enabled": {
"label": "Активиран",
"description": "Активиране или дезактивиране на MQTT"
},
"address": {
"label": "Адрес на MQTT сървъра",
"description": "Адрес на MQTT сървъра, който да се използва за сървъри по подразбиране/персонализирани сървъри"
},
"username": {
"label": "Потребителско име за MQTT",
"description": "Потребителско име за MQTT, което да се използва за сървъри по подразбиране/персонализирани сървъри"
},
"password": {
"label": "Парола за MQTT",
"description": "Парола за MQTT, която да се използва за сървъри по подразбиране/персонализирани сървъри"
},
"encryptionEnabled": {
"label": "Криптирането е активирано",
"description": "Enable or disable MQTT encryption. Note: All messages are sent to the MQTT broker unencrypted if this option is not enabled, even when your uplink channels have encryption keys set. This includes position data."
},
"jsonEnabled": {
"label": "JSON е активиран",
"description": "Whether to send/consume JSON packets on MQTT"
},
"tlsEnabled": {
"label": "TLS е активиран",
"description": "Активиране или дезактивиране на TLS"
},
"root": {
"label": "Root topic",
"description": "MQTT root topic to use for default/custom servers"
},
"proxyToClientEnabled": {
"label": "MQTT Client Proxy Enabled",
"description": "Utilizes the network connection to proxy MQTT messages to the client."
},
"mapReportingEnabled": {
"label": "Map Reporting Enabled",
"description": "Your node will periodically send an unencrypted map report packet to the configured MQTT server, this includes id, short and long name, approximate location, hardware model, role, firmware version, LoRa region, modem preset and primary channel name."
},
"mapReportSettings": {
"publishIntervalSecs": {
"label": "Map Report Publish Interval (s)",
"description": "Interval in seconds to publish map reports"
},
"positionPrecision": {
"label": "Приблизително местоположение",
"description": "Position shared will be accurate within this distance",
"options": {
"metric_km23": "Within 23 km",
"metric_km12": "Within 12 km",
"metric_km5_8": "Within 5.8 km",
"metric_km2_9": "Within 2.9 km",
"metric_km1_5": "Within 1.5 km",
"metric_m700": "Within 700 m",
"metric_m350": "Within 350 m",
"metric_m200": "Within 200 m",
"metric_m90": "Within 90 m",
"metric_m50": "Within 50 m",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
}
},
"neighborInfo": {
"title": "Neighbor Info Settings",
"description": "Settings for the Neighbor Info module",
"enabled": {
"label": "Активиран",
"description": "Enable or disable Neighbor Info Module"
},
"updateInterval": {
"label": "Update Interval",
"description": "Interval in seconds of how often we should try to send our Neighbor Info to the mesh"
}
},
"paxcounter": {
"title": "Paxcounter Settings",
"description": "Настройки за модула Paxcounter",
"enabled": {
"label": "Модулът е активиран",
"description": "Активиране на Paxcounter"
},
"paxcounterUpdateInterval": {
"label": "Update Interval (seconds)",
"description": "How long to wait between sending paxcounter packets"
},
"wifiThreshold": {
"label": "WiFi RSSI Threshold",
"description": "At what WiFi RSSI level should the counter increase. Defaults to -80."
},
"bleThreshold": {
"label": "BLE RSSI Threshold",
"description": "At what BLE RSSI level should the counter increase. Defaults to -80."
}
},
"rangeTest": {
"title": "Range Test Settings",
"description": "Settings for the Range Test module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Range Test"
},
"sender": {
"label": "Message Interval",
"description": "How long to wait between sending test packets"
},
"save": {
"label": "Save CSV to storage",
"description": "Само ESP32"
}
},
"serial": {
"title": "Serial Settings",
"description": "Settings for the Serial module",
"enabled": {
"label": "Модулът е активиран",
"description": "Enable Serial output"
},
"echo": {
"label": "Echo",
"description": "Any packets you send will be echoed back to your device"
},
"rxd": {
"label": "Receive Pin",
"description": "Set the GPIO pin to the RXD pin you have set up."
},
"txd": {
"label": "Transmit Pin",
"description": "Set the GPIO pin to the TXD pin you have set up."
},
"baud": {
"label": "Baud Rate",
"description": "The serial baud rate"
},
"timeout": {
"label": "Timeout",
"description": "Seconds to wait before we consider your packet as 'done'"
},
"mode": {
"label": "Режим",
"description": "Избор на режим"
},
"overrideConsoleSerialPort": {
"label": "Override Console Serial Port",
"description": "If you have a serial port connected to the console, this will override it."
}
},
"storeForward": {
"title": "Store & Forward Settings",
"description": "Settings for the Store & Forward module",
"enabled": {
"label": "Модулът е активиран",
"description": "Enable Store & Forward"
},
"heartbeat": {
"label": "Heartbeat Enabled",
"description": "Enable Store & Forward heartbeat"
},
"records": {
"label": "Брой записи",
"description": "Number of records to store"
},
"historyReturnMax": {
"label": "History return max",
"description": "Max number of records to return"
},
"historyReturnWindow": {
"label": "History return window",
"description": "Max number of records to return"
}
},
"telemetry": {
"title": "Настройки на телеметрията",
"description": "Настройки за модула за телеметрия",
"deviceUpdateInterval": {
"label": "Device Metrics",
"description": "Device metrics update interval (seconds)"
},
"environmentUpdateInterval": {
"label": "Environment metrics update interval (seconds)",
"description": ""
},
"environmentMeasurementEnabled": {
"label": "Модулът е активиран",
"description": "Enable the Environment Telemetry"
},
"environmentScreenEnabled": {
"label": "Displayed on Screen",
"description": "Show the Telemetry Module on the OLED"
},
"environmentDisplayFahrenheit": {
"label": "Показване на Фаренхайт",
"description": "Показване на температурата във Фаренхайт"
},
"airQualityEnabled": {
"label": "Качество на въздуха е активирано",
"description": "Активиране на телеметрията за качеството на въздуха"
},
"airQualityInterval": {
"label": "Air Quality Update Interval",
"description": "How often to send Air Quality data over the mesh"
},
"powerMeasurementEnabled": {
"label": "Power Measurement Enabled",
"description": "Enable the Power Measurement Telemetry"
},
"powerUpdateInterval": {
"label": "Power Update Interval",
"description": "How often to send Power data over the mesh"
},
"powerScreenEnabled": {
"label": "Power Screen Enabled",
"description": "Enable the Power Telemetry Screen"
}
}
}
@@ -0,0 +1,63 @@
{
"nodeDetail": {
"publicKeyEnabled": {
"label": "Публичният ключ е активиран"
},
"noPublicKey": {
"label": "Няма публичен ключ"
},
"directMessage": {
"label": "Директно съобщение {{shortName}}"
},
"favorite": {
"label": "Любим",
"tooltip": "Добавяне или премахване на този възел от любимите ви"
},
"notFavorite": {
"label": "Не е любим"
},
"error": {
"label": "Грешка",
"text": "Възникна грешка при извличането на подробности за възела. Моля, опитайте отново по-късно."
},
"status": {
"heard": "Heard",
"mqtt": "MQTT"
},
"elevation": {
"label": "Elevation"
},
"channelUtil": {
"label": "Channel Util"
},
"airtimeUtil": {
"label": "Airtime Util"
}
},
"nodesTable": {
"headings": {
"longName": "Дълго име",
"connection": "Connection",
"lastHeard": "Последно чут",
"encryption": "Криптиране",
"model": "Модел",
"macAddress": "MAC адрес"
},
"connectionStatus": {
"direct": "Direct",
"away": "away",
"unknown": "-",
"viaMqtt": ", чрез MQTT"
},
"lastHeardStatus": {
"never": "Никога"
}
},
"actions": {
"added": "Добавен",
"removed": "Премахнат",
"ignoreNode": "Ignore Node",
"unignoreNode": "Unignore Node",
"requestPosition": "Request Position"
}
}
@@ -0,0 +1,228 @@
{
"navigation": {
"title": "Навигация",
"messages": "Съобщения",
"map": "Карта",
"config": "Конфигурация",
"radioConfig": "Конфигурация на радиото",
"moduleConfig": "Конфигурация на модула",
"channels": "Канали",
"nodes": "Възли"
},
"app": {
"title": "Meshtastic",
"logo": "Лого на Meshtastic"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Отваряне на страничната лента",
"close": "Затваряне на страничната лента"
}
},
"deviceInfo": {
"volts": "{{voltage}} волта",
"firmware": {
"title": "Фърмуер",
"version": "v{{version}}",
"buildDate": "Дата на компилация: {{date}}"
},
"deviceName": {
"title": "Име на устройството",
"changeName": "Промяна на името на устройството",
"placeholder": "Въвеждане на име на устройството"
},
"editDeviceName": "Редактиране на името на устройство"
}
},
"batteryStatus": {
"charging": "{{level}}% зареждане",
"pluggedIn": "Включен в ел. мрежа",
"title": "Батерия"
},
"search": {
"nodes": "Търсене на възли...",
"channels": "Търсене на канали...",
"commandPalette": "Търсене на команди..."
},
"toast": {
"positionRequestSent": {
"title": "Position request sent."
},
"requestingPosition": {
"title": "Requesting position, please wait..."
},
"sendingTraceroute": {
"title": "Sending Traceroute, please wait..."
},
"tracerouteSent": {
"title": "Traceroute sent."
},
"savedChannel": {
"title": "Запазен канал: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Чатът използва PKI криптиране."
},
"pskEncryption": {
"title": "Чатът използва PSK криптиране."
}
},
"configSaveError": {
"title": "Грешка при запазване на конфигурацията",
"description": "Възникна грешка при запазване на конфигурацията."
},
"validationError": {
"title": "Съществуват грешки в конфигурацията",
"description": "Моля, коригирайте грешките в конфигурацията, преди да я запазите."
},
"saveSuccess": {
"title": "Запазване на конфигурацията",
"description": "Промяната в конфигурацията {{case}} е запазена."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
}
},
"notifications": {
"copied": {
"label": "Копирано!"
},
"copyToClipboard": {
"label": "Копиране в клипборда"
},
"hidePassword": {
"label": "Скриване на паролата"
},
"showPassword": {
"label": "Показване на паролата"
},
"deliveryStatus": {
"delivered": "Delivered",
"failed": "Delivery Failed",
"waiting": "Изчакване",
"unknown": "Unknown"
}
},
"general": {
"label": "General"
},
"hardware": {
"label": "Хардуер"
},
"metrics": {
"label": "Metrics"
},
"role": {
"label": "Роля"
},
"filter": {
"label": "Филтър"
},
"advanced": {
"label": "Advanced"
},
"clearInput": {
"label": "Clear input"
},
"resetFilters": {
"label": "Нулиране на филтрите"
},
"nodeName": {
"label": "Име/номер на възел",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Airtime Utilization (%)"
},
"batteryLevel": {
"label": "Ниво на батерията (%)",
"labelText": "Ниво на батерията (%): {{value}}"
},
"batteryVoltage": {
"label": "Напрежение на батерията (V)",
"title": "Напрежение"
},
"channelUtilization": {
"label": "Използване на канала (%)"
},
"hops": {
"direct": "Direct",
"label": "Number of hops",
"text": "Number of hops: {{value}}"
},
"lastHeard": {
"label": "Последно чут",
"labelText": "Last heard: {{value}}",
"nowLabel": "Сега"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Любими"
},
"hide": {
"label": "Hide"
},
"showOnly": {
"label": "Show Only"
},
"viaMqtt": {
"label": "Свързан чрез MQTT"
},
"hopsUnknown": {
"label": "Unknown number of hops"
},
"showUnheard": {
"label": "Never heard"
},
"language": {
"label": "Език",
"changeLanguage": "Промяна на езика"
},
"theme": {
"dark": "Тъмна",
"light": "Светла",
"system": "Автоматично",
"changeTheme": "Промяна на цветовата схема"
},
"errorPage": {
"title": "This is a little embarrassing...",
"description1": "We are really sorry but an error occurred in the web client that caused it to crash. <br /> This is not supposed to happen, and we are working hard to fix it.",
"description2": "The best way to prevent this from happening again to you or anyone else is to report the issue to us.",
"reportInstructions": "Моля, включете следната информация в доклада си:",
"reportSteps": {
"step1": "Какво правехте, когато възникна грешката",
"step2": "Какво очаквахте да се случи",
"step3": "Какво всъщност се случи",
"step4": "Всяка друга подходяща информация"
},
"reportLink": "Можете да съобщите за проблема в нашия <0>GitHub</0>",
"dashboardLink": "Връщане към <0>таблото</0>",
"detailsSummary": "Подробности за грешката",
"errorMessageLabel": "Съобщение за грешка:",
"stackTraceLabel": "Stack trace:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Задвижвано от <0>▲ Vercel</0> | Meshtastic® е регистрирана търговска марка на Meshtastic LLC. | <1>Правна информация</1>",
"commitSha": "Commit SHA: {{sha}}"
}
}
@@ -0,0 +1,69 @@
{
"page": {
"sectionLabel": "Kanály",
"channelName": "Channel: {{channelName}}",
"broadcastLabel": "Primární",
"channelIndex": "Ch {{index}}"
},
"validation": {
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
},
"settings": {
"label": "Nastavení kanálu",
"description": "Crypto, MQTT & misc settings"
},
"role": {
"label": "Role",
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
"options": {
"primary": "PRIMARY",
"disabled": "DISABLED",
"secondary": "SECONDARY"
}
},
"psk": {
"label": "Pre-Shared Key",
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
"generate": "Generate"
},
"name": {
"label": "Jméno",
"description": "A unique name for the channel <12 bytes, leave blank for default"
},
"uplinkEnabled": {
"label": "Uplink Enabled",
"description": "Send messages from the local mesh to MQTT"
},
"downlinkEnabled": {
"label": "Downlink Enabled",
"description": "Send messages from MQTT to the local mesh"
},
"positionPrecision": {
"label": "Location",
"description": "The precision of the location to share with the channel. Can be disabled.",
"options": {
"none": "Do not share location",
"precise": "Precise Location",
"metric_km23": "Within 23 kilometers",
"metric_km12": "Within 12 kilometers",
"metric_km5_8": "Within 5.8 kilometers",
"metric_km2_9": "Within 2.9 kilometers",
"metric_km1_5": "Within 1.5 kilometers",
"metric_m700": "Within 700 meters",
"metric_m350": "Within 350 meters",
"metric_m200": "Within 200 meters",
"metric_m90": "Within 90 meters",
"metric_m50": "Within 50 meters",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
}
@@ -0,0 +1,50 @@
{
"emptyState": "No results found.",
"page": {
"title": "Command Menu"
},
"pinGroup": {
"label": "Pin command group"
},
"unpinGroup": {
"label": "Unpin command group"
},
"goto": {
"label": "Goto",
"command": {
"messages": "Zprávy",
"map": "Mapa",
"config": "Config",
"channels": "Kanály",
"nodes": "Uzly"
}
},
"manage": {
"label": "Manage",
"command": {
"switchNode": "Switch Node",
"connectNewNode": "Connect New Node"
}
},
"contextual": {
"label": "Contextual",
"command": {
"qrCode": "QR Code",
"qrGenerator": "Generator",
"qrImport": "Import",
"scheduleShutdown": "Schedule Shutdown",
"scheduleReboot": "Schedule Reboot",
"rebootToOtaMode": "Reboot To OTA Mode",
"resetNodeDb": "Reset Node DB",
"factoryResetDevice": "Factory Reset Device",
"factoryResetConfig": "Factory Reset Config"
}
},
"debug": {
"label": "Debug",
"command": {
"reconfigure": "Reconfigure",
"clearAllStoredMessages": "Clear All Stored Message"
}
}
}
@@ -0,0 +1,141 @@
{
"button": {
"apply": "Použít",
"backupKey": "Backup Key",
"cancel": "Zrušit",
"clearMessages": "Clear Messages",
"close": "Zavřít",
"confirm": "Confirm",
"delete": "Smazat",
"dismiss": "Dismiss",
"download": "Download",
"export": "Export",
"generate": "Generate",
"regenerate": "Regenerate",
"import": "Import",
"message": "Zpráva",
"now": "Now",
"ok": "OK",
"print": "Print",
"rebootOtaNow": "Reboot to OTA Mode Now",
"remove": "Odstranit",
"requestNewKeys": "Request New Keys",
"requestPosition": "Request Position",
"reset": "Reset",
"save": "Uložit",
"scanQr": "Naskenovat QR kód",
"traceRoute": "Trace Route",
"submit": "Submit"
},
"app": {
"title": "Meshtastic",
"fullTitle": "Meshtastic Web Client"
},
"loading": "Loading...",
"unit": {
"cps": "CPS",
"dbm": "dBm",
"hertz": "Hz",
"hop": {
"one": "Hop",
"plural": "Hops"
},
"hopsAway": {
"one": "{{count}} hop away",
"plural": "{{count}} hops away",
"unknown": "Unknown hops away"
},
"megahertz": "MHz",
"raw": "raw",
"meter": {
"one": "Meter",
"plural": "Meters",
"suffix": "m"
},
"minute": {
"one": "Minute",
"plural": "Minutes"
},
"hour": {
"one": "Hour",
"plural": "Hours"
},
"millisecond": {
"one": "Millisecond",
"plural": "Milliseconds",
"suffix": "ms"
},
"second": {
"one": "Second",
"plural": "Seconds"
},
"day": {
"one": "Day",
"plural": "Days"
},
"month": {
"one": "Month",
"plural": "Months"
},
"year": {
"one": "Year",
"plural": "Years"
},
"snr": "SNR",
"volt": {
"one": "Volt",
"plural": "Volts",
"suffix": "V"
},
"record": {
"one": "Records",
"plural": "Records"
}
},
"security": {
"0bit": "Empty",
"8bit": "8 bit",
"128bit": "128 bit",
"256bit": "256 bit"
},
"unknown": {
"longName": "Unknown",
"shortName": "UNK",
"notAvailable": "N/A",
"num": "??"
},
"nodeUnknownPrefix": "!",
"unset": "UNSET",
"fallbackName": "Meshtastic {{last4}}",
"node": "Node",
"formValidation": {
"unsavedChanges": "Unsaved changes",
"tooBig": {
"string": "Too long, expected less than or equal to {{maximum}} characters.",
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
},
"tooSmall": {
"string": "Too short, expected more than or equal to {{minimum}} characters.",
"number": "Too small, expected a number larger than or equal to {{minimum}}."
},
"invalidFormat": {
"ipv4": "Invalid format, expected an IPv4 address.",
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
},
"invalidType": {
"number": "Invalid type, expected a number."
},
"pskLength": {
"0bit": "Key is required to be empty.",
"8bit": "Key is required to be an 8 bit pre-shared key (PSK).",
"128bit": "Key is required to be a 128 bit pre-shared key (PSK).",
"256bit": "Key is required to be a 256 bit pre-shared key (PSK)."
},
"required": {
"generic": "This field is required.",
"managed": "At least one admin key is requred if the node is managed.",
"key": "Key is required."
}
}
}
@@ -0,0 +1,12 @@
{
"dashboard": {
"title": "Connected Devices",
"description": "Manage your connected Meshtastic devices.",
"connectionType_ble": "BLE",
"connectionType_serial": "Sériová komunikace",
"connectionType_network": "Síť",
"noDevicesTitle": "No devices connected",
"noDevicesDescription": "Connect a new device to get started.",
"button_newConnection": "New Connection"
}
}
@@ -0,0 +1,428 @@
{
"page": {
"title": "Configuration",
"tabBluetooth": "Bluetooth",
"tabDevice": "Zařízení",
"tabDisplay": "Obrazovka",
"tabLora": "LoRa",
"tabNetwork": "Síť",
"tabPosition": "Pozice",
"tabPower": "Napájení",
"tabSecurity": "Zabezpečení"
},
"sidebar": {
"label": "Modules"
},
"device": {
"title": "Device Settings",
"description": "Settings for the device",
"buttonPin": {
"description": "Button pin override",
"label": "Button Pin"
},
"buzzerPin": {
"description": "Buzzer pin override",
"label": "Buzzer Pin"
},
"disableTripleClick": {
"description": "Disable triple click",
"label": "Disable Triple Click"
},
"doubleTapAsButtonPress": {
"description": "Treat double tap as button press",
"label": "Dvojité klepnutí jako stisk tlačítka"
},
"ledHeartbeatDisabled": {
"description": "Disable default blinking LED",
"label": "LED Heartbeat Disabled"
},
"nodeInfoBroadcastInterval": {
"description": "How often to broadcast node info",
"label": "Node Info Broadcast Interval"
},
"posixTimezone": {
"description": "The POSIX timezone string for the device",
"label": "POSIX časové pásmo"
},
"rebroadcastMode": {
"description": "How to handle rebroadcasting",
"label": "Režim opětovného vysílání"
},
"role": {
"description": "What role the device performs on the mesh",
"label": "Role"
}
},
"bluetooth": {
"title": "Nastavení Bluetooth",
"description": "Settings for the Bluetooth module",
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
"enabled": {
"description": "Enable or disable Bluetooth",
"label": "Povoleno"
},
"pairingMode": {
"description": "Pin selection behaviour.",
"label": "Režim párování"
},
"pin": {
"description": "Pin to use when pairing",
"label": "Pin"
}
},
"display": {
"description": "Settings for the device display",
"title": "Display Settings",
"headingBold": {
"description": "Bolden the heading text",
"label": "Bold Heading"
},
"carouselDelay": {
"description": "How fast to cycle through windows",
"label": "Carousel Delay"
},
"compassNorthTop": {
"description": "Fix north to the top of compass",
"label": "Compass North Top"
},
"displayMode": {
"description": "Screen layout variant",
"label": "Display Mode"
},
"displayUnits": {
"description": "Display metric or imperial units",
"label": "Display Units"
},
"flipScreen": {
"description": "Flip display 180 degrees",
"label": "Flip Screen"
},
"gpsDisplayUnits": {
"description": "Coordinate display format",
"label": "GPS Display Units"
},
"oledType": {
"description": "Type of OLED screen attached to the device",
"label": "OLED Type"
},
"screenTimeout": {
"description": "Turn off the display after this long",
"label": "Screen Timeout"
},
"twelveHourClock": {
"description": "Use 12-hour clock format",
"label": "12-Hour Clock"
},
"wakeOnTapOrMotion": {
"description": "Wake the device on tap or motion",
"label": "Wake on Tap or Motion"
}
},
"lora": {
"title": "Mesh Settings",
"description": "Settings for the LoRa mesh",
"bandwidth": {
"description": "Channel bandwidth in MHz",
"label": "Šířka pásma"
},
"boostedRxGain": {
"description": "Boosted RX gain",
"label": "Boosted RX Gain"
},
"codingRate": {
"description": "The denominator of the coding rate",
"label": "Coding Rate"
},
"frequencyOffset": {
"description": "Frequency offset to correct for crystal calibration errors",
"label": "Frequency Offset"
},
"frequencySlot": {
"description": "LoRa frequency channel number",
"label": "Frequency Slot"
},
"hopLimit": {
"description": "Maximum number of hops",
"label": "Hop Limit"
},
"ignoreMqtt": {
"description": "Don't forward MQTT messages over the mesh",
"label": "Ignorovat MQTT"
},
"modemPreset": {
"description": "Modem preset to use",
"label": "Předvolba modemu"
},
"okToMqtt": {
"description": "When set to true, this configuration indicates that the user approves the packet to be uploaded to MQTT. If set to false, remote nodes are requested not to forward packets to MQTT",
"label": "OK do MQTT"
},
"overrideDutyCycle": {
"description": "Přepsat střídu",
"label": "Přepsat střídu"
},
"overrideFrequency": {
"description": "Override frequency",
"label": "Override Frequency"
},
"region": {
"description": "Sets the region for your node",
"label": "Region"
},
"spreadingFactor": {
"description": "Indicates the number of chirps per symbol",
"label": "Spreading Factor"
},
"transmitEnabled": {
"description": "Enable/Disable transmit (TX) from the LoRa radio",
"label": "Transmit Enabled"
},
"transmitPower": {
"description": "Max transmit power",
"label": "Transmit Power"
},
"usePreset": {
"description": "Use one of the predefined modem presets",
"label": "Use Preset"
},
"meshSettings": {
"description": "Settings for the LoRa mesh",
"label": "Mesh Settings"
},
"waveformSettings": {
"description": "Settings for the LoRa waveform",
"label": "Waveform Settings"
},
"radioSettings": {
"label": "Radio Settings",
"description": "Settings for the LoRa radio"
}
},
"network": {
"title": "WiFi Config",
"description": "WiFi radio configuration",
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
"addressMode": {
"description": "Address assignment selection",
"label": "Address Mode"
},
"dns": {
"description": "DNS Server",
"label": "DNS"
},
"ethernetEnabled": {
"description": "Enable or disable the Ethernet port",
"label": "Povoleno"
},
"gateway": {
"description": "Default Gateway",
"label": "Gateway/Brána"
},
"ip": {
"description": "IP Address",
"label": "IP adresa"
},
"psk": {
"description": "Network password",
"label": "PSK"
},
"ssid": {
"description": "Network name",
"label": "SSID"
},
"subnet": {
"description": "Subnet Mask",
"label": "Podsíť"
},
"wifiEnabled": {
"description": "Enable or disable the WiFi radio",
"label": "Povoleno"
},
"meshViaUdp": {
"label": "Mesh via UDP"
},
"ntpServer": {
"label": "NTP Server"
},
"rsyslogServer": {
"label": "Rsyslog Server"
},
"ethernetConfigSettings": {
"description": "Ethernet port configuration",
"label": "Ethernet Config"
},
"ipConfigSettings": {
"description": "IP configuration",
"label": "IP Config"
},
"ntpConfigSettings": {
"description": "NTP configuration",
"label": "NTP Config"
},
"rsyslogConfigSettings": {
"description": "Rsyslog configuration",
"label": "Rsyslog Config"
},
"udpConfigSettings": {
"description": "UDP over Mesh configuration",
"label": "UDP Konfigurace"
}
},
"position": {
"title": "Position Settings",
"description": "Settings for the position module",
"broadcastInterval": {
"description": "How often your position is sent out over the mesh",
"label": "Broadcast Interval"
},
"enablePin": {
"description": "GPS module enable pin override",
"label": "Enable Pin"
},
"fixedPosition": {
"description": "Don't report GPS position, but a manually-specified one",
"label": "Fixed Position"
},
"gpsMode": {
"description": "Configure whether device GPS is Enabled, Disabled, or Not Present",
"label": "GPS Mode"
},
"gpsUpdateInterval": {
"description": "How often a GPS fix should be acquired",
"label": "GPS Update Interval"
},
"positionFlags": {
"description": "Optional fields to include when assembling position messages. The more fields are selected, the larger the message will be leading to longer airtime usage and a higher risk of packet loss.",
"label": "Position Flags"
},
"receivePin": {
"description": "GPS module RX pin override",
"label": "Receive Pin"
},
"smartPositionEnabled": {
"description": "Only send position when there has been a meaningful change in location",
"label": "Enable Smart Position"
},
"smartPositionMinDistance": {
"description": "Minimum distance (in meters) that must be traveled before a position update is sent",
"label": "Smart Position Minimum Distance"
},
"smartPositionMinInterval": {
"description": "Minimum interval (in seconds) that must pass before a position update is sent",
"label": "Smart Position Minimum Interval"
},
"transmitPin": {
"description": "GPS module TX pin override",
"label": "Transmit Pin"
},
"intervalsSettings": {
"description": "How often to send position updates",
"label": "Intervals"
},
"flags": {
"placeholder": "Select position flags...",
"altitude": "Altitude",
"altitudeGeoidalSeparation": "Altitude Geoidal Separation",
"altitudeMsl": "Altitude is Mean Sea Level",
"dop": "Dilution of precision (DOP) PDOP used by default",
"hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP",
"numSatellites": "Number of satellites",
"sequenceNumber": "Sequence number",
"timestamp": "Časová značka",
"unset": "Zrušit nastavení",
"vehicleHeading": "Vehicle heading",
"vehicleSpeed": "Vehicle speed"
}
},
"power": {
"adcMultiplierOverride": {
"description": "Used for tweaking battery voltage reading",
"label": "ADC Multiplier Override ratio"
},
"ina219Address": {
"description": "Address of the INA219 battery monitor",
"label": "INA219 Address"
},
"lightSleepDuration": {
"description": "How long the device will be in light sleep for",
"label": "Light Sleep Duration"
},
"minimumWakeTime": {
"description": "Minimum amount of time the device will stay awake for after receiving a packet",
"label": "Minimum Wake Time"
},
"noConnectionBluetoothDisabled": {
"description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long",
"label": "No Connection Bluetooth Disabled"
},
"powerSavingEnabled": {
"description": "Select if powered from a low-current source (i.e. solar), to minimize power consumption as much as possible.",
"label": "Povolit úsporný režim"
},
"shutdownOnBatteryDelay": {
"description": "Automatically shutdown node after this long when on battery, 0 for indefinite",
"label": "Shutdown on battery delay"
},
"superDeepSleepDuration": {
"description": "How long the device will be in super deep sleep for",
"label": "Super Deep Sleep Duration"
},
"powerConfigSettings": {
"description": "Settings for the power module",
"label": "Nastavení napájení"
},
"sleepSettings": {
"description": "Sleep settings for the power module",
"label": "Sleep Settings"
}
},
"security": {
"description": "Settings for the Security configuration",
"title": "Security Settings",
"button_backupKey": "Backup Key",
"adminChannelEnabled": {
"description": "Allow incoming device control over the insecure legacy admin channel",
"label": "Allow Legacy Admin"
},
"enableDebugLogApi": {
"description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth",
"label": "Enable Debug Log API"
},
"managed": {
"description": "If enabled, device configuration options are only able to be changed remotely by a Remote Admin node via admin messages. Do not enable this option unless at least one suitable Remote Admin node has been setup, and the public key is stored in one of the fields above.",
"label": "Managed"
},
"privateKey": {
"description": "Used to create a shared key with a remote device",
"label": "Soukromý klíč"
},
"publicKey": {
"description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key",
"label": "Veřejný klíč"
},
"primaryAdminKey": {
"description": "The primary public key authorized to send admin messages to this node",
"label": "Primary Admin Key"
},
"secondaryAdminKey": {
"description": "The secondary public key authorized to send admin messages to this node",
"label": "Secondary Admin Key"
},
"serialOutputEnabled": {
"description": "Serial Console over the Stream API",
"label": "Serial Output Enabled"
},
"tertiaryAdminKey": {
"description": "The tertiary public key authorized to send admin messages to this node",
"label": "Tertiary Admin Key"
},
"adminSettings": {
"description": "Settings for Admin",
"label": "Admin Settings"
},
"loggingSettings": {
"description": "Settings for Logging",
"label": "Logging Settings"
}
}
}
@@ -0,0 +1,171 @@
{
"deleteMessages": {
"description": "This action will clear all message history. This cannot be undone. Are you sure you want to continue?",
"title": "Clear All Messages"
},
"deviceName": {
"description": "The Device will restart once the config is saved.",
"longName": "Long Name",
"shortName": "Short Name",
"title": "Change Device Name"
},
"import": {
"description": "The current LoRa configuration will be overridden.",
"error": {
"invalidUrl": "Invalid Meshtastic URL"
},
"channelPrefix": "Channel: ",
"channelSetUrl": "Channel Set/QR Code URL",
"channels": "Channels:",
"usePreset": "Use Preset?",
"title": "Import Channel Set"
},
"locationResponse": {
"altitude": "Altitude: ",
"coordinates": "Coordinates: ",
"title": "Location: {{identifier}}"
},
"pkiRegenerateDialog": {
"title": "Regenerate Pre-Shared Key?",
"description": "Are you sure you want to regenerate the pre-shared key?",
"regenerate": "Regenerate"
},
"newDeviceDialog": {
"title": "Connect New Device",
"https": "https",
"http": "http",
"tabHttp": "HTTP",
"tabBluetooth": "Bluetooth",
"tabSerial": "Sériová komunikace",
"useHttps": "Use HTTPS",
"connecting": "Connecting...",
"connect": "Connect",
"connectionFailedAlert": {
"title": "Connection Failed",
"descriptionPrefix": "Could not connect to the device. ",
"httpsHint": "If using HTTPS, you may need to accept a self-signed certificate first. ",
"openLinkPrefix": "Please open ",
"openLinkSuffix": " in a new tab",
"acceptTlsWarningSuffix": ", accept any TLS warnings if prompted, then try again",
"learnMoreLink": "Learn more"
},
"httpConnection": {
"label": "IP Address/Hostname",
"placeholder": "000.000.000.000 / meshtastic.local"
},
"serialConnection": {
"noDevicesPaired": "No devices paired yet.",
"newDeviceButton": "New device",
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
},
"bluetoothConnection": {
"noDevicesPaired": "No devices paired yet.",
"newDeviceButton": "New device"
},
"validation": {
"requiresWebBluetooth": "This connection type requires <0>Web Bluetooth</0>. Please use a supported browser, like Chrome or Edge.",
"requiresWebSerial": "This connection type requires <0>Web Serial</0>. Please use a supported browser, like Chrome or Edge.",
"requiresSecureContext": "This application requires a <0>secure context</0>. Please connect using HTTPS or localhost.",
"additionallyRequiresSecureContext": "Additionally, it requires a <0>secure context</0>. Please connect using HTTPS or localhost."
}
},
"nodeDetails": {
"message": "Zpráva",
"requestPosition": "Request Position",
"traceRoute": "Trace Route",
"airTxUtilization": "Air TX utilization",
"allRawMetrics": "All Raw Metrics:",
"batteryLevel": "Battery level",
"channelUtilization": "Channel utilization",
"details": "Details:",
"deviceMetrics": "Device Metrics:",
"hardware": "Hardware: ",
"lastHeard": "Last Heard: ",
"nodeHexPrefix": "Node Hex: !",
"nodeNumber": "Node Number: ",
"position": "Position:",
"role": "Role: ",
"uptime": "Uptime: ",
"voltage": "Napětí",
"title": "Node Details for {{identifier}}",
"ignoreNode": "Ignore node",
"removeNode": "Remove node",
"unignoreNode": "Unignore node"
},
"pkiBackup": {
"loseKeysWarning": "If you lose your keys, you will need to reset your device.",
"secureBackup": "Its important to backup your public and private keys and store your backup securely!",
"footer": "=== END OF KEYS ===",
"header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===",
"privateKey": "Private Key:",
"publicKey": "Public Key:",
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
"title": "Backup Keys"
},
"pkiBackupReminder": {
"description": "We recommend backing up your key data regularly. Would you like to back up now?",
"title": "Backup Reminder",
"remindLaterPrefix": "Remind me in",
"remindNever": "Never remind me",
"backupNow": "Back up now"
},
"pkiRegenerate": {
"description": "Are you sure you want to regenerate key pair?",
"title": "Regenerate Key Pair"
},
"qr": {
"addChannels": "Add Channels",
"replaceChannels": "Replace Channels",
"description": "The current LoRa configuration will also be shared.",
"sharableUrl": "Sharable URL",
"title": "Generate QR Code"
},
"rebootOta": {
"title": "Schedule Reboot",
"description": "Reboot the connected node after a delay into OTA (Over-the-Air) mode.",
"enterDelay": "Enter delay (sec)",
"scheduled": "Reboot has been scheduled"
},
"reboot": {
"title": "Schedule Reboot",
"description": "Reboot the connected node after x minutes."
},
"refreshKeys": {
"description": {
"acceptNewKeys": "This will remove the node from device and request new keys.",
"keyMismatchReasonSuffix": ". This is due to the remote node's current public key does not match the previously stored key for this node.",
"unableToSendDmPrefix": "Your node is unable to send a direct message to node: "
},
"acceptNewKeys": "Accept New Keys",
"title": "Keys Mismatch - {{identifier}}"
},
"removeNode": {
"description": "Are you sure you want to remove this Node?",
"title": "Remove Node?"
},
"shutdown": {
"title": "Schedule Shutdown",
"description": "Turn off the connected node after x minutes."
},
"traceRoute": {
"routeToDestination": "Route to destination:",
"routeBack": "Route back:"
},
"tracerouteResponse": {
"title": "Traceroute: {{identifier}}"
},
"unsafeRoles": {
"confirmUnderstanding": "Yes, I know what I'm doing",
"conjunction": " and the blog post about ",
"postamble": " and understand the implications of changing the role.",
"preamble": "I have read the ",
"choosingRightDeviceRole": "Choosing The Right Device Role",
"deviceRoleDocumentation": "Device Role Documentation",
"title": "Jste si jistý?"
},
"managedMode": {
"confirmUnderstanding": "Yes, I know what I'm doing",
"title": "Jste si jistý?",
"description": "Enabling Managed Mode blocks client applications (including the web client) from writing configurations to a radio. Once enabled, radio configurations can <bold>only</bold> be changed through Remote Admin messages. This setting is not required for remote node administration."
}
}
@@ -0,0 +1,39 @@
{
"page": {
"title": "Messages: {{chatName}}",
"placeholder": "Enter Message"
},
"emptyState": {
"title": "Select a Chat",
"text": "No messages yet."
},
"selectChatPrompt": {
"text": "Select a channel or node to start messaging."
},
"sendMessage": {
"placeholder": "Enter your message here...",
"sendButton": "Odeslat"
},
"actionsMenu": {
"addReactionLabel": "Add Reaction",
"replyLabel": "Reply"
},
"deliveryStatus": {
"delivered": {
"label": "Message delivered",
"displayText": "Message delivered"
},
"failed": {
"label": "Message delivery failed",
"displayText": "Delivery failed"
},
"unknown": {
"label": "Message status unknown",
"displayText": "Unknown state"
},
"waiting": {
"label": "Sending message",
"displayText": "Waiting for delivery"
}
}
}
@@ -0,0 +1,448 @@
{
"page": {
"tabAmbientLighting": "Ambientní osvětlení",
"tabAudio": "Zvuk",
"tabCannedMessage": "Canned",
"tabDetectionSensor": "Detekční senzor",
"tabExternalNotification": "Ext Notif",
"tabMqtt": "MQTT",
"tabNeighborInfo": "Informace o sousedech",
"tabPaxcounter": "Paxcounter",
"tabRangeTest": "Zkouška dosahu",
"tabSerial": "Sériová komunikace",
"tabStoreAndForward": "S&F",
"tabTelemetry": "Telemetrie"
},
"ambientLighting": {
"title": "Ambient Lighting Settings",
"description": "Settings for the Ambient Lighting module",
"ledState": {
"label": "LED State",
"description": "Sets LED to on or off"
},
"current": {
"label": "Proud",
"description": "Sets the current for the LED output. Default is 10"
},
"red": {
"label": "Červená",
"description": "Sets the red LED level. Values are 0-255"
},
"green": {
"label": "Zelená",
"description": "Sets the green LED level. Values are 0-255"
},
"blue": {
"label": "Modrá",
"description": "Sets the blue LED level. Values are 0-255"
}
},
"audio": {
"title": "Audio Settings",
"description": "Settings for the Audio module",
"codec2Enabled": {
"label": "Codec 2 Enabled",
"description": "Enable Codec 2 audio encoding"
},
"pttPin": {
"label": "PTT Pin",
"description": "GPIO pin to use for PTT"
},
"bitrate": {
"label": "Bitrate",
"description": "Bitrate to use for audio encoding"
},
"i2sWs": {
"label": "i2S WS",
"description": "GPIO pin to use for i2S WS"
},
"i2sSd": {
"label": "i2S SD",
"description": "GPIO pin to use for i2S SD"
},
"i2sDin": {
"label": "i2S DIN",
"description": "GPIO pin to use for i2S DIN"
},
"i2sSck": {
"label": "i2S SCK",
"description": "GPIO pin to use for i2S SCK"
}
},
"cannedMessage": {
"title": "Canned Message Settings",
"description": "Settings for the Canned Message module",
"moduleEnabled": {
"label": "Module Enabled",
"description": "Enable Canned Message"
},
"rotary1Enabled": {
"label": "Rotary Encoder #1 Enabled",
"description": "Enable the rotary encoder"
},
"inputbrokerPinA": {
"label": "Encoder Pin A",
"description": "GPIO Pin Value (1-39) For encoder port A"
},
"inputbrokerPinB": {
"label": "Encoder Pin B",
"description": "GPIO Pin Value (1-39) For encoder port B"
},
"inputbrokerPinPress": {
"label": "Encoder Pin Press",
"description": "GPIO Pin Value (1-39) For encoder Press"
},
"inputbrokerEventCw": {
"label": "Clockwise event",
"description": "Select input event."
},
"inputbrokerEventCcw": {
"label": "Counter Clockwise event",
"description": "Select input event."
},
"inputbrokerEventPress": {
"label": "Press event",
"description": "Select input event"
},
"updown1Enabled": {
"label": "Up Down enabled",
"description": "Enable the up / down encoder"
},
"allowInputSource": {
"label": "Allow Input Source",
"description": "Select from: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
},
"sendBell": {
"label": "Send Bell",
"description": "Sends a bell character with each message"
}
},
"detectionSensor": {
"title": "Detection Sensor Settings",
"description": "Settings for the Detection Sensor module",
"enabled": {
"label": "Povoleno",
"description": "Enable or disable Detection Sensor Module"
},
"minimumBroadcastSecs": {
"label": "Minimum Broadcast Seconds",
"description": "The interval in seconds of how often we can send a message to the mesh when a state change is detected"
},
"stateBroadcastSecs": {
"label": "State Broadcast Seconds",
"description": "The interval in seconds of how often we should send a message to the mesh with the current state regardless of changes"
},
"sendBell": {
"label": "Send Bell",
"description": "Send ASCII bell with alert message"
},
"name": {
"label": "Friendly Name",
"description": "Used to format the message sent to mesh, max 20 Characters"
},
"monitorPin": {
"label": "Monitor Pin",
"description": "The GPIO pin to monitor for state changes"
},
"detectionTriggerType": {
"label": "Detection Triggered Type",
"description": "The type of trigger event to be used"
},
"usePullup": {
"label": "Use Pullup",
"description": "Whether or not use INPUT_PULLUP mode for GPIO pin"
}
},
"externalNotification": {
"title": "External Notification Settings",
"description": "Configure the external notification module",
"enabled": {
"label": "Module Enabled",
"description": "Enable External Notification"
},
"outputMs": {
"label": "Output MS",
"description": "Output MS"
},
"output": {
"label": "Output",
"description": "Output"
},
"outputVibra": {
"label": "Output Vibrate",
"description": "Output Vibrate"
},
"outputBuzzer": {
"label": "Output Buzzer",
"description": "Output Buzzer"
},
"active": {
"label": "Active",
"description": "Active"
},
"alertMessage": {
"label": "Alert Message",
"description": "Alert Message"
},
"alertMessageVibra": {
"label": "Alert Message Vibrate",
"description": "Alert Message Vibrate"
},
"alertMessageBuzzer": {
"label": "Alert Message Buzzer",
"description": "Alert Message Buzzer"
},
"alertBell": {
"label": "Alert Bell",
"description": "Should an alert be triggered when receiving an incoming bell?"
},
"alertBellVibra": {
"label": "Alert Bell Vibrate",
"description": "Alert Bell Vibrate"
},
"alertBellBuzzer": {
"label": "Alert Bell Buzzer",
"description": "Alert Bell Buzzer"
},
"usePwm": {
"label": "Use PWM",
"description": "Use PWM"
},
"nagTimeout": {
"label": "Nag Timeout",
"description": "Nag Timeout"
},
"useI2sAsBuzzer": {
"label": "Use I²S Pin as Buzzer",
"description": "Designate I²S Pin as Buzzer Output"
}
},
"mqtt": {
"title": "MQTT Settings",
"description": "Settings for the MQTT module",
"enabled": {
"label": "Povoleno",
"description": "Enable or disable MQTT"
},
"address": {
"label": "MQTT Server Address",
"description": "MQTT server address to use for default/custom servers"
},
"username": {
"label": "MQTT Username",
"description": "MQTT username to use for default/custom servers"
},
"password": {
"label": "MQTT Password",
"description": "MQTT password to use for default/custom servers"
},
"encryptionEnabled": {
"label": "Encryption Enabled",
"description": "Enable or disable MQTT encryption. Note: All messages are sent to the MQTT broker unencrypted if this option is not enabled, even when your uplink channels have encryption keys set. This includes position data."
},
"jsonEnabled": {
"label": "JSON Enabled",
"description": "Whether to send/consume JSON packets on MQTT"
},
"tlsEnabled": {
"label": "TLS povoleno",
"description": "Enable or disable TLS"
},
"root": {
"label": "Kořenové téma",
"description": "MQTT root topic to use for default/custom servers"
},
"proxyToClientEnabled": {
"label": "MQTT Client Proxy Enabled",
"description": "Utilizes the network connection to proxy MQTT messages to the client."
},
"mapReportingEnabled": {
"label": "Map Reporting Enabled",
"description": "Your node will periodically send an unencrypted map report packet to the configured MQTT server, this includes id, short and long name, approximate location, hardware model, role, firmware version, LoRa region, modem preset and primary channel name."
},
"mapReportSettings": {
"publishIntervalSecs": {
"label": "Map Report Publish Interval (s)",
"description": "Interval in seconds to publish map reports"
},
"positionPrecision": {
"label": "Approximate Location",
"description": "Position shared will be accurate within this distance",
"options": {
"metric_km23": "Within 23 km",
"metric_km12": "Within 12 km",
"metric_km5_8": "Within 5.8 km",
"metric_km2_9": "Within 2.9 km",
"metric_km1_5": "Within 1.5 km",
"metric_m700": "Within 700 m",
"metric_m350": "Within 350 m",
"metric_m200": "Within 200 m",
"metric_m90": "Within 90 m",
"metric_m50": "Within 50 m",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
}
},
"neighborInfo": {
"title": "Neighbor Info Settings",
"description": "Settings for the Neighbor Info module",
"enabled": {
"label": "Povoleno",
"description": "Enable or disable Neighbor Info Module"
},
"updateInterval": {
"label": "Update Interval",
"description": "Interval in seconds of how often we should try to send our Neighbor Info to the mesh"
}
},
"paxcounter": {
"title": "Paxcounter Settings",
"description": "Settings for the Paxcounter module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Paxcounter"
},
"paxcounterUpdateInterval": {
"label": "Update Interval (seconds)",
"description": "How long to wait between sending paxcounter packets"
},
"wifiThreshold": {
"label": "WiFi RSSI Threshold",
"description": "At what WiFi RSSI level should the counter increase. Defaults to -80."
},
"bleThreshold": {
"label": "BLE RSSI Threshold",
"description": "At what BLE RSSI level should the counter increase. Defaults to -80."
}
},
"rangeTest": {
"title": "Range Test Settings",
"description": "Settings for the Range Test module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Range Test"
},
"sender": {
"label": "Message Interval",
"description": "How long to wait between sending test packets"
},
"save": {
"label": "Save CSV to storage",
"description": "ESP32 Only"
}
},
"serial": {
"title": "Serial Settings",
"description": "Settings for the Serial module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Serial output"
},
"echo": {
"label": "Echo",
"description": "Any packets you send will be echoed back to your device"
},
"rxd": {
"label": "Receive Pin",
"description": "Set the GPIO pin to the RXD pin you have set up."
},
"txd": {
"label": "Transmit Pin",
"description": "Set the GPIO pin to the TXD pin you have set up."
},
"baud": {
"label": "Baud Rate",
"description": "The serial baud rate"
},
"timeout": {
"label": "Vypršel čas spojení",
"description": "Seconds to wait before we consider your packet as 'done'"
},
"mode": {
"label": "Mode",
"description": "Select Mode"
},
"overrideConsoleSerialPort": {
"label": "Override Console Serial Port",
"description": "If you have a serial port connected to the console, this will override it."
}
},
"storeForward": {
"title": "Store & Forward Settings",
"description": "Settings for the Store & Forward module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Store & Forward"
},
"heartbeat": {
"label": "Heartbeat Enabled",
"description": "Enable Store & Forward heartbeat"
},
"records": {
"label": "Počet záznamů",
"description": "Number of records to store"
},
"historyReturnMax": {
"label": "History return max",
"description": "Max number of records to return"
},
"historyReturnWindow": {
"label": "History return window",
"description": "Max number of records to return"
}
},
"telemetry": {
"title": "Telemetry Settings",
"description": "Settings for the Telemetry module",
"deviceUpdateInterval": {
"label": "Device Metrics",
"description": "Interval aktualizace měření spotřeby (v sekundách)"
},
"environmentUpdateInterval": {
"label": "Interval aktualizace měření životního prostředí (v sekundách)",
"description": ""
},
"environmentMeasurementEnabled": {
"label": "Module Enabled",
"description": "Enable the Environment Telemetry"
},
"environmentScreenEnabled": {
"label": "Displayed on Screen",
"description": "Show the Telemetry Module on the OLED"
},
"environmentDisplayFahrenheit": {
"label": "Display Fahrenheit",
"description": "Display temp in Fahrenheit"
},
"airQualityEnabled": {
"label": "Air Quality Enabled",
"description": "Enable the Air Quality Telemetry"
},
"airQualityInterval": {
"label": "Air Quality Update Interval",
"description": "How often to send Air Quality data over the mesh"
},
"powerMeasurementEnabled": {
"label": "Power Measurement Enabled",
"description": "Enable the Power Measurement Telemetry"
},
"powerUpdateInterval": {
"label": "Power Update Interval",
"description": "How often to send Power data over the mesh"
},
"powerScreenEnabled": {
"label": "Power Screen Enabled",
"description": "Enable the Power Telemetry Screen"
}
}
}
@@ -0,0 +1,63 @@
{
"nodeDetail": {
"publicKeyEnabled": {
"label": "Public Key Enabled"
},
"noPublicKey": {
"label": "No Public Key"
},
"directMessage": {
"label": "Direct Message {{shortName}}"
},
"favorite": {
"label": "Oblíbené",
"tooltip": "Add or remove this node from your favorites"
},
"notFavorite": {
"label": "Not a Favorite"
},
"error": {
"label": "Chyba",
"text": "An error occurred while fetching node details. Please try again later."
},
"status": {
"heard": "Heard",
"mqtt": "MQTT"
},
"elevation": {
"label": "Elevation"
},
"channelUtil": {
"label": "Channel Util"
},
"airtimeUtil": {
"label": "Airtime Util"
}
},
"nodesTable": {
"headings": {
"longName": "Long Name",
"connection": "Connection",
"lastHeard": "Last Heard",
"encryption": "Encryption",
"model": "Model",
"macAddress": "MAC Address"
},
"connectionStatus": {
"direct": "Přímý",
"away": "away",
"unknown": "-",
"viaMqtt": ", via MQTT"
},
"lastHeardStatus": {
"never": "Never"
}
},
"actions": {
"added": "Added",
"removed": "Removed",
"ignoreNode": "Ignore Node",
"unignoreNode": "Unignore Node",
"requestPosition": "Request Position"
}
}
@@ -0,0 +1,228 @@
{
"navigation": {
"title": "Navigation",
"messages": "Zprávy",
"map": "Mapa",
"config": "Config",
"radioConfig": "Radio Config",
"moduleConfig": "Module Config",
"channels": "Kanály",
"nodes": "Uzly"
},
"app": {
"title": "Meshtastic",
"logo": "Meshtastic Logo"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Open sidebar",
"close": "Close sidebar"
}
},
"deviceInfo": {
"volts": "{{voltage}} volts",
"firmware": {
"title": "Firmware",
"version": "v{{version}}",
"buildDate": "Build date: {{date}}"
},
"deviceName": {
"title": "Device Name",
"changeName": "Change Device Name",
"placeholder": "Enter device name"
},
"editDeviceName": "Edit device name"
}
},
"batteryStatus": {
"charging": "{{level}}% charging",
"pluggedIn": "Plugged in",
"title": "Baterie"
},
"search": {
"nodes": "Search nodes...",
"channels": "Search channels...",
"commandPalette": "Search commands..."
},
"toast": {
"positionRequestSent": {
"title": "Position request sent."
},
"requestingPosition": {
"title": "Requesting position, please wait..."
},
"sendingTraceroute": {
"title": "Sending Traceroute, please wait..."
},
"tracerouteSent": {
"title": "Traceroute sent."
},
"savedChannel": {
"title": "Saved Channel: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Chat is using PKI encryption."
},
"pskEncryption": {
"title": "Chat is using PSK encryption."
}
},
"configSaveError": {
"title": "Error Saving Config",
"description": "An error occurred while saving the configuration."
},
"validationError": {
"title": "Config Errors Exist",
"description": "Please fix the configuration errors before saving."
},
"saveSuccess": {
"title": "Saving Config",
"description": "The configuration change {{case}} has been saved."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
}
},
"notifications": {
"copied": {
"label": "Copied!"
},
"copyToClipboard": {
"label": "Copy to clipboard"
},
"hidePassword": {
"label": "Skrýt heslo"
},
"showPassword": {
"label": "Zobrazit heslo"
},
"deliveryStatus": {
"delivered": "Delivered",
"failed": "Delivery Failed",
"waiting": "Waiting",
"unknown": "Unknown"
}
},
"general": {
"label": "General"
},
"hardware": {
"label": "Hardware"
},
"metrics": {
"label": "Metriky"
},
"role": {
"label": "Role"
},
"filter": {
"label": "Filtr"
},
"advanced": {
"label": "Advanced"
},
"clearInput": {
"label": "Clear input"
},
"resetFilters": {
"label": "Reset Filters"
},
"nodeName": {
"label": "Node name/number",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Airtime Utilization (%)"
},
"batteryLevel": {
"label": "Battery level (%)",
"labelText": "Battery level (%): {{value}}"
},
"batteryVoltage": {
"label": "Battery voltage (V)",
"title": "Napětí"
},
"channelUtilization": {
"label": "Channel Utilization (%)"
},
"hops": {
"direct": "Přímý",
"label": "Number of hops",
"text": "Number of hops: {{value}}"
},
"lastHeard": {
"label": "Naposledy slyšen",
"labelText": "Last heard: {{value}}",
"nowLabel": "Now"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Favorites"
},
"hide": {
"label": "Hide"
},
"showOnly": {
"label": "Show Only"
},
"viaMqtt": {
"label": "Connected via MQTT"
},
"hopsUnknown": {
"label": "Unknown number of hops"
},
"showUnheard": {
"label": "Never heard"
},
"language": {
"label": "Jazyk",
"changeLanguage": "Change Language"
},
"theme": {
"dark": "Tmavý",
"light": "Světlý",
"system": "Automatic",
"changeTheme": "Change Color Scheme"
},
"errorPage": {
"title": "This is a little embarrassing...",
"description1": "We are really sorry but an error occurred in the web client that caused it to crash. <br /> This is not supposed to happen, and we are working hard to fix it.",
"description2": "The best way to prevent this from happening again to you or anyone else is to report the issue to us.",
"reportInstructions": "Please include the following information in your report:",
"reportSteps": {
"step1": "What you were doing when the error occurred",
"step2": "What you expected to happen",
"step3": "What actually happened",
"step4": "Any other relevant information"
},
"reportLink": "You can report the issue to our <0>GitHub</0>",
"dashboardLink": "Return to the <0>dashboard</0>",
"detailsSummary": "Error Details",
"errorMessageLabel": "Error message:",
"stackTraceLabel": "Stack trace:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® is a registered trademark of Meshtastic LLC. | <1>Legal Information</1>",
"commitSha": "Commit SHA: {{sha}}"
}
}
@@ -0,0 +1,69 @@
{
"page": {
"sectionLabel": "Kanäle",
"channelName": "Kanal {{channelName}}",
"broadcastLabel": "Primär",
"channelIndex": "Kanal {{index}}"
},
"validation": {
"pskInvalid": "Bitte geben Sie einen gültigen {{bits}} Bit PSK Schlüssel ein."
},
"settings": {
"label": "Kanaleinstellungen",
"description": "Verschlüsselung, MQTT & sonstige Einstellungen"
},
"role": {
"label": "Rolle",
"description": "Gerätetelemetrie wird über den PRIMÄR Kanal gesendet. Nur ein PRIMÄR Kanal ist erlaubt.",
"options": {
"primary": "PRIMÄR",
"disabled": "DEAKTIVIERT",
"secondary": "SEKUNDÄR"
}
},
"psk": {
"label": "Vorher verteilter Schlüssel",
"description": "Unterstützte PSK-Längen: 256-Bit, 128-Bit, 8-Bit, leer (0-Bit)",
"generate": "Erzeugen"
},
"name": {
"label": "Name",
"description": "Ein eindeutiger Name für den Kanal <12 Bytes. Leer lassen für Standard."
},
"uplinkEnabled": {
"label": "Uplink aktiviert",
"description": "Nachrichten vom lokalen Netz über MQTT versenden"
},
"downlinkEnabled": {
"label": "Downlink aktiviert",
"description": "Nachrichten von MQTT im lokalen Netz versenden"
},
"positionPrecision": {
"label": "Standort",
"description": "Die Genauigkeit des Standorts, die in diesem Kanal geteilt werden soll. Kann deaktiviert werden.",
"options": {
"none": "Standort nicht freigeben",
"precise": "Genauer Standort",
"metric_km23": "Innerhalb von 23 Kilometern",
"metric_km12": "Innerhalb von 12 Kilometern",
"metric_km5_8": "Innerhalb von 5,8 Kilometern",
"metric_km2_9": "Innerhalb von 2,9 Kilometern",
"metric_km1_5": "Innerhalb von 1,5 Kilometern",
"metric_m700": "Innerhalb von 700 Metern",
"metric_m350": "Innerhalb von 350 Metern",
"metric_m200": "Innerhalb von 200 Metern",
"metric_m90": "Innerhalb von 90 Metern",
"metric_m50": "Innerhalb von 50 Metern",
"imperial_mi15": "Innerhalb von 15 Meilen",
"imperial_mi7_3": "Innerhalb von 7,3 Meilen",
"imperial_mi3_6": "Innerhalb von 3,6 Meilen",
"imperial_mi1_8": "Innerhalb von 1,8 Meilen",
"imperial_mi0_9": "Innerhalb von 0,9 Meilen",
"imperial_mi0_5": "Innerhalb von 0,5 Meilen",
"imperial_mi0_2": "Innerhalb von 0,2 Meilen",
"imperial_ft600": "Innerhalb von 600 Fuß",
"imperial_ft300": "Innerhalb von 300 Fuß",
"imperial_ft150": "Innerhalb von 150 Fuß"
}
}
}
@@ -0,0 +1,50 @@
{
"emptyState": "Keine Ergebnisse gefunden.",
"page": {
"title": "Befehlsmenü"
},
"pinGroup": {
"label": "Befehlsgruppe anheften"
},
"unpinGroup": {
"label": "Befehlsgruppe lösen"
},
"goto": {
"label": "Gehe zu",
"command": {
"messages": "Nachrichten",
"map": "Karte",
"config": "Einstellungen",
"channels": "Kanäle",
"nodes": "Knoten"
}
},
"manage": {
"label": "Verwalten",
"command": {
"switchNode": "Knoten wechseln",
"connectNewNode": "Neuen Knoten verbinden"
}
},
"contextual": {
"label": "Kontextabhängig",
"command": {
"qrCode": "QR Code",
"qrGenerator": "Generator",
"qrImport": "Importieren",
"scheduleShutdown": "Herunterfahren planen",
"scheduleReboot": "Neustarten planen",
"rebootToOtaMode": "Neustart in den OTA Modus",
"resetNodeDb": "Knotendatenbank zurücksetzen",
"factoryResetDevice": "Gerät auf Werkseinstellungen zurücksetzen",
"factoryResetConfig": "Auf Werkseinstellungen zurücksetzen"
}
},
"debug": {
"label": "Debug",
"command": {
"reconfigure": "Neu einrichten",
"clearAllStoredMessages": "Alle gespeicherten Nachrichten löschen"
}
}
}
@@ -0,0 +1,141 @@
{
"button": {
"apply": "Anwenden",
"backupKey": "Schlüssel sichern",
"cancel": "Abbrechen",
"clearMessages": "Nachrichten löschen",
"close": "Schließen",
"confirm": "Bestätigen",
"delete": "Löschen",
"dismiss": "Tastatur ausblenden",
"download": "Herunterladen",
"export": "Exportieren",
"generate": "Erzeugen",
"regenerate": "Neu erzeugen",
"import": "Importieren",
"message": "Nachricht",
"now": "Jetzt",
"ok": "Ok",
"print": "Drucken",
"rebootOtaNow": "Neustart in den OTA Modus",
"remove": "Entfernen",
"requestNewKeys": "Neue Schlüssel anfordern",
"requestPosition": "Standort anfordern",
"reset": "Zurücksetzen",
"save": "Speichern",
"scanQr": "QR Code scannen",
"traceRoute": "Route verfolgen",
"submit": "Absenden"
},
"app": {
"title": "Meshtastic",
"fullTitle": "Meshtastic Web-Applikation"
},
"loading": "Wird geladen...",
"unit": {
"cps": "CPS",
"dbm": "dBm",
"hertz": "Hz",
"hop": {
"one": "Sprung",
"plural": "Sprünge"
},
"hopsAway": {
"one": "{{count}} Sprung entfernt",
"plural": "{{count}} Sprünge entfernt",
"unknown": "Sprungweite unbekannt"
},
"megahertz": "MHz",
"raw": "Einheitslos",
"meter": {
"one": "Meter",
"plural": "Meter",
"suffix": "m"
},
"minute": {
"one": "Minute",
"plural": "Minuten"
},
"hour": {
"one": "Stunde",
"plural": "Stunden"
},
"millisecond": {
"one": "Millisekunde",
"plural": "Millisekunden",
"suffix": "ms"
},
"second": {
"one": "Sekunde",
"plural": "Sekunden"
},
"day": {
"one": "Tag",
"plural": "Tage"
},
"month": {
"one": "Monat",
"plural": "Monate"
},
"year": {
"one": "Jahr",
"plural": "Jahre"
},
"snr": "SNR",
"volt": {
"one": "Volt",
"plural": "Volt",
"suffix": "V"
},
"record": {
"one": "Datensatz",
"plural": "Datensätze"
}
},
"security": {
"0bit": "Leer",
"8bit": "8 Bit",
"128bit": "128 Bit",
"256bit": "256 Bit"
},
"unknown": {
"longName": "Unbekannt",
"shortName": "UNB",
"notAvailable": "Keine Angaben",
"num": "???"
},
"nodeUnknownPrefix": "!",
"unset": "NICHT GESETZT",
"fallbackName": "Meshtastic {{last4}}",
"node": "Knoten",
"formValidation": {
"unsavedChanges": "Ungespeicherte Änderungen",
"tooBig": {
"string": "Zu lang, erwarte maximal {{maximum}} Zeichen.",
"number": "Zu groß, erwartete eine Zahl kleiner oder gleich {{maximum}}.",
"bytes": "Zu groß, erwarte maximal {{params.maximum}} Bytes."
},
"tooSmall": {
"string": "Zu kurz, erwartete mindestens {{minimum}} Zeichen.",
"number": "Zu klein, erwartete eine Zahl größer oder gleich {{minimum}}."
},
"invalidFormat": {
"ipv4": "Ungültiges Format, erwartete eine IPv4 Adresse.",
"key": "Ungültiges Format, erwartet einen Base64-kodierten vor verteilten Schlüssel (PSK)."
},
"invalidType": {
"number": "Ungültiger Typ, erwartete eine Zahl."
},
"pskLength": {
"0bit": "Der Schlüssel muss leer sein.",
"8bit": "Der administrative Schlüssel muss ein vor verteilter 8 Bit Schlüssel (PSK) sein.",
"128bit": "Der administrative Schlüssel muss ein vor verteilter 128 Bit Schlüssel (PSK) sein.",
"256bit": "Der administrative Schlüssel muss ein vor verteilter 256 Bit Schlüssel (PSK) sein."
},
"required": {
"generic": "Dies ist ein Pflichtfeld.",
"managed": "Mindestens ein administrativer Schlüssel wird benötigt, um diesen Knoten zu verwalten",
"key": "Schlüssel erforderlich."
}
}
}
@@ -0,0 +1,12 @@
{
"dashboard": {
"title": "Verbundene Geräte",
"description": "Verwalten Sie Ihre verbundenen Meshtastic Geräte.",
"connectionType_ble": "BLE",
"connectionType_serial": "Seriell",
"connectionType_network": "Netzwerk",
"noDevicesTitle": "Keine Geräte verbunden",
"noDevicesDescription": "Verbinden Sie ein neues Gerät, um zu beginnen.",
"button_newConnection": "Neue Verbindung"
}
}
@@ -0,0 +1,428 @@
{
"page": {
"title": "Einstellungen",
"tabBluetooth": "Bluetooth",
"tabDevice": "Gerät",
"tabDisplay": "Display",
"tabLora": "LoRa",
"tabNetwork": "Netzwerk",
"tabPosition": "Standort",
"tabPower": "Leistung",
"tabSecurity": "Sicherheit"
},
"sidebar": {
"label": "Module"
},
"device": {
"title": "Geräteeinstellungen",
"description": "Einstellungen für dieses Gerät",
"buttonPin": {
"description": "GPIO für Taste überschreiben",
"label": "GPIO Taste"
},
"buzzerPin": {
"description": "GPIO für Summer überschreiben",
"label": "GPIO Summer"
},
"disableTripleClick": {
"description": "Dreifachklicken deaktivieren",
"label": "Dreifachklicken deaktivieren"
},
"doubleTapAsButtonPress": {
"description": "Doppeltes Tippen als Taste verwenden",
"label": "Doppelklick als Tastendruck"
},
"ledHeartbeatDisabled": {
"description": "Die Herzschlag LED deaktivieren",
"label": "Herzschlag LED deaktivieren"
},
"nodeInfoBroadcastInterval": {
"description": "Häufigkeit der Übertragung von Knoteninformationen",
"label": "Knoteninfo Übertragungsintervall"
},
"posixTimezone": {
"description": "Zeichenfolge der POSIX Zeitzone für dieses Gerät",
"label": "POSIX Zeitzone"
},
"rebroadcastMode": {
"description": "Wie Weiterleitungen behandelt werden",
"label": "Weiterleitungsmodus"
},
"role": {
"description": "In welche Rolle das Gerät im Netz arbeitet",
"label": "Rolle"
}
},
"bluetooth": {
"title": "Bluetooth Einstellungen",
"description": "Einstellungen für das Bluetooth Modul",
"note": "Hinweis: Einige Geräte (ESP32) können nicht gleichzeitig Bluetooth und WLAN verwenden.",
"enabled": {
"description": "Bluetooth aktivieren oder deaktivieren",
"label": "Aktiviert"
},
"pairingMode": {
"description": "PIN Nummer Auswahlverhalten",
"label": "Kopplungsmodus"
},
"pin": {
"description": "PIN Nummer zum Verbinden verwenden",
"label": "PIN Nummer"
}
},
"display": {
"description": "Einstellungen für die Geräteanzeige",
"title": "Anzeigeeinstellungen",
"headingBold": {
"description": "Überschrifttext fett darstellen",
"label": "Fette Überschrift"
},
"carouselDelay": {
"description": "Bestimmt wie schnell die Fenster durch gewechselt werden",
"label": "Karussellverzögerung"
},
"compassNorthTop": {
"description": "Norden im Kompass immer oben anzeigen",
"label": "Kompass Norden oben"
},
"displayMode": {
"description": "Variante des Anzeigelayout",
"label": "Anzeigemodus"
},
"displayUnits": {
"description": "Zeige metrische oder imperiale Einheiten",
"label": "Anzeigeeinheiten"
},
"flipScreen": {
"description": "Anzeige um 180 Grad drehen",
"label": "Anzeige drehen"
},
"gpsDisplayUnits": {
"description": "Anzeigeformat der Koordinaten",
"label": "GPS Anzeigeformat"
},
"oledType": {
"description": "Art des OLED Anzeige, die an dem Gerät angeschlossen ist",
"label": "OLED Typ"
},
"screenTimeout": {
"description": "Anzeige nach dieser Zeit automatisch ausschalten",
"label": "Anzeigeabschaltung"
},
"twelveHourClock": {
"description": "12-Stunden Format benutzen",
"label": "12-Stunden Uhr"
},
"wakeOnTapOrMotion": {
"description": "Gerät durch Tippen oder Bewegung aufwecken",
"label": "Aufwachen durch Tippen oder Bewegung"
}
},
"lora": {
"title": "Netzeinstellungen",
"description": "Einstellungen für das LoRa Netz",
"bandwidth": {
"description": "Kanalbandbreite in MHz",
"label": "Bandbreite"
},
"boostedRxGain": {
"description": "Erhöhte Empfangsverstärkung",
"label": "Erhöhte Empfangsverstärkung"
},
"codingRate": {
"description": "Kodierrate",
"label": "Fehlerkorrektur"
},
"frequencyOffset": {
"description": "Frequenzversatz zur Kalibrierung von Oszillatorfehlern",
"label": "Frequenzversatz"
},
"frequencySlot": {
"description": "LoRa Frequenzschlitz",
"label": "Frequenzschlitz"
},
"hopLimit": {
"description": "Maximale Sprungweite",
"label": "Sprungweite"
},
"ignoreMqtt": {
"description": "MQTT Nachrichten nicht über das Netz weiterleiten",
"label": "MQTT ignorieren"
},
"modemPreset": {
"description": "Modem Voreinstellung die verwendet wird",
"label": "Modem Voreinstellungen"
},
"okToMqtt": {
"description": "Wenn auf aktiviert, zeigt diese Einstellung an, dass der Benutzer das Weiterleiten von Nachrichten über MQTT akzeptiert. Wenn deaktiviert, werden entfernte Knoten aufgefordert, Nachrichten nicht über MQTT weiterzuleiten",
"label": "OK für MQTT"
},
"overrideDutyCycle": {
"description": "Duty-Cycle überschreiben",
"label": "Duty-Cycle überschreiben"
},
"overrideFrequency": {
"description": "Sendefrequenz überschreiben (MHz)",
"label": "Sendefrequenz überschreiben"
},
"region": {
"description": "Legt die Region für Ihren Knoten fest",
"label": "Region"
},
"spreadingFactor": {
"description": "Anzahl der Symbole zur Kodierung der Nutzdaten",
"label": "Spreizfaktor"
},
"transmitEnabled": {
"description": "Sender (TX) des LoRa Funkgerätes aktivieren/deaktivieren",
"label": "Senden aktiviert"
},
"transmitPower": {
"description": "Maximale Sendeleistung",
"label": "Sendeleistung"
},
"usePreset": {
"description": "Eine der vordefinierten Modem Voreinstellungen verwenden",
"label": "Voreinstellung verwenden"
},
"meshSettings": {
"description": "Einstellungen für das LoRa Netz",
"label": "Netzeinstellungen"
},
"waveformSettings": {
"description": "Einstellungen für die LoRa Wellenform",
"label": "Einstellungen der Wellenform"
},
"radioSettings": {
"label": "Radio-Einstellungen",
"description": "Einstellungen für das LoRa Funkgerät"
}
},
"network": {
"title": "WLAN Einstellungen",
"description": "WLAN Funkeinstellungen",
"note": "Hinweis: Einige Geräte (ESP32) können nicht gleichzeitig Bluetooth und WLAN verwenden.",
"addressMode": {
"description": "Auswahl der IP Adressenzuweisung",
"label": "IP Adressenmodus"
},
"dns": {
"description": "DNS Server",
"label": "DNS"
},
"ethernetEnabled": {
"description": "Aktivieren oder deaktivieren sie den Ethernet Anschluss",
"label": "Aktiviert"
},
"gateway": {
"description": "Standard Gateway",
"label": "Gateway"
},
"ip": {
"description": "IP Adresse",
"label": "IP"
},
"psk": {
"description": "Netzwerkpasswort",
"label": "PSK"
},
"ssid": {
"description": "Netzwerkname",
"label": "SSID"
},
"subnet": {
"description": "Subnetzmaske",
"label": "Subnetz"
},
"wifiEnabled": {
"description": "Aktivieren oder deaktivieren Sie die WLAN Übertragung",
"label": "Aktiviert"
},
"meshViaUdp": {
"label": "Netz über UDP"
},
"ntpServer": {
"label": "NTP Server"
},
"rsyslogServer": {
"label": "Rsyslog Server"
},
"ethernetConfigSettings": {
"description": "Einstellung des Ethernet Ports",
"label": "Ethernet Einstellung"
},
"ipConfigSettings": {
"description": "Einstellung der IP Adresse",
"label": "IP Adresseinstellungen"
},
"ntpConfigSettings": {
"description": "NTP Server Einstellungen",
"label": "NTP Einstellungen"
},
"rsyslogConfigSettings": {
"description": "Rsyslog Einstellung",
"label": "Rsyslog Einstellung"
},
"udpConfigSettings": {
"description": "UDP über Netz Einstellung",
"label": "UDP Konfiguration"
}
},
"position": {
"title": "Standorteinstellung",
"description": "Einstellungen für das Standortmodul",
"broadcastInterval": {
"description": "Wie oft Ihr Standort über das Netz gesendet wird",
"label": "Übertragungsintervall"
},
"enablePin": {
"description": "Überschreiben des GPIO der das GPS-Modul aktiviert",
"label": "GPIO GPS aktivieren"
},
"fixedPosition": {
"description": "GPS Standort nicht senden, sondern manuell angegeben",
"label": "Fester Standort"
},
"gpsMode": {
"description": "Einstellung, ob GPS des Geräts aktiviert, deaktiviert oder nicht vorhanden ist",
"label": "GPS Modus"
},
"gpsUpdateInterval": {
"description": "Wie oft ein GPS Standort ermittelt werden soll",
"label": "GPS Aktualisierungsintervall"
},
"positionFlags": {
"description": "Optionalen, die bei der Zusammenstellung von Standortnachrichten enthalten sein sollen. Je mehr Optionen ausgewählt werden, desto größer wird die Nachricht und die längere Übertragungszeit erhöht das Risiko für einen Nachrichtenverlust.",
"label": "Standort Optionen"
},
"receivePin": {
"description": "GPIO Pin für serielles Empfangen (RX) des GPS-Moduls überschreiben",
"label": "GPIO Empfangen"
},
"smartPositionEnabled": {
"description": "Standort nur verschicken, wenn eine sinnvolle Standortänderung stattgefunden hat",
"label": "Intelligenten Standort aktivieren"
},
"smartPositionMinDistance": {
"description": "Mindestabstand (in Meter), die vor dem Senden einer Standortaktualisierung zurückgelegt werden muss",
"label": "Minimale Entfernung für intelligenten Standort"
},
"smartPositionMinInterval": {
"description": "Minimales Intervall (in Sekunden), das vor dem Senden einer Standortaktualisierung vergangen sein muss",
"label": "Minimales Intervall für intelligenten Standort"
},
"transmitPin": {
"description": "GPIO Pin für serielles Senden (TX) des GPS-Moduls überschreiben",
"label": "GPIO Senden"
},
"intervalsSettings": {
"description": "Wie oft Standortaktualisierungen gesendet werden",
"label": "Intervalle"
},
"flags": {
"placeholder": "Standort Optionen auswählen",
"altitude": "Höhe",
"altitudeGeoidalSeparation": "Geoidale Höhentrennung",
"altitudeMsl": "Höhe in Bezug auf Meeresspiegel",
"dop": "Dilution of Präzision (DOP) PDOP standardmäßig verwenden",
"hdopVdop": "Wenn DOP gesetzt ist, wird HDOP / VDOP anstelle von PDOP verwendet",
"numSatellites": "Anzahl Satelliten",
"sequenceNumber": "Sequenznummer",
"timestamp": "Zeitstempel",
"unset": "Nicht konfiguriert",
"vehicleHeading": "Fahrzeugsteuerkurs",
"vehicleSpeed": "Fahrzeuggeschwindigkeit"
}
},
"power": {
"adcMultiplierOverride": {
"description": "Zur Optimierung der Genauigkeit bei der Akkuspannunsmessung",
"label": "ADC Multiplikationsfaktor"
},
"ina219Address": {
"description": "Adresse des INA219 Stromsensors",
"label": "INA219 Adresse"
},
"lightSleepDuration": {
"description": "Wie lange das Gerät im leichten Schlafmodus ist",
"label": "Dauer leichter Schlafmodus"
},
"minimumWakeTime": {
"description": "Minimale Zeitspanne für die das Gerät aktiv bleibt, nachdem es eine Nachricht empfangen hat",
"label": "Minimale Aufwachzeit"
},
"noConnectionBluetoothDisabled": {
"description": "Wenn das Gerät keine Bluetooth Verbindung erhält, wird der BLE Funk nach dieser Zeit deaktiviert",
"label": "Keine Verbindung, Bluetooth deaktiviert"
},
"powerSavingEnabled": {
"description": "Auswählen, wenn aus einer Stromquelle mit niedriger Kapazität (z.B Solar) betrieben wird, um den Stromverbrauch so weit wie möglich zu minimieren.",
"label": "Energiesparmodus aktivieren"
},
"shutdownOnBatteryDelay": {
"description": "Verzögerung bis zum Abschalten der Knoten sich im Akkubetrieb befindet. 0 für unbegrenzt",
"label": "Verzögerung Akkuabschaltung"
},
"superDeepSleepDuration": {
"description": "Wie lange das Gerät im supertiefen Schlafmodus ist",
"label": "Dauer Supertiefschlaf"
},
"powerConfigSettings": {
"description": "Einstellungen für das Energiemodul",
"label": "Power Konfiguration"
},
"sleepSettings": {
"description": "Einstellungen Ruhezustand für das Energiemodul",
"label": "Einstellung Ruhezustand"
}
},
"security": {
"description": "Sicherheitseinstellungen",
"title": "Sicherheitseinstellungen",
"button_backupKey": "Schlüssel sichern",
"adminChannelEnabled": {
"description": "Erlaubt die Gerätesteuerung über den unsicheren, veralteten administrativen Kanal",
"label": "Veraltete Administrierung erlauben"
},
"enableDebugLogApi": {
"description": "Ausgabe von Fehlerprotokollen in Echtzeit über die serielle Schnittstelle, Anzeige und Export von Standort reduzierten Geräteprotokollen über Bluetooth",
"label": "Debug-Protokoll API aktivieren"
},
"managed": {
"description": "Wenn aktiviert, können die Geräteeinstellungen nur von einem entfernten Administratorknoten über administrative Nachrichten geändert werden. Aktivieren Sie diese Option nur, wenn mindestens ein geeigneter Administratorknoten eingerichtet, und desen öffentlicher Schlüssel wird in einem der obigen Felder gespeichert wurde.",
"label": "Verwaltet"
},
"privateKey": {
"description": "Wird verwendet, um einen gemeinsamen Schlüssel mit einem entfernten Gerät zu erstellen",
"label": "Privater Schlüssel"
},
"publicKey": {
"description": "Wird an andere Knoten im Netz gesendet, damit diese einen gemeinsamen geheimen Schlüssel berechnen können",
"label": "Öffentlicher Schlüssel"
},
"primaryAdminKey": {
"description": "Erster öffentlicher Schlüssel, der berechtigt ist, administrative Nachrichten an diesen Knoten zu senden",
"label": "Erster Admin-Schlüssel"
},
"secondaryAdminKey": {
"description": "Zweiter öffentlicher Schlüssel, der berechtigt ist, administrative Nachrichten an diesen Knoten zu senden",
"label": "Zweiter Admin-Schlüssel"
},
"serialOutputEnabled": {
"description": "Serielle Konsole über die Stream-API",
"label": "Serielle Ausgabe aktiviert"
},
"tertiaryAdminKey": {
"description": "Dritter öffentlicher Schlüssel, der berechtigt ist, administrative Nachrichten an diesen Knoten zu senden",
"label": "Dritter Admin-Schlüssel"
},
"adminSettings": {
"description": "Administrator Einstellungen",
"label": "Administrator Einstellungen"
},
"loggingSettings": {
"description": "Einstellungen für die Protokollierung",
"label": "Protokolleinstellungen"
}
}
}
@@ -0,0 +1,171 @@
{
"deleteMessages": {
"description": "Diese Aktion wird den Nachrichtenverlauf löschen. Dies kann nicht rückgängig gemacht werden. Sind Sie sicher, dass Sie fortfahren möchten?",
"title": "Alle Nachrichten löschen"
},
"deviceName": {
"description": "Das Gerät wird neu gestartet, sobald die Einstellung gespeichert ist.",
"longName": "Langer Name",
"shortName": "Kurzname",
"title": "Gerätename ändern"
},
"import": {
"description": "Die aktuelle LoRa Einstellung wird überschrieben.",
"error": {
"invalidUrl": "Ungültige Meshtastic URL"
},
"channelPrefix": "Kanal: ",
"channelSetUrl": "Kanalsammlung / QR-Code URL",
"channels": "Kanäle:",
"usePreset": "Voreinstellung verwenden?",
"title": "Kanalsammlung importieren"
},
"locationResponse": {
"altitude": "Höhe: ",
"coordinates": "Koordinaten: ",
"title": "Standort: {{identifier}}"
},
"pkiRegenerateDialog": {
"title": "Vorab verteilten Schlüssel (PSK) neu erstellen?",
"description": "Sind Sie sicher, dass Sie den vorab verteilten Schlüssel neu erstellen möchten?",
"regenerate": "Neu erstellen"
},
"newDeviceDialog": {
"title": "Neues Gerät verbinden",
"https": "https",
"http": "http",
"tabHttp": "HTTP",
"tabBluetooth": "Bluetooth",
"tabSerial": "Seriell",
"useHttps": "HTTPS verwenden",
"connecting": "Wird verbunden...",
"connect": "Verbindung herstellen",
"connectionFailedAlert": {
"title": "Verbindung fehlgeschlagen",
"descriptionPrefix": "Verbindung zum Gerät fehlgeschlagen. ",
"httpsHint": "Wenn Sie HTTPS verwenden, müssen Sie möglicherweise zuerst ein selbstsigniertes Zertifikat akzeptieren. ",
"openLinkPrefix": "Öffnen Sie ",
"openLinkSuffix": "in einem neuen Tab",
"acceptTlsWarningSuffix": ", akzeptieren Sie alle TLS-Warnungen, wenn Sie dazu aufgefordert werden, dann versuchen Sie es erneut",
"learnMoreLink": "Mehr erfahren"
},
"httpConnection": {
"label": "IP Adresse/Hostname",
"placeholder": "000.000.000.000 / meshtastic.local"
},
"serialConnection": {
"noDevicesPaired": "Noch keine Geräte gekoppelt.",
"newDeviceButton": "Neues Gerät",
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
},
"bluetoothConnection": {
"noDevicesPaired": "Noch keine Geräte gekoppelt.",
"newDeviceButton": "Neues Gerät"
},
"validation": {
"requiresWebBluetooth": "Dieser Verbindungstyp erfordert <0>Bluetooth</0> im Browser. Bitte verwenden Sie einen unterstützten Browser, wie Chrome oder Edge.",
"requiresWebSerial": "Dieser Verbindungstyp erfordert <0>Serielle Schnittstelle</0> im Browser. Bitte verwenden Sie einen unterstützten Browser, wie Chrome oder Edge.",
"requiresSecureContext": "Diese Anwendung erfordert einen <0>sicheren Kontext</0>. Bitte verbinden Sie sich über HTTPS oder localhost.",
"additionallyRequiresSecureContext": "Zusätzlich erfordert es einen <0>sicheren Kontext</0>. Bitte verbinden Sie sich über HTTPS oder localhost."
}
},
"nodeDetails": {
"message": "Nachricht",
"requestPosition": "Standort anfordern",
"traceRoute": "Route verfolgen",
"airTxUtilization": "Auslastung Sendezeit",
"allRawMetrics": "Alle Rohdaten",
"batteryLevel": "Akkustand",
"channelUtilization": "Kanalauslastung",
"details": "Details:",
"deviceMetrics": "Gerätekennzahlen:",
"hardware": "Hardware: ",
"lastHeard": "Zuletzt gehört: ",
"nodeHexPrefix": "Knoten ID: !",
"nodeNumber": "Knotennummer: ",
"position": "Standort:",
"role": "Rolle: ",
"uptime": "Laufzeit: ",
"voltage": "Spannung",
"title": "Knotendetails für {{identifier}}",
"ignoreNode": "Knoten ignorieren",
"removeNode": "Knoten entfernen",
"unignoreNode": "Knoten akzeptieren"
},
"pkiBackup": {
"loseKeysWarning": "Wenn Sie Ihre Schlüssel verlieren, müssen Sie Ihr Gerät zurücksetzen.",
"secureBackup": "Es ist wichtig, dass Sie Ihre öffentlichen und privaten Schlüssel sichern und diese sicher speichern!",
"footer": "=== END OF KEYS ===",
"header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===",
"privateKey": "Privater Schlüssel:",
"publicKey": "Öffentlicher Schlüssel:",
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
"title": "Schlüssel sichern"
},
"pkiBackupReminder": {
"description": "Wir empfehlen die regelmäßige Sicherung Ihrer Schlüsseldaten. Möchten Sie jetzt sicheren?",
"title": "Erinnerungen für Sicherungen",
"remindLaterPrefix": "Erinnerung in:",
"remindNever": "Nie erinnern",
"backupNow": "Jetzt sichern"
},
"pkiRegenerate": {
"description": "Sind Sie sicher, dass Sie Schlüsselpaar neu erstellen möchten?",
"title": "Schlüsselpaar neu erstellen"
},
"qr": {
"addChannels": "Kanäle hinzufügen",
"replaceChannels": "Kanäle ersetzen",
"description": "Die aktuelle LoRa Einstellung wird ebenfalls geteilt.",
"sharableUrl": "Teilbare URL",
"title": "QR Code Erzeugen"
},
"rebootOta": {
"title": "Neustart planen",
"description": "Startet den verbundenen Knoten nach einer Verzögerung in den OTA (Over-the-Air) Modus.",
"enterDelay": "Verzögerung eingeben (Sek.)",
"scheduled": "Neustart wurde geplant"
},
"reboot": {
"title": "Neustart planen",
"description": "Startet den verbundenen Knoten nach x Minuten neu."
},
"refreshKeys": {
"description": {
"acceptNewKeys": "Dies entfernt den Knoten vom Gerät und fordert neue Schlüssel an.",
"keyMismatchReasonSuffix": ". Dies liegt daran, dass der aktuelle öffentliche Schlüssel des entfernten Knotens nicht mit dem zuvor gespeicherten Schlüssel für diesen Knoten übereinstimmt.",
"unableToSendDmPrefix": "Ihr Knoten kann keine Direktnachricht an folgenden Knoten senden: "
},
"acceptNewKeys": "Neue Schlüssel akzeptieren",
"title": "Schlüsselfehler - {{identifier}}"
},
"removeNode": {
"description": "Sind Sie sicher, dass Sie diesen Knoten entfernen möchten?",
"title": "Knoten entfernen?"
},
"shutdown": {
"title": "Herunterfahren planen",
"description": "Schaltet den verbundenen Knoten nach x Minuten aus."
},
"traceRoute": {
"routeToDestination": "Route zum Ziel:",
"routeBack": "Route zurück:"
},
"tracerouteResponse": {
"title": "Traceroute: {{identifier}}"
},
"unsafeRoles": {
"confirmUnderstanding": "Ja, ich weiß, was ich tue!",
"conjunction": " und der Blog-Beitrag über ",
"postamble": " und verstehen die Auswirkungen einer Veränderung der Rolle.",
"preamble": "Ich habe die",
"choosingRightDeviceRole": "Wahl der richtigen Geräterolle",
"deviceRoleDocumentation": "Dokumentation der Geräterolle",
"title": "Bist Du sicher?"
},
"managedMode": {
"confirmUnderstanding": "Ja, ich weiß, was ich tue!",
"title": "Bist Du sicher?",
"description": "Das Aktivieren des verwalteten Modus blockiert das Schreiben der Einstellungen in das Funkgerät durch alle Anwendungen (einschließlich der Webanwendung). Einmal aktiviert, können die Einstellungen <bold>nur</bold> durch administrative Nachrichten geändert werden. Diese Einstellung ist für die Fernverwaltung von abgesetzten Knoten nicht erforderlich."
}
}
@@ -0,0 +1,39 @@
{
"page": {
"title": "Nachrichten: {{chatName}}",
"placeholder": "Nachricht eingeben"
},
"emptyState": {
"title": "Einen Chat auswählen",
"text": "Noch keine Nachrichten."
},
"selectChatPrompt": {
"text": "Wählen Sie einen Kanal oder Knoten, um Nachrichten zu schreiben."
},
"sendMessage": {
"placeholder": "Geben Sie hier Ihre Nachricht ein...",
"sendButton": "Senden"
},
"actionsMenu": {
"addReactionLabel": "Reaktion hinzufügen",
"replyLabel": "Antworten"
},
"deliveryStatus": {
"delivered": {
"label": "Nachricht zugestellt",
"displayText": "Nachricht zugestellt"
},
"failed": {
"label": "Nachrichtenübermittlung fehlgeschlagen",
"displayText": "Zustellung fehlgeschlagen"
},
"unknown": {
"label": "Nachrichtenstatus unbekannt",
"displayText": "Unbekannter Status"
},
"waiting": {
"label": "Nachricht wird gesendet",
"displayText": "Warte auf Zustellung"
}
}
}
@@ -0,0 +1,448 @@
{
"page": {
"tabAmbientLighting": "Umgebungslicht",
"tabAudio": "Audio",
"tabCannedMessage": "Vordefinierte Nachrichten",
"tabDetectionSensor": "Erkennungssensor",
"tabExternalNotification": "Externe Benachrichtigung",
"tabMqtt": "MQTT",
"tabNeighborInfo": "Nachbarinformation",
"tabPaxcounter": "Pax Zähler",
"tabRangeTest": "Reichweitentest",
"tabSerial": "Seriell",
"tabStoreAndForward": "Speichern&Weiterleiten",
"tabTelemetry": "Telemetrie"
},
"ambientLighting": {
"title": "Einstellung Umgebungsbeleuchtung",
"description": "Einstellungen für das Modul Umgebungsbeleuchtung",
"ledState": {
"label": "LED Status",
"description": "Setzt die LED auf ein oder aus"
},
"current": {
"label": "Stromstärke",
"description": "Legt den Strom für den LED Ausgang fest. Standard ist 10"
},
"red": {
"label": "Rot",
"description": "Legt den roten LED Wert fest. Bereich 0-255"
},
"green": {
"label": "Grün",
"description": "Legt den grünen LED Wert fest. Bereich 0-255"
},
"blue": {
"label": "Blau",
"description": "Legt den blauen LED Wert fest. Bereich 0-255"
}
},
"audio": {
"title": "Audioeinstellungen",
"description": "Einstellungen für das Audiomodul",
"codec2Enabled": {
"label": "Codec 2 aktiviert",
"description": "Codec 2 Audiokodierung aktivieren"
},
"pttPin": {
"label": "GPIO PTT",
"description": "Für PTT verwendeter GPIO Pin"
},
"bitrate": {
"label": "Bitrate",
"description": "Bitrate zur Audiokodierung"
},
"i2sWs": {
"label": "i2S WS",
"description": "GPIO Pin für i2S WS"
},
"i2sSd": {
"label": "i2S SD",
"description": "GPIO Pin für i2S SD"
},
"i2sDin": {
"label": "i2S DIN",
"description": "GPIO Pin für i2S DIN"
},
"i2sSck": {
"label": "i2S SCK",
"description": "GPIO Pin für i2S SCK"
}
},
"cannedMessage": {
"title": "Einstellungen für vordefinierte Nachrichten",
"description": "Einstellungen für das Modul vordefinierte Nachrichten",
"moduleEnabled": {
"label": "Modul aktiviert",
"description": "Vordefinierte Nachrichten aktivieren"
},
"rotary1Enabled": {
"label": "Drehgeber #1 aktiviert",
"description": "Drehgeber aktivieren"
},
"inputbrokerPinA": {
"label": "Drehgeber Pin A",
"description": "GPIO Pin Wert (1-39) für Drehgeber Pin A"
},
"inputbrokerPinB": {
"label": "Drehgeber Pin B",
"description": "GPIO Pin Wert (1-39) für Drehgeber Pin B"
},
"inputbrokerPinPress": {
"label": "Drehgeber Pin Taste",
"description": "GPIO Pin Wert (1-39) für Drehgeber Pin Taste"
},
"inputbrokerEventCw": {
"label": "Ereignis im Uhrzeigersinn",
"description": "Eingabeereignis auswählen."
},
"inputbrokerEventCcw": {
"label": "Ereignis gegen Uhrzeigersinn",
"description": "Eingabeereignis auswählen."
},
"inputbrokerEventPress": {
"label": "Ereignis Tastendruck",
"description": "Eingabeereignis auswählen."
},
"updown1Enabled": {
"label": "Geber Hoch/Runter aktiviert",
"description": "Aktiviere Geber Hoch/Runter"
},
"allowInputSource": {
"label": "Eingabequelle zulassen",
"description": "Wählen Sie aus: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
},
"sendBell": {
"label": "Sende Glocke",
"description": "Sendet ein Klingelzeichen (Glocke) mit jeder Nachricht"
}
},
"detectionSensor": {
"title": "Sensoreinstellungen für Erkennung",
"description": "Einstellungen für das Erkennungssensormodul",
"enabled": {
"label": "Aktiviert",
"description": "Erkennungssensormodul aktivieren oder deaktivieren"
},
"minimumBroadcastSecs": {
"label": "Minimale Übertragungszeit alle Sekunden",
"description": "Das Intervall in Sekunden, wie oft eine Nachricht an das Netz gesendet wird, wenn eine Statusänderung erkannt wurde"
},
"stateBroadcastSecs": {
"label": "Statusübertragung alle Sekunden",
"description": "Das Intervall in Sekunden, wie oft eine Nachricht mit dem aktuellen Status an das Netz gesendet wird, unabhängig von Änderungen"
},
"sendBell": {
"label": "Sende Glocke",
"description": "ASCII-Glocke mit Warnmeldung senden"
},
"name": {
"label": "Anzeigename",
"description": "Formatierte Nachricht die an das Netz gesendet wird, maximal 20 Zeichen"
},
"monitorPin": {
"label": "GPIO Pin überwachen",
"description": "Der GPIO Pin zur Überwachung von Statusänderungen"
},
"detectionTriggerType": {
"label": "Auslösetyp der Erkennung",
"description": "Die Art des zu verwendenden Auslöseereignisses"
},
"usePullup": {
"label": "Pullup verwenden",
"description": "Gibt an, ob der INPUT_PULLUP Modus für GPIO Pin verwendet wird oder nicht"
}
},
"externalNotification": {
"title": "Einstellungen für externe Benachrichtigungen",
"description": "Einstellung für das Modul externe Benachrichtigung",
"enabled": {
"label": "Modul aktiviert",
"description": "Externe Benachrichtigung aktivieren"
},
"outputMs": {
"label": "Ausgabe MS",
"description": "Ausgabe MS"
},
"output": {
"label": "Ausgabe",
"description": "Ausgabe"
},
"outputVibra": {
"label": "Ausgabe Vibration",
"description": "Ausgabe Vibration"
},
"outputBuzzer": {
"label": "Ausgabe Summer",
"description": "Ausgabe Summer"
},
"active": {
"label": "Aktiv",
"description": "Aktiv"
},
"alertMessage": {
"label": "Warnmeldung",
"description": "Warnmeldung"
},
"alertMessageVibra": {
"label": "Vibration bei Warnmeldung",
"description": "Vibration bei Warnmeldung"
},
"alertMessageBuzzer": {
"label": "Summer bei Warnmeldung",
"description": "Summer bei Warnmeldung"
},
"alertBell": {
"label": "Warnglocke",
"description": "Soll beim Empfang eines eingehenden Klingelzeichens (Glocke) eine Warnung ausgelöst werden?"
},
"alertBellVibra": {
"label": "Vibration bei Klingelzeichen",
"description": "Vibration bei Klingelzeichen"
},
"alertBellBuzzer": {
"label": "Summer bei Klingelzeichen",
"description": "Summer bei Klingelzeichen"
},
"usePwm": {
"label": "PWM verwenden",
"description": "PWM verwenden"
},
"nagTimeout": {
"label": "Nervige Verzögerung",
"description": "Nervige Verzögerung"
},
"useI2sAsBuzzer": {
"label": "I2S GPIO Pin als Summer verwenden",
"description": "I2S GPIO Pin als Summerausgang definieren"
}
},
"mqtt": {
"title": "MQTT Einstellungen",
"description": "Einstellungen für das MQTT Modul",
"enabled": {
"label": "Aktiviert",
"description": "MQTT aktivieren oder deaktivieren"
},
"address": {
"label": "MQTT Server Adresse",
"description": "MQTT Serveradresse für Standard/benutzerdefinierte Server"
},
"username": {
"label": "MQTT Benutzername",
"description": "MQTT Benutzername für Standard/benutzerdefinierte Server"
},
"password": {
"label": "MQTT Passwort",
"description": "MQTT Passwort für Standard/benutzerdefinierte Server"
},
"encryptionEnabled": {
"label": "Verschlüsselung aktiviert",
"description": "MQTT-Verschlüsselung aktivieren oder deaktivieren. Hinweis: Alle Nachrichten werden unverschlüsselt an den MQTT-Broker gesendet, wenn diese Option nicht aktiviert ist. Unabhängig von der eingestellten Kanalverschlüsselung. Einschließlich der Standortdaten."
},
"jsonEnabled": {
"label": "JSON aktiviert",
"description": "Gibt an, ob JSON Nachrichten über MQTT gesendet oder empfangen werden sollen"
},
"tlsEnabled": {
"label": "TLS aktiviert",
"description": "TLS aktivieren oder deaktivieren"
},
"root": {
"label": "Hauptthema",
"description": "MQTT Hauptthema für Standard/Benutzerdefinierte Server"
},
"proxyToClientEnabled": {
"label": "MQTT Client Proxy aktiviert",
"description": "Verwendet die Netzwerkverbindung zum Austausch von MQTT Nachrichten mit dem Client."
},
"mapReportingEnabled": {
"label": "Kartenberichte aktiviert",
"description": "Ihr Knoten sendet in regelmäßigen Abständen eine unverschlüsselte Nachricht mit Kartenbericht an den konfigurierten MQTT-Server. Einschließlich ID, langen und kurzen Namen, ungefährer Standort, Hardwaremodell, Geräterolle, Firmware-Version, LoRa Region, Modem-Voreinstellung und Name des Primärkanal."
},
"mapReportSettings": {
"publishIntervalSecs": {
"label": "Veröffentlichungsintervall Kartenbericht (s)",
"description": "Intervall in Sekunden, um Kartenberichte zu veröffentlichen"
},
"positionPrecision": {
"label": "Ungefährer Standort",
"description": "Der geteilte Standort mit einer Genauigkeit innerhalb dieser Entfernung",
"options": {
"metric_km23": "Innerhalb von 23 km",
"metric_km12": "Innerhalb von 12 km",
"metric_km5_8": "Innerhalb von 5,8 km",
"metric_km2_9": "Innerhalb von 2,9 km",
"metric_km1_5": "Innerhalb von 1,5 km",
"metric_m700": "Innerhalb von 700 m",
"metric_m350": "Innerhalb von 350 m",
"metric_m200": "Innerhalb von 200 m",
"metric_m90": "Innerhalb von 90 m",
"metric_m50": "Innerhalb von 50 m",
"imperial_mi15": "Innerhalb von 15 Meilen",
"imperial_mi7_3": "Innerhalb von 7,3 Meilen",
"imperial_mi3_6": "Innerhalb von 3,6 Meilen",
"imperial_mi1_8": "Innerhalb von 1,8 Meilen",
"imperial_mi0_9": "Innerhalb von 0,9 Meilen",
"imperial_mi0_5": "Innerhalb von 0,5 Meilen",
"imperial_mi0_2": "Innerhalb von 0,2 Meilen",
"imperial_ft600": "Innerhalb von 600 Fuß",
"imperial_ft300": "Innerhalb von 300 Fuß",
"imperial_ft150": "Innerhalb von 150 Fuß"
}
}
}
},
"neighborInfo": {
"title": "Einstellung Nachbarinformation",
"description": "Einstellungen für das Modul Nachbarinformation",
"enabled": {
"label": "Aktiviert",
"description": "Nachbarinformation Modul aktivieren oder deaktivieren"
},
"updateInterval": {
"label": "Aktualisierungsintervall",
"description": "Intervall in Sekunden, wie oft die Nachbarinformation an das Netz gesendet wird"
}
},
"paxcounter": {
"title": "Einstellung für Pax Zähler",
"description": "Einstellungen für das Modul Pax Zähler",
"enabled": {
"label": "Modul aktiviert",
"description": "Aktiviere Pax Zähler"
},
"paxcounterUpdateInterval": {
"label": "Aktualisierungsintervall (Sekunden)",
"description": "Wie lange soll zwischen dem Senden von Pax Zählernachrichten gewartet werden"
},
"wifiThreshold": {
"label": "WLAN RSSI Grenzwert",
"description": "Bei welchem WLAN RSSI Grenzwert sollte der Zähler erhöht werden. Standardwert -80"
},
"bleThreshold": {
"label": "BLE RSSI Grenzwert",
"description": "Bei welchem BLE RSSI Grenzwert sollte der Zähler erhöht werden. Standardwert -80"
}
},
"rangeTest": {
"title": "Einstellung Reichweitentest",
"description": "Einstellungen für das Modul Reichweitentest",
"enabled": {
"label": "Modul aktiviert",
"description": "Reichweitentest aktivieren"
},
"sender": {
"label": "Nachrichtenintervall",
"description": "Wie lange soll zwischen dem Senden von Testnachrichten gewartet werden"
},
"save": {
"label": "CSV im internen Speicher abspeichern",
"description": "Nur für ESP32"
}
},
"serial": {
"title": "Serielle Einstellungen",
"description": "Einstellungen für das serielle Modul",
"enabled": {
"label": "Modul aktiviert",
"description": "Serielle Ausgabe aktivieren"
},
"echo": {
"label": "Echo",
"description": "Wenn aktiviert, werden alle Nachrichten, die Sie senden, an Ihr Gerät zurückgesendet"
},
"rxd": {
"label": "GPIO Empfangen",
"description": "Setzen Sie den GPIO Pin, den Sie eingerichtet haben, als RXD Pin."
},
"txd": {
"label": "GPIO Senden",
"description": "Setzen Sie den GPIO Pin, den Sie eingerichtet haben, als TXD Pin."
},
"baud": {
"label": "Baudrate",
"description": "Serielle Baudrate"
},
"timeout": {
"label": "Zeitlimit erreicht",
"description": "Wartezeit in Sekunden bis eine Nachricht als gesendet angenommen wird"
},
"mode": {
"label": "Betriebsmodus",
"description": "Modus auswählen"
},
"overrideConsoleSerialPort": {
"label": "Seriellen Port der Konsole überschreiben",
"description": "Wenn Sie einen seriellen Port an die Konsole angeschlossen haben, wird diese überschrieben."
}
},
"storeForward": {
"title": "Speichern & Weiterleiten Einstellungen",
"description": "Einstellungen für das Modul Speichern & Weiterleiten",
"enabled": {
"label": "Modul aktiviert",
"description": "Speichern & Weiterleiten aktivieren"
},
"heartbeat": {
"label": "Herzschlag aktiviert",
"description": "Herzschlag für Speichern & Weiterleiten aktivieren"
},
"records": {
"label": "Anzahl Einträge",
"description": "Anzahl der zu speichernden Datensätze"
},
"historyReturnMax": {
"label": "Verlauf Rückgabewert maximal",
"description": "Maximale Anzahl an zurückzugebenden Datensätzen"
},
"historyReturnWindow": {
"label": "Zeitraum Rückgabewert",
"description": "Maximale Anzahl an zurückzugebenden Datensätzen"
}
},
"telemetry": {
"title": "Telemetrieeinstellungen",
"description": "Einstellungen für das Telemetriemodul",
"deviceUpdateInterval": {
"label": "Gerätekennzahlen",
"description": "Aktualisierungsintervall für Gerätekennzahlen (Sekunden)"
},
"environmentUpdateInterval": {
"label": "Aktualisierungsintervall für Umweltdaten (Sekunden)",
"description": ""
},
"environmentMeasurementEnabled": {
"label": "Modul aktiviert",
"description": "Aktiviert die Telemetrie für Umweltdaten"
},
"environmentScreenEnabled": {
"label": "OLED Anzeige aktivieren",
"description": "Zeige das Telemetriemodul auf der OLED Anzeige"
},
"environmentDisplayFahrenheit": {
"label": "Temperatur in Fahrenheit",
"description": "Temperatur in Fahrenheit anzeigen"
},
"airQualityEnabled": {
"label": "Luftqualität aktiviert",
"description": "Telemetrie für Luftqualität aktivieren"
},
"airQualityInterval": {
"label": "Aktualisierungsintervall Luftqualität",
"description": "Wie oft werden Luftqualitätsdaten über das Netz gesendet"
},
"powerMeasurementEnabled": {
"label": "Energiemessung aktiviert",
"description": "Aktiviere die Telemetrie für die Energiemessung"
},
"powerUpdateInterval": {
"label": "Aktualisierungsintervall Energie",
"description": "Wie oft werden Energiedaten an das Netz gesendet"
},
"powerScreenEnabled": {
"label": "Energieanzeige aktiviert",
"description": "Aktiviere die Anzeige für Energietelemetrie"
}
}
}
@@ -0,0 +1,63 @@
{
"nodeDetail": {
"publicKeyEnabled": {
"label": "Öffentlicher Schlüssel aktiviert"
},
"noPublicKey": {
"label": "Kein öffentlicher Schlüssel"
},
"directMessage": {
"label": "Direktnachricht {{shortName}}"
},
"favorite": {
"label": "Favorit",
"tooltip": "Diesen Knoten zu Favoriten hinzufügen oder entfernen"
},
"notFavorite": {
"label": "Kein Favorit"
},
"error": {
"label": "Fehler",
"text": "Beim Abrufen der Knotendetails ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut."
},
"status": {
"heard": "Gehört",
"mqtt": "MQTT"
},
"elevation": {
"label": "Höhe"
},
"channelUtil": {
"label": "Kanal-Auslastung"
},
"airtimeUtil": {
"label": "Sendezeit-Auslastung"
}
},
"nodesTable": {
"headings": {
"longName": "Langer Name",
"connection": "Verbindung",
"lastHeard": "Zuletzt gehört",
"encryption": "Verschlüsselung",
"model": "Modell",
"macAddress": "MAC Adresse"
},
"connectionStatus": {
"direct": "Direkt",
"away": "abwesend",
"unknown": "-",
"viaMqtt": ", über MQTT"
},
"lastHeardStatus": {
"never": "Nie"
}
},
"actions": {
"added": "Hinzugefügt",
"removed": "Entfernt",
"ignoreNode": "Knoten ignorieren",
"unignoreNode": "Knoten akzeptieren",
"requestPosition": "Standort anfordern"
}
}
@@ -0,0 +1,228 @@
{
"navigation": {
"title": "Navigation",
"messages": "Nachrichten",
"map": "Karte",
"config": "Einstellungen",
"radioConfig": "Funkgerätekonfiguration",
"moduleConfig": "Moduleinstellungen",
"channels": "Kanäle",
"nodes": "Knoten"
},
"app": {
"title": "Meshtastic",
"logo": "Meshtastic Logo"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Seitenleiste öffnen",
"close": "Seitenleiste schließen"
}
},
"deviceInfo": {
"volts": "{{voltage}} Volt",
"firmware": {
"title": "Firmware",
"version": "v{{version}}",
"buildDate": "Erstelldatum: {{date}}"
},
"deviceName": {
"title": "Gerätename",
"changeName": "Gerätename ändern",
"placeholder": "Gerätename eingeben"
},
"editDeviceName": "Gerätename bearbeiten"
}
},
"batteryStatus": {
"charging": "{{level}}% Ladung",
"pluggedIn": "Wird geladen",
"title": "Batterie"
},
"search": {
"nodes": "Knoten suchen...",
"channels": "Kanäle suchen...",
"commandPalette": "Befehle suchen..."
},
"toast": {
"positionRequestSent": {
"title": "Standortanfrage gesendet."
},
"requestingPosition": {
"title": "Standort wird angefordert, bitte warten..."
},
"sendingTraceroute": {
"title": "Sende Traceroute, bitte warten..."
},
"tracerouteSent": {
"title": "Traceroute gesendet."
},
"savedChannel": {
"title": "Gespeicherter Kanal: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Der Chat verwendet PKI-Verschlüsselung."
},
"pskEncryption": {
"title": "Chat verwendet PSK-Verschlüsselung."
}
},
"configSaveError": {
"title": "Fehler beim Speichern von Einstellung",
"description": "Beim Speichern der Einstellungen ist ein Fehler aufgetreten."
},
"validationError": {
"title": "Einstellungsfehler vorhanden",
"description": "Bitte korrigieren Sie die Einstellungsfehler vor dem Speichern."
},
"saveSuccess": {
"title": "Einstellungen speichern",
"description": "Die Einstellungsänderung {{case}} wurde gespeichert."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} Favoriten.",
"action": {
"added": "Hinzugefügt",
"removed": "Entfernt",
"to": "bis",
"from": "von"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} Ignorierliste",
"action": {
"added": "Hinzugefügt",
"removed": "Entfernt",
"to": "bis",
"from": "von"
}
}
},
"notifications": {
"copied": {
"label": "Kopiert!"
},
"copyToClipboard": {
"label": "In die Zwischenablage kopieren"
},
"hidePassword": {
"label": "Passwort verbergen"
},
"showPassword": {
"label": "Passwort anzeigen"
},
"deliveryStatus": {
"delivered": "Zugestellt",
"failed": "Zustellung fehlgeschlagen",
"waiting": "Warte...",
"unknown": "Unbekannt"
}
},
"general": {
"label": "Allgemein"
},
"hardware": {
"label": "Hardware"
},
"metrics": {
"label": "Messgrößen"
},
"role": {
"label": "Rolle"
},
"filter": {
"label": "Filter"
},
"advanced": {
"label": "Fortgeschritten"
},
"clearInput": {
"label": "Eingabe löschen"
},
"resetFilters": {
"label": "Filter zurücksetzen"
},
"nodeName": {
"label": "Knotenname/-nummer",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Sendezeit-Auslastung (%)"
},
"batteryLevel": {
"label": "Akkustand (%)",
"labelText": "Akkustand (%): {{value}}"
},
"batteryVoltage": {
"label": "Batteriespannung (V)",
"title": "Spannung"
},
"channelUtilization": {
"label": "Kanalauslastung (%)"
},
"hops": {
"direct": "Direkt",
"label": "Anzahl Hops",
"text": "Sprungweite: {{value}}"
},
"lastHeard": {
"label": "Zuletzt gehört",
"labelText": "Zuletzt gehört: {{value}}",
"nowLabel": "Jetzt"
},
"snr": {
"label": "SNR (dB)"
},
"favorites": {
"label": "Favoriten"
},
"hide": {
"label": "Ausblenden"
},
"showOnly": {
"label": "Zeige nur"
},
"viaMqtt": {
"label": "Über MQTT verbunden"
},
"hopsUnknown": {
"label": "Unbekannte Sprungweite"
},
"showUnheard": {
"label": "Nie gehört"
},
"language": {
"label": "Sprache",
"changeLanguage": "Sprache ändern"
},
"theme": {
"dark": "Dunkel",
"light": "Hell",
"system": "Automatisch",
"changeTheme": "Farbschema ändern"
},
"errorPage": {
"title": "Das ist ein wenig peinlich...",
"description1": "Es tut uns wirklich leid, aber im Webclient ist ein Fehler aufgetreten, der es zum Absturz gebracht hat. <br /> Das soll nicht passieren, und wir arbeiten hart daran, es zu beheben.",
"description2": "Der beste Weg, um zu verhindern, dass sich dies Ihnen oder irgendjemand anderem wiederholt, besteht darin, uns über dieses Problem zu berichten.",
"reportInstructions": "Bitte fügen Sie folgende Informationen in Ihren Bericht ein:",
"reportSteps": {
"step1": "Was haben Sie getan, als der Fehler aufgetreten ist",
"step2": "Was haben Sie erwartet",
"step3": "Was tatsächlich passiert ist",
"step4": "Sonstige relevante Informationen"
},
"reportLink": "Sie können das Problem auf unserem <0>GitHub</0> melden",
"dashboardLink": "Zurück zum <0>Dashboard</0>",
"detailsSummary": "Fehlerdetails",
"errorMessageLabel": "Fehlermeldungen:",
"stackTraceLabel": "Stapelabzug:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Powered by <0>▲ Vercel</0> | Meshtastic®️ ist eine eingetragene Marke der Meshtastic LLC. | <1>Rechtliche Informationen</1>",
"commitSha": "Commit SHA: {{sha}}"
}
}
@@ -0,0 +1,69 @@
{
"page": {
"sectionLabel": "Channels",
"channelName": "Channel: {{channelName}}",
"broadcastLabel": "Primary",
"channelIndex": "Ch {{index}}"
},
"validation": {
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
},
"settings": {
"label": "Channel Settings",
"description": "Crypto, MQTT & misc settings"
},
"role": {
"label": "Role",
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
"options": {
"primary": "PRIMARY",
"disabled": "DISABLED",
"secondary": "SECONDARY"
}
},
"psk": {
"label": "Pre-Shared Key",
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
"generate": "Generate"
},
"name": {
"label": "Name",
"description": "A unique name for the channel <12 bytes, leave blank for default"
},
"uplinkEnabled": {
"label": "Uplink Enabled",
"description": "Send messages from the local mesh to MQTT"
},
"downlinkEnabled": {
"label": "Downlink Enabled",
"description": "Send messages from MQTT to the local mesh"
},
"positionPrecision": {
"label": "Location",
"description": "The precision of the location to share with the channel. Can be disabled.",
"options": {
"none": "Do not share location",
"precise": "Precise Location",
"metric_km23": "Within 23 kilometers",
"metric_km12": "Within 12 kilometers",
"metric_km5_8": "Within 5.8 kilometers",
"metric_km2_9": "Within 2.9 kilometers",
"metric_km1_5": "Within 1.5 kilometers",
"metric_m700": "Within 700 meters",
"metric_m350": "Within 350 meters",
"metric_m200": "Within 200 meters",
"metric_m90": "Within 90 meters",
"metric_m50": "Within 50 meters",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
}
@@ -0,0 +1,50 @@
{
"emptyState": "No results found.",
"page": {
"title": "Command Menu"
},
"pinGroup": {
"label": "Pin command group"
},
"unpinGroup": {
"label": "Unpin command group"
},
"goto": {
"label": "Goto",
"command": {
"messages": "Messages",
"map": "Map",
"config": "Config",
"channels": "Channels",
"nodes": "Nodes"
}
},
"manage": {
"label": "Manage",
"command": {
"switchNode": "Switch Node",
"connectNewNode": "Connect New Node"
}
},
"contextual": {
"label": "Contextual",
"command": {
"qrCode": "QR Code",
"qrGenerator": "Generator",
"qrImport": "Import",
"scheduleShutdown": "Schedule Shutdown",
"scheduleReboot": "Schedule Reboot",
"rebootToOtaMode": "Reboot To OTA Mode",
"resetNodeDb": "Reset Node DB",
"factoryResetDevice": "Factory Reset Device",
"factoryResetConfig": "Factory Reset Config"
}
},
"debug": {
"label": "Debug",
"command": {
"reconfigure": "Reconfigure",
"clearAllStoredMessages": "Clear All Stored Message"
}
}
}
@@ -0,0 +1,112 @@
{
"button": {
"apply": "Apply",
"backupKey": "Backup Key",
"cancel": "Cancel",
"clearMessages": "Clear Messages",
"close": "Close",
"confirm": "Confirm",
"delete": "Delete",
"dismiss": "Dismiss",
"download": "Download",
"export": "Export",
"generate": "Generate",
"regenerate": "Regenerate",
"import": "Import",
"message": "Message",
"now": "Now",
"ok": "OK",
"print": "Print",
"rebootOtaNow": "Reboot to OTA Mode Now",
"remove": "Remove",
"requestNewKeys": "Request New Keys",
"requestPosition": "Request Position",
"reset": "Reset",
"save": "Save",
"scanQr": "Scan QR Code",
"traceRoute": "Trace Route",
"submit": "Submit"
},
"app": {
"title": "Meshtastic",
"fullTitle": "Meshtastic Web Client"
},
"loading": "Loading...",
"unit": {
"cps": "CPS",
"dbm": "dBm",
"hertz": "Hz",
"hop": {
"one": "Hop",
"plural": "Hops"
},
"hopsAway": {
"one": "{{count}} hop away",
"plural": "{{count}} hops away",
"unknown": "Unknown hops away"
},
"megahertz": "MHz",
"raw": "raw",
"meter": { "one": "Meter", "plural": "Meters", "suffix": "m" },
"minute": { "one": "Minute", "plural": "Minutes" },
"hour": { "one": "Hour", "plural": "Hours" },
"millisecond": {
"one": "Millisecond",
"plural": "Milliseconds",
"suffix": "ms"
},
"second": { "one": "Second", "plural": "Seconds" },
"day": { "one": "Day", "plural": "Days" },
"month": { "one": "Month", "plural": "Months" },
"year": { "one": "Year", "plural": "Years" },
"snr": "SNR",
"volt": { "one": "Volt", "plural": "Volts", "suffix": "V" },
"record": { "one": "Records", "plural": "Records" }
},
"security": {
"0bit": "Empty",
"8bit": "8 bit",
"128bit": "128 bit",
"256bit": "256 bit"
},
"unknown": {
"longName": "Unknown",
"shortName": "UNK",
"notAvailable": "N/A",
"num": "??"
},
"nodeUnknownPrefix": "!",
"unset": "UNSET",
"fallbackName": "Meshtastic {{last4}}",
"node": "Node",
"formValidation": {
"unsavedChanges": "Unsaved changes",
"tooBig": {
"string": "Too long, expected less than or equal to {{maximum}} characters.",
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
},
"tooSmall": {
"string": "Too short, expected more than or equal to {{minimum}} characters.",
"number": "Too small, expected a number larger than or equal to {{minimum}}."
},
"invalidFormat": {
"ipv4": "Invalid format, expected an IPv4 address.",
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
},
"invalidType": {
"number": "Invalid type, expected a number."
},
"pskLength": {
"0bit": "Key is required to be empty.",
"8bit": "Key is required to be an 8 bit pre-shared key (PSK).",
"128bit": "Key is required to be a 128 bit pre-shared key (PSK).",
"256bit": "Key is required to be a 256 bit pre-shared key (PSK)."
},
"required": {
"generic": "This field is required.",
"managed": "At least one admin key is requred if the node is managed.",
"key": "Key is required."
}
}
}
@@ -0,0 +1,12 @@
{
"dashboard": {
"title": "Connected Devices",
"description": "Manage your connected Meshtastic devices.",
"connectionType_ble": "BLE",
"connectionType_serial": "Serial",
"connectionType_network": "Network",
"noDevicesTitle": "No devices connected",
"noDevicesDescription": "Connect a new device to get started.",
"button_newConnection": "New Connection"
}
}
@@ -0,0 +1,428 @@
{
"page": {
"title": "Configuration",
"tabBluetooth": "Bluetooth",
"tabDevice": "Device",
"tabDisplay": "Display",
"tabLora": "LoRa",
"tabNetwork": "Network",
"tabPosition": "Position",
"tabPower": "Power",
"tabSecurity": "Security"
},
"sidebar": {
"label": "Modules"
},
"device": {
"title": "Device Settings",
"description": "Settings for the device",
"buttonPin": {
"description": "Button pin override",
"label": "Button Pin"
},
"buzzerPin": {
"description": "Buzzer pin override",
"label": "Buzzer Pin"
},
"disableTripleClick": {
"description": "Disable triple click",
"label": "Disable Triple Click"
},
"doubleTapAsButtonPress": {
"description": "Treat double tap as button press",
"label": "Double Tap as Button Press"
},
"ledHeartbeatDisabled": {
"description": "Disable default blinking LED",
"label": "LED Heartbeat Disabled"
},
"nodeInfoBroadcastInterval": {
"description": "How often to broadcast node info",
"label": "Node Info Broadcast Interval"
},
"posixTimezone": {
"description": "The POSIX timezone string for the device",
"label": "POSIX Timezone"
},
"rebroadcastMode": {
"description": "How to handle rebroadcasting",
"label": "Rebroadcast Mode"
},
"role": {
"description": "What role the device performs on the mesh",
"label": "Role"
}
},
"bluetooth": {
"title": "Bluetooth Settings",
"description": "Settings for the Bluetooth module",
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
"enabled": {
"description": "Enable or disable Bluetooth",
"label": "Enabled"
},
"pairingMode": {
"description": "Pin selection behaviour.",
"label": "Pairing mode"
},
"pin": {
"description": "Pin to use when pairing",
"label": "Pin"
}
},
"display": {
"description": "Settings for the device display",
"title": "Display Settings",
"headingBold": {
"description": "Bolden the heading text",
"label": "Bold Heading"
},
"carouselDelay": {
"description": "How fast to cycle through windows",
"label": "Carousel Delay"
},
"compassNorthTop": {
"description": "Fix north to the top of compass",
"label": "Compass North Top"
},
"displayMode": {
"description": "Screen layout variant",
"label": "Display Mode"
},
"displayUnits": {
"description": "Display metric or imperial units",
"label": "Display Units"
},
"flipScreen": {
"description": "Flip display 180 degrees",
"label": "Flip Screen"
},
"gpsDisplayUnits": {
"description": "Coordinate display format",
"label": "GPS Display Units"
},
"oledType": {
"description": "Type of OLED screen attached to the device",
"label": "OLED Type"
},
"screenTimeout": {
"description": "Turn off the display after this long",
"label": "Screen Timeout"
},
"twelveHourClock": {
"description": "Use 12-hour clock format",
"label": "12-Hour Clock"
},
"wakeOnTapOrMotion": {
"description": "Wake the device on tap or motion",
"label": "Wake on Tap or Motion"
}
},
"lora": {
"title": "Mesh Settings",
"description": "Settings for the LoRa mesh",
"bandwidth": {
"description": "Channel bandwidth in MHz",
"label": "Bandwidth"
},
"boostedRxGain": {
"description": "Boosted RX gain",
"label": "Boosted RX Gain"
},
"codingRate": {
"description": "The denominator of the coding rate",
"label": "Coding Rate"
},
"frequencyOffset": {
"description": "Frequency offset to correct for crystal calibration errors",
"label": "Frequency Offset"
},
"frequencySlot": {
"description": "LoRa frequency channel number",
"label": "Frequency Slot"
},
"hopLimit": {
"description": "Maximum number of hops",
"label": "Hop Limit"
},
"ignoreMqtt": {
"description": "Don't forward MQTT messages over the mesh",
"label": "Ignore MQTT"
},
"modemPreset": {
"description": "Modem preset to use",
"label": "Modem Preset"
},
"okToMqtt": {
"description": "When set to true, this configuration indicates that the user approves the packet to be uploaded to MQTT. If set to false, remote nodes are requested not to forward packets to MQTT",
"label": "OK to MQTT"
},
"overrideDutyCycle": {
"description": "Override Duty Cycle",
"label": "Override Duty Cycle"
},
"overrideFrequency": {
"description": "Override frequency",
"label": "Override Frequency"
},
"region": {
"description": "Sets the region for your node",
"label": "Region"
},
"spreadingFactor": {
"description": "Indicates the number of chirps per symbol",
"label": "Spreading Factor"
},
"transmitEnabled": {
"description": "Enable/Disable transmit (TX) from the LoRa radio",
"label": "Transmit Enabled"
},
"transmitPower": {
"description": "Max transmit power",
"label": "Transmit Power"
},
"usePreset": {
"description": "Use one of the predefined modem presets",
"label": "Use Preset"
},
"meshSettings": {
"description": "Settings for the LoRa mesh",
"label": "Mesh Settings"
},
"waveformSettings": {
"description": "Settings for the LoRa waveform",
"label": "Waveform Settings"
},
"radioSettings": {
"label": "Radio Settings",
"description": "Settings for the LoRa radio"
}
},
"network": {
"title": "WiFi Config",
"description": "WiFi radio configuration",
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
"addressMode": {
"description": "Address assignment selection",
"label": "Address Mode"
},
"dns": {
"description": "DNS Server",
"label": "DNS"
},
"ethernetEnabled": {
"description": "Enable or disable the Ethernet port",
"label": "Enabled"
},
"gateway": {
"description": "Default Gateway",
"label": "Gateway"
},
"ip": {
"description": "IP Address",
"label": "IP"
},
"psk": {
"description": "Network password",
"label": "PSK"
},
"ssid": {
"description": "Network name",
"label": "SSID"
},
"subnet": {
"description": "Subnet Mask",
"label": "Subnet"
},
"wifiEnabled": {
"description": "Enable or disable the WiFi radio",
"label": "Enabled"
},
"meshViaUdp": {
"label": "Mesh via UDP"
},
"ntpServer": {
"label": "NTP Server"
},
"rsyslogServer": {
"label": "Rsyslog Server"
},
"ethernetConfigSettings": {
"description": "Ethernet port configuration",
"label": "Ethernet Config"
},
"ipConfigSettings": {
"description": "IP configuration",
"label": "IP Config"
},
"ntpConfigSettings": {
"description": "NTP configuration",
"label": "NTP Config"
},
"rsyslogConfigSettings": {
"description": "Rsyslog configuration",
"label": "Rsyslog Config"
},
"udpConfigSettings": {
"description": "UDP over Mesh configuration",
"label": "UDP Config"
}
},
"position": {
"title": "Position Settings",
"description": "Settings for the position module",
"broadcastInterval": {
"description": "How often your position is sent out over the mesh",
"label": "Broadcast Interval"
},
"enablePin": {
"description": "GPS module enable pin override",
"label": "Enable Pin"
},
"fixedPosition": {
"description": "Don't report GPS position, but a manually-specified one",
"label": "Fixed Position"
},
"gpsMode": {
"description": "Configure whether device GPS is Enabled, Disabled, or Not Present",
"label": "GPS Mode"
},
"gpsUpdateInterval": {
"description": "How often a GPS fix should be acquired",
"label": "GPS Update Interval"
},
"positionFlags": {
"description": "Optional fields to include when assembling position messages. The more fields are selected, the larger the message will be leading to longer airtime usage and a higher risk of packet loss.",
"label": "Position Flags"
},
"receivePin": {
"description": "GPS module RX pin override",
"label": "Receive Pin"
},
"smartPositionEnabled": {
"description": "Only send position when there has been a meaningful change in location",
"label": "Enable Smart Position"
},
"smartPositionMinDistance": {
"description": "Minimum distance (in meters) that must be traveled before a position update is sent",
"label": "Smart Position Minimum Distance"
},
"smartPositionMinInterval": {
"description": "Minimum interval (in seconds) that must pass before a position update is sent",
"label": "Smart Position Minimum Interval"
},
"transmitPin": {
"description": "GPS module TX pin override",
"label": "Transmit Pin"
},
"intervalsSettings": {
"description": "How often to send position updates",
"label": "Intervals"
},
"flags": {
"placeholder": "Select position flags...",
"altitude": "Altitude",
"altitudeGeoidalSeparation": "Altitude Geoidal Separation",
"altitudeMsl": "Altitude is Mean Sea Level",
"dop": "Dilution of precision (DOP) PDOP used by default",
"hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP",
"numSatellites": "Number of satellites",
"sequenceNumber": "Sequence number",
"timestamp": "Timestamp",
"unset": "Unset",
"vehicleHeading": "Vehicle heading",
"vehicleSpeed": "Vehicle speed"
}
},
"power": {
"adcMultiplierOverride": {
"description": "Used for tweaking battery voltage reading",
"label": "ADC Multiplier Override ratio"
},
"ina219Address": {
"description": "Address of the INA219 battery monitor",
"label": "INA219 Address"
},
"lightSleepDuration": {
"description": "How long the device will be in light sleep for",
"label": "Light Sleep Duration"
},
"minimumWakeTime": {
"description": "Minimum amount of time the device will stay awake for after receiving a packet",
"label": "Minimum Wake Time"
},
"noConnectionBluetoothDisabled": {
"description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long",
"label": "No Connection Bluetooth Disabled"
},
"powerSavingEnabled": {
"description": "Select if powered from a low-current source (i.e. solar), to minimize power consumption as much as possible.",
"label": "Enable power saving mode"
},
"shutdownOnBatteryDelay": {
"description": "Automatically shutdown node after this long when on battery, 0 for indefinite",
"label": "Shutdown on battery delay"
},
"superDeepSleepDuration": {
"description": "How long the device will be in super deep sleep for",
"label": "Super Deep Sleep Duration"
},
"powerConfigSettings": {
"description": "Settings for the power module",
"label": "Power Config"
},
"sleepSettings": {
"description": "Sleep settings for the power module",
"label": "Sleep Settings"
}
},
"security": {
"description": "Settings for the Security configuration",
"title": "Security Settings",
"button_backupKey": "Backup Key",
"adminChannelEnabled": {
"description": "Allow incoming device control over the insecure legacy admin channel",
"label": "Allow Legacy Admin"
},
"enableDebugLogApi": {
"description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth",
"label": "Enable Debug Log API"
},
"managed": {
"description": "If enabled, device configuration options are only able to be changed remotely by a Remote Admin node via admin messages. Do not enable this option unless at least one suitable Remote Admin node has been setup, and the public key is stored in one of the fields above.",
"label": "Managed"
},
"privateKey": {
"description": "Used to create a shared key with a remote device",
"label": "Private Key"
},
"publicKey": {
"description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key",
"label": "Public Key"
},
"primaryAdminKey": {
"description": "The primary public key authorized to send admin messages to this node",
"label": "Primary Admin Key"
},
"secondaryAdminKey": {
"description": "The secondary public key authorized to send admin messages to this node",
"label": "Secondary Admin Key"
},
"serialOutputEnabled": {
"description": "Serial Console over the Stream API",
"label": "Serial Output Enabled"
},
"tertiaryAdminKey": {
"description": "The tertiary public key authorized to send admin messages to this node",
"label": "Tertiary Admin Key"
},
"adminSettings": {
"description": "Settings for Admin",
"label": "Admin Settings"
},
"loggingSettings": {
"description": "Settings for Logging",
"label": "Logging Settings"
}
}
}
@@ -0,0 +1,183 @@
{
"deleteMessages": {
"description": "This action will clear all message history. This cannot be undone. Are you sure you want to continue?",
"title": "Clear All Messages"
},
"deviceName": {
"description": "The Device will restart once the config is saved.",
"longName": "Long Name",
"shortName": "Short Name",
"title": "Change Device Name",
"validation": {
"longNameMax": "Long name must not be more than 40 characters",
"shortNameMax": "Short name must not be more than 4 characters",
"longNameMin": "Long name must have at least 1 character",
"shortNameMin": "Short name must have at least 1 character"
}
},
"import": {
"description": "The current LoRa configuration will be overridden.",
"error": {
"invalidUrl": "Invalid Meshtastic URL"
},
"channelPrefix": "Channel: ",
"channelSetUrl": "Channel Set/QR Code URL",
"channels": "Channels:",
"usePreset": "Use Preset?",
"title": "Import Channel Set"
},
"locationResponse": {
"title": "Location: {{identifier}}",
"altitude": "Altitude: ",
"coordinates": "Coordinates: ",
"noCoordinates": "No Coordinates"
},
"pkiRegenerateDialog": {
"title": "Regenerate Pre-Shared Key?",
"description": "Are you sure you want to regenerate the pre-shared key?",
"regenerate": "Regenerate"
},
"newDeviceDialog": {
"title": "Connect New Device",
"https": "https",
"http": "http",
"tabHttp": "HTTP",
"tabBluetooth": "Bluetooth",
"tabSerial": "Serial",
"useHttps": "Use HTTPS",
"connecting": "Connecting...",
"connect": "Connect",
"connectionFailedAlert": {
"title": "Connection Failed",
"descriptionPrefix": "Could not connect to the device. ",
"httpsHint": "If using HTTPS, you may need to accept a self-signed certificate first. ",
"openLinkPrefix": "Please open ",
"openLinkSuffix": " in a new tab",
"acceptTlsWarningSuffix": ", accept any TLS warnings if prompted, then try again",
"learnMoreLink": "Learn more"
},
"httpConnection": {
"label": "IP Address/Hostname",
"placeholder": "000.000.000.000 / meshtastic.local"
},
"serialConnection": {
"noDevicesPaired": "No devices paired yet.",
"newDeviceButton": "New device",
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
},
"bluetoothConnection": {
"noDevicesPaired": "No devices paired yet.",
"newDeviceButton": "New device",
"connectionFailed": "Connection failed",
"deviceDisconnected": "Device disconnected",
"unknownDevice": "Unknown Device",
"errorLoadingDevices": "Error loading devices",
"unknownErrorLoadingDevices": "Unknown error loading devices"
},
"validation": {
"requiresFeatures": "This connection type requires <0></0>. Please use a supported browser, like Chrome or Edge.",
"requiresSecureContext": "This application requires a <0>secure context</0>. Please connect using HTTPS or localhost.",
"additionallyRequiresSecureContext": "Additionally, it requires a <0>secure context</0>. Please connect using HTTPS or localhost."
}
},
"nodeDetails": {
"message": "Message",
"requestPosition": "Request Position",
"traceRoute": "Trace Route",
"airTxUtilization": "Air TX utilization",
"allRawMetrics": "All Raw Metrics:",
"batteryLevel": "Battery level",
"channelUtilization": "Channel utilization",
"details": "Details:",
"deviceMetrics": "Device Metrics:",
"hardware": "Hardware: ",
"lastHeard": "Last Heard: ",
"nodeHexPrefix": "Node Hex: !",
"nodeNumber": "Node Number: ",
"position": "Position:",
"role": "Role: ",
"uptime": "Uptime: ",
"voltage": "Voltage",
"title": "Node Details for {{identifier}}",
"ignoreNode": "Ignore node",
"removeNode": "Remove node",
"unignoreNode": "Unignore node"
},
"pkiBackup": {
"loseKeysWarning": "If you lose your keys, you will need to reset your device.",
"secureBackup": "Its important to backup your public and private keys and store your backup securely!",
"footer": "=== END OF KEYS ===",
"header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===",
"privateKey": "Private Key:",
"publicKey": "Public Key:",
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
"title": "Backup Keys"
},
"pkiBackupReminder": {
"description": "We recommend backing up your key data regularly. Would you like to back up now?",
"title": "Backup Reminder",
"remindLaterPrefix": "Remind me in",
"remindNever": "Never remind me",
"backupNow": "Back up now"
},
"pkiRegenerate": {
"description": "Are you sure you want to regenerate key pair?",
"title": "Regenerate Key Pair"
},
"qr": {
"addChannels": "Add Channels",
"replaceChannels": "Replace Channels",
"description": "The current LoRa configuration will also be shared.",
"sharableUrl": "Sharable URL",
"title": "Generate QR Code"
},
"rebootOta": {
"title": "Schedule Reboot",
"description": "Reboot the connected node after a delay into OTA (Over-the-Air) mode.",
"enterDelay": "Enter delay (sec)",
"scheduled": "Reboot has been scheduled"
},
"reboot": {
"title": "Schedule Reboot",
"description": "Reboot the connected node after x minutes."
},
"refreshKeys": {
"description": {
"acceptNewKeys": "This will remove the node from device and request new keys.",
"keyMismatchReasonSuffix": ". This is due to the remote node's current public key does not match the previously stored key for this node.",
"unableToSendDmPrefix": "Your node is unable to send a direct message to node: "
},
"acceptNewKeys": "Accept New Keys",
"title": "Keys Mismatch - {{identifier}}"
},
"removeNode": {
"description": "Are you sure you want to remove this Node?",
"title": "Remove Node?"
},
"shutdown": {
"title": "Schedule Shutdown",
"description": "Turn off the connected node after x minutes."
},
"traceRoute": {
"routeToDestination": "Route to destination:",
"routeBack": "Route back:"
},
"tracerouteResponse": {
"title": "Traceroute: {{identifier}}"
},
"unsafeRoles": {
"confirmUnderstanding": "Yes, I know what I'm doing",
"conjunction": " and the blog post about ",
"postamble": " and understand the implications of changing the role.",
"preamble": "I have read the ",
"choosingRightDeviceRole": "Choosing The Right Device Role",
"deviceRoleDocumentation": "Device Role Documentation",
"title": "Are you sure?"
},
"managedMode": {
"confirmUnderstanding": "Yes, I know what I'm doing",
"title": "Are you sure?",
"description": "Enabling Managed Mode blocks client applications (including the web client) from writing configurations to a radio. Once enabled, radio configurations can <bold>only</bold> be changed through Remote Admin messages. This setting is not required for remote node administration."
}
}
@@ -0,0 +1,40 @@
{
"page": {
"title": "Messages: {{chatName}}",
"placeholder": "Enter Message"
},
"emptyState": {
"title": "Select a Chat",
"text": "No messages yet."
},
"selectChatPrompt": {
"text": "Select a channel or node to start messaging."
},
"sendMessage": {
"placeholder": "Enter your message here...",
"sendButton": "Send"
},
"actionsMenu": {
"addReactionLabel": "Add Reaction",
"replyLabel": "Reply"
},
"deliveryStatus": {
"delivered": {
"label": "Message delivered",
"displayText": "Message delivered"
},
"failed": {
"label": "Message delivery failed",
"displayText": "Delivery failed"
},
"unknown": {
"label": "Message status unknown",
"displayText": "Unknown state"
},
"waiting": {
"label": "Sending message",
"displayText": "Waiting for delivery"
}
}
}
@@ -0,0 +1,448 @@
{
"page": {
"tabAmbientLighting": "Ambient Lighting",
"tabAudio": "Audio",
"tabCannedMessage": "Canned",
"tabDetectionSensor": "Detection Sensor",
"tabExternalNotification": "Ext Notif",
"tabMqtt": "MQTT",
"tabNeighborInfo": "Neighbor Info",
"tabPaxcounter": "Paxcounter",
"tabRangeTest": "Range Test",
"tabSerial": "Serial",
"tabStoreAndForward": "S&F",
"tabTelemetry": "Telemetry"
},
"ambientLighting": {
"title": "Ambient Lighting Settings",
"description": "Settings for the Ambient Lighting module",
"ledState": {
"label": "LED State",
"description": "Sets LED to on or off"
},
"current": {
"label": "Current",
"description": "Sets the current for the LED output. Default is 10"
},
"red": {
"label": "Red",
"description": "Sets the red LED level. Values are 0-255"
},
"green": {
"label": "Green",
"description": "Sets the green LED level. Values are 0-255"
},
"blue": {
"label": "Blue",
"description": "Sets the blue LED level. Values are 0-255"
}
},
"audio": {
"title": "Audio Settings",
"description": "Settings for the Audio module",
"codec2Enabled": {
"label": "Codec 2 Enabled",
"description": "Enable Codec 2 audio encoding"
},
"pttPin": {
"label": "PTT Pin",
"description": "GPIO pin to use for PTT"
},
"bitrate": {
"label": "Bitrate",
"description": "Bitrate to use for audio encoding"
},
"i2sWs": {
"label": "i2S WS",
"description": "GPIO pin to use for i2S WS"
},
"i2sSd": {
"label": "i2S SD",
"description": "GPIO pin to use for i2S SD"
},
"i2sDin": {
"label": "i2S DIN",
"description": "GPIO pin to use for i2S DIN"
},
"i2sSck": {
"label": "i2S SCK",
"description": "GPIO pin to use for i2S SCK"
}
},
"cannedMessage": {
"title": "Canned Message Settings",
"description": "Settings for the Canned Message module",
"moduleEnabled": {
"label": "Module Enabled",
"description": "Enable Canned Message"
},
"rotary1Enabled": {
"label": "Rotary Encoder #1 Enabled",
"description": "Enable the rotary encoder"
},
"inputbrokerPinA": {
"label": "Encoder Pin A",
"description": "GPIO Pin Value (1-39) For encoder port A"
},
"inputbrokerPinB": {
"label": "Encoder Pin B",
"description": "GPIO Pin Value (1-39) For encoder port B"
},
"inputbrokerPinPress": {
"label": "Encoder Pin Press",
"description": "GPIO Pin Value (1-39) For encoder Press"
},
"inputbrokerEventCw": {
"label": "Clockwise event",
"description": "Select input event."
},
"inputbrokerEventCcw": {
"label": "Counter Clockwise event",
"description": "Select input event."
},
"inputbrokerEventPress": {
"label": "Press event",
"description": "Select input event"
},
"updown1Enabled": {
"label": "Up Down enabled",
"description": "Enable the up / down encoder"
},
"allowInputSource": {
"label": "Allow Input Source",
"description": "Select from: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
},
"sendBell": {
"label": "Send Bell",
"description": "Sends a bell character with each message"
}
},
"detectionSensor": {
"title": "Detection Sensor Settings",
"description": "Settings for the Detection Sensor module",
"enabled": {
"label": "Enabled",
"description": "Enable or disable Detection Sensor Module"
},
"minimumBroadcastSecs": {
"label": "Minimum Broadcast Seconds",
"description": "The interval in seconds of how often we can send a message to the mesh when a state change is detected"
},
"stateBroadcastSecs": {
"label": "State Broadcast Seconds",
"description": "The interval in seconds of how often we should send a message to the mesh with the current state regardless of changes"
},
"sendBell": {
"label": "Send Bell",
"description": "Send ASCII bell with alert message"
},
"name": {
"label": "Friendly Name",
"description": "Used to format the message sent to mesh, max 20 Characters"
},
"monitorPin": {
"label": "Monitor Pin",
"description": "The GPIO pin to monitor for state changes"
},
"detectionTriggerType": {
"label": "Detection Triggered Type",
"description": "The type of trigger event to be used"
},
"usePullup": {
"label": "Use Pullup",
"description": "Whether or not use INPUT_PULLUP mode for GPIO pin"
}
},
"externalNotification": {
"title": "External Notification Settings",
"description": "Configure the external notification module",
"enabled": {
"label": "Module Enabled",
"description": "Enable External Notification"
},
"outputMs": {
"label": "Output MS",
"description": "Output MS"
},
"output": {
"label": "Output",
"description": "Output"
},
"outputVibra": {
"label": "Output Vibrate",
"description": "Output Vibrate"
},
"outputBuzzer": {
"label": "Output Buzzer",
"description": "Output Buzzer"
},
"active": {
"label": "Active",
"description": "Active"
},
"alertMessage": {
"label": "Alert Message",
"description": "Alert Message"
},
"alertMessageVibra": {
"label": "Alert Message Vibrate",
"description": "Alert Message Vibrate"
},
"alertMessageBuzzer": {
"label": "Alert Message Buzzer",
"description": "Alert Message Buzzer"
},
"alertBell": {
"label": "Alert Bell",
"description": "Should an alert be triggered when receiving an incoming bell?"
},
"alertBellVibra": {
"label": "Alert Bell Vibrate",
"description": "Alert Bell Vibrate"
},
"alertBellBuzzer": {
"label": "Alert Bell Buzzer",
"description": "Alert Bell Buzzer"
},
"usePwm": {
"label": "Use PWM",
"description": "Use PWM"
},
"nagTimeout": {
"label": "Nag Timeout",
"description": "Nag Timeout"
},
"useI2sAsBuzzer": {
"label": "Use I²S Pin as Buzzer",
"description": "Designate I²S Pin as Buzzer Output"
}
},
"mqtt": {
"title": "MQTT Settings",
"description": "Settings for the MQTT module",
"enabled": {
"label": "Enabled",
"description": "Enable or disable MQTT"
},
"address": {
"label": "MQTT Server Address",
"description": "MQTT server address to use for default/custom servers"
},
"username": {
"label": "MQTT Username",
"description": "MQTT username to use for default/custom servers"
},
"password": {
"label": "MQTT Password",
"description": "MQTT password to use for default/custom servers"
},
"encryptionEnabled": {
"label": "Encryption Enabled",
"description": "Enable or disable MQTT encryption. Note: All messages are sent to the MQTT broker unencrypted if this option is not enabled, even when your uplink channels have encryption keys set. This includes position data."
},
"jsonEnabled": {
"label": "JSON Enabled",
"description": "Whether to send/consume JSON packets on MQTT"
},
"tlsEnabled": {
"label": "TLS Enabled",
"description": "Enable or disable TLS"
},
"root": {
"label": "Root topic",
"description": "MQTT root topic to use for default/custom servers"
},
"proxyToClientEnabled": {
"label": "MQTT Client Proxy Enabled",
"description": "Utilizes the network connection to proxy MQTT messages to the client."
},
"mapReportingEnabled": {
"label": "Map Reporting Enabled",
"description": "Your node will periodically send an unencrypted map report packet to the configured MQTT server, this includes id, short and long name, approximate location, hardware model, role, firmware version, LoRa region, modem preset and primary channel name."
},
"mapReportSettings": {
"publishIntervalSecs": {
"label": "Map Report Publish Interval (s)",
"description": "Interval in seconds to publish map reports"
},
"positionPrecision": {
"label": "Approximate Location",
"description": "Position shared will be accurate within this distance",
"options": {
"metric_km23": "Within 23 km",
"metric_km12": "Within 12 km",
"metric_km5_8": "Within 5.8 km",
"metric_km2_9": "Within 2.9 km",
"metric_km1_5": "Within 1.5 km",
"metric_m700": "Within 700 m",
"metric_m350": "Within 350 m",
"metric_m200": "Within 200 m",
"metric_m90": "Within 90 m",
"metric_m50": "Within 50 m",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
}
},
"neighborInfo": {
"title": "Neighbor Info Settings",
"description": "Settings for the Neighbor Info module",
"enabled": {
"label": "Enabled",
"description": "Enable or disable Neighbor Info Module"
},
"updateInterval": {
"label": "Update Interval",
"description": "Interval in seconds of how often we should try to send our Neighbor Info to the mesh"
}
},
"paxcounter": {
"title": "Paxcounter Settings",
"description": "Settings for the Paxcounter module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Paxcounter"
},
"paxcounterUpdateInterval": {
"label": "Update Interval (seconds)",
"description": "How long to wait between sending paxcounter packets"
},
"wifiThreshold": {
"label": "WiFi RSSI Threshold",
"description": "At what WiFi RSSI level should the counter increase. Defaults to -80."
},
"bleThreshold": {
"label": "BLE RSSI Threshold",
"description": "At what BLE RSSI level should the counter increase. Defaults to -80."
}
},
"rangeTest": {
"title": "Range Test Settings",
"description": "Settings for the Range Test module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Range Test"
},
"sender": {
"label": "Message Interval",
"description": "How long to wait between sending test packets"
},
"save": {
"label": "Save CSV to storage",
"description": "ESP32 Only"
}
},
"serial": {
"title": "Serial Settings",
"description": "Settings for the Serial module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Serial output"
},
"echo": {
"label": "Echo",
"description": "Any packets you send will be echoed back to your device"
},
"rxd": {
"label": "Receive Pin",
"description": "Set the GPIO pin to the RXD pin you have set up."
},
"txd": {
"label": "Transmit Pin",
"description": "Set the GPIO pin to the TXD pin you have set up."
},
"baud": {
"label": "Baud Rate",
"description": "The serial baud rate"
},
"timeout": {
"label": "Timeout",
"description": "Seconds to wait before we consider your packet as 'done'"
},
"mode": {
"label": "Mode",
"description": "Select Mode"
},
"overrideConsoleSerialPort": {
"label": "Override Console Serial Port",
"description": "If you have a serial port connected to the console, this will override it."
}
},
"storeForward": {
"title": "Store & Forward Settings",
"description": "Settings for the Store & Forward module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Store & Forward"
},
"heartbeat": {
"label": "Heartbeat Enabled",
"description": "Enable Store & Forward heartbeat"
},
"records": {
"label": "Number of records",
"description": "Number of records to store"
},
"historyReturnMax": {
"label": "History return max",
"description": "Max number of records to return"
},
"historyReturnWindow": {
"label": "History return window",
"description": "Max number of records to return"
}
},
"telemetry": {
"title": "Telemetry Settings",
"description": "Settings for the Telemetry module",
"deviceUpdateInterval": {
"label": "Device Metrics",
"description": "Device metrics update interval (seconds)"
},
"environmentUpdateInterval": {
"label": "Environment metrics update interval (seconds)",
"description": ""
},
"environmentMeasurementEnabled": {
"label": "Module Enabled",
"description": "Enable the Environment Telemetry"
},
"environmentScreenEnabled": {
"label": "Displayed on Screen",
"description": "Show the Telemetry Module on the OLED"
},
"environmentDisplayFahrenheit": {
"label": "Display Fahrenheit",
"description": "Display temp in Fahrenheit"
},
"airQualityEnabled": {
"label": "Air Quality Enabled",
"description": "Enable the Air Quality Telemetry"
},
"airQualityInterval": {
"label": "Air Quality Update Interval",
"description": "How often to send Air Quality data over the mesh"
},
"powerMeasurementEnabled": {
"label": "Power Measurement Enabled",
"description": "Enable the Power Measurement Telemetry"
},
"powerUpdateInterval": {
"label": "Power Update Interval",
"description": "How often to send Power data over the mesh"
},
"powerScreenEnabled": {
"label": "Power Screen Enabled",
"description": "Enable the Power Telemetry Screen"
}
}
}
@@ -0,0 +1,64 @@
{
"nodeDetail": {
"publicKeyEnabled": {
"label": "Public Key Enabled"
},
"noPublicKey": {
"label": "No Public Key"
},
"directMessage": {
"label": "Direct Message {{shortName}}"
},
"favorite": {
"label": "Favorite",
"tooltip": "Add or remove this node from your favorites"
},
"notFavorite": {
"label": "Not a Favorite"
},
"error": {
"label": "Error",
"text": "An error occurred while fetching node details. Please try again later."
},
"status": {
"heard": "Heard",
"mqtt": "MQTT"
},
"elevation": {
"label": "Elevation"
},
"channelUtil": {
"label": "Channel Util"
},
"airtimeUtil": {
"label": "Airtime Util"
}
},
"nodesTable": {
"headings": {
"longName": "Long Name",
"connection": "Connection",
"lastHeard": "Last Heard",
"encryption": "Encryption",
"model": "Model",
"macAddress": "MAC Address"
},
"connectionStatus": {
"direct": "Direct",
"away": "away",
"unknown": "-",
"viaMqtt": ", via MQTT"
},
"lastHeardStatus": {
"never": "Never"
}
},
"actions": {
"added": "Added",
"removed": "Removed",
"ignoreNode": "Ignore Node",
"unignoreNode": "Unignore Node",
"requestPosition": "Request Position"
}
}
+214
View File
@@ -0,0 +1,214 @@
{
"navigation": {
"title": "Navigation",
"messages": "Messages",
"map": "Map",
"config": "Config",
"radioConfig": "Radio Config",
"moduleConfig": "Module Config",
"channels": "Channels",
"nodes": "Nodes"
},
"app": {
"title": "Meshtastic",
"logo": "Meshtastic Logo"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Open sidebar",
"close": "Close sidebar"
}
},
"deviceInfo": {
"volts": "{{voltage}} volts",
"firmware": {
"title": "Firmware",
"version": "v{{version}}",
"buildDate": "Build date: {{date}}"
},
"deviceName": {
"title": "Device Name",
"changeName": "Change Device Name",
"placeholder": "Enter device name"
},
"editDeviceName": "Edit device name"
}
},
"batteryStatus": {
"charging": "{{level}}% charging",
"pluggedIn": "Plugged in",
"title": "Battery"
},
"search": {
"nodes": "Search nodes...",
"channels": "Search channels...",
"commandPalette": "Search commands..."
},
"toast": {
"positionRequestSent": { "title": "Position request sent." },
"requestingPosition": { "title": "Requesting position, please wait..." },
"sendingTraceroute": { "title": "Sending Traceroute, please wait..." },
"tracerouteSent": { "title": "Traceroute sent." },
"savedChannel": { "title": "Saved Channel: {{channelName}}" },
"messages": {
"pkiEncryption": { "title": "Chat is using PKI encryption." },
"pskEncryption": { "title": "Chat is using PSK encryption." }
},
"configSaveError": {
"title": "Error Saving Config",
"description": "An error occurred while saving the configuration."
},
"validationError": {
"title": "Config Errors Exist",
"description": "Please fix the configuration errors before saving."
},
"saveSuccess": {
"title": "Saving Config",
"description": "The configuration change {{case}} has been saved."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
}
},
"notifications": {
"copied": {
"label": "Copied!"
},
"copyToClipboard": {
"label": "Copy to clipboard"
},
"hidePassword": {
"label": "Hide password"
},
"showPassword": {
"label": "Show password"
},
"deliveryStatus": {
"delivered": "Delivered",
"failed": "Delivery Failed",
"waiting": "Waiting",
"unknown": "Unknown"
}
},
"general": {
"label": "General"
},
"hardware": {
"label": "Hardware"
},
"metrics": {
"label": "Metrics"
},
"role": {
"label": "Role"
},
"filter": {
"label": "Filter"
},
"advanced": {
"label": "Advanced"
},
"clearInput": {
"label": "Clear input"
},
"resetFilters": {
"label": "Reset Filters"
},
"nodeName": {
"label": "Node name/number",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Airtime Utilization (%)"
},
"batteryLevel": {
"label": "Battery level (%)",
"labelText": "Battery level (%): {{value}}"
},
"batteryVoltage": {
"label": "Battery voltage (V)",
"title": "Voltage"
},
"channelUtilization": {
"label": "Channel Utilization (%)"
},
"hops": {
"direct": "Direct",
"label": "Number of hops",
"text": "Number of hops: {{value}}"
},
"lastHeard": {
"label": "Last heard",
"labelText": "Last heard: {{value}}",
"nowLabel": "Now"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Favorites"
},
"hide": {
"label": "Hide"
},
"showOnly": {
"label": "Show Only"
},
"viaMqtt": {
"label": "Connected via MQTT"
},
"hopsUnknown": {
"label": "Unknown number of hops"
},
"showUnheard": {
"label": "Never heard"
},
"language": {
"label": "Language",
"changeLanguage": "Change Language"
},
"theme": {
"dark": "Dark",
"light": "Light",
"system": "Automatic",
"changeTheme": "Change Color Scheme"
},
"errorPage": {
"title": "This is a little embarrassing...",
"description1": "We are really sorry but an error occurred in the web client that caused it to crash. <br /> This is not supposed to happen, and we are working hard to fix it.",
"description2": "The best way to prevent this from happening again to you or anyone else is to report the issue to us.",
"reportInstructions": "Please include the following information in your report:",
"reportSteps": {
"step1": "What you were doing when the error occurred",
"step2": "What you expected to happen",
"step3": "What actually happened",
"step4": "Any other relevant information"
},
"reportLink": "You can report the issue to our <0>GitHub</0>",
"dashboardLink": "Return to the <0>dashboard</0>",
"detailsSummary": "Error Details",
"errorMessageLabel": "Error message:",
"stackTraceLabel": "Stack trace:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® is a registered trademark of Meshtastic LLC. | <1>Legal Information</1>",
"commitSha": "Commit SHA: {{sha}}"
}
}
@@ -0,0 +1,69 @@
{
"page": {
"sectionLabel": "Canales",
"channelName": "Channel: {{channelName}}",
"broadcastLabel": "Primary",
"channelIndex": "Ch {{index}}"
},
"validation": {
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
},
"settings": {
"label": "Ajustes del canal",
"description": "Crypto, MQTT & misc settings"
},
"role": {
"label": "Role",
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
"options": {
"primary": "PRIMARY",
"disabled": "DISABLED",
"secondary": "SECONDARY"
}
},
"psk": {
"label": "Pre-Shared Key",
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
"generate": "Generate"
},
"name": {
"label": "Nombre",
"description": "A unique name for the channel <12 bytes, leave blank for default"
},
"uplinkEnabled": {
"label": "Uplink Enabled",
"description": "Send messages from the local mesh to MQTT"
},
"downlinkEnabled": {
"label": "Downlink Enabled",
"description": "Send messages from MQTT to the local mesh"
},
"positionPrecision": {
"label": "Location",
"description": "The precision of the location to share with the channel. Can be disabled.",
"options": {
"none": "Do not share location",
"precise": "Precise Location",
"metric_km23": "Within 23 kilometers",
"metric_km12": "Within 12 kilometers",
"metric_km5_8": "Within 5.8 kilometers",
"metric_km2_9": "Within 2.9 kilometers",
"metric_km1_5": "Within 1.5 kilometers",
"metric_m700": "Within 700 meters",
"metric_m350": "Within 350 meters",
"metric_m200": "Within 200 meters",
"metric_m90": "Within 90 meters",
"metric_m50": "Within 50 meters",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
}
@@ -0,0 +1,50 @@
{
"emptyState": "No results found.",
"page": {
"title": "Command Menu"
},
"pinGroup": {
"label": "Pin command group"
},
"unpinGroup": {
"label": "Unpin command group"
},
"goto": {
"label": "Goto",
"command": {
"messages": "Mensajes",
"map": "Mapa",
"config": "Config",
"channels": "Canales",
"nodes": "Nodes"
}
},
"manage": {
"label": "Manage",
"command": {
"switchNode": "Switch Node",
"connectNewNode": "Connect New Node"
}
},
"contextual": {
"label": "Contextual",
"command": {
"qrCode": "QR Code",
"qrGenerator": "Generator",
"qrImport": "Import",
"scheduleShutdown": "Schedule Shutdown",
"scheduleReboot": "Schedule Reboot",
"rebootToOtaMode": "Reboot To OTA Mode",
"resetNodeDb": "Reset Node DB",
"factoryResetDevice": "Factory Reset Device",
"factoryResetConfig": "Factory Reset Config"
}
},
"debug": {
"label": "Debug",
"command": {
"reconfigure": "Reconfigure",
"clearAllStoredMessages": "Clear All Stored Message"
}
}
}
@@ -0,0 +1,141 @@
{
"button": {
"apply": "Aplique",
"backupKey": "Backup Key",
"cancel": "Cancelar",
"clearMessages": "Clear Messages",
"close": "Cerrar",
"confirm": "Confirm",
"delete": "Eliminar",
"dismiss": "Dismiss",
"download": "Download",
"export": "Export",
"generate": "Generate",
"regenerate": "Regenerate",
"import": "Import",
"message": "Mensaje",
"now": "Now",
"ok": "Vale",
"print": "Print",
"rebootOtaNow": "Reboot to OTA Mode Now",
"remove": "Quitar",
"requestNewKeys": "Request New Keys",
"requestPosition": "Request Position",
"reset": "Reiniciar",
"save": "Guardar",
"scanQr": "Scan QR Code",
"traceRoute": "Trace Route",
"submit": "Submit"
},
"app": {
"title": "Meshtastic",
"fullTitle": "Meshtastic Web Client"
},
"loading": "Loading...",
"unit": {
"cps": "CPS",
"dbm": "dBm",
"hertz": "Hz",
"hop": {
"one": "Hop",
"plural": "Hops"
},
"hopsAway": {
"one": "{{count}} hop away",
"plural": "{{count}} hops away",
"unknown": "Unknown hops away"
},
"megahertz": "MHz",
"raw": "raw",
"meter": {
"one": "Meter",
"plural": "Meters",
"suffix": "m"
},
"minute": {
"one": "Minute",
"plural": "Minutes"
},
"hour": {
"one": "Hour",
"plural": "Hours"
},
"millisecond": {
"one": "Millisecond",
"plural": "Milliseconds",
"suffix": "ms"
},
"second": {
"one": "Second",
"plural": "Seconds"
},
"day": {
"one": "Day",
"plural": "Days"
},
"month": {
"one": "Month",
"plural": "Months"
},
"year": {
"one": "Year",
"plural": "Years"
},
"snr": "SNR",
"volt": {
"one": "Volt",
"plural": "Volts",
"suffix": "V"
},
"record": {
"one": "Records",
"plural": "Records"
}
},
"security": {
"0bit": "Empty",
"8bit": "8 bit",
"128bit": "128 bit",
"256bit": "256 bit"
},
"unknown": {
"longName": "Unknown",
"shortName": "UNK",
"notAvailable": "N/A",
"num": "??"
},
"nodeUnknownPrefix": "!",
"unset": "UNSET",
"fallbackName": "Meshtastic {{last4}}",
"node": "Node",
"formValidation": {
"unsavedChanges": "Unsaved changes",
"tooBig": {
"string": "Too long, expected less than or equal to {{maximum}} characters.",
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
},
"tooSmall": {
"string": "Too short, expected more than or equal to {{minimum}} characters.",
"number": "Too small, expected a number larger than or equal to {{minimum}}."
},
"invalidFormat": {
"ipv4": "Invalid format, expected an IPv4 address.",
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
},
"invalidType": {
"number": "Invalid type, expected a number."
},
"pskLength": {
"0bit": "Key is required to be empty.",
"8bit": "Key is required to be an 8 bit pre-shared key (PSK).",
"128bit": "Key is required to be a 128 bit pre-shared key (PSK).",
"256bit": "Key is required to be a 256 bit pre-shared key (PSK)."
},
"required": {
"generic": "This field is required.",
"managed": "At least one admin key is requred if the node is managed.",
"key": "Key is required."
}
}
}
@@ -0,0 +1,12 @@
{
"dashboard": {
"title": "Connected Devices",
"description": "Manage your connected Meshtastic devices.",
"connectionType_ble": "BLE",
"connectionType_serial": "Serial",
"connectionType_network": "Red",
"noDevicesTitle": "No devices connected",
"noDevicesDescription": "Connect a new device to get started.",
"button_newConnection": "New Connection"
}
}
@@ -0,0 +1,428 @@
{
"page": {
"title": "Configuration",
"tabBluetooth": "Bluetooth",
"tabDevice": "Dispositivo",
"tabDisplay": "Pantalla",
"tabLora": "LoRa",
"tabNetwork": "Red",
"tabPosition": "Posición",
"tabPower": "Energía",
"tabSecurity": "Seguridad"
},
"sidebar": {
"label": "Modules"
},
"device": {
"title": "Device Settings",
"description": "Settings for the device",
"buttonPin": {
"description": "Button pin override",
"label": "Button Pin"
},
"buzzerPin": {
"description": "Buzzer pin override",
"label": "Buzzer Pin"
},
"disableTripleClick": {
"description": "Disable triple click",
"label": "Disable Triple Click"
},
"doubleTapAsButtonPress": {
"description": "Treat double tap as button press",
"label": "Double Tap as Button Press"
},
"ledHeartbeatDisabled": {
"description": "Disable default blinking LED",
"label": "LED Heartbeat Disabled"
},
"nodeInfoBroadcastInterval": {
"description": "How often to broadcast node info",
"label": "Node Info Broadcast Interval"
},
"posixTimezone": {
"description": "The POSIX timezone string for the device",
"label": "POSIX Timezone"
},
"rebroadcastMode": {
"description": "How to handle rebroadcasting",
"label": "Rebroadcast Mode"
},
"role": {
"description": "What role the device performs on the mesh",
"label": "Role"
}
},
"bluetooth": {
"title": "Bluetooth Settings",
"description": "Settings for the Bluetooth module",
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
"enabled": {
"description": "Enable or disable Bluetooth",
"label": "Enabled"
},
"pairingMode": {
"description": "Pin selection behaviour.",
"label": "Modo de emparejamiento"
},
"pin": {
"description": "Pin to use when pairing",
"label": "Pin"
}
},
"display": {
"description": "Settings for the device display",
"title": "Display Settings",
"headingBold": {
"description": "Bolden the heading text",
"label": "Bold Heading"
},
"carouselDelay": {
"description": "How fast to cycle through windows",
"label": "Carousel Delay"
},
"compassNorthTop": {
"description": "Fix north to the top of compass",
"label": "Compass North Top"
},
"displayMode": {
"description": "Screen layout variant",
"label": "Display Mode"
},
"displayUnits": {
"description": "Display metric or imperial units",
"label": "Display Units"
},
"flipScreen": {
"description": "Flip display 180 degrees",
"label": "Flip Screen"
},
"gpsDisplayUnits": {
"description": "Coordinate display format",
"label": "GPS Display Units"
},
"oledType": {
"description": "Type of OLED screen attached to the device",
"label": "OLED Type"
},
"screenTimeout": {
"description": "Turn off the display after this long",
"label": "Screen Timeout"
},
"twelveHourClock": {
"description": "Use 12-hour clock format",
"label": "12-Hour Clock"
},
"wakeOnTapOrMotion": {
"description": "Wake the device on tap or motion",
"label": "Wake on Tap or Motion"
}
},
"lora": {
"title": "Mesh Settings",
"description": "Settings for the LoRa mesh",
"bandwidth": {
"description": "Channel bandwidth in MHz",
"label": "Bandwidth"
},
"boostedRxGain": {
"description": "Boosted RX gain",
"label": "Boosted RX Gain"
},
"codingRate": {
"description": "The denominator of the coding rate",
"label": "Coding Rate"
},
"frequencyOffset": {
"description": "Frequency offset to correct for crystal calibration errors",
"label": "Frequency Offset"
},
"frequencySlot": {
"description": "LoRa frequency channel number",
"label": "Frequency Slot"
},
"hopLimit": {
"description": "Maximum number of hops",
"label": "Hop Limit"
},
"ignoreMqtt": {
"description": "Don't forward MQTT messages over the mesh",
"label": "Ignore MQTT"
},
"modemPreset": {
"description": "Modem preset to use",
"label": "Modem Preset"
},
"okToMqtt": {
"description": "When set to true, this configuration indicates that the user approves the packet to be uploaded to MQTT. If set to false, remote nodes are requested not to forward packets to MQTT",
"label": "OK to MQTT"
},
"overrideDutyCycle": {
"description": "Override Duty Cycle",
"label": "Override Duty Cycle"
},
"overrideFrequency": {
"description": "Override frequency",
"label": "Override Frequency"
},
"region": {
"description": "Sets the region for your node",
"label": "Región"
},
"spreadingFactor": {
"description": "Indicates the number of chirps per symbol",
"label": "Spreading Factor"
},
"transmitEnabled": {
"description": "Enable/Disable transmit (TX) from the LoRa radio",
"label": "Transmit Enabled"
},
"transmitPower": {
"description": "Max transmit power",
"label": "Transmit Power"
},
"usePreset": {
"description": "Use one of the predefined modem presets",
"label": "Use Preset"
},
"meshSettings": {
"description": "Settings for the LoRa mesh",
"label": "Mesh Settings"
},
"waveformSettings": {
"description": "Settings for the LoRa waveform",
"label": "Waveform Settings"
},
"radioSettings": {
"label": "Radio Settings",
"description": "Settings for the LoRa radio"
}
},
"network": {
"title": "WiFi Config",
"description": "WiFi radio configuration",
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
"addressMode": {
"description": "Address assignment selection",
"label": "Address Mode"
},
"dns": {
"description": "DNS Server",
"label": "DNS"
},
"ethernetEnabled": {
"description": "Enable or disable the Ethernet port",
"label": "Enabled"
},
"gateway": {
"description": "Default Gateway",
"label": "Gateway"
},
"ip": {
"description": "IP Address",
"label": "IP"
},
"psk": {
"description": "Network password",
"label": "PSK"
},
"ssid": {
"description": "Network name",
"label": "SSID"
},
"subnet": {
"description": "Subnet Mask",
"label": "Subnet"
},
"wifiEnabled": {
"description": "Enable or disable the WiFi radio",
"label": "Enabled"
},
"meshViaUdp": {
"label": "Mesh via UDP"
},
"ntpServer": {
"label": "NTP Server"
},
"rsyslogServer": {
"label": "Rsyslog Server"
},
"ethernetConfigSettings": {
"description": "Ethernet port configuration",
"label": "Ethernet Config"
},
"ipConfigSettings": {
"description": "IP configuration",
"label": "IP Config"
},
"ntpConfigSettings": {
"description": "NTP configuration",
"label": "NTP Config"
},
"rsyslogConfigSettings": {
"description": "Rsyslog configuration",
"label": "Rsyslog Config"
},
"udpConfigSettings": {
"description": "UDP over Mesh configuration",
"label": "Configuración UDP"
}
},
"position": {
"title": "Position Settings",
"description": "Settings for the position module",
"broadcastInterval": {
"description": "How often your position is sent out over the mesh",
"label": "Broadcast Interval"
},
"enablePin": {
"description": "GPS module enable pin override",
"label": "Enable Pin"
},
"fixedPosition": {
"description": "Don't report GPS position, but a manually-specified one",
"label": "Fixed Position"
},
"gpsMode": {
"description": "Configure whether device GPS is Enabled, Disabled, or Not Present",
"label": "GPS Mode"
},
"gpsUpdateInterval": {
"description": "How often a GPS fix should be acquired",
"label": "GPS Update Interval"
},
"positionFlags": {
"description": "Optional fields to include when assembling position messages. The more fields are selected, the larger the message will be leading to longer airtime usage and a higher risk of packet loss.",
"label": "Position Flags"
},
"receivePin": {
"description": "GPS module RX pin override",
"label": "Receive Pin"
},
"smartPositionEnabled": {
"description": "Only send position when there has been a meaningful change in location",
"label": "Enable Smart Position"
},
"smartPositionMinDistance": {
"description": "Minimum distance (in meters) that must be traveled before a position update is sent",
"label": "Smart Position Minimum Distance"
},
"smartPositionMinInterval": {
"description": "Minimum interval (in seconds) that must pass before a position update is sent",
"label": "Smart Position Minimum Interval"
},
"transmitPin": {
"description": "GPS module TX pin override",
"label": "Transmit Pin"
},
"intervalsSettings": {
"description": "How often to send position updates",
"label": "Intervals"
},
"flags": {
"placeholder": "Select position flags...",
"altitude": "Altitude",
"altitudeGeoidalSeparation": "Altitude Geoidal Separation",
"altitudeMsl": "Altitude is Mean Sea Level",
"dop": "Dilution of precision (DOP) PDOP used by default",
"hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP",
"numSatellites": "Number of satellites",
"sequenceNumber": "Sequence number",
"timestamp": "Timestamp",
"unset": "Sin configurar",
"vehicleHeading": "Vehicle heading",
"vehicleSpeed": "Vehicle speed"
}
},
"power": {
"adcMultiplierOverride": {
"description": "Used for tweaking battery voltage reading",
"label": "ADC Multiplier Override ratio"
},
"ina219Address": {
"description": "Address of the INA219 battery monitor",
"label": "INA219 Address"
},
"lightSleepDuration": {
"description": "How long the device will be in light sleep for",
"label": "Light Sleep Duration"
},
"minimumWakeTime": {
"description": "Minimum amount of time the device will stay awake for after receiving a packet",
"label": "Minimum Wake Time"
},
"noConnectionBluetoothDisabled": {
"description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long",
"label": "No Connection Bluetooth Disabled"
},
"powerSavingEnabled": {
"description": "Select if powered from a low-current source (i.e. solar), to minimize power consumption as much as possible.",
"label": "Enable power saving mode"
},
"shutdownOnBatteryDelay": {
"description": "Automatically shutdown node after this long when on battery, 0 for indefinite",
"label": "Shutdown on battery delay"
},
"superDeepSleepDuration": {
"description": "How long the device will be in super deep sleep for",
"label": "Super Deep Sleep Duration"
},
"powerConfigSettings": {
"description": "Settings for the power module",
"label": "Power Config"
},
"sleepSettings": {
"description": "Sleep settings for the power module",
"label": "Sleep Settings"
}
},
"security": {
"description": "Settings for the Security configuration",
"title": "Security Settings",
"button_backupKey": "Backup Key",
"adminChannelEnabled": {
"description": "Allow incoming device control over the insecure legacy admin channel",
"label": "Allow Legacy Admin"
},
"enableDebugLogApi": {
"description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth",
"label": "Enable Debug Log API"
},
"managed": {
"description": "If enabled, device configuration options are only able to be changed remotely by a Remote Admin node via admin messages. Do not enable this option unless at least one suitable Remote Admin node has been setup, and the public key is stored in one of the fields above.",
"label": "Managed"
},
"privateKey": {
"description": "Used to create a shared key with a remote device",
"label": "Clave privada"
},
"publicKey": {
"description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key",
"label": "Clave Pública"
},
"primaryAdminKey": {
"description": "The primary public key authorized to send admin messages to this node",
"label": "Primary Admin Key"
},
"secondaryAdminKey": {
"description": "The secondary public key authorized to send admin messages to this node",
"label": "Secondary Admin Key"
},
"serialOutputEnabled": {
"description": "Serial Console over the Stream API",
"label": "Serial Output Enabled"
},
"tertiaryAdminKey": {
"description": "The tertiary public key authorized to send admin messages to this node",
"label": "Tertiary Admin Key"
},
"adminSettings": {
"description": "Settings for Admin",
"label": "Admin Settings"
},
"loggingSettings": {
"description": "Settings for Logging",
"label": "Logging Settings"
}
}
}
@@ -0,0 +1,171 @@
{
"deleteMessages": {
"description": "This action will clear all message history. This cannot be undone. Are you sure you want to continue?",
"title": "Clear All Messages"
},
"deviceName": {
"description": "The Device will restart once the config is saved.",
"longName": "Long Name",
"shortName": "Short Name",
"title": "Change Device Name"
},
"import": {
"description": "The current LoRa configuration will be overridden.",
"error": {
"invalidUrl": "Invalid Meshtastic URL"
},
"channelPrefix": "Channel: ",
"channelSetUrl": "Channel Set/QR Code URL",
"channels": "Channels:",
"usePreset": "Use Preset?",
"title": "Import Channel Set"
},
"locationResponse": {
"altitude": "Altitude: ",
"coordinates": "Coordinates: ",
"title": "Location: {{identifier}}"
},
"pkiRegenerateDialog": {
"title": "Regenerate Pre-Shared Key?",
"description": "Are you sure you want to regenerate the pre-shared key?",
"regenerate": "Regenerate"
},
"newDeviceDialog": {
"title": "Connect New Device",
"https": "https",
"http": "http",
"tabHttp": "HTTP",
"tabBluetooth": "Bluetooth",
"tabSerial": "Serial",
"useHttps": "Use HTTPS",
"connecting": "Connecting...",
"connect": "Connect",
"connectionFailedAlert": {
"title": "Connection Failed",
"descriptionPrefix": "Could not connect to the device. ",
"httpsHint": "If using HTTPS, you may need to accept a self-signed certificate first. ",
"openLinkPrefix": "Please open ",
"openLinkSuffix": " in a new tab",
"acceptTlsWarningSuffix": ", accept any TLS warnings if prompted, then try again",
"learnMoreLink": "Learn more"
},
"httpConnection": {
"label": "IP Address/Hostname",
"placeholder": "000.000.000.000 / meshtastic.local"
},
"serialConnection": {
"noDevicesPaired": "No devices paired yet.",
"newDeviceButton": "New device",
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
},
"bluetoothConnection": {
"noDevicesPaired": "No devices paired yet.",
"newDeviceButton": "New device"
},
"validation": {
"requiresWebBluetooth": "This connection type requires <0>Web Bluetooth</0>. Please use a supported browser, like Chrome or Edge.",
"requiresWebSerial": "This connection type requires <0>Web Serial</0>. Please use a supported browser, like Chrome or Edge.",
"requiresSecureContext": "This application requires a <0>secure context</0>. Please connect using HTTPS or localhost.",
"additionallyRequiresSecureContext": "Additionally, it requires a <0>secure context</0>. Please connect using HTTPS or localhost."
}
},
"nodeDetails": {
"message": "Mensaje",
"requestPosition": "Request Position",
"traceRoute": "Trace Route",
"airTxUtilization": "Air TX utilization",
"allRawMetrics": "All Raw Metrics:",
"batteryLevel": "Battery level",
"channelUtilization": "Channel utilization",
"details": "Details:",
"deviceMetrics": "Device Metrics:",
"hardware": "Hardware: ",
"lastHeard": "Last Heard: ",
"nodeHexPrefix": "Node Hex: !",
"nodeNumber": "Node Number: ",
"position": "Position:",
"role": "Role: ",
"uptime": "Uptime: ",
"voltage": "Tensión",
"title": "Node Details for {{identifier}}",
"ignoreNode": "Ignore node",
"removeNode": "Remove node",
"unignoreNode": "Unignore node"
},
"pkiBackup": {
"loseKeysWarning": "If you lose your keys, you will need to reset your device.",
"secureBackup": "Its important to backup your public and private keys and store your backup securely!",
"footer": "=== END OF KEYS ===",
"header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===",
"privateKey": "Private Key:",
"publicKey": "Public Key:",
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
"title": "Backup Keys"
},
"pkiBackupReminder": {
"description": "We recommend backing up your key data regularly. Would you like to back up now?",
"title": "Backup Reminder",
"remindLaterPrefix": "Remind me in",
"remindNever": "Never remind me",
"backupNow": "Back up now"
},
"pkiRegenerate": {
"description": "Are you sure you want to regenerate key pair?",
"title": "Regenerate Key Pair"
},
"qr": {
"addChannels": "Add Channels",
"replaceChannels": "Replace Channels",
"description": "The current LoRa configuration will also be shared.",
"sharableUrl": "Sharable URL",
"title": "Generate QR Code"
},
"rebootOta": {
"title": "Schedule Reboot",
"description": "Reboot the connected node after a delay into OTA (Over-the-Air) mode.",
"enterDelay": "Enter delay (sec)",
"scheduled": "Reboot has been scheduled"
},
"reboot": {
"title": "Schedule Reboot",
"description": "Reboot the connected node after x minutes."
},
"refreshKeys": {
"description": {
"acceptNewKeys": "This will remove the node from device and request new keys.",
"keyMismatchReasonSuffix": ". This is due to the remote node's current public key does not match the previously stored key for this node.",
"unableToSendDmPrefix": "Your node is unable to send a direct message to node: "
},
"acceptNewKeys": "Accept New Keys",
"title": "Keys Mismatch - {{identifier}}"
},
"removeNode": {
"description": "Are you sure you want to remove this Node?",
"title": "Remove Node?"
},
"shutdown": {
"title": "Schedule Shutdown",
"description": "Turn off the connected node after x minutes."
},
"traceRoute": {
"routeToDestination": "Route to destination:",
"routeBack": "Route back:"
},
"tracerouteResponse": {
"title": "Traceroute: {{identifier}}"
},
"unsafeRoles": {
"confirmUnderstanding": "Yes, I know what I'm doing",
"conjunction": " and the blog post about ",
"postamble": " and understand the implications of changing the role.",
"preamble": "I have read the ",
"choosingRightDeviceRole": "Choosing The Right Device Role",
"deviceRoleDocumentation": "Device Role Documentation",
"title": "¿Estás seguro?"
},
"managedMode": {
"confirmUnderstanding": "Yes, I know what I'm doing",
"title": "¿Estás seguro?",
"description": "Enabling Managed Mode blocks client applications (including the web client) from writing configurations to a radio. Once enabled, radio configurations can <bold>only</bold> be changed through Remote Admin messages. This setting is not required for remote node administration."
}
}
@@ -0,0 +1,39 @@
{
"page": {
"title": "Messages: {{chatName}}",
"placeholder": "Enter Message"
},
"emptyState": {
"title": "Select a Chat",
"text": "No messages yet."
},
"selectChatPrompt": {
"text": "Select a channel or node to start messaging."
},
"sendMessage": {
"placeholder": "Enter your message here...",
"sendButton": "Enviar"
},
"actionsMenu": {
"addReactionLabel": "Add Reaction",
"replyLabel": "Reply"
},
"deliveryStatus": {
"delivered": {
"label": "Message delivered",
"displayText": "Message delivered"
},
"failed": {
"label": "Message delivery failed",
"displayText": "Delivery failed"
},
"unknown": {
"label": "Message status unknown",
"displayText": "Unknown state"
},
"waiting": {
"label": "Sending message",
"displayText": "Waiting for delivery"
}
}
}
@@ -0,0 +1,448 @@
{
"page": {
"tabAmbientLighting": "Ambient Lighting",
"tabAudio": "Audio",
"tabCannedMessage": "Canned",
"tabDetectionSensor": "Detection Sensor",
"tabExternalNotification": "Ext Notif",
"tabMqtt": "MQTT",
"tabNeighborInfo": "Neighbor Info",
"tabPaxcounter": "Paxcounter",
"tabRangeTest": "Range Test",
"tabSerial": "Serial",
"tabStoreAndForward": "S&F",
"tabTelemetry": "Telemetry"
},
"ambientLighting": {
"title": "Ambient Lighting Settings",
"description": "Settings for the Ambient Lighting module",
"ledState": {
"label": "LED State",
"description": "Sets LED to on or off"
},
"current": {
"label": "Intensidad",
"description": "Sets the current for the LED output. Default is 10"
},
"red": {
"label": "Red",
"description": "Sets the red LED level. Values are 0-255"
},
"green": {
"label": "Green",
"description": "Sets the green LED level. Values are 0-255"
},
"blue": {
"label": "Blue",
"description": "Sets the blue LED level. Values are 0-255"
}
},
"audio": {
"title": "Audio Settings",
"description": "Settings for the Audio module",
"codec2Enabled": {
"label": "Codec 2 Enabled",
"description": "Enable Codec 2 audio encoding"
},
"pttPin": {
"label": "PTT Pin",
"description": "GPIO pin to use for PTT"
},
"bitrate": {
"label": "Bitrate",
"description": "Bitrate to use for audio encoding"
},
"i2sWs": {
"label": "i2S WS",
"description": "GPIO pin to use for i2S WS"
},
"i2sSd": {
"label": "i2S SD",
"description": "GPIO pin to use for i2S SD"
},
"i2sDin": {
"label": "i2S DIN",
"description": "GPIO pin to use for i2S DIN"
},
"i2sSck": {
"label": "i2S SCK",
"description": "GPIO pin to use for i2S SCK"
}
},
"cannedMessage": {
"title": "Canned Message Settings",
"description": "Settings for the Canned Message module",
"moduleEnabled": {
"label": "Module Enabled",
"description": "Enable Canned Message"
},
"rotary1Enabled": {
"label": "Rotary Encoder #1 Enabled",
"description": "Enable the rotary encoder"
},
"inputbrokerPinA": {
"label": "Encoder Pin A",
"description": "GPIO Pin Value (1-39) For encoder port A"
},
"inputbrokerPinB": {
"label": "Encoder Pin B",
"description": "GPIO Pin Value (1-39) For encoder port B"
},
"inputbrokerPinPress": {
"label": "Encoder Pin Press",
"description": "GPIO Pin Value (1-39) For encoder Press"
},
"inputbrokerEventCw": {
"label": "Clockwise event",
"description": "Select input event."
},
"inputbrokerEventCcw": {
"label": "Counter Clockwise event",
"description": "Select input event."
},
"inputbrokerEventPress": {
"label": "Press event",
"description": "Select input event"
},
"updown1Enabled": {
"label": "Up Down enabled",
"description": "Enable the up / down encoder"
},
"allowInputSource": {
"label": "Allow Input Source",
"description": "Select from: '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
},
"sendBell": {
"label": "Send Bell",
"description": "Sends a bell character with each message"
}
},
"detectionSensor": {
"title": "Detection Sensor Settings",
"description": "Settings for the Detection Sensor module",
"enabled": {
"label": "Enabled",
"description": "Enable or disable Detection Sensor Module"
},
"minimumBroadcastSecs": {
"label": "Minimum Broadcast Seconds",
"description": "The interval in seconds of how often we can send a message to the mesh when a state change is detected"
},
"stateBroadcastSecs": {
"label": "State Broadcast Seconds",
"description": "The interval in seconds of how often we should send a message to the mesh with the current state regardless of changes"
},
"sendBell": {
"label": "Send Bell",
"description": "Send ASCII bell with alert message"
},
"name": {
"label": "Friendly Name",
"description": "Used to format the message sent to mesh, max 20 Characters"
},
"monitorPin": {
"label": "Monitor Pin",
"description": "The GPIO pin to monitor for state changes"
},
"detectionTriggerType": {
"label": "Detection Triggered Type",
"description": "The type of trigger event to be used"
},
"usePullup": {
"label": "Use Pullup",
"description": "Whether or not use INPUT_PULLUP mode for GPIO pin"
}
},
"externalNotification": {
"title": "External Notification Settings",
"description": "Configure the external notification module",
"enabled": {
"label": "Module Enabled",
"description": "Enable External Notification"
},
"outputMs": {
"label": "Output MS",
"description": "Output MS"
},
"output": {
"label": "Output",
"description": "Output"
},
"outputVibra": {
"label": "Output Vibrate",
"description": "Output Vibrate"
},
"outputBuzzer": {
"label": "Output Buzzer",
"description": "Output Buzzer"
},
"active": {
"label": "Active",
"description": "Active"
},
"alertMessage": {
"label": "Alert Message",
"description": "Alert Message"
},
"alertMessageVibra": {
"label": "Alert Message Vibrate",
"description": "Alert Message Vibrate"
},
"alertMessageBuzzer": {
"label": "Alert Message Buzzer",
"description": "Alert Message Buzzer"
},
"alertBell": {
"label": "Alert Bell",
"description": "Should an alert be triggered when receiving an incoming bell?"
},
"alertBellVibra": {
"label": "Alert Bell Vibrate",
"description": "Alert Bell Vibrate"
},
"alertBellBuzzer": {
"label": "Alert Bell Buzzer",
"description": "Alert Bell Buzzer"
},
"usePwm": {
"label": "Use PWM",
"description": "Use PWM"
},
"nagTimeout": {
"label": "Nag Timeout",
"description": "Nag Timeout"
},
"useI2sAsBuzzer": {
"label": "Use I²S Pin as Buzzer",
"description": "Designate I²S Pin as Buzzer Output"
}
},
"mqtt": {
"title": "MQTT Settings",
"description": "Settings for the MQTT module",
"enabled": {
"label": "Enabled",
"description": "Enable or disable MQTT"
},
"address": {
"label": "MQTT Server Address",
"description": "MQTT server address to use for default/custom servers"
},
"username": {
"label": "MQTT Username",
"description": "MQTT username to use for default/custom servers"
},
"password": {
"label": "MQTT Password",
"description": "MQTT password to use for default/custom servers"
},
"encryptionEnabled": {
"label": "Encryption Enabled",
"description": "Enable or disable MQTT encryption. Note: All messages are sent to the MQTT broker unencrypted if this option is not enabled, even when your uplink channels have encryption keys set. This includes position data."
},
"jsonEnabled": {
"label": "JSON Enabled",
"description": "Whether to send/consume JSON packets on MQTT"
},
"tlsEnabled": {
"label": "TLS Enabled",
"description": "Enable or disable TLS"
},
"root": {
"label": "Root topic",
"description": "MQTT root topic to use for default/custom servers"
},
"proxyToClientEnabled": {
"label": "MQTT Client Proxy Enabled",
"description": "Utilizes the network connection to proxy MQTT messages to the client."
},
"mapReportingEnabled": {
"label": "Map Reporting Enabled",
"description": "Your node will periodically send an unencrypted map report packet to the configured MQTT server, this includes id, short and long name, approximate location, hardware model, role, firmware version, LoRa region, modem preset and primary channel name."
},
"mapReportSettings": {
"publishIntervalSecs": {
"label": "Map Report Publish Interval (s)",
"description": "Interval in seconds to publish map reports"
},
"positionPrecision": {
"label": "Approximate Location",
"description": "Position shared will be accurate within this distance",
"options": {
"metric_km23": "Within 23 km",
"metric_km12": "Within 12 km",
"metric_km5_8": "Within 5.8 km",
"metric_km2_9": "Within 2.9 km",
"metric_km1_5": "Within 1.5 km",
"metric_m700": "Within 700 m",
"metric_m350": "Within 350 m",
"metric_m200": "Within 200 m",
"metric_m90": "Within 90 m",
"metric_m50": "Within 50 m",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
}
},
"neighborInfo": {
"title": "Neighbor Info Settings",
"description": "Settings for the Neighbor Info module",
"enabled": {
"label": "Enabled",
"description": "Enable or disable Neighbor Info Module"
},
"updateInterval": {
"label": "Update Interval",
"description": "Interval in seconds of how often we should try to send our Neighbor Info to the mesh"
}
},
"paxcounter": {
"title": "Paxcounter Settings",
"description": "Settings for the Paxcounter module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Paxcounter"
},
"paxcounterUpdateInterval": {
"label": "Update Interval (seconds)",
"description": "How long to wait between sending paxcounter packets"
},
"wifiThreshold": {
"label": "WiFi RSSI Threshold",
"description": "At what WiFi RSSI level should the counter increase. Defaults to -80."
},
"bleThreshold": {
"label": "BLE RSSI Threshold",
"description": "At what BLE RSSI level should the counter increase. Defaults to -80."
}
},
"rangeTest": {
"title": "Range Test Settings",
"description": "Settings for the Range Test module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Range Test"
},
"sender": {
"label": "Message Interval",
"description": "How long to wait between sending test packets"
},
"save": {
"label": "Save CSV to storage",
"description": "ESP32 Only"
}
},
"serial": {
"title": "Serial Settings",
"description": "Settings for the Serial module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Serial output"
},
"echo": {
"label": "Echo",
"description": "Any packets you send will be echoed back to your device"
},
"rxd": {
"label": "Receive Pin",
"description": "Set the GPIO pin to the RXD pin you have set up."
},
"txd": {
"label": "Transmit Pin",
"description": "Set the GPIO pin to the TXD pin you have set up."
},
"baud": {
"label": "Baud Rate",
"description": "The serial baud rate"
},
"timeout": {
"label": "Tiempo agotado",
"description": "Seconds to wait before we consider your packet as 'done'"
},
"mode": {
"label": "Mode",
"description": "Select Mode"
},
"overrideConsoleSerialPort": {
"label": "Override Console Serial Port",
"description": "If you have a serial port connected to the console, this will override it."
}
},
"storeForward": {
"title": "Store & Forward Settings",
"description": "Settings for the Store & Forward module",
"enabled": {
"label": "Module Enabled",
"description": "Enable Store & Forward"
},
"heartbeat": {
"label": "Heartbeat Enabled",
"description": "Enable Store & Forward heartbeat"
},
"records": {
"label": "Number of records",
"description": "Number of records to store"
},
"historyReturnMax": {
"label": "History return max",
"description": "Max number of records to return"
},
"historyReturnWindow": {
"label": "History return window",
"description": "Max number of records to return"
}
},
"telemetry": {
"title": "Telemetry Settings",
"description": "Settings for the Telemetry module",
"deviceUpdateInterval": {
"label": "Device Metrics",
"description": "Device metrics update interval (seconds)"
},
"environmentUpdateInterval": {
"label": "Environment metrics update interval (seconds)",
"description": ""
},
"environmentMeasurementEnabled": {
"label": "Module Enabled",
"description": "Enable the Environment Telemetry"
},
"environmentScreenEnabled": {
"label": "Displayed on Screen",
"description": "Show the Telemetry Module on the OLED"
},
"environmentDisplayFahrenheit": {
"label": "Display Fahrenheit",
"description": "Display temp in Fahrenheit"
},
"airQualityEnabled": {
"label": "Air Quality Enabled",
"description": "Enable the Air Quality Telemetry"
},
"airQualityInterval": {
"label": "Air Quality Update Interval",
"description": "How often to send Air Quality data over the mesh"
},
"powerMeasurementEnabled": {
"label": "Power Measurement Enabled",
"description": "Enable the Power Measurement Telemetry"
},
"powerUpdateInterval": {
"label": "Power Update Interval",
"description": "How often to send Power data over the mesh"
},
"powerScreenEnabled": {
"label": "Power Screen Enabled",
"description": "Enable the Power Telemetry Screen"
}
}
}
@@ -0,0 +1,63 @@
{
"nodeDetail": {
"publicKeyEnabled": {
"label": "Public Key Enabled"
},
"noPublicKey": {
"label": "No Public Key"
},
"directMessage": {
"label": "Direct Message {{shortName}}"
},
"favorite": {
"label": "Favorito",
"tooltip": "Add or remove this node from your favorites"
},
"notFavorite": {
"label": "Not a Favorite"
},
"error": {
"label": "Error",
"text": "An error occurred while fetching node details. Please try again later."
},
"status": {
"heard": "Heard",
"mqtt": "MQTT"
},
"elevation": {
"label": "Elevation"
},
"channelUtil": {
"label": "Channel Util"
},
"airtimeUtil": {
"label": "Airtime Util"
}
},
"nodesTable": {
"headings": {
"longName": "Long Name",
"connection": "Connection",
"lastHeard": "Last Heard",
"encryption": "Encryption",
"model": "Model",
"macAddress": "MAC Address"
},
"connectionStatus": {
"direct": "Directo",
"away": "away",
"unknown": "-",
"viaMqtt": ", via MQTT"
},
"lastHeardStatus": {
"never": "Never"
}
},
"actions": {
"added": "Added",
"removed": "Removed",
"ignoreNode": "Ignore Node",
"unignoreNode": "Unignore Node",
"requestPosition": "Request Position"
}
}
@@ -0,0 +1,228 @@
{
"navigation": {
"title": "Navigation",
"messages": "Mensajes",
"map": "Mapa",
"config": "Config",
"radioConfig": "Radio Config",
"moduleConfig": "Module Config",
"channels": "Canales",
"nodes": "Nodes"
},
"app": {
"title": "Meshtastic",
"logo": "Meshtastic Logo"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Open sidebar",
"close": "Close sidebar"
}
},
"deviceInfo": {
"volts": "{{voltage}} volts",
"firmware": {
"title": "Firmware",
"version": "v{{version}}",
"buildDate": "Build date: {{date}}"
},
"deviceName": {
"title": "Device Name",
"changeName": "Change Device Name",
"placeholder": "Enter device name"
},
"editDeviceName": "Edit device name"
}
},
"batteryStatus": {
"charging": "{{level}}% charging",
"pluggedIn": "Plugged in",
"title": "Batería"
},
"search": {
"nodes": "Search nodes...",
"channels": "Search channels...",
"commandPalette": "Search commands..."
},
"toast": {
"positionRequestSent": {
"title": "Position request sent."
},
"requestingPosition": {
"title": "Requesting position, please wait..."
},
"sendingTraceroute": {
"title": "Sending Traceroute, please wait..."
},
"tracerouteSent": {
"title": "Traceroute sent."
},
"savedChannel": {
"title": "Saved Channel: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Chat is using PKI encryption."
},
"pskEncryption": {
"title": "Chat is using PSK encryption."
}
},
"configSaveError": {
"title": "Error Saving Config",
"description": "An error occurred while saving the configuration."
},
"validationError": {
"title": "Config Errors Exist",
"description": "Please fix the configuration errors before saving."
},
"saveSuccess": {
"title": "Saving Config",
"description": "The configuration change {{case}} has been saved."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} favorites.",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} ignore list",
"action": {
"added": "Added",
"removed": "Removed",
"to": "to",
"from": "from"
}
}
},
"notifications": {
"copied": {
"label": "Copied!"
},
"copyToClipboard": {
"label": "Copy to clipboard"
},
"hidePassword": {
"label": "Hide password"
},
"showPassword": {
"label": "Mostrar contraseña"
},
"deliveryStatus": {
"delivered": "Delivered",
"failed": "Delivery Failed",
"waiting": "Waiting",
"unknown": "Unknown"
}
},
"general": {
"label": "General"
},
"hardware": {
"label": "Hardware"
},
"metrics": {
"label": "Metrics"
},
"role": {
"label": "Role"
},
"filter": {
"label": "Filtro"
},
"advanced": {
"label": "Advanced"
},
"clearInput": {
"label": "Clear input"
},
"resetFilters": {
"label": "Reset Filters"
},
"nodeName": {
"label": "Node name/number",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Airtime Utilization (%)"
},
"batteryLevel": {
"label": "Battery level (%)",
"labelText": "Battery level (%): {{value}}"
},
"batteryVoltage": {
"label": "Battery voltage (V)",
"title": "Tensión"
},
"channelUtilization": {
"label": "Channel Utilization (%)"
},
"hops": {
"direct": "Directo",
"label": "Number of hops",
"text": "Number of hops: {{value}}"
},
"lastHeard": {
"label": "Última escucha",
"labelText": "Last heard: {{value}}",
"nowLabel": "Now"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Favorites"
},
"hide": {
"label": "Hide"
},
"showOnly": {
"label": "Show Only"
},
"viaMqtt": {
"label": "Connected via MQTT"
},
"hopsUnknown": {
"label": "Unknown number of hops"
},
"showUnheard": {
"label": "Never heard"
},
"language": {
"label": "Idioma",
"changeLanguage": "Change Language"
},
"theme": {
"dark": "Oscuro",
"light": "Claro",
"system": "Automatic",
"changeTheme": "Change Color Scheme"
},
"errorPage": {
"title": "This is a little embarrassing...",
"description1": "We are really sorry but an error occurred in the web client that caused it to crash. <br /> This is not supposed to happen, and we are working hard to fix it.",
"description2": "The best way to prevent this from happening again to you or anyone else is to report the issue to us.",
"reportInstructions": "Please include the following information in your report:",
"reportSteps": {
"step1": "What you were doing when the error occurred",
"step2": "What you expected to happen",
"step3": "What actually happened",
"step4": "Any other relevant information"
},
"reportLink": "You can report the issue to our <0>GitHub</0>",
"dashboardLink": "Return to the <0>dashboard</0>",
"detailsSummary": "Error Details",
"errorMessageLabel": "Error message:",
"stackTraceLabel": "Stack trace:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® is a registered trademark of Meshtastic LLC. | <1>Legal Information</1>",
"commitSha": "Commit SHA: {{sha}}"
}
}
@@ -0,0 +1,69 @@
{
"page": {
"sectionLabel": "Kanavat",
"channelName": "Kanava: {{channelName}}",
"broadcastLabel": "Ensisijainen",
"channelIndex": "Ch {{index}}"
},
"validation": {
"pskInvalid": "Syötä kelvollinen {{bits}} bittinen PSK."
},
"settings": {
"label": "Kanava-asetukset",
"description": "Crypto, MQTT ja muut asetukset"
},
"role": {
"label": "Rooli",
"description": "Laitteen telemetriatiedot lähetetään ENSISIJAISEN kanavan kautta. Vain yksi ENSISIJAINEN kanava sallitaan",
"options": {
"primary": "ENSISIJAISEN",
"disabled": "POIS KÄYTÖSTÄ",
"secondary": "TOISIJAINEN"
}
},
"psk": {
"label": "Esijaettu avain",
"description": "Tuetut PSK-pituudet: 256-bit, 128-bit, 8-bit, tyhjät (0-bit)",
"generate": "Luo"
},
"name": {
"label": "Nimi",
"description": "Kanavan yksilöllinen nimi (alle 12 merkkiä), jätä tyhjäksi käyttääksesi oletusta"
},
"uplinkEnabled": {
"label": "Lähetys käytössä",
"description": "Lähetä viestejä paikallisesta verkosta MQTT-verkkoon"
},
"downlinkEnabled": {
"label": "Vastaanotto käytössä",
"description": "Lähetä viestejä MQTT:stä paikalliseen verkkoon"
},
"positionPrecision": {
"label": "Sijainti",
"description": "Kanavalle jaettavan sijainnin tarkkuus. Voi poistaa käytöstä.",
"options": {
"none": "Älä jaa sijaintia",
"precise": "Tarkka Sijainti",
"metric_km23": "23 kilometrin säteellä",
"metric_km12": "12 kilometrin säteellä",
"metric_km5_8": "5,8 kilometrin säteellä",
"metric_km2_9": "2,9 kilometrin säteellä",
"metric_km1_5": "1,5 kilometrin säteellä",
"metric_m700": "700 metrin säteellä",
"metric_m350": "350 metrin säteellä",
"metric_m200": "200 metrin säteellä",
"metric_m90": "90 metrin säteellä",
"metric_m50": "50 metrin säteellä",
"imperial_mi15": "15 mailin säteellä",
"imperial_mi7_3": "7,3 mailin säteellä",
"imperial_mi3_6": "3,6 mailin säteellä",
"imperial_mi1_8": "1,8 mailin säteellä",
"imperial_mi0_9": "0,9 mailin säteellä",
"imperial_mi0_5": "0,5 mailin säteellä",
"imperial_mi0_2": "0,2 mailin säteellä",
"imperial_ft600": "600 jalan säteellä",
"imperial_ft300": "300 jalan säteellä",
"imperial_ft150": "150 jalan säteellä"
}
}
}
@@ -0,0 +1,50 @@
{
"emptyState": "Tuloksia ei löytynyt.",
"page": {
"title": "Komentovalikko"
},
"pinGroup": {
"label": "Kiinnitä komentoryhmä"
},
"unpinGroup": {
"label": "Irroita komentoryhmä"
},
"goto": {
"label": "Siirry",
"command": {
"messages": "Viestit",
"map": "Kartta",
"config": "Asetukset",
"channels": "Kanavat",
"nodes": "Laitteet"
}
},
"manage": {
"label": "Hallinnoi",
"command": {
"switchNode": "Vaihda laitetta",
"connectNewNode": "Yhdistä uusi laite"
}
},
"contextual": {
"label": "Kontekstin mukainen",
"command": {
"qrCode": "QR-koodi",
"qrGenerator": "QR-koodigeneraattori",
"qrImport": "Tuo",
"scheduleShutdown": "Ajasta sammutus",
"scheduleReboot": "Ajasta uudelleenkäynnistys",
"rebootToOtaMode": "Uudelleenkäynnistä OTA-tilaan",
"resetNodeDb": "Nollaa laitteen DB-tietokanta",
"factoryResetDevice": "Palauta tehdasasetukset",
"factoryResetConfig": "Tehdasasetusten palautusasetukset"
}
},
"debug": {
"label": "Vianetsintä",
"command": {
"reconfigure": "Määritä uudelleen",
"clearAllStoredMessages": "Tyhjennä kaikki tallennetut viesti"
}
}
}
@@ -0,0 +1,141 @@
{
"button": {
"apply": "Hyväksy",
"backupKey": "Varmuuskopioi avain",
"cancel": "Peruuta",
"clearMessages": "Tyhjennä viestit",
"close": "Sulje",
"confirm": "Vahvista",
"delete": "Poista",
"dismiss": "Hylkää",
"download": "Lataa",
"export": "Vie",
"generate": "Luo",
"regenerate": "Luo uudelleen",
"import": "Tuo",
"message": "Viesti",
"now": "Nyt",
"ok": "OK",
"print": "Tulosta",
"rebootOtaNow": "Käynnistä uudelleen OTA-tilaan nyt",
"remove": "Poista",
"requestNewKeys": "Pyydä uudet avaimet",
"requestPosition": "Pyydä sijaintia",
"reset": "Palauta",
"save": "Tallenna",
"scanQr": "Skannaa QR-koodi",
"traceRoute": "Reitinselvitys",
"submit": "Lähetä"
},
"app": {
"title": "Meshtastic",
"fullTitle": "Meshtastic Web Client"
},
"loading": "Ladataan...",
"unit": {
"cps": "CPS",
"dbm": "dBm",
"hertz": "Hz",
"hop": {
"one": "Hyppy",
"plural": "Hyppyä"
},
"hopsAway": {
"one": "{{count}} hypyn päässä",
"plural": "{{count}} hypyn päässä",
"unknown": "Hyppyjen määrä tuntematon"
},
"megahertz": "MHz",
"raw": "raakatieto",
"meter": {
"one": "Metri",
"plural": "Metriä",
"suffix": "m"
},
"minute": {
"one": "Minuutti",
"plural": "Minuuttia"
},
"hour": {
"one": "Tunti",
"plural": "Tuntia"
},
"millisecond": {
"one": "Millisekunti",
"plural": "Millisekuntia",
"suffix": "ms"
},
"second": {
"one": "Sekunti",
"plural": "Sekuntia"
},
"day": {
"one": "Päivä",
"plural": "Päivää"
},
"month": {
"one": "Kuukausi",
"plural": "Kuukautta"
},
"year": {
"one": "Vuosi",
"plural": "Vuotta"
},
"snr": "SNR",
"volt": {
"one": "Voltti",
"plural": "Voltit",
"suffix": "V"
},
"record": {
"one": "Tiedot",
"plural": "Tiedot"
}
},
"security": {
"0bit": "Tyhjä",
"8bit": "8-bittiä",
"128bit": "128-bittiä",
"256bit": "256 bittiä"
},
"unknown": {
"longName": "Tuntematon",
"shortName": "UNK",
"notAvailable": "N/A",
"num": "??"
},
"nodeUnknownPrefix": "!",
"unset": "EI ASETETTU",
"fallbackName": "Meshtastic {{last4}}",
"node": "Laite",
"formValidation": {
"unsavedChanges": "Tallentamattomat muutokset",
"tooBig": {
"string": "Teksti on liian pitkä – sallittu enimmäispituus on {{maximum}} merkkiä.",
"number": "Arvo on liian suuri – sallittu enimmäisarvo on {{maximum}}.",
"bytes": "Liian suuri koko – sallittu enimmäismäärä on {{params.maximum}} tavua."
},
"tooSmall": {
"string": "Teksti on liian lyhyt – vähimmäispituus on {{minimum}} merkkiä.",
"number": "Arvo on liian pieni – pienin sallittu arvo on {{minimum}}."
},
"invalidFormat": {
"ipv4": "Virheellinen muoto – odotettu muoto on IPv4-osoite.",
"key": "Virheellinen muoto – odotettu muoto on Base64-koodattu jaettu avain (PSK)."
},
"invalidType": {
"number": "Virheellinen tyyppi – arvon tulee olla numero."
},
"pskLength": {
"0bit": "Avainkentän on oltava tyhjä.",
"8bit": "Avaimen on oltava 8-bittinen jaettu avain (PSK).",
"128bit": "Avaimen on oltava 128-bittinen jaettu avain (PSK).",
"256bit": "Avaimen on oltava 256-bittinen jaettu avain (PSK)."
},
"required": {
"generic": "Tämä kenttä on pakollinen.",
"managed": "Vähintään yksi hallinta-avain vaaditaan, jos laitetta hallitaan.",
"key": "Avain on pakollinen."
}
}
}
@@ -0,0 +1,12 @@
{
"dashboard": {
"title": "Yhdistetyt laitteet",
"description": "Hallitse yhdistettyjä Meshtastic laitteitasi.",
"connectionType_ble": "BLE",
"connectionType_serial": "Sarjaliitäntä",
"connectionType_network": "Verkko",
"noDevicesTitle": "Ei laitteita yhdistettynä",
"noDevicesDescription": "Yhdistä uusi laite aloittaaksesi.",
"button_newConnection": "Uusi yhteys"
}
}
@@ -0,0 +1,428 @@
{
"page": {
"title": "Asetukset",
"tabBluetooth": "Bluetooth",
"tabDevice": "Laite",
"tabDisplay": "Näyttö",
"tabLora": "LoRa",
"tabNetwork": "Verkko",
"tabPosition": "Sijainti",
"tabPower": "Virta",
"tabSecurity": "Turvallisuus"
},
"sidebar": {
"label": "Moduulit"
},
"device": {
"title": "Laitteen asetukset",
"description": "Laitteen asetukset",
"buttonPin": {
"description": "Painikkeen pinnin ohitus",
"label": "Painikkeen pinni"
},
"buzzerPin": {
"description": "Summerin pinnin ohitus",
"label": "Summerin pinni"
},
"disableTripleClick": {
"description": "Poista kolmoisklikkaus käytöstä",
"label": "Poista kolmoisklikkaus käytöstä"
},
"doubleTapAsButtonPress": {
"description": "Käsittele kaksoisnapautus painikkeen painalluksena",
"label": "Kaksoisnapautus painikkeen painalluksena"
},
"ledHeartbeatDisabled": {
"description": "Poista ledin vilkkuminen käytöstä",
"label": "Ledin vilkkuminen poistettu käytöstä"
},
"nodeInfoBroadcastInterval": {
"description": "Kuinka usein laitteen tiedot lähetetään verkkoon",
"label": "Laitteen tietojen lähetyksen aikaväli"
},
"posixTimezone": {
"description": "POSIX-aikavyöhykkeen merkkijono laitetta varten",
"label": "POSIX-aikavyöhyke"
},
"rebroadcastMode": {
"description": "Kuinka uudelleenlähetyksiä käsitellään",
"label": "Uudelleenlähetyksen tila"
},
"role": {
"description": "Mikä rooli laitteella on mesh-verkossa",
"label": "Rooli"
}
},
"bluetooth": {
"title": "Bluetooth asetukset",
"description": "Bluetooth moduulin asetukset",
"note": "Huomautus: Jotkin laitteet (ESP32) eivät voi käyttää bluetoothia sekä WiFiä samanaikaisesti.",
"enabled": {
"description": "Ota Bluetooth käyttöön tai poista käytöstä",
"label": "Käytössä"
},
"pairingMode": {
"description": "PIN-koodin valinnan käyttäytyminen.",
"label": "Paritustila"
},
"pin": {
"description": "Bluetooth PIN-koodi, jota käytetään pariliitettäessä",
"label": "PIN"
}
},
"display": {
"description": "Laitteen näytön asetukset",
"title": "Näyttöasetukset",
"headingBold": {
"description": "Lihavoi otsikkoteksti",
"label": "Lihavoitu otsikko"
},
"carouselDelay": {
"description": "Kuinka nopeasti ikkunat kulkevat",
"label": "Karusellin Viive"
},
"compassNorthTop": {
"description": "Kiinnitä pohjoinen kompassin yläreunaan",
"label": "Kompassin pohjoinen ylhäällä"
},
"displayMode": {
"description": "Näytön asettelun vaihtoehdot",
"label": "Näyttötila"
},
"displayUnits": {
"description": "Näytä metriset tai imperiaaliset yksiköt",
"label": "Näyttöyksiköt"
},
"flipScreen": {
"description": "Käännä näyttöä 180 astetta",
"label": "Käännä näyttö"
},
"gpsDisplayUnits": {
"description": "Koordinaattien näyttömuoto",
"label": "GPS näyttöyksiköt"
},
"oledType": {
"description": "Laitteeseen liitetyn OLED-näytön tyyppi",
"label": "OLED-tyyppi"
},
"screenTimeout": {
"description": "Sammuta näyttö tämän ajan jälkeen",
"label": "Näytön aikakatkaisu"
},
"twelveHourClock": {
"description": "Käytä 12 tunnin kelloa",
"label": "12 tunnin kello"
},
"wakeOnTapOrMotion": {
"description": "Herätä laite napauttamalla tai liikkeestä",
"label": "Herätä napauttamalla tai liikkeellä"
}
},
"lora": {
"title": "Mesh-verkon asetukset",
"description": "LoRa-verkon asetukset",
"bandwidth": {
"description": "Kanavan kaistanleveys MHz",
"label": "Kaistanleveys"
},
"boostedRxGain": {
"description": "RX tehostettu vahvistus",
"label": "RX tehostettu vahvistus"
},
"codingRate": {
"description": "Koodausnopeuden nimittäjä",
"label": "Koodausnopeus"
},
"frequencyOffset": {
"description": "Taajuuskorjaus kalibrointivirheiden korjaamiseksi",
"label": "Taajuuspoikkeama"
},
"frequencySlot": {
"description": "LoRa-taajuuden kanavanumero",
"label": "Taajuuspaikka"
},
"hopLimit": {
"description": "Maksimimäärä hyppyjä",
"label": "Hyppyraja"
},
"ignoreMqtt": {
"description": "Älä välitä MQTT-viestejä mesh-verkon yli",
"label": "Ohita MQTT"
},
"modemPreset": {
"description": "Käytössä olevan modeemin esiasetus",
"label": "Modeemin esiasetus"
},
"okToMqtt": {
"description": "Kun asetetaan arvoksi true, tämä asetus tarkoittaa, että käyttäjä hyväksyy paketin lähettämisen MQTT:lle. Jos asetetaan arvoksi false, etälaitteita pyydetään olemaan välittämättä paketteja MQTT:lle",
"label": "MQTT päällä"
},
"overrideDutyCycle": {
"description": "Ohita käyttöaste (Duty Cycle)",
"label": "Ohita käyttöaste (Duty Cycle)"
},
"overrideFrequency": {
"description": "Käytä mukautettua taajuutta",
"label": "Mukautettu taajuus"
},
"region": {
"description": "Asettaa alueen laitteelle",
"label": "Alue"
},
"spreadingFactor": {
"description": "Ilmaisee symbolia kohden lähetettävien taajuuksien määrän",
"label": "Levennyskerroin"
},
"transmitEnabled": {
"description": "LoRa-radion lähetyksen (TX) käyttöönotto tai poiskytkentä",
"label": "Lähetys käytössä"
},
"transmitPower": {
"description": "Suurin lähetysteho",
"label": "Lähetysteho"
},
"usePreset": {
"description": "Käytä ennalta määriteltyä modeemin esiasetusta",
"label": "Käytä esiasetusta"
},
"meshSettings": {
"description": "LoRa-verkon asetukset",
"label": "Mesh-verkon asetukset"
},
"waveformSettings": {
"description": "LoRa-aaltomuodon asetukset",
"label": "Signaalimuodon asetukset"
},
"radioSettings": {
"label": "Radioasetukset",
"description": "LoRa-laitteen asetukset"
}
},
"network": {
"title": "WiFi-asetukset",
"description": "WiFi-radion asetukset",
"note": "Huomautus: Jotkin laitteet (ESP32) eivät voi käyttää sekä Bluetoothia että WiFiä samanaikaisesti.",
"addressMode": {
"description": "Osoitteen määrityksen valinta",
"label": "Osoitetila"
},
"dns": {
"description": "DNS-palvelin",
"label": "DNS"
},
"ethernetEnabled": {
"description": "Ota käyttöön tai poista käytöstä ethernet-portti",
"label": "Käytössä"
},
"gateway": {
"description": "Oletusyhdyskäytävä",
"label": "Yhdyskäytävä"
},
"ip": {
"description": "IP-osoite",
"label": "IP"
},
"psk": {
"description": "Verkon salasana",
"label": "PSK"
},
"ssid": {
"description": "Verkon nimi",
"label": "SSID"
},
"subnet": {
"description": "Aliverkon peite",
"label": "Aliverkko"
},
"wifiEnabled": {
"description": "Ota WiFi käyttöön tai poista se käytöstä",
"label": "Käytössä"
},
"meshViaUdp": {
"label": "Mesh UDP:n kautta"
},
"ntpServer": {
"label": "NTP-palvelin"
},
"rsyslogServer": {
"label": "Rsyslog-palvelin"
},
"ethernetConfigSettings": {
"description": "Ethernet-portin asetukset",
"label": "Ethernet-asetukset"
},
"ipConfigSettings": {
"description": "IP-osoitteen asetukset",
"label": "IP-osoitteen asetukset"
},
"ntpConfigSettings": {
"description": "NTP-asetukset",
"label": "NTP-asetukset"
},
"rsyslogConfigSettings": {
"description": "Rsyslog määritykset",
"label": "Rsyslog määritykset"
},
"udpConfigSettings": {
"description": "UDP-yhdeyden asetukset",
"label": "UDP-asetukset"
}
},
"position": {
"title": "Sijainnin asetukset",
"description": "Sijaintimoduulin asetukset",
"broadcastInterval": {
"description": "Kuinka usein sijainti lähetetään mesh-verkon yli",
"label": "Lähetyksen aikaväli"
},
"enablePin": {
"description": "GPS-moduulin käyttöönottopinnin korvaus",
"label": "Ota pinni käytöön"
},
"fixedPosition": {
"description": "Älä raportoi GPS-sijaintia, vaan käytä manuaalisesti määritettyä sijaintia",
"label": "Kiinteä sijainti"
},
"gpsMode": {
"description": "Määritä, onko laitteen GPS käytössä, pois päältä vai puuttuuko se kokonaan",
"label": "GSP-tila"
},
"gpsUpdateInterval": {
"description": "Kuinka usein GPS-paikannus suoritetaan",
"label": "GPS-päivitysväli"
},
"positionFlags": {
"description": "Valinnaiset kentät, jotka voidaan sisällyttää sijaintiviesteihin. Mitä enemmän kenttiä valitaan, sitä suurempi viesti on, mikä johtaa pidempään lähetysaikaan ja suurempaan pakettihäviöriskiin.",
"label": "Sijaintimerkinnät"
},
"receivePin": {
"description": "GPS-moduulin käyttöönottopinnin korvaus",
"label": "Vastaanoton pinni"
},
"smartPositionEnabled": {
"description": "Lähetä sijainti vain, kun sijainnissa on tapahtunut merkittävä muutos",
"label": "Ota älykäs sijainti käyttöön"
},
"smartPositionMinDistance": {
"description": "Vähimmäisetäisyys (metreinä), joka on kuljettava ennen sijaintipäivityksen lähettämistä",
"label": "Älykkään sijainnin minimietäisyys"
},
"smartPositionMinInterval": {
"description": "Lyhin aikaväli (sekunteina), joka on kuluttava ennen sijaintipäivityksen lähettämistä",
"label": "Älykkään sijainnin vähimmäisetäisyys"
},
"transmitPin": {
"description": "GPS-moduulin käyttöönottopinnin korvaus",
"label": "Lähetyksen pinni"
},
"intervalsSettings": {
"description": "Kuinka usein sijaintipäivitykset lähetetään",
"label": "Aikaväli"
},
"flags": {
"placeholder": "Valitse sijaintiasetukset...",
"altitude": "Korkeus",
"altitudeGeoidalSeparation": "Korkeuden geoidinen erotus",
"altitudeMsl": "Korkeus on mitattu merenpinnan tasosta",
"dop": "Tarkkuuden heikkenemä (DOP), oletuksena käytetään PDOP-arvoa",
"hdopVdop": "Jos DOP on asetettu, käytä HDOP- ja VDOP-arvoja PDOP:n sijaan",
"numSatellites": "Satelliittien määrä",
"sequenceNumber": "Sekvenssinumero",
"timestamp": "Aikaleima",
"unset": "Ei yhdistetty",
"vehicleHeading": "Ajoneuvon suunta",
"vehicleSpeed": "Ajoneuvon nopeus"
}
},
"power": {
"adcMultiplierOverride": {
"description": "Käytetään akun jännitteen lukeman säätämiseen",
"label": "Korvaava AD-muuntimen kerroin"
},
"ina219Address": {
"description": "Akkunäytön INA219 osoite",
"label": "INA219 Osoite"
},
"lightSleepDuration": {
"description": "Kuinka kauan laite on kevyessä lepotilassa",
"label": "Kevyen lepotilan kesto"
},
"minimumWakeTime": {
"description": "Vähimmäisaika, jonka laite pysyy hereillä paketin vastaanoton jälkeen",
"label": "Minimi heräämisaika"
},
"noConnectionBluetoothDisabled": {
"description": "Jos laite ei saa Bluetooth-yhteyttä, BLE-radio poistetaan käytöstä tämän ajan kuluttua",
"label": "Ei yhteyttä. Bluetooth on pois käytöstä"
},
"powerSavingEnabled": {
"description": "Valitse, jos laite saa virtaa matalavirtalähteestä (esim. aurinkopaneeli), jolloin virrankulutusta minimoidaan mahdollisimman paljon.",
"label": "Ota virransäästötila käyttöön"
},
"shutdownOnBatteryDelay": {
"description": "Sammuta laite automaattisesti tämän ajan kuluttua akkukäytöllä, 0 tarkoittaa toistaiseksi päällä",
"label": "Viive laitteen sammuttamisessa akkukäytöllä"
},
"superDeepSleepDuration": {
"description": "Kuinka pitkään laite on supersyvässä lepotilassa",
"label": "Supersyvän lepotilan kesto"
},
"powerConfigSettings": {
"description": "Virtamoduulin asetukset",
"label": "Virran asetukset"
},
"sleepSettings": {
"description": "Virtamoduulin lepotila-asetukset",
"label": "Lepotilan asetukset"
}
},
"security": {
"description": "Turvallisuuskokoonpanon asetukset",
"title": "Turvallisuusasetukset",
"button_backupKey": "Varmuuskopioi avain",
"adminChannelEnabled": {
"description": "Salli saapuva laitteen ohjaus suojaamattoman vanhan admin-kanavan kautta",
"label": "Salli vanha admin ylläpitäjä"
},
"enableDebugLogApi": {
"description": "Lähetä reaaliaikainen debug-loki sarjaportin kautta, katso ja vie laitteen lokitiedostot, joista sijaintitiedot on poistettu, Bluetoothin kautta",
"label": "Ota käyttöön virheenkorjauslokin API-rajapinta"
},
"managed": {
"description": "Jos tämä on käytössä, laitteen asetuksia voi muuttaa vain etäadmin-laitteen hallintaviestien kautta. Älä ota tätä käyttöön, ellei vähintään yhtä sopivaa etäadmin-laitetta ole määritetty ja julkinen avain ei ole tallennettu johonkin yllä olevista kentistä.",
"label": "Hallinnoitu"
},
"privateKey": {
"description": "Käytetään jaetun avaimen luomiseen etälaitteen kanssa",
"label": "Yksityinen avain"
},
"publicKey": {
"description": "Lähetetään muille mesh-verkon laitteille, jotta ne voivat laskea jaetun salaisen avaimen",
"label": "Julkinen avain"
},
"primaryAdminKey": {
"description": "Ensisijainen julkinen avain, jolla on oikeus lähettää hallintaviestejä tälle laitteelle",
"label": "Ensisijainen järjestelmänvalvojan avain"
},
"secondaryAdminKey": {
"description": "Toissijainen julkinen avain, jolla on oikeus lähettää hallintaviestejä tälle laitteelle",
"label": "Toissijainen järjestelmänvalvojan avain"
},
"serialOutputEnabled": {
"description": "Sarjakonsoli Stream API:n yli",
"label": "Sarjaulostulo Käytössä"
},
"tertiaryAdminKey": {
"description": "Kolmas julkinen avain, jolla on oikeus lähettää hallintaviestejä tälle laitteelle",
"label": "Kolmas järjestelmänvalvojan hallinta-avain"
},
"adminSettings": {
"description": "Järjestelmänvalvojan asetukset",
"label": "Ylläpitäjän asetukset"
},
"loggingSettings": {
"description": "Kirjautumisen asetukset",
"label": "Kirjautumisen asetukset"
}
}
}
@@ -0,0 +1,171 @@
{
"deleteMessages": {
"description": "Tämä toiminto poistaa kaiken viestihistorian. Toimintoa ei voi perua. Haluatko varmasti jatkaa?",
"title": "Tyhjennä kaikki viestit"
},
"deviceName": {
"description": "Laite käynnistyy uudelleen, kun asetus on tallennettu.",
"longName": "Pitkä nimi",
"shortName": "Lyhytnimi",
"title": "Vaihda laitteen nimi"
},
"import": {
"description": "Nykyinen LoRa-asetus ylikirjoitetaan.",
"error": {
"invalidUrl": "Virheellinen Meshtastic verkko-osoite"
},
"channelPrefix": "Kanava: ",
"channelSetUrl": "Kanavan asetus / QR-koodin URL-osoite",
"channels": "Kanavat:",
"usePreset": "Käytä esiasetusta?",
"title": "Tuo kanava-asetukset"
},
"locationResponse": {
"altitude": "Korkeus: ",
"coordinates": "Koordinaatit: ",
"title": "Sijainti: {{identifier}}"
},
"pkiRegenerateDialog": {
"title": "Luodaanko ennalta jaettu avain uudelleen?",
"description": "Haluatko varmasti luoda ennalta jaetun avaimen uudelleen?",
"regenerate": "Luo uudelleen"
},
"newDeviceDialog": {
"title": "Yhdistä uuteen laitteeseen",
"https": "https",
"http": "http",
"tabHttp": "HTTP",
"tabBluetooth": "Bluetooth",
"tabSerial": "Sarjaliitäntä",
"useHttps": "Käytä HTTPS",
"connecting": "Yhdistetään...",
"connect": "Yhdistä",
"connectionFailedAlert": {
"title": "Yhteys epäonnistui",
"descriptionPrefix": "Laitteeseen ei saatu yhteyttä. ",
"httpsHint": "Jos käytät HTTPS:ää, sinun on ehkä ensin hyväksyttävä itse allekirjoitettu varmenne. ",
"openLinkPrefix": "Avaa ",
"openLinkSuffix": " uuteen välilehteen",
"acceptTlsWarningSuffix": ", hyväksy mahdolliset TLS-varoitukset, jos niitä ilmenee ja yritä sitten uudelleen.",
"learnMoreLink": "Lue lisää"
},
"httpConnection": {
"label": "IP-osoite / isäntänimi",
"placeholder": "000.000.000 / meshtastinen.paikallinen"
},
"serialConnection": {
"noDevicesPaired": "Yhtään laitetta ei ole vielä yhdistetty.",
"newDeviceButton": "Uusi laite",
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
},
"bluetoothConnection": {
"noDevicesPaired": "Yhtään laitetta ei ole vielä yhdistetty.",
"newDeviceButton": "Uusi laite"
},
"validation": {
"requiresWebBluetooth": "Tämä yhteystyyppi vaatii <0>Web-sarjaportti bluetooth</0> -tuen. Käytä tuettua selainta, kuten Chromea tai Edgeä.",
"requiresWebSerial": "Tämä yhteystyyppi vaatii <0>Web-sarjaportti</0> -tuen. Käytä tuettua selainta, kuten Chromea tai Edgeä.",
"requiresSecureContext": "Tämä sovellus vaatii <0>suojatun yhteyden</0>. Yhdistä käyttämällä HTTPS:ää tai localhostia.",
"additionallyRequiresSecureContext": "Lisäksi se vaatii <0>suojatun yhteyden</0>. Yhdistä käyttämällä HTTPS:ää tai localhostia."
}
},
"nodeDetails": {
"message": "Viesti",
"requestPosition": "Pyydä sijaintia",
"traceRoute": "Reitinselvitys",
"airTxUtilization": "Ilmatien TX käyttöaste",
"allRawMetrics": "Kaikki raakatiedot:",
"batteryLevel": "Akun varaus",
"channelUtilization": "Kanavan käyttöaste",
"details": "Tiedot:",
"deviceMetrics": "Laitteen mittausloki:",
"hardware": "Laitteisto: ",
"lastHeard": "Viimeksi kuultu: ",
"nodeHexPrefix": "Laitteen Hex: !",
"nodeNumber": "Laitteen numero: ",
"position": "Sijainti:",
"role": "Rooli: ",
"uptime": "Käyttöaika: ",
"voltage": "Jännite",
"title": "Tiedot laitteelle {{identifier}}",
"ignoreNode": "Älä huomioi laitetta",
"removeNode": "Poista laite",
"unignoreNode": "Poista laitteen ohitus käytöstä"
},
"pkiBackup": {
"loseKeysWarning": "Jos menetät avaimesi, sinun täytyy palauttaa laite tehdasasetuksiin.",
"secureBackup": "On tärkeää varmuuskopioida julkiset ja yksityiset avaimet ja säilyttää niiden varmuuskopioita turvallisesti!",
"footer": "=== AVAIMIEN LOPPU ===",
"header": "=== MESHTASTIC AVAIMET {{longName}} ({{shortName}}) LAITTEELLE ===",
"privateKey": "Yksityinen avain:",
"publicKey": "Julkinen avain:",
"fileName": "meshtastic_avaimet_{{longName}}_{{shortName}}.txt",
"title": "Varmuuskopioi avaimet"
},
"pkiBackupReminder": {
"description": "Suosittelemme avaintietojen säännöllistä varmuuskopiointia. Haluatko varmuuskopioida nyt?",
"title": "Varmuuskopion Muistutus",
"remindLaterPrefix": "Muistuta minua",
"remindNever": "Älä muistuta minua koskaan",
"backupNow": "Varmuuskopioi nyt"
},
"pkiRegenerate": {
"description": "Haluatko varmasti luoda avainparin uudelleen?",
"title": "Luo avainpari uudelleen"
},
"qr": {
"addChannels": "Lisää kanavia",
"replaceChannels": "Korvaa kanavia",
"description": "Nykyinen LoRa-kokoonpano tullaan myös jakamaan.",
"sharableUrl": "Jaettava URL",
"title": "Generoi QR-koodi"
},
"rebootOta": {
"title": "Ajasta uudelleenkäynnistys",
"description": "Käynnistä yhdistetty laite uudelleen viiveen jälkeen OTA-tilaan (langaton päivitys).",
"enterDelay": "Anna viive (sekuntia)",
"scheduled": "Uudelleenkäynnistys on ajastettu"
},
"reboot": {
"title": "Ajasta uudelleenkäynnistys",
"description": "Käynnistä yhdistetty laite x minuutin jälkeen."
},
"refreshKeys": {
"description": {
"acceptNewKeys": "Tämä poistaa laitteen laitteesta ja pyytää uusia avaimia.",
"keyMismatchReasonSuffix": ". Tämä johtuu siitä, että etälaitteen nykyinen julkinen avain ei vastaa aiemmin tallennettua avainta tälle laitteelle.",
"unableToSendDmPrefix": "Laitteesi ei pysty lähettämään suoraa viestiä laitteelle: "
},
"acceptNewKeys": "Hyväksy uudet avaimet",
"title": "Avaimet eivät täsmää - {{identifier}}"
},
"removeNode": {
"description": "Haluatko varmasti poistaa tämän laitteen?",
"title": "Poista laite?"
},
"shutdown": {
"title": "Ajasta sammutus",
"description": "Sammuta yhdistetty laite x minuutin päästä."
},
"traceRoute": {
"routeToDestination": "Reitin määränpää:",
"routeBack": "Reitti takaisin:"
},
"tracerouteResponse": {
"title": "Reitinselvitys: {{identifier}}"
},
"unsafeRoles": {
"confirmUnderstanding": "Kyllä, tiedän mitä teen",
"conjunction": " ja blogikirjoitukset ",
"postamble": " ja ymmärrän roolin muuttamisen vaikutukset.",
"preamble": "Olen lukenut ",
"choosingRightDeviceRole": "Valitse laitteelle oikea rooli",
"deviceRoleDocumentation": "Roolien dokumentaatio laitteelle",
"title": "Oletko varma?"
},
"managedMode": {
"confirmUnderstanding": "Kyllä, tiedän mitä teen",
"title": "Oletko varma?",
"description": "Hallintatilan käyttöönotto estää asiakassovelluksia (mukaan lukien verkkosovellus) kirjoittamasta asetuksia radioon. Kun tila on otettu käyttöön, radion asetuksia voidaan muuttaa <bold>vain</bold> etähallintaviestien kautta. Tämä asetus ei ole pakollinen etähallittavien laitteiden hallintaan."
}
}
@@ -0,0 +1,39 @@
{
"page": {
"title": "Viestit: {{chatName}}",
"placeholder": "Kirjoita viesti"
},
"emptyState": {
"title": "Valitse keskustelu",
"text": "Ei vielä viestejä."
},
"selectChatPrompt": {
"text": "Valitse kanava tai laite aloittaaksesi viestinnän."
},
"sendMessage": {
"placeholder": "Kirjoita viesti tähän...",
"sendButton": "Lähetä"
},
"actionsMenu": {
"addReactionLabel": "Lisää reaktio",
"replyLabel": "Vastaa"
},
"deliveryStatus": {
"delivered": {
"label": "Viesti toimitettu",
"displayText": "Viesti toimitettu"
},
"failed": {
"label": "Viestin toimitus epäonnistui",
"displayText": "Toimitus epäonnistui"
},
"unknown": {
"label": "Viestin tila tuntematon",
"displayText": "Tuntematon tila"
},
"waiting": {
"label": "Lähetetään viestiä",
"displayText": "Odottaa toimitusta"
}
}
}
@@ -0,0 +1,448 @@
{
"page": {
"tabAmbientLighting": "Ympäristövalaistus",
"tabAudio": "Ääni",
"tabCannedMessage": "Ennalta asetettu",
"tabDetectionSensor": "Havaitsemisanturi",
"tabExternalNotification": "Ext-ilmoitus",
"tabMqtt": "MQTT",
"tabNeighborInfo": "Naapuritieto",
"tabPaxcounter": "PAX-laskuri",
"tabRangeTest": "Kuuluvuustesti",
"tabSerial": "Sarjaliitäntä",
"tabStoreAndForward": "S&V",
"tabTelemetry": "Telemetria"
},
"ambientLighting": {
"title": "Ympäristövalaistuksen asetukset",
"description": "Ympäristövalaistuksen moduulin asetukset",
"ledState": {
"label": "Ledin tila",
"description": "Aseta ledi päälle tai pois päältä"
},
"current": {
"label": "Virta",
"description": "Asettaa nykyisen ledin ulostulon. Oletus on 10"
},
"red": {
"label": "Punainen",
"description": "Asettaa punaisen ledin tason. Arvot ovat 0-255"
},
"green": {
"label": "Vihreä",
"description": "Asettaa vihreän ledin tason. Arvot ovat 0-255"
},
"blue": {
"label": "Sininen",
"description": "Asettaa sinisen ledin tason. Arvot ovat 0-255"
}
},
"audio": {
"title": "Ääniasetukset",
"description": "Äänimoduulin asetukset",
"codec2Enabled": {
"label": "Codec 2 käytössä",
"description": "Ota Codec 2 äänenkoodaus käyttöön"
},
"pttPin": {
"label": "PTT pinni",
"description": "PTT:lle käytettävä GPIO-pinni"
},
"bitrate": {
"label": "Tiedonsiirtonopeus",
"description": "Tiedonsiirtonopeus äänenkoodaukselle"
},
"i2sWs": {
"label": "i2S WS",
"description": "GPIO-pinni jota käytetään i2S WS:ssä"
},
"i2sSd": {
"label": "i2S SD",
"description": "GPIO-pinni jota käytetään i2S SD:ssä"
},
"i2sDin": {
"label": "i2S DIN",
"description": "GPIO-pinni jota käytetään i2S DIN:ssä"
},
"i2sSck": {
"label": "i2S SD",
"description": "GPIO-pinni jota käytetään i2S SCK:ssa"
}
},
"cannedMessage": {
"title": "Välitettyjen viestien asetukset",
"description": "Asetukset välitettyjen viestien moduulissa",
"moduleEnabled": {
"label": "Moduuli Käytössä",
"description": "Ota käyttöön välitetyt viestit"
},
"rotary1Enabled": {
"label": "Kiertovalitsin #1 käytössä",
"description": "Ota kiertovalitsimen kooderi käyttöön"
},
"inputbrokerPinA": {
"label": "Kooderin pinni A",
"description": "GPIO-pinni (1–39) kooderin portille A"
},
"inputbrokerPinB": {
"label": "Kooderin pinni B",
"description": "GPIO-pinni (1–39) kooderin portille B"
},
"inputbrokerPinPress": {
"label": "Kooderin pinni painallukselle",
"description": "GPIO-pinni (1–39) kooderin painallukselle"
},
"inputbrokerEventCw": {
"label": "Myötäpäiväinen liike",
"description": "Valitse syöttötapahtuma."
},
"inputbrokerEventCcw": {
"label": "Myötäpäiväisen liikkeen laskuri",
"description": "Valitse syöttötapahtuma."
},
"inputbrokerEventPress": {
"label": "Painamisen tapahtuma",
"description": "Valitse syöttötapahtuma"
},
"updown1Enabled": {
"label": "Ylös alas käytössä",
"description": "Ota käyttöön ylös / alas-suuntaa tunnistava kooderi"
},
"allowInputSource": {
"label": "Salli syöttölaitteen lähde",
"description": "Valitse '_any', 'rotEnc1', 'upDownEnc1', 'cardkb'"
},
"sendBell": {
"label": "Lähetä äänimerkki",
"description": "Lähettää äänimerkkimerkin jokaisen viestin mukana"
}
},
"detectionSensor": {
"title": "Tunnistinsensorin asetukset",
"description": "Tunnistinsensori-moduulin asetukset",
"enabled": {
"label": "Käytössä",
"description": "Ota käyttöön tai poista käytöstä tunnistinsensorin moduuli"
},
"minimumBroadcastSecs": {
"label": "Minimilähetys (sekuntia)",
"description": "Aikaväli sekunteina kuinka usein viestejä voi lähettää mesh-verkkoon tilamuutoksen havaitsemisen jälkeen"
},
"stateBroadcastSecs": {
"label": "Tilatiedon lähetys (sekuntia)",
"description": "Kuinka usein sekunteina lähetetään viesti mesh-verkkoon nykytilasta, vaikka tilassa ei olisi muutoksia"
},
"sendBell": {
"label": "Lähetä äänimerkki",
"description": "Lähetä ASCII-äänimerkki hälytyssanoman mukana"
},
"name": {
"label": "Käyttäjäystävälinen nimi",
"description": "Käytetään muotoilemaan mesh-verkkoon lähetettävä viesti, enintään 20 merkkiä"
},
"monitorPin": {
"label": "Valvonta pinni",
"description": "GPIO-pinni valvonnan tilan muutoksien seurantaan"
},
"detectionTriggerType": {
"label": "Tunnistuksen havaintotyyppi",
"description": "Käytettävän tunnistustapahtuman tyyppi"
},
"usePullup": {
"label": "Käytä vetokytkintä (pullup)",
"description": "Käytetäänkö GPIO-pinnin INPUT_PULLUP-tilaa"
}
},
"externalNotification": {
"title": "Ulkoisten ilmoituksien asetukset",
"description": "Määritä ulkoisten ilmoitusten moduulin asetukset",
"enabled": {
"label": "Moduuli käytössä",
"description": "Ota ulkoiset ilmoitukset käyttöön"
},
"outputMs": {
"label": "Ulostulo MS",
"description": "Ulostulo MS"
},
"output": {
"label": "Ulostulo",
"description": "Ulostulo"
},
"outputVibra": {
"label": "Värinän ulostulo",
"description": "Värinän ulostulo"
},
"outputBuzzer": {
"label": "Summerin ulostulo",
"description": "Summerin ulostulo"
},
"active": {
"label": "Käytössä",
"description": "Käytössä"
},
"alertMessage": {
"label": "Hälytysviesti",
"description": "Hälytysviesti"
},
"alertMessageVibra": {
"label": "Hälytysviestin värinä",
"description": "Hälytysviestin värinä"
},
"alertMessageBuzzer": {
"label": "Hälytysviestin summeri",
"description": "Hälytysviestin summeri"
},
"alertBell": {
"label": "Hälytysääni",
"description": "Pitäisikö hälytyksen aktivoitua, kun vastaanotetaan äänimerkki?"
},
"alertBellVibra": {
"label": "Hälytysäänen värinä",
"description": "Hälytysäänen värinä"
},
"alertBellBuzzer": {
"label": "Hälytysäänen summeri",
"description": "Hälytysäänen summeri"
},
"usePwm": {
"label": "Käytä PWM",
"description": "Käytä PWM"
},
"nagTimeout": {
"label": "Toistokehotuksen aikakatkaisu",
"description": "Toistokehotuksen aikakatkaisu"
},
"useI2sAsBuzzer": {
"label": "Use I²S pinniä summerille",
"description": "Määritä I²S-pinni summerin ulostuloon"
}
},
"mqtt": {
"title": "MQTT-asetukset",
"description": "MQTT-moduulin asetukset",
"enabled": {
"label": "Käytössä",
"description": "Ota MQTT käyttöön tai poista se käytöstä"
},
"address": {
"label": "MQTT-palvelimen osoite",
"description": "MQTT-palvelimen osoite, jota käytetään oletus- tai mukautetuissa palvelimissa"
},
"username": {
"label": "MQTT käyttäjänimi",
"description": "MQTT käyttäjänimi, jota käytetään oletus- tai mukautetuissa palvelimissa"
},
"password": {
"label": "MQTT salasana",
"description": "MQTT salasana, jota käytetään oletus- tai mukautetuissa palvelimissa"
},
"encryptionEnabled": {
"label": "Salaus käytössä",
"description": "Ota MQTT-salaus käyttöön tai pois käytöstä. Huom: Jos tämä asetus ei ole käytössä, kaikki viestit lähetetään MQTT-välittäjälle salaamattomina, vaikka lähetyskanavillasi olisi salausavaimet asetettuna. Tämä koskee myös sijaintitietoja."
},
"jsonEnabled": {
"label": "JSON käytössä",
"description": "Lähetetäänkö / otetaanko vastaan JSON-paketteja MQTT:llä"
},
"tlsEnabled": {
"label": "TLS käytössä",
"description": "Ota TLS käyttöön tai poista se käytöstä"
},
"root": {
"label": "Palvelimen osoite (root topic)",
"description": "MQTT-palvelimen osoite, jota käytetään oletus- tai mukautetuissa palvelimissa"
},
"proxyToClientEnabled": {
"label": "MQTT-välityspalvelin käytössä",
"description": "Käyttää verkkoyhteyttä välittämään MQTT-viestejä asiakkaalle."
},
"mapReportingEnabled": {
"label": "Karttaraportointi käytössä",
"description": "Laitteesi lähettää säännöllisin väliajoin salaamattoman karttaraporttipaketin määritettyyn MQTT-palvelimeen. Paketti sisältää tunnisteen, lyhyen ja pitkän nimen, likimääräisen sijainnin, laitteistomallin, roolin, laiteohjelmistoversion, LoRa-alueen, modeemin esiasetukset sekä ensisijaisen kanavan nimen."
},
"mapReportSettings": {
"publishIntervalSecs": {
"label": "Karttaraportoinnin aikaväli (s)",
"description": "Aikaväli sekunneissa karttaraporttien julkaisemiseksi"
},
"positionPrecision": {
"label": "Arvioitu sijainti",
"description": "Jaetun sijainnin tarkkuus on tämän etäisyyden rajoissa",
"options": {
"metric_km23": "23 kilometrin säteellä",
"metric_km12": "12 kilometrin säteellä",
"metric_km5_8": "5,8 kilometrin säteellä",
"metric_km2_9": "2,9 kilometrin säteellä",
"metric_km1_5": "1,5 kilometrin säteellä",
"metric_m700": "700 metrin säteellä",
"metric_m350": "350 metrin säteellä",
"metric_m200": "200 metrin säteellä",
"metric_m90": "90 metrin säteellä",
"metric_m50": "50 metrin säteellä",
"imperial_mi15": "15 mailin säteellä",
"imperial_mi7_3": "7,3 mailin säteellä",
"imperial_mi3_6": "3,6 mailin säteellä",
"imperial_mi1_8": "1,8 mailin säteellä",
"imperial_mi0_9": "0,9 mailin säteellä",
"imperial_mi0_5": "0,5 mailin säteellä",
"imperial_mi0_2": "0,2 mailin säteellä",
"imperial_ft600": "600 jalan säteellä",
"imperial_ft300": "300 jalan säteellä",
"imperial_ft150": "150 jalan säteellä"
}
}
}
},
"neighborInfo": {
"title": "Naapuritiedon asetukset",
"description": "Naapuritietojen moduulin asetukset",
"enabled": {
"label": "Käytössä",
"description": "Ota käyttöön tai poista käytöstä naapuruustietomoduuli"
},
"updateInterval": {
"label": "Päivitysväli",
"description": "Aikaväli sekunneissa siitä, kuinka usein mesh-verkossa lähetetään naapuritietoja verkkoon"
}
},
"paxcounter": {
"title": "Pax-laskurin asetukset",
"description": "Pax-laskurin moduulin asetukset",
"enabled": {
"label": "Moduuli käytössä",
"description": "Ota pax-laskuri käyttöön"
},
"paxcounterUpdateInterval": {
"label": "Päivityksen aikaväli (sekuntia)",
"description": "Kuinka kauan odotetaan pax-laskurin pakettien lähettämisen välillä"
},
"wifiThreshold": {
"label": "WiFi-RSSI kynnysarvo",
"description": "Millä WiFi RSSI tasolla laskurin täytyisi kasvaa. Oletus on -80."
},
"bleThreshold": {
"label": "WiFi-RSSI kynnysarvo",
"description": "Millä BLE RSSI-arvolla laskuri kasvaa. Oletus: -80."
}
},
"rangeTest": {
"title": "Kuuluvuustestin asetukset",
"description": "Kuuluvuustesti moduulin asetukset",
"enabled": {
"label": "Moduuli käytössä",
"description": "Ota kuuluvuustesti käytöön"
},
"sender": {
"label": "Viestin aikaväli",
"description": "Kuinka kauan odotetaan testipakettien lähettämisen välillä"
},
"save": {
"label": "Tallenna CSV tallennustilaan",
"description": "Vain ESP32"
}
},
"serial": {
"title": "Sarjaliitännän asetukset",
"description": "Sarjaliitäntä-moduulin asetukset",
"enabled": {
"label": "Sarjaliitäntä käytössä",
"description": "Ota sarjaliitäntä käyttöön"
},
"echo": {
"label": "Toista",
"description": "Kaikki lähettämäsi paketit toistetaan takaisin laitteellesi"
},
"rxd": {
"label": "Vastaanota PIN-koodi",
"description": "Määritä GPIO-pinni käyttämään aiemmin asetettua RXD-pinniä."
},
"txd": {
"label": "Lähetä PIN-koodi",
"description": "Määritä GPIO-pinni käyttämään aiemmin asetettua TXD-pinniä."
},
"baud": {
"label": "Baud-siirtonopeus",
"description": "Sarjaliitännän baud-siirtonopeus"
},
"timeout": {
"label": "Aikakatkaisu",
"description": "Kuinka monta sekuntia odotetaan, ennen kuin paketti merkitään valmiiksi"
},
"mode": {
"label": "Tila",
"description": "Valitse tila"
},
"overrideConsoleSerialPort": {
"label": "Ohita konsolin sarjaliitännän portti",
"description": "Jos sinulla on sarjaportti kytkettynä konsoliin, tämä ohittaa sen."
}
},
"storeForward": {
"title": "Varastoi & välitä asetukset",
"description": "Varastoi & välitä moduulin asetukset",
"enabled": {
"label": "Moduuli käytössä",
"description": "Ota varastoi & välitä käyttöön"
},
"heartbeat": {
"label": "Heartbeat käytössä",
"description": "Ota varastoi & välitä heartbeat käyttöön"
},
"records": {
"label": "Kirjausten määrä",
"description": "Tallennettavien tietueiden määrä"
},
"historyReturnMax": {
"label": "Historian maksimimäärä",
"description": "Enimmäismäärä tietueita palautettaviksi"
},
"historyReturnWindow": {
"label": "Historian aikamäärä",
"description": "Enimmäismäärä tietueita palautettaviksi"
}
},
"telemetry": {
"title": "Telemetrian asetukset",
"description": "Telemetria-moduulin asetukset",
"deviceUpdateInterval": {
"label": "Laitteen mittausloki",
"description": "Laitteen mittaustietojen päivitysväli (sekuntia)"
},
"environmentUpdateInterval": {
"label": "Ympäristötietojen päivitysväli (sekuntia)",
"description": ""
},
"environmentMeasurementEnabled": {
"label": "Moduuli käytössä",
"description": "Ota käyttöön ympäristön telemetria"
},
"environmentScreenEnabled": {
"label": "Näytetään näytöllä",
"description": "Näytä moduulin telemetriatiedot OLED-näytöllä"
},
"environmentDisplayFahrenheit": {
"label": "Näytä fahrenheitissa",
"description": "Näytä lämpötila fahrenheitissa"
},
"airQualityEnabled": {
"label": "Ilmanlaatu käytössä",
"description": "Ota ilmanlaadun telemetria käyttöön"
},
"airQualityInterval": {
"label": "Ilmanlaadun päivitysväli",
"description": "Kuinka usein ilmanlaadun tiedot lähetetään mesh-verkon kautta"
},
"powerMeasurementEnabled": {
"label": "Tehomittaus käytössä",
"description": "Ota tehomittauksen telemetria käyttöön"
},
"powerUpdateInterval": {
"label": "Tehomittauksen päivitysväli",
"description": "Kuinka usein tehomittauksen tiedot lähetetään mesh-verkon kautta"
},
"powerScreenEnabled": {
"label": "Tehomittauksen näyttö käytössä",
"description": "Ota tehomittauksen telemetrian näyttö käyttöön"
}
}
}
@@ -0,0 +1,63 @@
{
"nodeDetail": {
"publicKeyEnabled": {
"label": "Julkinen avain käytössä"
},
"noPublicKey": {
"label": "Ei julkinen avain"
},
"directMessage": {
"label": "Suora Viesti {{shortName}}"
},
"favorite": {
"label": "Suosikki",
"tooltip": "Lisää tai poista tämä laite suosikeistasi"
},
"notFavorite": {
"label": "Ei suosikki"
},
"error": {
"label": "Virhe",
"text": "Tapahtui virhe haettaessa laitteen tietoja. Yritä uudelleen myöhemmin."
},
"status": {
"heard": "Kuultu",
"mqtt": "MQTT"
},
"elevation": {
"label": "Korkeus"
},
"channelUtil": {
"label": "Kanavan käyttö"
},
"airtimeUtil": {
"label": "Lähetysajan käyttö"
}
},
"nodesTable": {
"headings": {
"longName": "Pitkä nimi",
"connection": "Yhteys",
"lastHeard": "Viimeksi kuultu",
"encryption": "Salaus",
"model": "Malli",
"macAddress": "MAC-osoite"
},
"connectionStatus": {
"direct": "Suora",
"away": "poissa",
"unknown": "-",
"viaMqtt": ", MQTT välityksellä"
},
"lastHeardStatus": {
"never": "Ei koskaan"
}
},
"actions": {
"added": "Lisätty",
"removed": "Poistettu",
"ignoreNode": "Älä huomioi laitetta",
"unignoreNode": "Huomioi laite uudelleen",
"requestPosition": "Pyydä sijaintia"
}
}
@@ -0,0 +1,228 @@
{
"navigation": {
"title": "Navigointi",
"messages": "Viestit",
"map": "Kartta",
"config": "Asetukset",
"radioConfig": "Radion asetukset",
"moduleConfig": "Moduulin asetukset",
"channels": "Kanavat",
"nodes": "Laitteet"
},
"app": {
"title": "Meshtastic",
"logo": "Meshtastic Logo"
},
"sidebar": {
"collapseToggle": {
"button": {
"open": "Avaa sivupalkki",
"close": "Sulje sivupalkki"
}
},
"deviceInfo": {
"volts": "{{voltage}} volttia",
"firmware": {
"title": "Laiteohjelmisto",
"version": "v{{version}}",
"buildDate": "Koontipäivä: {{date}}"
},
"deviceName": {
"title": "Laitteen nimi",
"changeName": "Vaihda laitteen nimi",
"placeholder": "Anna laitteelle nimi"
},
"editDeviceName": "Muokkaa laitteen nimeä"
}
},
"batteryStatus": {
"charging": "{{level}} % latauksessa",
"pluggedIn": "Kytketty verkkovirtaan",
"title": "Akku"
},
"search": {
"nodes": "Etsi laitteita...",
"channels": "Etsi kanavia...",
"commandPalette": "Etsi komentoja..."
},
"toast": {
"positionRequestSent": {
"title": "Sijaintipyyntö lähetetty."
},
"requestingPosition": {
"title": "Pyydetään sijaintia, odota..."
},
"sendingTraceroute": {
"title": "Reitinselvitys lähetetty, odota..."
},
"tracerouteSent": {
"title": "Reitinselvitys lähetetty."
},
"savedChannel": {
"title": "Tallennettu Kanava: {{channelName}}"
},
"messages": {
"pkiEncryption": {
"title": "Keskustelu käyttää PKI-salausta."
},
"pskEncryption": {
"title": "Keskustelu käyttää PKI-salausta."
}
},
"configSaveError": {
"title": "Virhe asetusten tallentamisessa",
"description": "Asetusten tallennuksessa tapahtui virhe."
},
"validationError": {
"title": "Asetuksissa on virheitä",
"description": "Ole hyvä ja korjaa asetusvirheet ennen tallentamista."
},
"saveSuccess": {
"title": "Tallennetaan asetukset",
"description": "Asetuksien muutos {{case}} on tallennettu."
},
"favoriteNode": {
"title": "{{action}} {{nodeName}} {{direction}} suosikit.",
"action": {
"added": "Lisätty",
"removed": "Poistettu",
"to": "saakka",
"from": "alkaen"
}
},
"ignoreNode": {
"title": "{{action}} {{nodeName}} {{direction}} estolista",
"action": {
"added": "Lisätty",
"removed": "Poistettu",
"to": "saakka",
"from": "alkaen"
}
}
},
"notifications": {
"copied": {
"label": "Kopioitu!"
},
"copyToClipboard": {
"label": "Kopioi leikepöydälle"
},
"hidePassword": {
"label": "Piilota salasana"
},
"showPassword": {
"label": "Näytä salasana"
},
"deliveryStatus": {
"delivered": "Toimitettu",
"failed": "Toimitus epäonnistui",
"waiting": "Odottaa",
"unknown": "Tuntematon"
}
},
"general": {
"label": "Yleinen"
},
"hardware": {
"label": "Laite"
},
"metrics": {
"label": "Mittaustiedot"
},
"role": {
"label": "Rooli"
},
"filter": {
"label": "Suodatus"
},
"advanced": {
"label": "Lisäasetukset"
},
"clearInput": {
"label": "Tyhjennä kenttä"
},
"resetFilters": {
"label": "Tyhjennä suodattimet"
},
"nodeName": {
"label": "Laitteen nimi tai numero",
"placeholder": "Meshtastic 1234"
},
"airtimeUtilization": {
"label": "Ajan käyttöaste (%)"
},
"batteryLevel": {
"label": "Akun varaus (%)",
"labelText": "Akun varaus (%): {{value}}"
},
"batteryVoltage": {
"label": "Akun jännite (V)",
"title": "Jännite"
},
"channelUtilization": {
"label": "Kanavan käyttö (%)"
},
"hops": {
"direct": "Suora",
"label": "Hyppyjen määrä",
"text": "Hyppyjen määrä: {{value}}"
},
"lastHeard": {
"label": "Viimeksi kuultu",
"labelText": "Viimeksi kuultu: {{value}}",
"nowLabel": "Nyt"
},
"snr": {
"label": "SNR (db)"
},
"favorites": {
"label": "Suosikit"
},
"hide": {
"label": "Piilota"
},
"showOnly": {
"label": "Näytä pelkästään"
},
"viaMqtt": {
"label": "Yhdistetty MQTT-yhteydellä"
},
"hopsUnknown": {
"label": "Tuntematon määrä hyppyjä"
},
"showUnheard": {
"label": "Ei koskaan kuultu"
},
"language": {
"label": "Kieli",
"changeLanguage": "Vaihda kieli"
},
"theme": {
"dark": "Tumma",
"light": "Vaalea",
"system": "Automaattinen",
"changeTheme": "Vaihda väriteema"
},
"errorPage": {
"title": "Tämä on hieman noloa...",
"description1": "Pahoittelemme, mutta verkkosovelluksessa tapahtui virhe, joka aiheutti kaatumisen. <br /> \nTällaista ei pitäisi tapahtua ja me työskentelemme ahkerasti ongelman korjaamiseksi.",
"description2": "Paras tapa estää tämän tapahtuminen uudelleen sinulle tai kenellekään muulle, on ilmoittaa meille ongelmasta.",
"reportInstructions": "Lisääthän raporttiisi seuraavat tiedot:",
"reportSteps": {
"step1": "Mitä olit tekemässä virheen tapahtuessa",
"step2": "Mitä odotit tapahtuvan",
"step3": "Mitä todellisuudessa tapahtui",
"step4": "Muut mahdollisesti oleelliset tiedot"
},
"reportLink": "Voit raportoida ongelmasta <0>GitHubissa</0>",
"dashboardLink": "Palaa takaisin <0>hallintapaneeliin</0>",
"detailsSummary": "Virheen tiedot",
"errorMessageLabel": "Virheilmoitus:",
"stackTraceLabel": "Virheen jäljityslista:",
"fallbackError": "{{error}}"
},
"footer": {
"text": "Powered by <0>▲ Vercel</0> | Meshtastic® on Meshtastic LLC:n rekisteröity tavaramerkki. | <1>Oikeudelliset tiedot</1>",
"commitSha": "Ohjelmistokehitysversion SHA-tunniste: {{sha}}"
}
}
@@ -0,0 +1,69 @@
{
"page": {
"sectionLabel": "Canaux",
"channelName": "Channel: {{channelName}}",
"broadcastLabel": "Principal",
"channelIndex": "Ch {{index}}"
},
"validation": {
"pskInvalid": "Please enter a valid {{bits}} bit PSK."
},
"settings": {
"label": "Paramètres du canal",
"description": "Crypto, MQTT & misc settings"
},
"role": {
"label": "Rôle",
"description": "Device telemetry is sent over PRIMARY. Only one PRIMARY allowed",
"options": {
"primary": "PRIMARY",
"disabled": "DISABLED",
"secondary": "SECONDARY"
}
},
"psk": {
"label": "Pre-Shared Key",
"description": "Supported PSK lengths: 256-bit, 128-bit, 8-bit, Empty (0-bit)",
"generate": "Generate"
},
"name": {
"label": "Nom",
"description": "A unique name for the channel <12 bytes, leave blank for default"
},
"uplinkEnabled": {
"label": "Uplink Enabled",
"description": "Send messages from the local mesh to MQTT"
},
"downlinkEnabled": {
"label": "Downlink Enabled",
"description": "Send messages from MQTT to the local mesh"
},
"positionPrecision": {
"label": "Location",
"description": "The precision of the location to share with the channel. Can be disabled.",
"options": {
"none": "Do not share location",
"precise": "Precise Location",
"metric_km23": "Within 23 kilometers",
"metric_km12": "Within 12 kilometers",
"metric_km5_8": "Within 5.8 kilometers",
"metric_km2_9": "Within 2.9 kilometers",
"metric_km1_5": "Within 1.5 kilometers",
"metric_m700": "Within 700 meters",
"metric_m350": "Within 350 meters",
"metric_m200": "Within 200 meters",
"metric_m90": "Within 90 meters",
"metric_m50": "Within 50 meters",
"imperial_mi15": "Within 15 miles",
"imperial_mi7_3": "Within 7.3 miles",
"imperial_mi3_6": "Within 3.6 miles",
"imperial_mi1_8": "Within 1.8 miles",
"imperial_mi0_9": "Within 0.9 miles",
"imperial_mi0_5": "Within 0.5 miles",
"imperial_mi0_2": "Within 0.2 miles",
"imperial_ft600": "Within 600 feet",
"imperial_ft300": "Within 300 feet",
"imperial_ft150": "Within 150 feet"
}
}
}
@@ -0,0 +1,50 @@
{
"emptyState": "No results found.",
"page": {
"title": "Command Menu"
},
"pinGroup": {
"label": "Pin command group"
},
"unpinGroup": {
"label": "Unpin command group"
},
"goto": {
"label": "Goto",
"command": {
"messages": "Messages",
"map": "Carte",
"config": "Config",
"channels": "Canaux",
"nodes": "Noeuds"
}
},
"manage": {
"label": "Manage",
"command": {
"switchNode": "Switch Node",
"connectNewNode": "Connect New Node"
}
},
"contextual": {
"label": "Contextual",
"command": {
"qrCode": "QR Code",
"qrGenerator": "Generator",
"qrImport": "Import",
"scheduleShutdown": "Schedule Shutdown",
"scheduleReboot": "Schedule Reboot",
"rebootToOtaMode": "Reboot To OTA Mode",
"resetNodeDb": "Reset Node DB",
"factoryResetDevice": "Factory Reset Device",
"factoryResetConfig": "Factory Reset Config"
}
},
"debug": {
"label": "Debug",
"command": {
"reconfigure": "Reconfigure",
"clearAllStoredMessages": "Clear All Stored Message"
}
}
}
@@ -0,0 +1,141 @@
{
"button": {
"apply": "Appliquer",
"backupKey": "Backup Key",
"cancel": "Annuler",
"clearMessages": "Clear Messages",
"close": "Fermer",
"confirm": "Confirm",
"delete": "Effacer",
"dismiss": "Annuler",
"download": "Download",
"export": "Export",
"generate": "Generate",
"regenerate": "Regenerate",
"import": "Import",
"message": "Message",
"now": "Now",
"ok": "D'accord",
"print": "Print",
"rebootOtaNow": "Reboot to OTA Mode Now",
"remove": "Supprimer",
"requestNewKeys": "Request New Keys",
"requestPosition": "Request Position",
"reset": "Réinitialiser",
"save": "Sauvegarder",
"scanQr": "Scan QR Code",
"traceRoute": "Trace Route",
"submit": "Submit"
},
"app": {
"title": "Meshtastic",
"fullTitle": "Meshtastic Web Client"
},
"loading": "Loading...",
"unit": {
"cps": "CPS",
"dbm": "dBm",
"hertz": "Hz",
"hop": {
"one": "Hop",
"plural": "Hops"
},
"hopsAway": {
"one": "{{count}} hop away",
"plural": "{{count}} hops away",
"unknown": "Unknown hops away"
},
"megahertz": "MHz",
"raw": "raw",
"meter": {
"one": "Meter",
"plural": "Meters",
"suffix": "m"
},
"minute": {
"one": "Minute",
"plural": "Minutes"
},
"hour": {
"one": "Hour",
"plural": "Hours"
},
"millisecond": {
"one": "Millisecond",
"plural": "Milliseconds",
"suffix": "ms"
},
"second": {
"one": "Second",
"plural": "Seconds"
},
"day": {
"one": "Day",
"plural": "Days"
},
"month": {
"one": "Month",
"plural": "Months"
},
"year": {
"one": "Year",
"plural": "Years"
},
"snr": "SNR",
"volt": {
"one": "Volt",
"plural": "Volts",
"suffix": "V"
},
"record": {
"one": "Records",
"plural": "Records"
}
},
"security": {
"0bit": "Empty",
"8bit": "8 bit",
"128bit": "128 bit",
"256bit": "256 bit"
},
"unknown": {
"longName": "Inconnu",
"shortName": "UNK",
"notAvailable": "N/A",
"num": "??"
},
"nodeUnknownPrefix": "!",
"unset": "UNSET",
"fallbackName": "Meshtastic {{last4}}",
"node": "Node",
"formValidation": {
"unsavedChanges": "Unsaved changes",
"tooBig": {
"string": "Too long, expected less than or equal to {{maximum}} characters.",
"number": "Too big, expected a number smaller than or equal to {{maximum}}.",
"bytes": "Too big, expected less than or equal to {{params.maximum}} bytes."
},
"tooSmall": {
"string": "Too short, expected more than or equal to {{minimum}} characters.",
"number": "Too small, expected a number larger than or equal to {{minimum}}."
},
"invalidFormat": {
"ipv4": "Invalid format, expected an IPv4 address.",
"key": "Invalid format, expected a Base64 encoded pre-shared key (PSK)."
},
"invalidType": {
"number": "Invalid type, expected a number."
},
"pskLength": {
"0bit": "Key is required to be empty.",
"8bit": "Key is required to be an 8 bit pre-shared key (PSK).",
"128bit": "Key is required to be a 128 bit pre-shared key (PSK).",
"256bit": "Key is required to be a 256 bit pre-shared key (PSK)."
},
"required": {
"generic": "This field is required.",
"managed": "At least one admin key is requred if the node is managed.",
"key": "Key is required."
}
}
}
@@ -0,0 +1,12 @@
{
"dashboard": {
"title": "Connected Devices",
"description": "Manage your connected Meshtastic devices.",
"connectionType_ble": "BLE",
"connectionType_serial": "Série",
"connectionType_network": "Réseau",
"noDevicesTitle": "No devices connected",
"noDevicesDescription": "Connect a new device to get started.",
"button_newConnection": "New Connection"
}
}
@@ -0,0 +1,428 @@
{
"page": {
"title": "Configuration",
"tabBluetooth": "Bluetooth",
"tabDevice": "Appareil",
"tabDisplay": "Écran",
"tabLora": "LoRa",
"tabNetwork": "Réseau",
"tabPosition": "Position",
"tabPower": "Alimentation",
"tabSecurity": "Sécurité"
},
"sidebar": {
"label": "Modules"
},
"device": {
"title": "Device Settings",
"description": "Settings for the device",
"buttonPin": {
"description": "Button pin override",
"label": "Button Pin"
},
"buzzerPin": {
"description": "Buzzer pin override",
"label": "Buzzer Pin"
},
"disableTripleClick": {
"description": "Disable triple click",
"label": "Disable Triple Click"
},
"doubleTapAsButtonPress": {
"description": "Treat double tap as button press",
"label": "Double Tap as Button Press"
},
"ledHeartbeatDisabled": {
"description": "Disable default blinking LED",
"label": "LED Heartbeat Disabled"
},
"nodeInfoBroadcastInterval": {
"description": "How often to broadcast node info",
"label": "Node Info Broadcast Interval"
},
"posixTimezone": {
"description": "The POSIX timezone string for the device",
"label": "Zone horaire POSIX"
},
"rebroadcastMode": {
"description": "How to handle rebroadcasting",
"label": "Rebroadcast Mode"
},
"role": {
"description": "What role the device performs on the mesh",
"label": "Rôle"
}
},
"bluetooth": {
"title": "Bluetooth Settings",
"description": "Settings for the Bluetooth module",
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
"enabled": {
"description": "Enable or disable Bluetooth",
"label": "Activé"
},
"pairingMode": {
"description": "Pin selection behaviour.",
"label": "Mode d'appariement"
},
"pin": {
"description": "Pin to use when pairing",
"label": "Pin"
}
},
"display": {
"description": "Settings for the device display",
"title": "Display Settings",
"headingBold": {
"description": "Bolden the heading text",
"label": "Bold Heading"
},
"carouselDelay": {
"description": "How fast to cycle through windows",
"label": "Carousel Delay"
},
"compassNorthTop": {
"description": "Fix north to the top of compass",
"label": "Compass North Top"
},
"displayMode": {
"description": "Screen layout variant",
"label": "Display Mode"
},
"displayUnits": {
"description": "Display metric or imperial units",
"label": "Display Units"
},
"flipScreen": {
"description": "Flip display 180 degrees",
"label": "Flip Screen"
},
"gpsDisplayUnits": {
"description": "Coordinate display format",
"label": "GPS Display Units"
},
"oledType": {
"description": "Type of OLED screen attached to the device",
"label": "OLED Type"
},
"screenTimeout": {
"description": "Turn off the display after this long",
"label": "Screen Timeout"
},
"twelveHourClock": {
"description": "Use 12-hour clock format",
"label": "12-Hour Clock"
},
"wakeOnTapOrMotion": {
"description": "Wake the device on tap or motion",
"label": "Wake on Tap or Motion"
}
},
"lora": {
"title": "Mesh Settings",
"description": "Settings for the LoRa mesh",
"bandwidth": {
"description": "Channel bandwidth in MHz",
"label": "Bande Passante"
},
"boostedRxGain": {
"description": "Boosted RX gain",
"label": "Boosted RX Gain"
},
"codingRate": {
"description": "The denominator of the coding rate",
"label": "Coding Rate"
},
"frequencyOffset": {
"description": "Frequency offset to correct for crystal calibration errors",
"label": "Frequency Offset"
},
"frequencySlot": {
"description": "LoRa frequency channel number",
"label": "Frequency Slot"
},
"hopLimit": {
"description": "Maximum number of hops",
"label": "Hop Limit"
},
"ignoreMqtt": {
"description": "Don't forward MQTT messages over the mesh",
"label": "Ignorer MQTT"
},
"modemPreset": {
"description": "Modem preset to use",
"label": "Modem Preset"
},
"okToMqtt": {
"description": "When set to true, this configuration indicates that the user approves the packet to be uploaded to MQTT. If set to false, remote nodes are requested not to forward packets to MQTT",
"label": "OK vers MQTT"
},
"overrideDutyCycle": {
"description": "Ne pas prendre en compte la limite d'utilisation",
"label": "Ne pas prendre en compte la limite d'utilisation"
},
"overrideFrequency": {
"description": "Override frequency",
"label": "Override Frequency"
},
"region": {
"description": "Sets the region for your node",
"label": "Région"
},
"spreadingFactor": {
"description": "Indicates the number of chirps per symbol",
"label": "Spreading Factor"
},
"transmitEnabled": {
"description": "Enable/Disable transmit (TX) from the LoRa radio",
"label": "Transmit Enabled"
},
"transmitPower": {
"description": "Max transmit power",
"label": "Transmit Power"
},
"usePreset": {
"description": "Use one of the predefined modem presets",
"label": "Use Preset"
},
"meshSettings": {
"description": "Settings for the LoRa mesh",
"label": "Mesh Settings"
},
"waveformSettings": {
"description": "Settings for the LoRa waveform",
"label": "Waveform Settings"
},
"radioSettings": {
"label": "Radio Settings",
"description": "Settings for the LoRa radio"
}
},
"network": {
"title": "WiFi Config",
"description": "WiFi radio configuration",
"note": "Note: Some devices (ESP32) cannot use both Bluetooth and WiFi at the same time.",
"addressMode": {
"description": "Address assignment selection",
"label": "Address Mode"
},
"dns": {
"description": "DNS Server",
"label": "DNS"
},
"ethernetEnabled": {
"description": "Enable or disable the Ethernet port",
"label": "Activé"
},
"gateway": {
"description": "Default Gateway",
"label": "Passerelle"
},
"ip": {
"description": "IP Address",
"label": "IP"
},
"psk": {
"description": "Network password",
"label": "PSK"
},
"ssid": {
"description": "Network name",
"label": "SSID"
},
"subnet": {
"description": "Subnet Mask",
"label": "Sous-réseau"
},
"wifiEnabled": {
"description": "Enable or disable the WiFi radio",
"label": "Activé"
},
"meshViaUdp": {
"label": "Mesh via UDP"
},
"ntpServer": {
"label": "NTP Server"
},
"rsyslogServer": {
"label": "Rsyslog Server"
},
"ethernetConfigSettings": {
"description": "Ethernet port configuration",
"label": "Ethernet Config"
},
"ipConfigSettings": {
"description": "IP configuration",
"label": "IP Config"
},
"ntpConfigSettings": {
"description": "NTP configuration",
"label": "NTP Config"
},
"rsyslogConfigSettings": {
"description": "Rsyslog configuration",
"label": "Rsyslog Config"
},
"udpConfigSettings": {
"description": "UDP over Mesh configuration",
"label": "Configuration UDP"
}
},
"position": {
"title": "Position Settings",
"description": "Settings for the position module",
"broadcastInterval": {
"description": "How often your position is sent out over the mesh",
"label": "Broadcast Interval"
},
"enablePin": {
"description": "GPS module enable pin override",
"label": "Enable Pin"
},
"fixedPosition": {
"description": "Don't report GPS position, but a manually-specified one",
"label": "Fixed Position"
},
"gpsMode": {
"description": "Configure whether device GPS is Enabled, Disabled, or Not Present",
"label": "GPS Mode"
},
"gpsUpdateInterval": {
"description": "How often a GPS fix should be acquired",
"label": "GPS Update Interval"
},
"positionFlags": {
"description": "Optional fields to include when assembling position messages. The more fields are selected, the larger the message will be leading to longer airtime usage and a higher risk of packet loss.",
"label": "Position Flags"
},
"receivePin": {
"description": "GPS module RX pin override",
"label": "Receive Pin"
},
"smartPositionEnabled": {
"description": "Only send position when there has been a meaningful change in location",
"label": "Enable Smart Position"
},
"smartPositionMinDistance": {
"description": "Minimum distance (in meters) that must be traveled before a position update is sent",
"label": "Smart Position Minimum Distance"
},
"smartPositionMinInterval": {
"description": "Minimum interval (in seconds) that must pass before a position update is sent",
"label": "Smart Position Minimum Interval"
},
"transmitPin": {
"description": "GPS module TX pin override",
"label": "Transmit Pin"
},
"intervalsSettings": {
"description": "How often to send position updates",
"label": "Intervals"
},
"flags": {
"placeholder": "Select position flags...",
"altitude": "Altitude",
"altitudeGeoidalSeparation": "Altitude Geoidal Separation",
"altitudeMsl": "Altitude is Mean Sea Level",
"dop": "Dilution of precision (DOP) PDOP used by default",
"hdopVdop": "If DOP is set, use HDOP / VDOP values instead of PDOP",
"numSatellites": "Number of satellites",
"sequenceNumber": "Sequence number",
"timestamp": "Horodatage",
"unset": "Désactivé",
"vehicleHeading": "Vehicle heading",
"vehicleSpeed": "Vehicle speed"
}
},
"power": {
"adcMultiplierOverride": {
"description": "Used for tweaking battery voltage reading",
"label": "ADC Multiplier Override ratio"
},
"ina219Address": {
"description": "Address of the INA219 battery monitor",
"label": "INA219 Address"
},
"lightSleepDuration": {
"description": "How long the device will be in light sleep for",
"label": "Light Sleep Duration"
},
"minimumWakeTime": {
"description": "Minimum amount of time the device will stay awake for after receiving a packet",
"label": "Minimum Wake Time"
},
"noConnectionBluetoothDisabled": {
"description": "If the device does not receive a Bluetooth connection, the BLE radio will be disabled after this long",
"label": "No Connection Bluetooth Disabled"
},
"powerSavingEnabled": {
"description": "Select if powered from a low-current source (i.e. solar), to minimize power consumption as much as possible.",
"label": "Activer le mode économie d'énergie"
},
"shutdownOnBatteryDelay": {
"description": "Automatically shutdown node after this long when on battery, 0 for indefinite",
"label": "Shutdown on battery delay"
},
"superDeepSleepDuration": {
"description": "How long the device will be in super deep sleep for",
"label": "Super Deep Sleep Duration"
},
"powerConfigSettings": {
"description": "Settings for the power module",
"label": "Configuration de l'alimentation"
},
"sleepSettings": {
"description": "Sleep settings for the power module",
"label": "Sleep Settings"
}
},
"security": {
"description": "Settings for the Security configuration",
"title": "Security Settings",
"button_backupKey": "Backup Key",
"adminChannelEnabled": {
"description": "Allow incoming device control over the insecure legacy admin channel",
"label": "Allow Legacy Admin"
},
"enableDebugLogApi": {
"description": "Output live debug logging over serial, view and export position-redacted device logs over Bluetooth",
"label": "Enable Debug Log API"
},
"managed": {
"description": "If enabled, device configuration options are only able to be changed remotely by a Remote Admin node via admin messages. Do not enable this option unless at least one suitable Remote Admin node has been setup, and the public key is stored in one of the fields above.",
"label": "Managed"
},
"privateKey": {
"description": "Used to create a shared key with a remote device",
"label": "Clé privée"
},
"publicKey": {
"description": "Sent out to other nodes on the mesh to allow them to compute a shared secret key",
"label": "Clé publique"
},
"primaryAdminKey": {
"description": "The primary public key authorized to send admin messages to this node",
"label": "Primary Admin Key"
},
"secondaryAdminKey": {
"description": "The secondary public key authorized to send admin messages to this node",
"label": "Secondary Admin Key"
},
"serialOutputEnabled": {
"description": "Serial Console over the Stream API",
"label": "Serial Output Enabled"
},
"tertiaryAdminKey": {
"description": "The tertiary public key authorized to send admin messages to this node",
"label": "Tertiary Admin Key"
},
"adminSettings": {
"description": "Settings for Admin",
"label": "Admin Settings"
},
"loggingSettings": {
"description": "Settings for Logging",
"label": "Logging Settings"
}
}
}
@@ -0,0 +1,171 @@
{
"deleteMessages": {
"description": "This action will clear all message history. This cannot be undone. Are you sure you want to continue?",
"title": "Clear All Messages"
},
"deviceName": {
"description": "The Device will restart once the config is saved.",
"longName": "Long Name",
"shortName": "Short Name",
"title": "Change Device Name"
},
"import": {
"description": "The current LoRa configuration will be overridden.",
"error": {
"invalidUrl": "Invalid Meshtastic URL"
},
"channelPrefix": "Channel: ",
"channelSetUrl": "Channel Set/QR Code URL",
"channels": "Channels:",
"usePreset": "Use Preset?",
"title": "Import Channel Set"
},
"locationResponse": {
"altitude": "Altitude: ",
"coordinates": "Coordinates: ",
"title": "Location: {{identifier}}"
},
"pkiRegenerateDialog": {
"title": "Regenerate Pre-Shared Key?",
"description": "Are you sure you want to regenerate the pre-shared key?",
"regenerate": "Regenerate"
},
"newDeviceDialog": {
"title": "Connect New Device",
"https": "https",
"http": "http",
"tabHttp": "HTTP",
"tabBluetooth": "Bluetooth",
"tabSerial": "Série",
"useHttps": "Use HTTPS",
"connecting": "Connecting...",
"connect": "Connect",
"connectionFailedAlert": {
"title": "Connection Failed",
"descriptionPrefix": "Could not connect to the device. ",
"httpsHint": "If using HTTPS, you may need to accept a self-signed certificate first. ",
"openLinkPrefix": "Please open ",
"openLinkSuffix": " in a new tab",
"acceptTlsWarningSuffix": ", accept any TLS warnings if prompted, then try again",
"learnMoreLink": "Learn more"
},
"httpConnection": {
"label": "IP Address/Hostname",
"placeholder": "000.000.000.000 / meshtastic.local"
},
"serialConnection": {
"noDevicesPaired": "No devices paired yet.",
"newDeviceButton": "New device",
"deviceIdentifier": "# {{index}} - {{vendorId}} - {{productId}}"
},
"bluetoothConnection": {
"noDevicesPaired": "No devices paired yet.",
"newDeviceButton": "New device"
},
"validation": {
"requiresWebBluetooth": "This connection type requires <0>Web Bluetooth</0>. Please use a supported browser, like Chrome or Edge.",
"requiresWebSerial": "This connection type requires <0>Web Serial</0>. Please use a supported browser, like Chrome or Edge.",
"requiresSecureContext": "This application requires a <0>secure context</0>. Please connect using HTTPS or localhost.",
"additionallyRequiresSecureContext": "Additionally, it requires a <0>secure context</0>. Please connect using HTTPS or localhost."
}
},
"nodeDetails": {
"message": "Message",
"requestPosition": "Request Position",
"traceRoute": "Trace Route",
"airTxUtilization": "Air TX utilization",
"allRawMetrics": "All Raw Metrics:",
"batteryLevel": "Battery level",
"channelUtilization": "Channel utilization",
"details": "Details:",
"deviceMetrics": "Device Metrics:",
"hardware": "Hardware: ",
"lastHeard": "Last Heard: ",
"nodeHexPrefix": "Node Hex: !",
"nodeNumber": "Node Number: ",
"position": "Position:",
"role": "Role: ",
"uptime": "Uptime: ",
"voltage": "Tension",
"title": "Node Details for {{identifier}}",
"ignoreNode": "Ignore node",
"removeNode": "Remove node",
"unignoreNode": "Unignore node"
},
"pkiBackup": {
"loseKeysWarning": "If you lose your keys, you will need to reset your device.",
"secureBackup": "Its important to backup your public and private keys and store your backup securely!",
"footer": "=== END OF KEYS ===",
"header": "=== MESHTASTIC KEYS FOR {{longName}} ({{shortName}}) ===",
"privateKey": "Private Key:",
"publicKey": "Public Key:",
"fileName": "meshtastic_keys_{{longName}}_{{shortName}}.txt",
"title": "Backup Keys"
},
"pkiBackupReminder": {
"description": "We recommend backing up your key data regularly. Would you like to back up now?",
"title": "Backup Reminder",
"remindLaterPrefix": "Remind me in",
"remindNever": "Never remind me",
"backupNow": "Back up now"
},
"pkiRegenerate": {
"description": "Are you sure you want to regenerate key pair?",
"title": "Regenerate Key Pair"
},
"qr": {
"addChannels": "Add Channels",
"replaceChannels": "Replace Channels",
"description": "The current LoRa configuration will also be shared.",
"sharableUrl": "Sharable URL",
"title": "Générer un QR Code"
},
"rebootOta": {
"title": "Schedule Reboot",
"description": "Reboot the connected node after a delay into OTA (Over-the-Air) mode.",
"enterDelay": "Enter delay (sec)",
"scheduled": "Reboot has been scheduled"
},
"reboot": {
"title": "Schedule Reboot",
"description": "Reboot the connected node after x minutes."
},
"refreshKeys": {
"description": {
"acceptNewKeys": "This will remove the node from device and request new keys.",
"keyMismatchReasonSuffix": ". This is due to the remote node's current public key does not match the previously stored key for this node.",
"unableToSendDmPrefix": "Your node is unable to send a direct message to node: "
},
"acceptNewKeys": "Accept New Keys",
"title": "Keys Mismatch - {{identifier}}"
},
"removeNode": {
"description": "Are you sure you want to remove this Node?",
"title": "Remove Node?"
},
"shutdown": {
"title": "Schedule Shutdown",
"description": "Turn off the connected node after x minutes."
},
"traceRoute": {
"routeToDestination": "Route to destination:",
"routeBack": "Route back:"
},
"tracerouteResponse": {
"title": "Traceroute: {{identifier}}"
},
"unsafeRoles": {
"confirmUnderstanding": "Yes, I know what I'm doing",
"conjunction": " and the blog post about ",
"postamble": " and understand the implications of changing the role.",
"preamble": "I have read the ",
"choosingRightDeviceRole": "Choosing The Right Device Role",
"deviceRoleDocumentation": "Device Role Documentation",
"title": "Êtes-vous sûr ?"
},
"managedMode": {
"confirmUnderstanding": "Yes, I know what I'm doing",
"title": "Êtes-vous sûr ?",
"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."
}
}

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