{
>
-
+
diff --git a/pkg/webui/account/views/token-login/index.js b/pkg/webui/account/views/token-login/index.js
index 3a502a8a6ed..fab8cb9dbc6 100644
--- a/pkg/webui/account/views/token-login/index.js
+++ b/pkg/webui/account/views/token-login/index.js
@@ -37,7 +37,6 @@ import sharedMessages from '@ttn-lw/lib/shared-messages'
const m = defineMessages({
loginToken: 'Login Token',
- loginFailed: 'Login failed',
})
const appRoot = selectApplicationRootPath()
@@ -97,7 +96,7 @@ const TokenLogin = () => {
onSubmit={handleSubmit}
initialValues={initialValues}
error={error}
- errorTitle={m.loginFailed}
+ errorTitle={sharedMessages.loginFailed}
validationSchema={validationSchema}
horizontal={false}
>
diff --git a/pkg/webui/components/file-input/index.js b/pkg/webui/components/file-input/index.js
index e071ec82c70..99780466665 100644
--- a/pkg/webui/components/file-input/index.js
+++ b/pkg/webui/components/file-input/index.js
@@ -35,7 +35,6 @@ const m = defineMessages({
noFileSelected: 'No file selected',
fileProvided: 'A file has been provided',
tooBig: 'The selected file is too large',
- remove: 'Remove',
})
const defaultDataTransform = content => content.replace(/^.*;base64,/, '')
diff --git a/pkg/webui/components/qr-modal-button/index.js b/pkg/webui/components/qr-modal-button/index.js
index ab66035cc17..4771b134e22 100644
--- a/pkg/webui/components/qr-modal-button/index.js
+++ b/pkg/webui/components/qr-modal-button/index.js
@@ -34,7 +34,6 @@ const QrScanDoc = (
)
const m = defineMessages({
- scanEndDevice: 'Scan end device QR code',
scanEndDeviceContinue: 'Please scan the QR code to continue. {qrScanDoc}',
invalidData:
'Invalid QR code data. Please note that only TR005 LoRaWAN® Device Identification QR Code can be scanned. Some devices have unrelated QR codes printed on them that cannot be used.',
@@ -81,7 +80,7 @@ const QRModalButton = props => {
onApprove={onApprove}
message={message}
modalData={{
- title: m.scanEndDevice,
+ title: sharedMessages.scanEndDevice,
children: modalData,
buttonMessage: m.apply,
approveButtonProps: {
diff --git a/pkg/webui/components/qr/require-permission.js b/pkg/webui/components/qr/require-permission.js
index 30a83ff5027..59e0749992c 100644
--- a/pkg/webui/components/qr/require-permission.js
+++ b/pkg/webui/components/qr/require-permission.js
@@ -28,7 +28,6 @@ import style from './qr.styl'
const m = defineMessages({
permissionDeniedError: 'Permission Denied: Please allow access to your camera or upload a photo',
fetchingPermission: 'Please set camera permissions',
- uploadImage: 'Upload an image',
})
const RequirePermission = props => {
diff --git a/pkg/webui/console/components/device-import-form/index.js b/pkg/webui/console/components/device-import-form/index.js
index bcbb6ca42c0..5eb629adc05 100644
--- a/pkg/webui/console/components/device-import-form/index.js
+++ b/pkg/webui/console/components/device-import-form/index.js
@@ -53,7 +53,6 @@ const m = defineMessages({
formatInfo: 'Format information',
selectAFile: 'Please select a template file',
fileInfoPlaceholder: 'Please select a template format',
- claiming: 'Claiming',
setClaimAuthCode: 'Set claim authentication code',
targetedComponents: 'Targeted components',
advancedSectionTitle: 'Advanced end device claiming settings',
@@ -143,7 +142,7 @@ const DeviceBulkCreateFormInner = props => {
)}
-
+
diff --git a/pkg/webui/console/components/events/messages.js b/pkg/webui/console/components/events/messages.js
index 77e54d255a3..7e6e8a68275 100644
--- a/pkg/webui/console/components/events/messages.js
+++ b/pkg/webui/console/components/events/messages.js
@@ -15,8 +15,6 @@
import { defineMessages } from 'react-intl'
const messages = defineMessages({
- // Field messages
- payload: 'Payload',
MACPayload: 'MAC payload',
devAddr: 'DevAddr',
fPort: 'FPort',
@@ -37,6 +35,7 @@ const messages = defineMessages({
rx2DataRateIndex: 'Rx2 Data Rate Index',
rx2Frequency: 'Rx2 Frequency',
class: 'Class',
+
// Generic messages
eventDetails: 'Event details',
rawEvent: 'Raw event',
@@ -53,7 +52,6 @@ const messages = defineMessages({
'Old events have been truncated to save memory. The current event limit per stream is {limit}.',
eventUnavailable: 'This event is not available anymore. It was likely truncated to save memory.',
verboseStream: 'Verbose stream',
- confirmedDownlink: 'Confirmed downlink',
confirmedUplink: 'Confirmed uplink',
})
diff --git a/pkg/webui/console/components/mac-settings-section/index.js b/pkg/webui/console/components/mac-settings-section/index.js
index a8ab98a6d66..0c0260e4d4d 100644
--- a/pkg/webui/console/components/mac-settings-section/index.js
+++ b/pkg/webui/console/components/mac-settings-section/index.js
@@ -40,32 +40,19 @@ import {
const m = defineMessages({
delayValue: '{count, plural, one {{count} second} other {{count} seconds}}',
factoryPresetFreqDescription: 'List of factory-preset frequencies. Note: order is respected.',
- factoryPresetFreqTitle: 'Factory preset frequencies',
- freqAdd: 'Add Frequency',
- frequencyPlaceholder: 'e.g. 869525000 for 869,525 MHz',
advancedMacSettings: 'Advanced MAC settings',
- pingSlotFrequencyTitle: 'Ping slot frequency',
desiredPingSlotFrequencyTitle: 'Desired ping slot frequency',
pingSlotPeriodicityDescription: 'Periodicity of the class B ping slot',
- pingSlotPeriodicityTitle: 'Ping slot periodicity',
- pingSlotPeriodicityValue: '{count, plural, one {every second} other {every {count} seconds}}',
pingSlotDataRateTitle: 'Ping slot data rate index',
desiredPingSlotDataRateTitle: 'Desired ping slot data rate',
resetWarning: 'Resetting is insecure and makes your device susceptible for replay attacks',
- resetsFCnt: 'Resets frame counters',
- rx1DataRateOffsetTitle: 'Rx1 data rate offset',
desiredRx1DataRateOffsetTitle: 'Desired Rx1 data rate offset',
- rx1DelayTitle: 'Rx1 delay',
desiredRx1DelayTitle: 'Desired Rx1 delay',
rx2DataRateIndexTitle: 'Rx2 data rate index',
desiredRx2DataRateIndexTitle: 'Desired Rx2 data rate index',
desiredRx2FrequencyTitle: 'Desired Rx2 frequency',
- rx2FrequencyTitle: 'Rx2 frequency',
updateSuccess: 'The MAC settings updated',
- beaconFrequency: 'Beacon frequency',
desiredBeaconFrequency: 'Desired beacon frequency',
- classBTimeout: 'Class B timeout',
- classCTimeout: 'Class C timeout',
maxDutyCycle: 'Maximum duty cycle',
desiredMaxDutyCycle: 'Desired maximum duty cycle',
adrMargin: 'ADR margin',
@@ -88,7 +75,7 @@ const pingSlotPeriodicityOptions = Array.from({ length: 8 }, (_, index) => {
return {
value: `PING_EVERY_${value}S`,
- label: ,
+ label: ,
}
})
// 0...15
@@ -189,7 +176,7 @@ const MacSettingsSection = props => {
{!isOTAA && (
}
@@ -219,7 +206,7 @@ const MacSettingsSection = props => {
{!isOTAA && (
{
type="number"
min={100000}
step={100}
- title={m.rx2FrequencyTitle}
+ title={sharedMessages.rx2Frequency}
name="mac_settings.rx2_frequency"
component={UnitInput.Hertz}
tooltipId={tooltipIds.RX2_FREQUENCY}
@@ -336,15 +323,15 @@ const MacSettingsSection = props => {
indexAsKey
name="mac_settings.factory_preset_frequencies"
component={KeyValueMap}
- title={m.factoryPresetFreqTitle}
+ title={sharedMessages.factoryPresetFrequencies}
description={m.factoryPresetFreqDescription}
- addMessage={m.freqAdd}
- valuePlaceholder={m.frequencyPlaceholder}
+ addMessage={sharedMessages.freqAdd}
+ valuePlaceholder={sharedMessages.frequencyPlaceholder}
tooltipId={tooltipIds.FACTORY_PRESET_FREQUENCIES}
/>
{isClassC && (
{
{(isClassB || isMulticast) && (
<>
{
fieldWidth="xs"
/>
{
{
type="number"
min={100000}
title={m.desiredBeaconFrequency}
- placeholder={m.frequencyPlaceholder}
+ placeholder={sharedMessages.frequencyPlaceholder}
name="mac_settings.desired_beacon_frequency"
tooltipId={tooltipIds.BEACON_FREQUENCY}
component={UnitInput.Hertz}
@@ -406,8 +393,8 @@ const MacSettingsSection = props => {
type="number"
min={100000}
step={100}
- title={m.pingSlotFrequencyTitle}
- placeholder={m.frequencyPlaceholder}
+ title={sharedMessages.pingSlotFrequency}
+ placeholder={sharedMessages.frequencyPlaceholder}
name="mac_settings.ping_slot_frequency"
tooltipId={tooltipIds.PING_SLOT_FREQUENCY}
component={UnitInput.Hertz}
@@ -420,7 +407,7 @@ const MacSettingsSection = props => {
min={100000}
step={100}
title={m.desiredPingSlotFrequencyTitle}
- placeholder={m.frequencyPlaceholder}
+ placeholder={sharedMessages.frequencyPlaceholder}
name="mac_settings.desired_ping_slot_frequency"
tooltipId={tooltipIds.PING_SLOT_FREQUENCY}
component={UnitInput.Hertz}
diff --git a/pkg/webui/console/components/payload-formatters-form/index.js b/pkg/webui/console/components/payload-formatters-form/index.js
index 05f015f360a..3aea48e9635 100644
--- a/pkg/webui/console/components/payload-formatters-form/index.js
+++ b/pkg/webui/console/components/payload-formatters-form/index.js
@@ -47,7 +47,6 @@ import TestForm from './test-form'
import style from './payload-formatters-form.styl'
const m = defineMessages({
- grpc: 'GRPC service',
repository: 'Use Device Repository formatters',
customJavascipt: 'Custom Javascript formatter',
formatterType: 'Formatter type',
@@ -80,7 +79,7 @@ const formatterOptions = [
{ label: m.appFormatter, value: TYPES.DEFAULT },
{ label: m.repository, value: TYPES.REPOSITORY },
{ label: m.customJavascipt, value: TYPES.JAVASCRIPT },
- { label: m.grpc, value: TYPES.GRPC },
+ { label: sharedMessages.grpcService, value: TYPES.GRPC },
{ label: 'CayenneLPP', value: TYPES.CAYENNELPP },
{ label: sharedMessages.none, value: TYPES.NONE },
]
diff --git a/pkg/webui/console/components/pubsub-form/messages.js b/pkg/webui/console/components/pubsub-form/messages.js
index 0b99afbb3ea..a817da0d229 100644
--- a/pkg/webui/console/components/pubsub-form/messages.js
+++ b/pkg/webui/console/components/pubsub-form/messages.js
@@ -21,9 +21,6 @@ export default defineMessages({
modalWarning:
'Are you sure you want to delete Pub/Sub "{pubsubId}"? Deleting a Pub/Sub cannot be undone.',
headers: 'Headers',
- headersKeyPlaceholder: 'Authorization',
- headersValuePlaceholder: 'Bearer my-auth-token',
- headersAdd: 'Add header entry',
headersValidateRequired: 'All header entry values are required. Please remove empty entries.',
usernamePlaceholder: 'my-username',
passwordPlaceholder: 'my-password',
@@ -33,8 +30,6 @@ export default defineMessages({
mqttConfig: 'MQTT configuration',
mqttClientIdPlaceholder: 'my-client-id',
mqttServerUrlPlaceholder: 'mqtts://example.com',
- serverUrl: 'Server URL',
- clientId: 'Client ID',
subscribeQos: 'Subscribe QoS',
publishQos: 'Publish QoS',
tlsCa: 'Root CA certificate',
@@ -43,7 +38,6 @@ export default defineMessages({
selectPemFile: 'Select .pem file…',
pemFileProvided: '.pem file has been provided',
useCredentials: 'Use credentials',
- alreadyExistsModalTitle: 'ID already exists',
alreadyExistsModalMessage:
'A Pub/Sub with the ID "{id}" already exists. Do you wish to replace this Pub/Sub?',
replacePubsub: 'Replace Pub/Sub',
diff --git a/pkg/webui/console/components/webhook-form/index.js b/pkg/webui/console/components/webhook-form/index.js
index 4fa389e191a..2bb78718b8c 100644
--- a/pkg/webui/console/components/webhook-form/index.js
+++ b/pkg/webui/console/components/webhook-form/index.js
@@ -70,9 +70,6 @@ const m = defineMessages({
modalWarning:
'Are you sure you want to delete webhook "{webhookId}"? Deleting a webhook cannot be undone.',
additionalHeaders: 'Additional headers',
- headersKeyPlaceholder: 'Authorization',
- headersValuePlaceholder: 'Bearer my-auth-token',
- headersAdd: 'Add header entry',
downlinkAPIKey: 'Downlink API key',
downlinkAPIKeyDesc:
'The API key will be provided to the endpoint using the "X-Downlink-Apikey" header',
@@ -539,9 +536,9 @@ export default class WebhookForm extends Component {
{
diff --git a/pkg/webui/console/containers/api-keys-table/index.js b/pkg/webui/console/containers/api-keys-table/index.js
index 4101cdffe87..091ff05b0f8 100644
--- a/pkg/webui/console/containers/api-keys-table/index.js
+++ b/pkg/webui/console/containers/api-keys-table/index.js
@@ -29,7 +29,6 @@ import sharedMessages from '@ttn-lw/lib/shared-messages'
import style from './api-keys-table.styl'
const m = defineMessages({
- keyId: 'Key ID',
grantedRights: 'Granted Rights',
})
@@ -42,7 +41,7 @@ const ApiKeysTable = props => {
const headers = [
{
name: 'id',
- displayName: m.keyId,
+ displayName: sharedMessages.keyId,
width: 20,
sortKey: 'api_key_id',
render: id => {id},
diff --git a/pkg/webui/console/containers/applications-form/index.js b/pkg/webui/console/containers/applications-form/index.js
index f0ee31b73c3..e74ac93b388 100644
--- a/pkg/webui/console/containers/applications-form/index.js
+++ b/pkg/webui/console/containers/applications-form/index.js
@@ -45,7 +45,6 @@ const m = defineMessages({
'Optional application description; can also be used to save notes about the application',
appDescription:
'Within applications, you can register and manage end devices, aggregate their sensor data and act on it using our many integration options.{break}Learn more in our Applications Guide',
- createApplication: 'Create application',
})
const validationSchema = Yup.object().shape({
@@ -141,7 +140,7 @@ const ApplicationForm = props => {
component={Input}
/>
-
+
)
diff --git a/pkg/webui/console/containers/collaborators-table/index.js b/pkg/webui/console/containers/collaborators-table/index.js
index 4ff2bba690b..e606b67bf76 100644
--- a/pkg/webui/console/containers/collaborators-table/index.js
+++ b/pkg/webui/console/containers/collaborators-table/index.js
@@ -13,9 +13,9 @@
// limitations under the License.
import React from 'react'
-import { defineMessages, useIntl } from 'react-intl'
import { createSelector } from 'reselect'
import { useSelector } from 'react-redux'
+import { useIntl } from 'react-intl'
import Tag from '@ttn-lw/components/tag'
import TagGroup from '@ttn-lw/components/tag/group'
@@ -36,10 +36,6 @@ import style from './collaborators-table.styl'
const RIGHT_TAG_MAX_WIDTH = 140
-const m = defineMessages({
- id: 'User / Organization ID',
-})
-
const rowKeySelector = row => row._type
const getCollaboratorPathPrefix = collaborator =>
@@ -54,7 +50,7 @@ const CollaboratorsTable = props => {
const headers = [
{
name: 'ids',
- displayName: m.id,
+ displayName: sharedMessages.userOrgId,
sortable: true,
sortKey: 'id',
width: 30,
diff --git a/pkg/webui/console/containers/dev-eui-component/index.js b/pkg/webui/console/containers/dev-eui-component/index.js
index 7e335d6020a..e88df9cbffc 100644
--- a/pkg/webui/console/containers/dev-eui-component/index.js
+++ b/pkg/webui/console/containers/dev-eui-component/index.js
@@ -15,6 +15,7 @@
import React, { useState, useCallback } from 'react'
import { useDispatch, useSelector } from 'react-redux'
import classnames from 'classnames'
+import { defineMessages } from 'react-intl'
import Input from '@ttn-lw/components/input'
import Form, { useFormContext } from '@ttn-lw/components/form'
@@ -37,6 +38,10 @@ import {
import style from './dev-eui.styl'
+const m = defineMessages({
+ unknownError: 'Unknown error while generating DevEUI',
+})
+
const DevEUIComponent = props => {
const { name, required, disabled, autoFocus } = props
const { values, setFieldValue, touched } = useFormContext()
@@ -93,7 +98,7 @@ const DevEUIComponent = props => {
} catch (error) {
if (getBackendErrorName(error) === 'global_eui_limit_reached') {
setErrorMessage(sharedMessages.devEUIBlockLimitReached)
- } else setErrorMessage(sharedMessages.unknownError)
+ } else setErrorMessage(m.unknownError)
setDevEUIGenerated(true)
}
}, [handleDevEUIRequest, handleIdPrefill])
diff --git a/pkg/webui/console/containers/device-onboarding-form/messages.js b/pkg/webui/console/containers/device-onboarding-form/messages.js
index c0f45cd1cce..922f3430074 100644
--- a/pkg/webui/console/containers/device-onboarding-form/messages.js
+++ b/pkg/webui/console/containers/device-onboarding-form/messages.js
@@ -30,9 +30,9 @@ export default defineMessages({
confirmedClaiming: 'This end device can be claimed',
cannotConfirmEui:
'There was an error and the JoinEUI could not be confirmed. Please try again later.',
+
// Shared messages.
classCapabilities: 'Additional LoRaWAN class capabilities',
- submitTitle: 'Register end device',
afterRegistration: 'After registration',
singleRegistration: 'View registered end device',
multipleRegistration: 'Register another end device of this type',
@@ -40,29 +40,16 @@ export default defineMessages({
deviceIdDescription: 'This value is automatically prefilled using the DevEUI',
onboardingDisabled:
'Device onboarding can only be performed on deployments that have Network Server, Application Server and Join Server activated. Please use the CLI to register devices on individual components.',
- // Manual messages.
- beaconFrequency: 'Beacon frequency',
- rx1DataRateOffsetTitle: 'Rx1 data rate offset',
- rx1DelayTitle: 'Rx1 delay',
- factoryPresetFreqTitle: 'Factory preset frequencies',
- freqAdd: 'Add Frequency',
- frequencyPlaceholder: 'e.g. 869525000 for 869,525 MHz',
- pingSlotPeriodicityTitle: 'Ping slot periodicity',
- pingSlotPeriodicityValue: '{count, plural, one {every second} other {every {count} seconds}}',
pingSlotDataRateTitle: 'Ping slot data rate',
- pingSlotFrequencyTitle: 'Ping slot frequency',
rx2DataRateIndexTitle: 'Rx2 data rate',
- rx2FrequencyTitle: 'Rx2 frequency',
- classBTimeout: 'Class B timeout',
- classCTimeout: 'Class C timeout',
defaultNetworksSettings: "Use network's default MAC settings",
clusterSettings: 'Cluster settings',
networkDefaults: 'Network defaults',
+
// QR code section.
hasEndDeviceQR:
'Does your end device have a LoRaWAN® Device Identification QR Code? Scan it to speed up onboarding.',
deviceGuide: 'Device registration help',
- scanEndDevice: 'Scan end device QR code',
deviceInfo: 'Found QR code data',
resetQRCodeData: 'Reset QR code data',
resetConfirm:
diff --git a/pkg/webui/console/containers/device-onboarding-form/type-form-section/manual-form-section/advanced-settings-section.js b/pkg/webui/console/containers/device-onboarding-form/type-form-section/manual-form-section/advanced-settings-section.js
index cbf53f30cbc..2008c5a6542 100644
--- a/pkg/webui/console/containers/device-onboarding-form/type-form-section/manual-form-section/advanced-settings-section.js
+++ b/pkg/webui/console/containers/device-onboarding-form/type-form-section/manual-form-section/advanced-settings-section.js
@@ -58,10 +58,6 @@ const m = defineMessages({
skipJsRegistration: 'Skip registration on Join Server',
multicastClassCapabilities: 'LoRaWAN class for multicast downlinks',
register: 'Register manually',
- macSettingsError:
- 'There was an error and the default MAC settings for the {freqPlan} frequency plan could not be loaded',
- fpNotFoundError:
- 'The LoRaWAN version {lorawanVersion} does not support the {freqPlan} frequency plan. Please choose a different MAC version or frequency plan.',
})
const emptyDefaultMacSettings = {}
@@ -154,7 +150,7 @@ const pingSlotPeriodicityOptions = Array.from({ length: 8 }, (_, index) => {
return {
value: `PING_EVERY_${value}S`,
- label: ,
+ label: ,
}
})
@@ -230,7 +226,7 @@ const AdvancedSettingsSection = () => {
if (isBackend(err) && getBackendErrorName(err) === 'no_band_version') {
toast({
type: toast.types.ERROR,
- message: m.fpNotFoundError,
+ message: sharedMessages.fpNotFoundError,
messageValues: {
lorawanVersion: lorawan_phy_version,
freqPlan: frequency_plan_id,
@@ -240,7 +236,7 @@ const AdvancedSettingsSection = () => {
} else {
toast({
type: toast.types.ERROR,
- message: m.macSettingsError,
+ message: sharedMessages.macSettingsError,
messageValues: {
freqPlan: frequency_plan_id,
code: msg => {msg},
@@ -336,7 +332,7 @@ const AdvancedSettingsSection = () => {
{
{
min={100000}
required={!isUndefined(defaultMacSettings.beacon_frequency)}
title={messages.beaconFrequency}
- placeholder={messages.frequencyPlaceholder}
+ placeholder={sharedMessages.frequencyPlaceholder}
name="mac_settings.beacon_frequency"
tooltipId={tooltipIds.BEACON_FREQUENCY}
component={UnitInput.Hertz}
@@ -451,7 +447,7 @@ const AdvancedSettingsSection = () => {
min={100000}
required={!isUndefined(defaultMacSettings.ping_slot_frequency)}
title={messages.pingSlotFrequencyTitle}
- placeholder={messages.frequencyPlaceholder}
+ placeholder={sharedMessages.frequencyPlaceholder}
name="mac_settings.ping_slot_frequency"
tooltipId={tooltipIds.PING_SLOT_FREQUENCY}
component={UnitInput.Hertz}
@@ -510,7 +506,7 @@ const AdvancedSettingsSection = () => {
step={100}
required={!isUndefined(defaultMacSettings.rx2_frequency)}
title={messages.rx2FrequencyTitle}
- placeholder={messages.frequencyPlaceholder}
+ placeholder={sharedMessages.frequencyPlaceholder}
name="mac_settings.rx2_frequency"
tooltipId={tooltipIds.RX2_FREQUENCY}
component={UnitInput.Hertz}
@@ -528,9 +524,9 @@ const AdvancedSettingsSection = () => {
indexAsKey
name="mac_settings.factory_preset_frequencies"
component={KeyValueMap}
- title={messages.factoryPresetFreqTitle}
+ title={sharedMessages.factoryPresetFrequencies}
addMessage={messages.freqAdd}
- valuePlaceholder={messages.frequencyPlaceholder}
+ valuePlaceholder={sharedMessages.frequencyPlaceholder}
tooltipId={tooltipIds.FACTORY_PRESET_FREQUENCIES}
encode={factoryPresetFreqEncoder}
decode={factoryPresetFreqDecoder}
diff --git a/pkg/webui/console/containers/device-profile-section/device-selection/brand-select/brand-select.js b/pkg/webui/console/containers/device-profile-section/device-selection/brand-select/brand-select.js
index 939a575fd25..677a7904066 100644
--- a/pkg/webui/console/containers/device-profile-section/device-selection/brand-select/brand-select.js
+++ b/pkg/webui/console/containers/device-profile-section/device-selection/brand-select/brand-select.js
@@ -25,7 +25,6 @@ import { SELECT_OTHER_OPTION } from '@console/lib/device-utils'
const m = defineMessages({
title: 'End device brand',
- warning: 'End device models unavailable',
noOptionsMessage: 'No matching brand found',
})
@@ -56,7 +55,7 @@ const BrandSelect = props => {
title={m.title}
component={Select}
isLoading={fetching}
- warning={Boolean(error) ? m.warning : undefined}
+ warning={Boolean(error) ? sharedMessages.endDeviceModelsUnavailable : undefined}
onChange={onChange}
noOptionsMessage={handleNoOptions}
placeholder={sharedMessages.typeToSearch}
diff --git a/pkg/webui/console/containers/device-profile-section/device-selection/model-select/model-select.js b/pkg/webui/console/containers/device-profile-section/device-selection/model-select/model-select.js
index bb72f95b3a6..d0d64d36073 100644
--- a/pkg/webui/console/containers/device-profile-section/device-selection/model-select/model-select.js
+++ b/pkg/webui/console/containers/device-profile-section/device-selection/model-select/model-select.js
@@ -24,8 +24,6 @@ import sharedMessages from '@ttn-lw/lib/shared-messages'
import { SELECT_OTHER_OPTION } from '@console/lib/device-utils'
const m = defineMessages({
- title: 'Model',
- warning: 'End device models unavailable',
noOptionsMessage: 'No matching model found',
})
@@ -65,10 +63,10 @@ const ModelSelect = props => {
{...rest}
options={options}
name={name}
- title={m.title}
+ title={sharedMessages.model}
component={Select}
isLoading={fetching}
- warning={Boolean(error) ? m.warning : undefined}
+ warning={Boolean(error) ? sharedMessages.endDeviceModelsUnavailable : undefined}
onChange={onChange}
noOptionsMessage={handleNoOptions}
placeholder={sharedMessages.typeToSearch}
diff --git a/pkg/webui/console/containers/freq-plans-select/index.js b/pkg/webui/console/containers/freq-plans-select/index.js
index 7842e7ff22c..7d9fd26fb8e 100644
--- a/pkg/webui/console/containers/freq-plans-select/index.js
+++ b/pkg/webui/console/containers/freq-plans-select/index.js
@@ -26,7 +26,6 @@ import {
} from '@console/store/selectors/configuration'
const m = defineMessages({
- title: 'Frequency plan',
warning: 'Frequency plans unavailable',
none: 'Do not set a frequency plan',
})
diff --git a/pkg/webui/console/containers/gateway-onboarding-form/gateway-provisioning-form/gateway-registration-form-section/index.js b/pkg/webui/console/containers/gateway-onboarding-form/gateway-provisioning-form/gateway-registration-form-section/index.js
index 94550191b98..6f615de3cc1 100644
--- a/pkg/webui/console/containers/gateway-onboarding-form/gateway-provisioning-form/gateway-registration-form-section/index.js
+++ b/pkg/webui/console/containers/gateway-onboarding-form/gateway-provisioning-form/gateway-registration-form-section/index.js
@@ -41,8 +41,6 @@ const m = defineMessages({
'Select which information can be seen by other network participants, including {packetBrokerURL}',
shareGatewayInfoDescription:
'Choose this option eg. if your gateway is powered by {loraBasicStationURL}',
- generateAPIKeyCups: 'Generate API key for CUPS',
- generateAPIKeyLNS: 'Generate API key for LNS',
})
const PacketBrokerURL = (
@@ -125,7 +123,7 @@ const GatewayRegistrationFormSections = () => {
{
{
title={sharedMessages.emailAddress}
component={Input}
name="email"
- placeholder={m.emailPlaceholder}
+ placeholder={sharedMessages.emailPlaceholder}
required
/>
diff --git a/pkg/webui/console/containers/lora-cloud-das-form/index.js b/pkg/webui/console/containers/lora-cloud-das-form/index.js
index 28f2da31088..fc5e5408e09 100644
--- a/pkg/webui/console/containers/lora-cloud-das-form/index.js
+++ b/pkg/webui/console/containers/lora-cloud-das-form/index.js
@@ -49,7 +49,6 @@ const m = defineMessages({
fPortSetDescription:
'Comma separated list of F-Port values (1-223) to be used for LoRa Cloud Modem Services',
modemEncoding: 'LoRa Edge Reference Tracker (Modem-E) encoding',
- setLoRaCloudToken: 'Set LoRa Cloud token',
deleteWarning:
'Are you sure you want to delete the LoRa Cloud Modem and Geolocation Services token? This action cannot be undone.',
fPortSetValidationFormat:
diff --git a/pkg/webui/console/containers/lora-cloud-gls-form/index.js b/pkg/webui/console/containers/lora-cloud-gls-form/index.js
index 0fb72fc0022..492852e3b7e 100644
--- a/pkg/webui/console/containers/lora-cloud-gls-form/index.js
+++ b/pkg/webui/console/containers/lora-cloud-gls-form/index.js
@@ -45,7 +45,6 @@ import {
const m = defineMessages({
tokenDescription: 'Geolocation access token as configured within LoRa Cloud',
- setLoRaCloudToken: 'Set LoRa Cloud token',
deleteWarning:
'Are you sure you want to delete the LoRaCloud Geolocation token? This action cannot be undone.',
queryType: 'Query type',
diff --git a/pkg/webui/console/containers/pubsub-formats-select/index.js b/pkg/webui/console/containers/pubsub-formats-select/index.js
index 6605ee29683..5be33ca11a1 100644
--- a/pkg/webui/console/containers/pubsub-formats-select/index.js
+++ b/pkg/webui/console/containers/pubsub-formats-select/index.js
@@ -25,7 +25,6 @@ import {
} from '@console/store/selectors/pubsub-formats'
const m = defineMessages({
- title: 'Pub/Sub format',
warning: 'Pub/Sub formats unavailable',
})
diff --git a/pkg/webui/console/containers/pubsubs-table/index.js b/pkg/webui/console/containers/pubsubs-table/index.js
index 3e548c07d30..6e555ea6632 100644
--- a/pkg/webui/console/containers/pubsubs-table/index.js
+++ b/pkg/webui/console/containers/pubsubs-table/index.js
@@ -30,7 +30,6 @@ import { getPubsubsList } from '@console/store/actions/pubsubs'
import { selectPubsubs, selectPubsubsTotalCount } from '@console/store/selectors/pubsubs'
const m = defineMessages({
- format: 'Format',
host: 'Server host',
})
@@ -74,7 +73,7 @@ const headers = [
},
{
name: 'format',
- displayName: m.format,
+ displayName: sharedMessages.format,
width: 9,
sortable: true,
},
diff --git a/pkg/webui/console/containers/user-data-form/add.js b/pkg/webui/console/containers/user-data-form/add.js
index 46ac8e7fc81..993d5f50f01 100644
--- a/pkg/webui/console/containers/user-data-form/add.js
+++ b/pkg/webui/console/containers/user-data-form/add.js
@@ -16,7 +16,7 @@ import React, { useCallback, useState } from 'react'
import { useSelector, useDispatch } from 'react-redux'
import { useNavigate } from 'react-router-dom'
import { Container, Col, Row } from 'react-grid-system'
-import { defineMessages, useIntl } from 'react-intl'
+import { useIntl } from 'react-intl'
import PageTitle from '@ttn-lw/components/page-title'
import Form from '@ttn-lw/components/form'
@@ -44,22 +44,6 @@ const approvalStates = [
'STATE_SUSPENDED',
]
-const m = defineMessages({
- adminLabel: 'Grant this user admin status',
- adminDescription:
- 'Admin status enables overarching rights such as managing other users or modifying entities regardless of collaboration status',
- userDescPlaceholder: 'Description for my new user',
- userDescDescription: 'Optional user description; can also be used to save notes about the user',
- userIdPlaceholder: 'jane-doe',
- userNamePlaceholder: 'Jane Doe',
- emailPlaceholder: 'mail@example.com',
- emailAddressDescription:
- 'Primary email address used for logging in; this address is not publicly visible',
- emailAddressValidation: 'Treat email address as validated',
- emailAddressValidationDescription:
- 'Enable this option if you do not need this user to validate the email address',
-})
-
const baseValidationSchema = Yup.object().shape({
ids: Yup.object().shape({
user_id: Yup.string()
@@ -152,22 +136,22 @@ const UserDataFormAdd = () => {
@@ -181,14 +165,14 @@ const UserDataFormAdd = () => {
PERMANENTLY DELETE THIS ACCOUNT and LOCK THE USER ID AND EMAIL FOR RE-REGISTRATION. Associated entities (e.g. gateways, applications and end devices) owned by this user that do not have any other collaborators will become UNACCESSIBLE and it will NOT BE POSSIBLE TO REGISTER ENTITIES WITH THE SAME ID OR EUI's AGAIN. Make sure you assign new collaborators to such entities if you plan to continue using them.",
purgeWarning:
@@ -180,22 +166,22 @@ const UserDataFormEdit = () => {
@@ -209,14 +195,14 @@ const UserDataFormEdit = () => {
@@ -224,7 +210,7 @@ const UserDataFormEdit = () => {
message={sharedMessages.userDelete}
entityId={initialValues?.ids?.user_id}
entityName={initialValues?.name}
- title={m.deleteTitle}
+ title={sharedMessages.accountDeleteConfirmation}
confirmMessage={m.deleteConfirmMessage}
defaultMessage={m.deleteWarning}
purgeMessage={m.purgeWarning}
diff --git a/pkg/webui/console/containers/webhook-edit/index.js b/pkg/webui/console/containers/webhook-edit/index.js
index f95362ea24d..cdfd339e636 100644
--- a/pkg/webui/console/containers/webhook-edit/index.js
+++ b/pkg/webui/console/containers/webhook-edit/index.js
@@ -13,7 +13,6 @@
// limitations under the License.
import React, { useState } from 'react'
-import { defineMessages } from 'react-intl'
import { useDispatch } from 'react-redux'
import { useNavigate } from 'react-router-dom'
@@ -26,16 +25,10 @@ import WebhookForm from '@console/components/webhook-form'
import diff from '@ttn-lw/lib/diff'
import PropTypes from '@ttn-lw/lib/prop-types'
import attachPromise from '@ttn-lw/lib/store/actions/attach-promise'
+import sharedMessages from '@ttn-lw/lib/shared-messages'
import { updateWebhook } from '@console/store/actions/webhooks'
-const m = defineMessages({
- editWebhook: 'Edit webhook',
- updateSuccess: 'Webhook updated',
- deleteSuccess: 'Webhook deleted',
- reactivateSuccess: 'Webhook activated',
-})
-
const WebhookEdit = props => {
const {
selectedWebhook,
@@ -68,7 +61,7 @@ const WebhookEdit = props => {
)
const showSuccessToast = React.useCallback(() => {
toast({
- message: m.updateSuccess,
+ message: sharedMessages.webhookUpdated,
type: toast.types.SUCCESS,
})
}, [])
@@ -94,7 +87,7 @@ const WebhookEdit = props => {
}, [appId, webhookId])
const handleDeleteSuccess = React.useCallback(() => {
toast({
- message: m.deleteSuccess,
+ message: sharedMessages.webhookDeleted,
type: toast.types.SUCCESS,
})
@@ -103,7 +96,7 @@ const WebhookEdit = props => {
const handleReactivateSuccess = React.useCallback(() => {
toast({
- message: m.reactivateSuccess,
+ message: sharedMessages.reactivateSuccess,
type: toast.types.SUCCESS,
})
}, [])
diff --git a/pkg/webui/console/containers/webhook-formats-select/index.js b/pkg/webui/console/containers/webhook-formats-select/index.js
index 1951e6a25c5..49a376819fc 100644
--- a/pkg/webui/console/containers/webhook-formats-select/index.js
+++ b/pkg/webui/console/containers/webhook-formats-select/index.js
@@ -25,7 +25,6 @@ import {
} from '@console/store/selectors/webhook-formats'
const m = defineMessages({
- title: 'Webhook format',
warning: 'Webhook formats unavailable',
})
diff --git a/pkg/webui/console/containers/webhooks-table/index.js b/pkg/webui/console/containers/webhooks-table/index.js
index aaf4a8c1dce..bbc5ab711c5 100644
--- a/pkg/webui/console/containers/webhooks-table/index.js
+++ b/pkg/webui/console/containers/webhooks-table/index.js
@@ -36,8 +36,6 @@ import style from './webhooks-table.styl'
const m = defineMessages({
templateId: 'Template ID',
- format: 'Format',
- baseUrl: 'Base URL',
healthy: 'Healthy',
pending: 'Pending',
requestsFailing: 'Requests failing',
@@ -68,7 +66,7 @@ const WebhooksTable = () => {
},
{
name: 'base_url',
- displayName: m.baseUrl,
+ displayName: sharedMessages.webhookBaseUrl,
width: 40,
sortable: true,
},
diff --git a/pkg/webui/console/lib/events/definitions.js b/pkg/webui/console/lib/events/definitions.js
index 702679b1bd9..a46406c1620 100644
--- a/pkg/webui/console/lib/events/definitions.js
+++ b/pkg/webui/console/lib/events/definitions.js
@@ -14,59 +14,73 @@
import { defineMessages } from 'react-intl'
+import sharedMessages from '@ttn-lw/lib/shared-messages'
+
import { defineSyntheticEvent } from './utils'
-export const eventMessages = defineMessages({
- 'synthetic.error.unknown:type': 'Unknown error',
- 'synthetic.error.unknown:preview':
- 'An unknown error occurred and one or more events could not be retrieved',
- 'synthetic.error.unknown:details':
- 'The Console encountered an unexpected error while handling the event stream data. It is possible that event data could not be displayed (correctly) as a result. Note that this is an internal error which does not imply any malfunction of your gateways or end devices.',
-
- 'synthetic.error.network_error:type': 'Network error',
- 'synthetic.error.network_error:preview': 'The stream connection was lost due to a network error',
- 'synthetic.error.network_error:details':
- 'The Console was not able to fetch further stream events because the network connection of your host machine was interrupted. This can have various causes, such as your host machine switching Wi-Fi networks or experiencing drops in signal strength. Please check your internet connection and ensure a stable internet connection to avoid stream disconnects. The stream will reconnect automatically once the internet connection has been re-established.',
-
- 'synthetic.status.reconnecting:type': 'Reconnecting',
- 'synthetic.status.reconnecting:preview': 'Attempting to reconnect…',
- 'synthetic.status.reconnecting:details':
- 'The Console will periodically try to reconnect to the event stream if the connection was interrupted.',
-
- 'synthetic.status.reconnected:type': 'Stream reconnected',
- 'synthetic.status.reconnected:preview': 'The stream connection has been re-established',
- 'synthetic.status.reconnected:details':
- 'The Console was able to reconnect to the internet and resumed the event stream. Subsequent event data will be received and displayed. Note that event data which was possibly emitted during the network disruption will not be re-delivered.',
-
- 'synthetic.status.closed:type': 'Stream connection closed',
- 'synthetic.status.closed:preview': 'The connection was closed by the stream provider',
- 'synthetic.status.closed:details':
- 'The Console received a close signal from the stream provider. This usually means that the backend server shut down. This can have various causes, such as scheduled maintenance or malfunction which caused a forced restart. The Console will then reconnect automatically once the stream provider becomes available again.',
-
- 'synthetic.status.cleared:type': 'Events cleared',
- 'synthetic.status.cleared:preview': 'The events list has been cleared',
- 'synthetic.status.cleared:details': 'The list of displayed events has been cleared.',
-
- 'synthetic.status.paused:type': 'Stream paused',
- 'synthetic.status.paused:preview': 'The event stream has been paused',
- 'synthetic.status.paused:details':
- 'The event stream has been paused by the user. Subsequent event data will not be displayed until the stream is resumed.',
-
- 'synthetic.status.resumed:type': 'Stream resumed',
- 'synthetic.status.resumed:preview': 'The event stream has been resumed after being paused',
- 'synthetic.status.resumed:details':
- 'The event stream has been resumed by the user and will receive new subsequent event data. Note that event data which was possibly emitted during the stream pause will not be re-delivered.',
-
- 'synthetic.status.filter_enabled:type': 'Filter enabled',
- 'synthetic.status.filter_enabled:preview': 'An event filter has been enabled',
- 'synthetic.status.filter_enabled:details':
- 'The event stream will now be filtered, meaning that some event types may be suppressed. See the details below for more information about the currently enabled filter.',
-
- 'synthetic.status.filter_disabled:type': 'Filter disabled',
- 'synthetic.status.filter_disabled:preview': 'The previously set event filter has been disabled',
- 'synthetic.status.filter_disabled:details':
- 'The event stream will not be filtered anymore. This means that you will see all events that come out of the event stream for this entity.',
-})
+export const eventMessages = {
+ 'synthetic.error.unknown:type': sharedMessages.unknownError,
+ ...defineMessages({
+ 'synthetic.error.unknown:preview':
+ 'An unknown error occurred and one or more events could not be retrieved',
+
+ 'synthetic.error.unknown:details':
+ 'The Console encountered an unexpected error while handling the event stream data. It is possible that event data could not be displayed (correctly) as a result. Note that this is an internal error which does not imply any malfunction of your gateways or end devices.',
+
+ 'synthetic.error.network_error:type': 'Network error',
+
+ 'synthetic.error.network_error:preview':
+ 'The stream connection was lost due to a network error',
+
+ 'synthetic.error.network_error:details':
+ 'The Console was not able to fetch further stream events because the network connection of your host machine was interrupted. This can have various causes, such as your host machine switching Wi-Fi networks or experiencing drops in signal strength. Please check your internet connection and ensure a stable internet connection to avoid stream disconnects. The stream will reconnect automatically once the internet connection has been re-established.',
+
+ 'synthetic.status.reconnecting:type': 'Reconnecting',
+ 'synthetic.status.reconnecting:preview': 'Attempting to reconnect…',
+
+ 'synthetic.status.reconnecting:details':
+ 'The Console will periodically try to reconnect to the event stream if the connection was interrupted.',
+
+ 'synthetic.status.reconnected:type': 'Stream reconnected',
+ 'synthetic.status.reconnected:preview': 'The stream connection has been re-established',
+
+ 'synthetic.status.reconnected:details':
+ 'The Console was able to reconnect to the internet and resumed the event stream. Subsequent event data will be received and displayed. Note that event data which was possibly emitted during the network disruption will not be re-delivered.',
+
+ 'synthetic.status.closed:type': 'Stream connection closed',
+ 'synthetic.status.closed:preview': 'The connection was closed by the stream provider',
+
+ 'synthetic.status.closed:details':
+ 'The Console received a close signal from the stream provider. This usually means that the backend server shut down. This can have various causes, such as scheduled maintenance or malfunction which caused a forced restart. The Console will then reconnect automatically once the stream provider becomes available again.',
+
+ 'synthetic.status.cleared:type': 'Events cleared',
+ 'synthetic.status.cleared:preview': 'The events list has been cleared',
+ 'synthetic.status.cleared:details': 'The list of displayed events has been cleared.',
+ 'synthetic.status.paused:type': 'Stream paused',
+ 'synthetic.status.paused:preview': 'The event stream has been paused',
+
+ 'synthetic.status.paused:details':
+ 'The event stream has been paused by the user. Subsequent event data will not be displayed until the stream is resumed.',
+
+ 'synthetic.status.resumed:type': 'Stream resumed',
+ 'synthetic.status.resumed:preview': 'The event stream has been resumed after being paused',
+
+ 'synthetic.status.resumed:details':
+ 'The event stream has been resumed by the user and will receive new subsequent event data. Note that event data which was possibly emitted during the stream pause will not be re-delivered.',
+
+ 'synthetic.status.filter_enabled:type': 'Filter enabled',
+ 'synthetic.status.filter_enabled:preview': 'An event filter has been enabled',
+
+ 'synthetic.status.filter_enabled:details':
+ 'The event stream will now be filtered, meaning that some event types may be suppressed. See the details below for more information about the currently enabled filter.',
+
+ 'synthetic.status.filter_disabled:type': 'Filter disabled',
+ 'synthetic.status.filter_disabled:preview': 'The previously set event filter has been disabled',
+
+ 'synthetic.status.filter_disabled:details':
+ 'The event stream will not be filtered anymore. This means that you will see all events that come out of the event stream for this entity.',
+ }),
+}
export const EVENT_UNKNOWN_ERROR = 'synthetic.error.unknown'
export const EVENT_NETWORK_ERROR = 'synthetic.error.network_error'
diff --git a/pkg/webui/console/lib/packet-broker/messages.js b/pkg/webui/console/lib/packet-broker/messages.js
index b1c3ae99771..5ab1c4f8dba 100644
--- a/pkg/webui/console/lib/packet-broker/messages.js
+++ b/pkg/webui/console/lib/packet-broker/messages.js
@@ -15,10 +15,8 @@
import { defineMessages } from 'react-intl'
export default defineMessages({
- applicationData: 'Application data',
applicationDataAllowDesc: 'Allow downlink messages with FPort between 1 and 255',
applicationDataDesc: 'Forward uplink messages with FPort 1-255',
- joinAccept: 'Join accept',
joinAcceptDesc: 'Allow join accept messages',
joinRequest: 'Join request',
joinRequestDesc: 'Forward join-request messages',
@@ -29,52 +27,31 @@ export default defineMessages({
macDataDesc: 'Forward uplink messages with FPort 0',
signalQualityInformation: 'Signal quality information',
signalQualityInformationDesc: 'Forward RSSI and SNR',
-
forwardsJoinRequest: 'Join request messages are forwarded',
doesNotForwardJoinRequest: 'Join request messages are not forwarded',
-
forwardsMacData: 'MAC data is forwarded',
doesNotForwardMacData: 'MAC data is not forwarded',
-
forwardsApplicationData: 'Application data is forwarded',
doesNotForwardApplicationData: 'Application data is not forwarded',
-
forwardsSignalQuality: 'Signal quality information is forwarded',
doesNotForwardSignalQuality: 'Signal quality information is not forwarded',
-
forwardsLocalization: 'Localization information is forwarded',
doesNotForwardLocalization: 'Localization information is not forwarded',
-
allowsJoinAccept: 'Join accept messages are allowed',
doesNotAllowJoinAccept: 'Join accept messages are not allowed',
-
allowsMacData: 'MAC data is allowed',
doesNotAllowMacData: 'MAC data is not allowed',
-
allowsApplicationData: 'Application data is allowed',
doesNotAllowApplicationData: 'Application data is not allowed',
-
uplinkPolicies: 'This top row shows the uplink forwarding policies of this network',
downlinkPolicies: 'This bottom row shows the downlink policies of this network',
-
- gatewayLocationLabel: 'Location',
-
gatewayAntennaPlacementLabel: 'Antenna placement',
gatewayAntennaPlacementDescription: 'Show antenna placement (indoor/outdoor)',
-
gatewayAntennaCountLabel: 'Antenna count',
-
gatewayFineTimestampsLabel: 'Fine timestamps',
gatewayFineTimestampsDescription: 'Whether the gateway produces fine timestamps',
-
- gatewayContactInfoLabel: 'Contact information',
gatewayContactInfoDescription: 'Show means to contact the gateway owner or operator',
-
- gatewayStatusLabel: 'Status',
gatewayStatusDescription: 'Show whether the gateway is online or offline',
-
- gatewayFreqPlanLabel: 'Frequency plan',
-
gatewayPacketRatesLabel: 'Packet rates',
gatewayPacketRatesDescription: 'Receive and transmission packet rates',
})
diff --git a/pkg/webui/console/views/admin-packet-broker/messages.js b/pkg/webui/console/views/admin-packet-broker/messages.js
index c61d54e5faf..bdcc4304eb5 100644
--- a/pkg/webui/console/views/admin-packet-broker/messages.js
+++ b/pkg/webui/console/views/admin-packet-broker/messages.js
@@ -45,8 +45,6 @@ export default defineMessages({
defaultRoutingPolicySet: 'Default routing policy set',
routingPolicySet: 'Routing policy set',
defaultRoutingPolicy: 'Default routing policy',
- networks: 'Networks',
- networkInformation: 'Network information',
devAddressBlock: 'Device address block',
devAddressBlocks: 'Device address blocks',
lastPolicyChange: 'Last policy change',
diff --git a/pkg/webui/console/views/admin-panel-network-information/index.js b/pkg/webui/console/views/admin-panel-network-information/index.js
index 64ad3e9617b..9f01c14f0a7 100644
--- a/pkg/webui/console/views/admin-panel-network-information/index.js
+++ b/pkg/webui/console/views/admin-panel-network-information/index.js
@@ -13,7 +13,6 @@
// limitations under the License.
import React from 'react'
-import { defineMessages } from 'react-intl'
import Breadcrumb from '@ttn-lw/components/breadcrumbs/breadcrumb'
import { useBreadcrumbs } from '@ttn-lw/components/breadcrumbs/context'
@@ -24,19 +23,20 @@ import RequireRequest from '@ttn-lw/lib/components/require-request'
import NetworkInformationContainer from '@console/containers/network-information-container'
import DeploymentComponentStatus from '@console/containers/deployment-component-status'
+import sharedMessages from '@ttn-lw/lib/shared-messages'
+
import { getApplicationsList } from '@console/store/actions/applications'
import { getGatewaysList } from '@console/store/actions/gateways'
import { getUsersList } from '@console/store/actions/users'
import { getOrganizationsList } from '@console/store/actions/organizations'
-const m = defineMessages({
- title: 'Network information',
-})
-
const NetworkInformation = () => {
useBreadcrumbs(
'admin-panel.network-information',
- ,
+ ,
)
const requestActions = [
@@ -49,7 +49,7 @@ const NetworkInformation = () => {
return (
<>
-
+
diff --git a/pkg/webui/console/views/admin-panel/index.js b/pkg/webui/console/views/admin-panel/index.js
index 3f870651120..cbb9450d6da 100644
--- a/pkg/webui/console/views/admin-panel/index.js
+++ b/pkg/webui/console/views/admin-panel/index.js
@@ -30,6 +30,8 @@ import UserManagement from '@console/views/admin-user-management'
import PacketBrokerRouter from '@console/views/admin-packet-broker'
import NetworkInformation from '@console/views/admin-panel-network-information'
+import sharedMessages from '@ttn-lw/lib/shared-messages'
+
import {
checkFromState,
mayConfigurePacketBroker,
@@ -39,7 +41,6 @@ import {
const m = defineMessages({
adminPanel: 'Admin panel',
- networkInformation: 'Network information',
userManagement: 'User management',
globalNetworkSettings: 'Global network settings',
peeringSettings: 'Peering settings',
@@ -56,7 +57,7 @@ const AdminPanel = () => {
{
const { appId } = useParams()
@@ -42,7 +37,7 @@ const ApplicationData = () => {
useBreadcrumbs(
'apps.single.data',
- ,
+ ,
)
return (
@@ -50,7 +45,7 @@ const ApplicationData = () => {
featureCheck={mayViewApplicationEvents}
otherwise={{ redirect: `/applications/${appId}` }}
>
-
+
)
diff --git a/pkg/webui/console/views/application-integrations-lora-cloud/index.js b/pkg/webui/console/views/application-integrations-lora-cloud/index.js
index 96500d7a8c6..1798c12efde 100644
--- a/pkg/webui/console/views/application-integrations-lora-cloud/index.js
+++ b/pkg/webui/console/views/application-integrations-lora-cloud/index.js
@@ -52,7 +52,6 @@ const m = defineMessages({
loraCloudInfoText:
'Lora Cloud provides value added APIs that enable simple solutions for common tasks related to LoRaWAN networks and LoRa-based devices. You can setup our LoRaCloud integrations below.',
officialLoRaCloudDocumentation: 'Official LoRa Cloud documentation',
- setToken: 'Set LoRa Cloud token',
dasDescription:
'With the LoRa Cloud Modem and Geolocation Services protocol, you can manage common device functionality at the application layer for LoRaWAN-enabled devices.',
glsDescription:
@@ -108,11 +107,11 @@ const LoRaCloud = () => {
-
+
-
+
diff --git a/pkg/webui/console/views/application-integrations-webhook-edit/index.js b/pkg/webui/console/views/application-integrations-webhook-edit/index.js
index 5de814e94a9..99ce00d393d 100644
--- a/pkg/webui/console/views/application-integrations-webhook-edit/index.js
+++ b/pkg/webui/console/views/application-integrations-webhook-edit/index.js
@@ -14,7 +14,6 @@
import React from 'react'
import { Container, Col, Row } from 'react-grid-system'
-import { defineMessages } from 'react-intl'
import { useSelector } from 'react-redux'
import { useParams } from 'react-router-dom'
@@ -39,13 +38,6 @@ import {
selectWebhookHasUnhealthyConfig,
} from '@console/store/selectors/application-server'
-const m = defineMessages({
- editWebhook: 'Edit webhook',
- updateSuccess: 'Webhook updated',
- deleteSuccess: 'Webhook deleted',
- reactivateSuccess: 'Webhook activated',
-})
-
const ApplicationWebhookEditInner = () => {
const { appId, webhookId } = useParams()
const healthStatusEnabled = useSelector(selectWebhooksHealthStatusEnabled)
@@ -64,7 +56,11 @@ const ApplicationWebhookEditInner = () => {
return (
-
+
?',
+ deleteModalConfirmDeletion: 'Confirm deletion',
+ deleteModalConfirmMessage: 'Please enter
{entityId}
to confirm the deletion.',
deleteModalDefaultMessage:
'This will PERMANENTLY DELETE THE ENTITY ITSELF AND ALL ASSOCIATED ENTITIES, including collaborator associations. It will also NOT BE POSSIBLE TO REUSE THE ENTITY ID.',
deleteModalPurgeMessage:
'This will PERMANENTLY DELETE THE ENTITY ITSELF AND ALL ASSOCIATED ENTITIES, including collaborator associations.',
- deleteModalConfirmMessage: 'Please enter
{entityId}
to confirm the deletion.',
- deleteModalConfirmDeletion: 'Confirm deletion',
deleteModalPurgeWarning:
'Releasing the entity IDs will make it possible to register a new entity with the same ID. Note that this irreversible and may lead to other users gaining access to historical data of the entity if they register an entity with the same ID . Please make sure you understand the implications of purging as described here.',
- deleteModalReleaseIdTitle: 'Entity purge (admin only)',
deleteModalReleaseIdLabel: 'Also release entity IDs (purge)',
+ deleteModalReleaseIdTitle: 'Entity purge (admin only)',
+ deleteModalTitle: 'Are you sure you want to delete
{entityName}
?',
+ deleted: 'Deleted (Admin)',
description: 'Description',
devAddr: 'Device address',
devDesc: 'End device description',
devEUI: 'DevEUI',
devEUIBlockLimitReached: 'DevEUI generation limit reached',
+ devID: 'End device ID',
+ devName: 'End device name',
+ device: 'End device',
deviceCounted: '{count, plural, one {End device} other {End devices}}',
deviceDescDescription:
'Optional end device description; can also be used to save notes about the end device',
deviceDescPlaceholder: 'Description for my new end device',
+ deviceHardwareVersionAbsence:
+ 'Contact the manufacturer or reseller of your device. Providing an incorrect hardware version can result in unwanted device behavior.',
deviceIdPlaceholder: 'my-new-device',
deviceNamePlaceholder: 'My new end device',
deviceSimulationDisabledWarning: 'Simulation is disabled for devices that skip payload crypto',
- device: 'End device',
devices: 'End devices',
- devID: 'End device ID',
- devName: 'End device name',
disabled: 'Disabled',
disconnected: 'Disconnected',
documentation: 'Documentation',
@@ -168,21 +192,28 @@ export default defineMessages({
downlinkFrameCount: 'Downlink frame count',
downlinkNack: 'Downlink nack',
downlinkPush: 'Downlink push',
- downlinkQueued: 'Downlink queued',
downlinkQueueInvalidated: 'Downlink queue invalidated',
+ downlinkQueued: 'Downlink queued',
downlinkReplace: 'Downlink replace',
downlinkSent: 'Downlink sent',
downlinksScheduled: 'Downlinks (re)scheduled',
edit: 'Edit',
+ editWebhook: 'Edit webhook',
email: 'Email',
emailAddress: 'Email address',
+ emailAddressDescription:
+ 'Primary email address used for logging in; this address is not publicly visible',
+ emailAddressValidation: 'Treat email address as validated',
+ emailAddressValidationDescription:
+ 'Enable this option if you do not need this user to validate the email address',
+ emailPlaceholder: 'mail@example.com',
empty: 'Empty',
enabled: 'Enabled',
+ endDeviceModelsUnavailable: 'End device models unavailable',
+ enforceDutyCycle: 'Enforce duty cycle',
enforceDutyCycleDescription:
'Recommended for all gateways in order to respect spectrum regulations',
- enforceDutyCycle: 'Enforce duty cycle',
entityId: 'Entity ID',
- eventEnabledTypes: 'Enabled event types',
eventDownlinkAckDesc: 'A confirmed downlink is acknowledged by an end device',
eventDownlinkFailedDesc: 'A downlink cannot be sent',
eventDownlinkNackDesc: 'A sent confirmed downlink fails confirmation by the end device',
@@ -191,6 +222,7 @@ export default defineMessages({
eventDownlinkQueuedDesc: 'A downlink is added to the downlink queue',
eventDownlinkReplaceDesc: 'A downlink is used to replace the downlink queue',
eventDownlinkSentDesc: 'A downlink is sent to an end device or multicast group',
+ eventEnabledTypes: 'Enabled event types',
eventJoinAcceptDesc: 'An end device successfully joins the network and starts a session',
eventLocationSolvedDesc: 'An integration succeeded locating the end device',
eventServiceDataDesc: 'An integration emits an event',
@@ -201,10 +233,16 @@ export default defineMessages({
exportJson: 'Export as JSON',
external: 'External',
externalJoinServer: 'External Join Server',
+ fNwkSIntKey: 'FNwkSIntKey',
+ factoryPresetFrequencies: 'Factory preset frequencies',
fetching: 'Fetching data…',
firmwareVersion: 'Firmware version',
- fNwkSIntKey: 'FNwkSIntKey',
+ format: 'Format',
+ fpNotFoundError:
+ 'The LoRaWAN version {lorawanVersion} does not support the {freqPlan} frequency plan. Please choose a different MAC version or frequency plan.',
frameCounterWidth: 'Frame counter width',
+ freqAdd: 'Add Frequency',
+ frequencyPlaceholder: 'e.g. 869525000 for 869,525 MHz',
frequencyPlan: 'Frequency plan',
frequencyPlanWarning:
'Without choosing a frequency plan, packets from the gateway will not be correctly processed',
@@ -221,18 +259,20 @@ export default defineMessages({
gatewayLocationPublic: 'Share location within network',
gatewayName: 'Gateway name',
gatewayNamePlaceholder: 'My new gateway',
- gateways: 'Gateways',
gatewayScheduleDownlinkLate: 'Schedule downlink late',
gatewayServerAddress: 'Gateway Server address',
gatewayStatus: 'Gateway status',
gatewayStatusPublic: 'Share status within network',
gatewayUpdateOptions: 'Gateway updates',
- generateAPIKeyCups: 'Generate API key for CUPS',
- generateAPIKeyLNS: 'Generate API key for LNS',
+ gateways: 'Gateways',
general: 'General',
generalInformation: 'General information',
generalSettings: 'General settings',
+ generateAPIKeyCups: 'Generate API key for CUPS',
+ generateAPIKeyLNS: 'Generate API key for LNS',
getSupport: 'Get support',
+ grantAdminStatus: 'Grant this user admin status',
+ grpcService: 'GRPC service',
gsServerAddressDescription: 'The address of the Gateway Server to connect to',
hardware: 'Hardware',
hardwareVersion: 'Hardware version',
@@ -243,12 +283,12 @@ export default defineMessages({
idAlreadyExists: 'ID already exists',
import: 'Import',
importDevices: 'Import end devices',
- integrations: 'Integrations',
- invite: 'Invite',
- joinAccept: 'Join accept',
inputMethod: 'Input method',
insufficientAppKeyRights: 'Insufficient rights to set an AppKey',
insufficientNwkKeyRights: 'Insufficient rights to set a NwkKey',
+ integrations: 'Integrations',
+ invite: 'Invite',
+ joinAccept: 'Join accept',
joinEUI: 'JoinEUI',
joinServerAddress: 'Join Server address',
key: 'key',
@@ -268,20 +308,21 @@ export default defineMessages({
'When set to public, the gateway location may be visible to other users of the network',
locationMarkerDescriptionNonUser:
'This location has been set automatically from incoming (status) messages',
- locationMarkerDescriptionUser:
- 'This location has been set manually (e.g. by using the "Location"-tab)',
locationMarkerDescriptionUntrusted:
'This location was determined via an untrusted status message and may be inaccurate',
+ locationMarkerDescriptionUser:
+ 'This location has been set manually (e.g. by using the "Location"-tab)',
locationSolved: 'Location solved',
+ locationSourceBtRssi: 'Bluetooth RSSI geolocation',
+ locationSourceCombined: 'Combined geolocation',
locationSourceGps: 'GPS-based location',
- locationSourceRegistry: 'Manually set location',
locationSourceIpGeolocation: 'IP-based geolocation',
- locationSourceWifiRssi: 'Wifi RSSI geolocation',
- locationSourceBtRssi: 'Bluetooth RSSI geolocation',
locationSourceLoraRssi: 'LoRa RSSI geolocation',
locationSourceLoraTdoa: 'LoRa TDOA geolocation',
- locationSourceCombined: 'Combined geolocation',
+ locationSourceRegistry: 'Manually set location',
+ locationSourceWifiRssi: 'Wifi RSSI geolocation',
login: 'Login',
+ loginFailed: 'Login failed',
logout: 'Logout',
longitude: 'Longitude',
longitudeDesc: 'The east-west position in degrees, where 0 is the prime meridian (Greenwich)',
@@ -291,10 +332,12 @@ export default defineMessages({
lorawanInformation: 'LoRaWAN information',
lorawanOptions: 'LoRaWAN options',
lorawanPhyVersionDescription: 'The LoRaWAN PHY version of the end device',
+ macSettingsError:
+ 'There was an error and the default MAC settings for the {freqPlan} frequency plan could not be loaded',
macVersion: 'LoRaWAN version',
+ messageTypes: 'Message types',
messages: 'messages',
messaging: 'Messaging',
- messageTypes: 'Message types',
milliseconds: 'milliseconds',
minutes: 'minutes',
model: 'Model',
@@ -303,24 +346,25 @@ export default defineMessages({
multicast: 'Define multicast group (ABP & Multicast)',
name: 'Name',
netId: 'Net ID',
- networks: 'Networks',
+ networkInformation: 'Network information',
networkServerAddress: 'Network Server address',
+ networks: 'Networks',
never: 'Never',
next: 'Next',
noActivityYet: 'No activity yet',
- noRecentActivity: 'No recent activity',
noDesc: 'This end device has no description',
noEvents: 'Waiting for events from
{entityId}
…',
noLocation: 'No location information available',
noMatch: 'No items found',
+ noMatchingUserFound: 'No matching user or organization was found',
+ noRecentActivity: 'No recent activity',
none: 'None',
- normalizedPayloadSoil: 'Soil',
normalizedPayloadAir: 'Air',
+ normalizedPayloadSoil: 'Soil',
normalizedPayloadWind: 'Wind',
notAvailable: 'n/a',
notLinked: 'Not linked',
notSet: 'Not set',
- nsAddress: 'Network Server address',
nsEmptyDefault: 'Leave empty to link to the Network Server in the same cluster',
nsServerKekLabel: 'Network Server KEK label',
nsServerKekLabelDescription:
@@ -329,9 +373,9 @@ export default defineMessages({
nwkSEncKey: 'NwkSEncKey',
nwkSEncKeyDescription: 'Network session encryption key',
nwkSKey: 'NwkSKey',
- oauthClients: 'OAuth clients',
- oauthClientId: 'OAuth client ID',
oauthClientAuthorizations: 'OAuth client authorizations',
+ oauthClientId: 'OAuth client ID',
+ oauthClients: 'OAuth clients',
offline: 'Offline',
ok: 'Ok',
online: 'Online',
@@ -357,6 +401,8 @@ export default defineMessages({
phyVersion: 'Regional Parameters version',
phyVersionDescription:
'The Regional Parameters version (PHY), as provided by the device manufacturer',
+ pingSlotFrequency: 'Ping slot frequency',
+ pingSlotPeriodicity: 'Ping slot periodicity',
port: 'Port',
privacyPolicy: 'Privacy policy',
profileSettings: 'Profile settings',
@@ -371,17 +417,18 @@ export default defineMessages({
refresh: 'Refresh',
registerEndDevice: 'Register end device',
registerGateway: 'Register gateway',
- replaceWebhook: 'Replace webhook',
+ remove: 'Remove',
removeCollaborator: 'Remove collaborator',
- removeCollaboratorSelf: 'Remove yourself as collaborator',
removeCollaboratorLast: 'Cannot remove last collaborator',
+ removeCollaboratorSelf: 'Remove yourself as collaborator',
+ replaceWebhook: 'Replace webhook',
requireAuthenticatedConnection: 'Require authenticated connection',
requireAuthenticatedConnectionDescription:
'Controls whether this gateway may only connect if it uses an authenticated Basic Station or MQTT connection',
reset: 'Reset',
+ resetWarning: 'Reseting is insecure and makes your end device susceptible for replay attacks',
resetsFCnt: 'Resets frame counters',
resetsJoinNonces: 'Resets join nonces',
- resetWarning: 'Reseting is insecure and makes your end device susceptible for replay attacks',
restartStream: 'Restart stream',
restore: 'Restore',
restrictedUser:
@@ -389,41 +436,48 @@ export default defineMessages({
resume: 'Resume',
rights: 'Rights',
rootKeys: 'Root keys',
+ rx1DataRateOffset: 'Rx1 data rate offset',
+ rx1Delay: 'Rx1 delay',
+ rx2Frequency: 'Rx2 frequency',
+ sNwkSIKey: 'SNwkSIntKey',
+ sNwkSIKeyDescription: 'Serving network session integrity key',
saveChanges: 'Save changes',
+ scanEndDevice: 'Scan end device QR code',
scheduleAnyTimeDelay: 'Schedule any time delay',
scheduleAnyTimeDescription:
'Configure gateway delay (minimum: {minimumValue}ms, default: {defaultValue}ms)',
scheduleDownlinkLateDescription: 'Enable server-side buffer of downlink messages',
search: 'Search',
+ secondInterval: '{count, plural, one {every second} other {every {count} seconds}}',
seconds: 'seconds',
secondsAbbreviated: 'sec',
secret: 'Secret',
secure: 'Secure',
sendInvitation: 'Send invitation',
- sessions: 'Sessions',
serverUrl: 'Server URL',
serviceData: 'Service data',
+ sessions: 'Sessions',
+ setLoRaCloudToken: 'Set LoRa Cloud token',
settings: 'Settings',
shareGatewayInfo: 'Share gateway information',
skipCryptoDescription: 'Skip decryption of uplink payloads and encryption of downlink payloads',
skipCryptoPlaceholder: 'Encryption/decryption disabled',
skipCryptoTitle: 'Skip payload encryption and decryption',
- sNwkSIKey: 'SNwkSIntKey',
- sNwkSIKeyDescription: 'Serving network session integrity key',
source: 'Source',
stable: 'Stable',
state: 'State',
- stateDescription: 'State description',
stateApproved: 'Approved',
+ stateDescription: 'State description',
stateFlagged: 'Flagged',
stateRejected: 'Rejected',
stateRequested: 'Requested',
stateSuspended: 'Suspended',
status: 'Status',
statusDescription: 'The status of this gateway may be visible to other users',
- statusUnknown: 'Status unknown',
statusPage: 'Status page',
+ statusUnknown: 'Status unknown',
success: 'Success',
+ suggestions: 'Suggestions',
supportsClassB: 'Supports class B',
supportsClassC: 'Supports class C',
takeMeBack: 'Take me back',
@@ -440,9 +494,10 @@ export default defineMessages({
troubleshooting: 'Troubleshooting',
type: 'Type',
typeToSearch: 'Type to search…',
- unknownHwOption: 'Unknown ver.',
+ unexposed: 'Unexposed',
unknown: 'Unknown',
- unknownError: 'Unknown error while generating DevEUI',
+ unknownError: 'Unknown error',
+ unknownHwOption: 'Unknown ver.',
updateChannelDescription: 'Channel for gateway automatic updates',
updatedAt: 'Last updated at',
uplink: 'Uplink',
@@ -450,26 +505,33 @@ export default defineMessages({
uplinkMessage: 'Uplink message',
uplinkNormalized: 'Normalized uplink',
uplinksReceived: 'Uplinks received',
- unexposed: 'Unexposed',
+ uploadAnImage: 'Upload an image',
used: '{currentValue}/{maxValue} used',
user: 'User',
userAdd: 'Add user',
userDelete: 'Delete user',
+ userDescDescription: 'Optional user description; can also be used to save notes about the user',
+ userDescription: 'Description for my new user',
userEdit: 'Edit user',
userId: 'User ID',
+ userIdPlaceholder: 'jane-doe',
userInvitations: 'User invitations',
userManagement: 'User management',
+ userNamePlaceholder: 'Jane Doe',
+ userOrgId: 'User / Organization ID',
username: 'Username',
users: 'Users',
+ validFrom: 'Valid from',
+ validTo: 'Valid to',
validateAddressFormat: '{field} must be in the format "host" or "host:port"',
validateApiKey: 'API keys must follow the format "NNSXS.[…].[…]"',
validateDateInPast: '{field} must be a date in the future',
validateDelayFormat: '{field} must be a positive, whole number',
validateDigit: '{field} must have at least {digit} {digit, plural, one {digit} other {digits}}',
validateEmail: 'An email address must use exactly one "@", one "." and use no special characters',
+ validateFreqDynamic: '{field} must be 0 for dynamic frequencies or greater than 100000Hz',
validateFreqNumeric: 'All frequency values must be positive integers',
validateFreqRequired: 'All frequency values are required. Please remove empty entries.',
- validateFreqDynamic: '{field} must be 0 for dynamic frequencies or greater than 100000Hz',
validateHexLength: '{field} must be a complete hex value',
validateIdFormat: '{field} must contain only lowercase letters, numbers and dashes (-)',
validateInt32: '{field} must be a whole number, negative or positive',
@@ -495,13 +557,14 @@ export default defineMessages({
validateUppercase:
'{field} must have at least {upper} uppercase {upper, plural, one {character} other {characters}}',
validateUrl: 'Must be a valid URL format, contain no spaces or special characters',
- validFrom: 'Valid from',
- validTo: 'Valid to',
value: 'value',
+ webhookActivated: 'Webhook activated',
webhookAlreadyExistsModalMessage:
'A Webhook with the ID "{id}" already exists. Do you wish to replace this webhook?',
webhookBaseUrl: 'Base URL',
+ webhookDeleted: 'Webhook deleted',
webhookFormat: 'Webhook format',
webhookId: 'Webhook ID',
+ webhookUpdated: 'Webhook updated',
webhooks: 'Webhooks',
})
diff --git a/pkg/webui/locales/en.json b/pkg/webui/locales/en.json
index f3b21b68068..cc9e0a624ee 100644
--- a/pkg/webui/locales/en.json
+++ b/pkg/webui/locales/en.json
@@ -4,7 +4,6 @@
"account.components.oauth-client-form.messages.clientDescPlaceholder": "Description for my new OAuth client",
"account.components.oauth-client-form.messages.clientDescDescription": "The description is displayed to the user when authorizing the client. Use it to explain the purpose of your client.",
"account.components.oauth-client-form.messages.createClient": "Create OAuth client",
- "account.components.oauth-client-form.messages.deleteTitle": "Are you sure you want to delete this account?",
"account.components.oauth-client-form.messages.deleteWarning": "This will PERMANENTLY DELETE THIS OAUTH CLIENT and LOCK THE OAUTH ID. Make sure you assign new collaborators to such entities if you plan to continue using them.",
"account.components.oauth-client-form.messages.purgeWarning": "This will PERMANENTLY DELETE THIS OAUTH CLIENT. This operation cannot be undone.",
"account.components.oauth-client-form.messages.redirectUrls": "Redirect URLs",
@@ -19,9 +18,7 @@
"account.components.oauth-client-form.messages.endorsedDesc": "If set, the authorization page will visually indicate endorsement to improve trust",
"account.components.oauth-client-form.messages.grants": "Grant types",
"account.components.oauth-client-form.messages.grantsDesc": "OAuth flows that can be used for the client to get a token",
- "account.components.oauth-client-form.messages.grantAuthorizationLabel": "Authorization code",
"account.components.oauth-client-form.messages.grantRefreshTokenLabel": "Refresh token",
- "account.components.oauth-client-form.messages.grantPasswordLabel": "Password",
"account.components.oauth-client-form.messages.deleteClient": "Delete OAuth client",
"account.components.oauth-client-form.messages.urlsPlaceholder": "https://example.com/oauth/callback",
"account.components.oauth-client-form.messages.rightsWarning": "Note that only the minimum set of rights needed to provide the functionality of the application should be requested",
@@ -31,8 +28,6 @@
"account.components.oauth-client-form.messages.stateDescriptionDesc": "You can use this field to save additional information about the state of this OAuth client, e.g. why it has been flagged",
"account.components.oauth-client-form.messages.adminContactDescription": "Administrative contact information for this client. Typically used to indicate who to contact with administrative questions about the client.",
"account.components.oauth-client-form.messages.techContactDescription": "Technical contact information for this client. Typically used to indicate who to contact with technical/security questions about the client.",
- "account.containers.authorizations-table.index.clientId": "Client ID",
- "account.containers.authorizations-table.index.tableTitle": "OAuth client authorizations",
"account.containers.change-password-form.index.currentPassword": "Current password",
"account.containers.change-password-form.index.newPassword": "New password",
"account.containers.change-password-form.index.newPasswordConfirm": "Confirm new password",
@@ -43,12 +38,8 @@
"account.containers.clients-table.index.restoreFail": "There was an error and OAuth client could not be restored",
"account.containers.clients-table.index.purgeSuccess": "OAuth client purged",
"account.containers.clients-table.index.purgeFail": "There was an error and the OAuth client could not be purged",
- "account.containers.clients-table.index.addClient": "Add OAuth client",
- "account.containers.collaborators-table.index.id": "User / Organization ID",
- "account.containers.collaborators-table.index.addCollaborator": "Add collaborator",
"account.containers.collaborators-table.index.deleteCollaboratorError": "There was an error and the collaborator could not be deleted",
"account.containers.collaborators-table.index.deleteOnlyCollaboratorError": "This collaborator could not be deleted because every client needs at least one collaborator with all rights",
- "account.containers.collaborators-table.index.removeButtonMessage": "Remove",
"account.containers.oauth-client-add.index.createSuccess": "Client created",
"account.containers.oauth-client-add.index.createFailure": "There was an error and the client could not be created",
"account.containers.oauth-client-edit.index.deleteSuccess": "OAuth client deleted",
@@ -61,12 +52,10 @@
"account.containers.profile-settings-form.messages.successMessage": "Profile updated",
"account.containers.profile-settings-form.messages.deleteAccount": "Delete account",
"account.containers.profile-settings-form.messages.useGravatar": "Use Gravatar",
- "account.containers.profile-settings-form.messages.uploadAnImage": "Upload an image",
"account.containers.profile-settings-form.messages.gravatarInfo": "If available, we're using the Gravatar image associated with your email address. You can upload a different profile picture by selecting the option above.",
"account.containers.profile-settings-form.messages.gravatarInfoGravatarOnly": "If available, we're using the Gravatar image associated with your email address. Please follow the instructions on the Gravatar website to change your profile picture.",
"account.containers.profile-settings-form.messages.primaryEmailAddressDescription": "Primary email address associated with your account",
"account.containers.profile-settings-form.messages.deleteAccountError": "There was an error and your account could not be deleted",
- "account.containers.profile-settings-form.messages.deleteAccountSuccess": "Account deleted",
"account.containers.profile-settings-form.messages.imageRequired": "Please select a file to use as your profile picture or choose \"Gravatar\" as source",
"account.containers.profile-settings-form.messages.imageUpload": "Image upload",
"account.containers.profile-settings-form.messages.chooseImage": "Choose image…",
@@ -79,12 +68,10 @@
"account.containers.profile-settings-form.messages.deleteConfirmMessage": "Please enter your user ID to confirm the account deletion.",
"account.containers.sessions-table.index.deleteSessionSuccess": "Session removed successfully",
"account.containers.sessions-table.index.deleteSessionError": "There was an error and the session could not be deleted",
- "account.containers.sessions-table.index.sessionsTableTitle": "Sessions",
"account.containers.sessions-table.index.removeButtonMessage": "Remove this session",
"account.containers.sessions-table.index.noExpiryDate": "No expiry date",
"account.containers.sessions-table.index.endSession": "Logout to end this session",
"account.containers.sessions-table.index.currentSession": "(This is the current session)",
- "account.containers.tokens-table.index.tableTitle": "Access tokens",
"account.containers.tokens-table.index.deleteSuccess": "Access token invalidated",
"account.containers.tokens-table.index.deleteFail": "There was an error and the access token could not be invalidated",
"account.containers.tokens-table.index.deleteButton": "Invalidate this access token",
@@ -92,7 +79,6 @@
"account.containers.tokens-table.index.deleteAllFail": "There was an error and the access tokens could not be invalidated",
"account.containers.tokens-table.index.deleteAllButton": "Invalidate all access tokens",
"account.containers.tokens-table.index.expires": "Expires",
- "account.containers.tokens-table.index.accessTokens": "Access tokens",
"account.views.authorize.index.modalTitle": "Request for permission",
"account.views.authorize.index.modalSubtitle": "{clientName} is requesting to be granted the following rights:",
"account.views.authorize.index.loginInfo": "You are logged in as {userId}.",
@@ -100,9 +86,7 @@
"account.views.authorize.index.authorize": "Authorize {clientName}",
"account.views.authorize.index.noDescription": "This client does not provide a description",
"account.views.authorize.index.allRights": "This client is requesting all possible current and future rights. This includes reading, writing and deletion of gateways, end devices and applications, as well as their network traffic.",
- "account.views.code.index.code": "Authorization code",
"account.views.code.index.codeDescription": "Your authorization code is:",
- "account.views.code.index.backToAccount": "Back to {siteTitle}",
"account.views.create-account.index.registrationApproved": "You have successfully registered and can login now",
"account.views.create-account.index.createAccount": "Create account",
"account.views.create-account.index.createANewAccount": "Create a new account",
@@ -112,17 +96,13 @@
"account.views.forgot-password.index.send": "Send",
"account.views.forgot-password.index.resetPassword": "Reset password",
"account.views.forgot-password.index.resetPasswordDescription": "Please enter your User ID to receive an email with reset instructions",
- "account.views.front-not-found.index.backToAccount": "Back to {siteTitle}",
"account.views.login.index.createAccount": "Create an account",
"account.views.login.index.forgotPassword": "Forgot password?",
"account.views.login.index.loginToContinue": "Please login to continue",
- "account.views.login.index.loginFailed": "Login failed",
- "account.views.login.index.accountDeleted": "Account deleted",
"account.views.oauth-authorization-settings.index.deleteButton": "Revoke authorization",
"account.views.oauth-authorization-settings.index.deleteSuccess": "This authorization was successfully revoked",
"account.views.oauth-authorization-settings.index.deleteFailure": "There was an error and this authorization could not be revoked",
"account.views.oauth-authorization-settings.index.deleteMessage": "Are you sure you want to unauthorize this client? The client will not be able to perform any actions on your behalf if the authorization is revoked. You can always choose to authorize the client again if wished.",
- "account.views.oauth-client-add.index.addClient": "Add OAuth client",
"account.views.oauth-client-authorization-overview.index.authorizationSettings": "Authorization settings",
"account.views.oauth-client-authorization-overview.index.accessTokens": "Active access tokens",
"account.views.overview.index.accountAppInfoTitle": "Welcome, {userId}! 👋",
@@ -131,11 +111,9 @@
"account.views.overview.index.goToConsole": "Go to the Console",
"account.views.profile-settings.index.profileEdit": "Edit profile",
"account.views.profile-settings.index.generalSettingsDescription": "Change basic info such as your name, profile picture or email address.",
- "account.views.profile-settings.index.changePasswordTitle": "Change password",
"account.views.profile-settings.index.changePasswordDescription": "Set up a new password for your account.",
"account.views.session-management.index.sessionManagement": "Session management",
"account.views.token-login.index.loginToken": "Login Token",
- "account.views.token-login.index.loginFailed": "Login failed",
"account.views.update-password.index.sessionRevoked": "Your password was changed and all active sessions were revoked",
"account.views.validate.index.backToAccount": "Back to Account",
"account.views.validate.index.contactInfoValidation": "Contact info validation",
@@ -152,7 +130,6 @@
"components.file-input.index.noFileSelected": "No file selected",
"components.file-input.index.fileProvided": "A file has been provided",
"components.file-input.index.tooBig": "The selected file is too large",
- "components.file-input.index.remove": "Remove",
"components.form.field.tooltip.descriptionTitle": "What is this?",
"components.form.field.tooltip.locationTitle": "What should I enter here?",
"components.form.field.tooltip.absenceTitle": "What if I cannot find the correct value?",
@@ -180,7 +157,6 @@
"components.progress-bar.index.estimatedCompletion": "Estimated completion {eta}",
"components.progress-bar.index.progress": "{current, number} of {target, number}",
"components.progress-bar.index.percentage": "{percentage, number, percent} finished",
- "components.qr-modal-button.index.scanEndDevice": "Scan end device QR code",
"components.qr-modal-button.index.scanEndDeviceContinue": "Please scan the QR code to continue. {qrScanDoc}",
"components.qr-modal-button.index.invalidData": "Invalid QR code data. Please note that only TR005 LoRaWAN® Device Identification QR Code can be scanned. Some devices have unrelated QR codes printed on them that cannot be used.",
"components.qr-modal-button.index.apply": "Apply",
@@ -191,7 +167,6 @@
"components.qr.input.video.index.switchCamera": "Switch camera",
"components.qr.require-permission.permissionDeniedError": "Permission Denied: Please allow access to your camera or upload a photo",
"components.qr.require-permission.fetchingPermission": "Please set camera permissions",
- "components.qr.require-permission.uploadImage": "Upload an image",
"components.rights-group.index.selectAll": "Select all",
"components.rights-group.index.outOfOwnScopeRights": "This {entityType} has more rights than you have. These rights can not be modified.",
"components.rights-group.index.outOfOwnScopePseudoRight": "This {entityType} has a wildcard right that you don't have. The {entityType} can therefore only be removed entirely.",
@@ -220,7 +195,6 @@
"console.components.device-import-form.index.formatInfo": "Format information",
"console.components.device-import-form.index.selectAFile": "Please select a template file",
"console.components.device-import-form.index.fileInfoPlaceholder": "Please select a template format",
- "console.components.device-import-form.index.claiming": "Claiming",
"console.components.device-import-form.index.setClaimAuthCode": "Set claim authentication code",
"console.components.device-import-form.index.targetedComponents": "Targeted components",
"console.components.device-import-form.index.advancedSectionTitle": "Advanced end device claiming settings",
@@ -235,13 +209,11 @@
"console.components.downlink-form.downlink-form.bytes": "Bytes",
"console.components.downlink-form.downlink-form.replace": "Replace downlink queue",
"console.components.downlink-form.downlink-form.push": "Push to downlink queue (append)",
- "console.components.downlink-form.downlink-form.confirmedDownlink": "Confirmed downlink",
"console.components.downlink-form.downlink-form.scheduleDownlink": "Schedule downlink",
"console.components.downlink-form.downlink-form.downlinkSuccess": "Downlink scheduled",
"console.components.downlink-form.downlink-form.bytesPayloadDescription": "The desired payload bytes of the downlink message",
"console.components.downlink-form.downlink-form.jsonPayloadDescription": "The decoded payload of the downlink message",
"console.components.downlink-form.downlink-form.invalidSessionWarning": "Downlinks can only be scheduled for end devices with a valid session. Please make sure your end device is properly connected to the network.",
- "console.components.events.messages.payload": "Payload",
"console.components.events.messages.MACPayload": "MAC payload",
"console.components.events.messages.devAddr": "DevAddr",
"console.components.events.messages.fPort": "FPort",
@@ -273,7 +245,6 @@
"console.components.events.messages.eventsTruncated": "Old events have been truncated to save memory. The current event limit per stream is {limit}.",
"console.components.events.messages.eventUnavailable": "This event is not available anymore. It was likely truncated to save memory.",
"console.components.events.messages.verboseStream": "Verbose stream",
- "console.components.events.messages.confirmedDownlink": "Confirmed downlink",
"console.components.events.messages.confirmedUplink": "Confirmed uplink",
"console.components.events.previews.shared.json-payload.index.invalid": "Invalid JSON",
"console.components.gateway-api-keys-modal.index.modalTitle": "Download gateway API keys",
@@ -297,32 +268,19 @@
"console.components.lorawan-version-input.index.phyVersionError": "Failed to fetch regional parameters versions",
"console.components.mac-settings-section.index.delayValue": "{count, plural, one {{count} second} other {{count} seconds}}",
"console.components.mac-settings-section.index.factoryPresetFreqDescription": "List of factory-preset frequencies. Note: order is respected.",
- "console.components.mac-settings-section.index.factoryPresetFreqTitle": "Factory preset frequencies",
- "console.components.mac-settings-section.index.freqAdd": "Add Frequency",
- "console.components.mac-settings-section.index.frequencyPlaceholder": "e.g. 869525000 for 869,525 MHz",
"console.components.mac-settings-section.index.advancedMacSettings": "Advanced MAC settings",
- "console.components.mac-settings-section.index.pingSlotFrequencyTitle": "Ping slot frequency",
"console.components.mac-settings-section.index.desiredPingSlotFrequencyTitle": "Desired ping slot frequency",
"console.components.mac-settings-section.index.pingSlotPeriodicityDescription": "Periodicity of the class B ping slot",
- "console.components.mac-settings-section.index.pingSlotPeriodicityTitle": "Ping slot periodicity",
- "console.components.mac-settings-section.index.pingSlotPeriodicityValue": "{count, plural, one {every second} other {every {count} seconds}}",
"console.components.mac-settings-section.index.pingSlotDataRateTitle": "Ping slot data rate index",
"console.components.mac-settings-section.index.desiredPingSlotDataRateTitle": "Desired ping slot data rate",
"console.components.mac-settings-section.index.resetWarning": "Resetting is insecure and makes your device susceptible for replay attacks",
- "console.components.mac-settings-section.index.resetsFCnt": "Resets frame counters",
- "console.components.mac-settings-section.index.rx1DataRateOffsetTitle": "Rx1 data rate offset",
"console.components.mac-settings-section.index.desiredRx1DataRateOffsetTitle": "Desired Rx1 data rate offset",
- "console.components.mac-settings-section.index.rx1DelayTitle": "Rx1 delay",
"console.components.mac-settings-section.index.desiredRx1DelayTitle": "Desired Rx1 delay",
"console.components.mac-settings-section.index.rx2DataRateIndexTitle": "Rx2 data rate index",
"console.components.mac-settings-section.index.desiredRx2DataRateIndexTitle": "Desired Rx2 data rate index",
"console.components.mac-settings-section.index.desiredRx2FrequencyTitle": "Desired Rx2 frequency",
- "console.components.mac-settings-section.index.rx2FrequencyTitle": "Rx2 frequency",
"console.components.mac-settings-section.index.updateSuccess": "The MAC settings updated",
- "console.components.mac-settings-section.index.beaconFrequency": "Beacon frequency",
"console.components.mac-settings-section.index.desiredBeaconFrequency": "Desired beacon frequency",
- "console.components.mac-settings-section.index.classBTimeout": "Class B timeout",
- "console.components.mac-settings-section.index.classCTimeout": "Class C timeout",
"console.components.mac-settings-section.index.maxDutyCycle": "Maximum duty cycle",
"console.components.mac-settings-section.index.desiredMaxDutyCycle": "Desired maximum duty cycle",
"console.components.mac-settings-section.index.adrMargin": "ADR margin",
@@ -337,7 +295,6 @@
"console.components.mac-settings-section.index.adrAckValue": "{count, plural, one {every message} other {every {count} messages}}",
"console.components.mac-settings-section.index.statusCountPeriodicity": "Status count periodicity",
"console.components.mac-settings-section.index.statusTimePeriodicity": "Status time periodicity",
- "console.components.payload-formatters-form.index.grpc": "GRPC service",
"console.components.payload-formatters-form.index.repository": "Use Device Repository formatters",
"console.components.payload-formatters-form.index.customJavascipt": "Custom Javascript formatter",
"console.components.payload-formatters-form.index.formatterType": "Formatter type",
@@ -375,9 +332,6 @@
"console.components.pubsub-form.messages.deletePubsub": "Delete Pub/Sub",
"console.components.pubsub-form.messages.modalWarning": "Are you sure you want to delete Pub/Sub \"{pubsubId}\"? Deleting a Pub/Sub cannot be undone.",
"console.components.pubsub-form.messages.headers": "Headers",
- "console.components.pubsub-form.messages.headersKeyPlaceholder": "Authorization",
- "console.components.pubsub-form.messages.headersValuePlaceholder": "Bearer my-auth-token",
- "console.components.pubsub-form.messages.headersAdd": "Add header entry",
"console.components.pubsub-form.messages.headersValidateRequired": "All header entry values are required. Please remove empty entries.",
"console.components.pubsub-form.messages.usernamePlaceholder": "my-username",
"console.components.pubsub-form.messages.passwordPlaceholder": "my-password",
@@ -387,8 +341,6 @@
"console.components.pubsub-form.messages.mqttConfig": "MQTT configuration",
"console.components.pubsub-form.messages.mqttClientIdPlaceholder": "my-client-id",
"console.components.pubsub-form.messages.mqttServerUrlPlaceholder": "mqtts://example.com",
- "console.components.pubsub-form.messages.serverUrl": "Server URL",
- "console.components.pubsub-form.messages.clientId": "Client ID",
"console.components.pubsub-form.messages.subscribeQos": "Subscribe QoS",
"console.components.pubsub-form.messages.publishQos": "Publish QoS",
"console.components.pubsub-form.messages.tlsCa": "Root CA certificate",
@@ -397,7 +349,6 @@
"console.components.pubsub-form.messages.selectPemFile": "Select .pem file…",
"console.components.pubsub-form.messages.pemFileProvided": ".pem file has been provided",
"console.components.pubsub-form.messages.useCredentials": "Use credentials",
- "console.components.pubsub-form.messages.alreadyExistsModalTitle": "ID already exists",
"console.components.pubsub-form.messages.alreadyExistsModalMessage": "A Pub/Sub with the ID \"{id}\" already exists. Do you wish to replace this Pub/Sub?",
"console.components.pubsub-form.messages.replacePubsub": "Replace Pub/Sub",
"console.components.pubsub-form.messages.useSecureConnection": "Use secure connection",
@@ -415,9 +366,6 @@
"console.components.webhook-form.index.deleteWebhook": "Delete Webhook",
"console.components.webhook-form.index.modalWarning": "Are you sure you want to delete webhook \"{webhookId}\"? Deleting a webhook cannot be undone.",
"console.components.webhook-form.index.additionalHeaders": "Additional headers",
- "console.components.webhook-form.index.headersKeyPlaceholder": "Authorization",
- "console.components.webhook-form.index.headersValuePlaceholder": "Bearer my-auth-token",
- "console.components.webhook-form.index.headersAdd": "Add header entry",
"console.components.webhook-form.index.downlinkAPIKey": "Downlink API key",
"console.components.webhook-form.index.downlinkAPIKeyDesc": "The API key will be provided to the endpoint using the \"X-Downlink-Apikey\" header",
"console.components.webhook-form.index.templateInformation": "Template information",
@@ -439,16 +387,13 @@
"console.components.webhook-template-form.index.createTemplate": "Create {template} webhook",
"console.components.webhook-template-form.index.idPlaceholder": "my-new-{templateId}-webhook",
"console.components.webhook-template-info.index.about": "About {name}",
- "console.components.webhook-template-info.index.documentation": "Documentation",
"console.components.webhook-template-info.index.setupWebhook": "Setup webhook for {name}",
"console.components.webhook-template-info.index.editWebhook": "Edit webhook for {name}",
- "console.containers.account-select.index.noOptionsMessage": "No matching user or organization was found",
- "console.containers.account-select.index.suggestions": "Suggestions",
+ "console.containers.account-select.index.noOptionsMessage": "No options",
"console.containers.api-key-form.edit.deleteKey": "Delete key",
"console.containers.api-key-form.edit.modalWarning": "Are you sure you want to delete the {keyName} API key? Deleting an API key cannot be undone.",
"console.containers.api-key-form.edit.updateSuccess": "API key updated",
"console.containers.api-key-form.edit.deleteSuccess": "API key deleted",
- "console.containers.api-keys-table.index.keyId": "Key ID",
"console.containers.api-keys-table.index.grantedRights": "Granted Rights",
"console.containers.application-general-settings.index.updateSuccess": "Application updated",
"console.containers.application-general-settings.index.deleteSuccess": "Application deleted",
@@ -466,19 +411,18 @@
"console.containers.applications-form.index.appDescPlaceholder": "Description for my new application",
"console.containers.applications-form.index.appDescDescription": "Optional application description; can also be used to save notes about the application",
"console.containers.applications-form.index.appDescription": "Within applications, you can register and manage end devices, aggregate their sensor data and act on it using our many integration options.{break}Learn more in our Applications Guide",
- "console.containers.applications-form.index.createApplication": "Create application",
"console.containers.applications-table.index.ownedTabTitle": "Owned applications",
"console.containers.applications-table.index.restoreSuccess": "Application restored",
"console.containers.applications-table.index.restoreFail": "There was an error and application could not be restored",
"console.containers.applications-table.index.purgeSuccess": "Application purged",
"console.containers.applications-table.index.purgeFail": "There was an error and the application could not be purged",
"console.containers.applications-table.index.otherClusterTooltip": "This application is registered on a different cluster (`{host}`). To access this application, use the Console of the cluster that this application was registered on.",
- "console.containers.collaborators-table.index.id": "User / Organization ID",
"console.containers.deployment-component-status.index.availableComponents": "Available components",
"console.containers.deployment-component-status.index.versionInfo": "Deployment",
"console.containers.deployment-component-status.index.statusPage": "Go to status page",
"console.containers.deployment-component-status.index.seeChangelog": "See changelog",
"console.containers.dev-addr-input.index.devAddrFetchingFailure": "There was an error and the end device address could not be generated",
+ "console.containers.dev-eui-component.index.unknownError": "Unknown error while generating DevEUI",
"console.containers.device-importer.messages.proceed": "Proceed to end device list",
"console.containers.device-importer.messages.retry": "Retry from scratch",
"console.containers.device-importer.messages.abort": "Abort",
@@ -517,33 +461,19 @@
"console.containers.device-onboarding-form.messages.confirmedClaiming": "This end device can be claimed",
"console.containers.device-onboarding-form.messages.cannotConfirmEui": "There was an error and the JoinEUI could not be confirmed. Please try again later.",
"console.containers.device-onboarding-form.messages.classCapabilities": "Additional LoRaWAN class capabilities",
- "console.containers.device-onboarding-form.messages.submitTitle": "Register end device",
"console.containers.device-onboarding-form.messages.afterRegistration": "After registration",
"console.containers.device-onboarding-form.messages.singleRegistration": "View registered end device",
"console.containers.device-onboarding-form.messages.multipleRegistration": "Register another end device of this type",
"console.containers.device-onboarding-form.messages.createSuccess": "End device registered",
"console.containers.device-onboarding-form.messages.deviceIdDescription": "This value is automatically prefilled using the DevEUI",
"console.containers.device-onboarding-form.messages.onboardingDisabled": "Device onboarding can only be performed on deployments that have Network Server, Application Server and Join Server activated. Please use the CLI to register devices on individual components.",
- "console.containers.device-onboarding-form.messages.beaconFrequency": "Beacon frequency",
- "console.containers.device-onboarding-form.messages.rx1DataRateOffsetTitle": "Rx1 data rate offset",
- "console.containers.device-onboarding-form.messages.rx1DelayTitle": "Rx1 delay",
- "console.containers.device-onboarding-form.messages.factoryPresetFreqTitle": "Factory preset frequencies",
- "console.containers.device-onboarding-form.messages.freqAdd": "Add Frequency",
- "console.containers.device-onboarding-form.messages.frequencyPlaceholder": "e.g. 869525000 for 869,525 MHz",
- "console.containers.device-onboarding-form.messages.pingSlotPeriodicityTitle": "Ping slot periodicity",
- "console.containers.device-onboarding-form.messages.pingSlotPeriodicityValue": "{count, plural, one {every second} other {every {count} seconds}}",
"console.containers.device-onboarding-form.messages.pingSlotDataRateTitle": "Ping slot data rate",
- "console.containers.device-onboarding-form.messages.pingSlotFrequencyTitle": "Ping slot frequency",
"console.containers.device-onboarding-form.messages.rx2DataRateIndexTitle": "Rx2 data rate",
- "console.containers.device-onboarding-form.messages.rx2FrequencyTitle": "Rx2 frequency",
- "console.containers.device-onboarding-form.messages.classBTimeout": "Class B timeout",
- "console.containers.device-onboarding-form.messages.classCTimeout": "Class C timeout",
"console.containers.device-onboarding-form.messages.defaultNetworksSettings": "Use network's default MAC settings",
"console.containers.device-onboarding-form.messages.clusterSettings": "Cluster settings",
"console.containers.device-onboarding-form.messages.networkDefaults": "Network defaults",
"console.containers.device-onboarding-form.messages.hasEndDeviceQR": "Does your end device have a LoRaWAN® Device Identification QR Code? Scan it to speed up onboarding.",
"console.containers.device-onboarding-form.messages.deviceGuide": "Device registration help",
- "console.containers.device-onboarding-form.messages.scanEndDevice": "Scan end device QR code",
"console.containers.device-onboarding-form.messages.deviceInfo": "Found QR code data",
"console.containers.device-onboarding-form.messages.resetQRCodeData": "Reset QR code data",
"console.containers.device-onboarding-form.messages.resetConfirm": "Are you sure you want to discard QR code data? The scanned device will not be registered and the form will be reset.",
@@ -557,8 +487,6 @@
"console.containers.device-onboarding-form.type-form-section.manual-form-section.advanced-settings-section.skipJsRegistration": "Skip registration on Join Server",
"console.containers.device-onboarding-form.type-form-section.manual-form-section.advanced-settings-section.multicastClassCapabilities": "LoRaWAN class for multicast downlinks",
"console.containers.device-onboarding-form.type-form-section.manual-form-section.advanced-settings-section.register": "Register manually",
- "console.containers.device-onboarding-form.type-form-section.manual-form-section.advanced-settings-section.macSettingsError": "There was an error and the default MAC settings for the {freqPlan} frequency plan could not be loaded",
- "console.containers.device-onboarding-form.type-form-section.manual-form-section.advanced-settings-section.fpNotFoundError": "The LoRaWAN version {lorawanVersion} does not support the {freqPlan} frequency plan. Please choose a different MAC version or frequency plan.",
"console.containers.device-onboarding-form.warning-tooltip.desiredDescription": "The network will use a different desired value of {value} for this property.",
"console.containers.device-onboarding-form.warning-tooltip.sessionDescription": "An ABP device is personalized with a session and MAC settings. These MAC settings are considered the current parameters and must match exactly the settings entered here. The Network Server uses desired parameters to change the MAC state with LoRaWAN MAC commands to the desired state. You can use the General Settings page to update the desired setting after you registered the end device.",
"console.containers.device-payload-formatters.messages.defaultFormatter": "Click here to modify the default payload formatter for this application",
@@ -570,12 +498,9 @@
"console.containers.device-profile-section.device-card.device-card.classC": "Class C",
"console.containers.device-profile-section.device-selection.band-select.index.title": "Profile (Region)",
"console.containers.device-profile-section.device-selection.brand-select.brand-select.title": "End device brand",
- "console.containers.device-profile-section.device-selection.brand-select.brand-select.warning": "End device models unavailable",
"console.containers.device-profile-section.device-selection.brand-select.brand-select.noOptionsMessage": "No matching brand found",
"console.containers.device-profile-section.device-selection.fw-version-select.fw-version-select.title": "Firmware Ver.",
"console.containers.device-profile-section.device-selection.hw-version-select.hw-version-select.title": "Hardware Ver.",
- "console.containers.device-profile-section.device-selection.model-select.model-select.title": "Model",
- "console.containers.device-profile-section.device-selection.model-select.model-select.warning": "End device models unavailable",
"console.containers.device-profile-section.device-selection.model-select.model-select.noOptionsMessage": "No matching model found",
"console.containers.device-profile-section.hints.other-hint.hintTitle": "Your end device will be added soon!",
"console.containers.device-profile-section.hints.other-hint.hintMessage": "We're sorry, but your device is not yet part of The LoRaWAN Device Repository. You can use enter end device specifics manually option above, using the information your end device manufacturer provided e.g. in the product's data sheet. Please also refer to our documentation on Adding Devices.",
@@ -587,7 +512,6 @@
"console.containers.device-title-section.device-title-section.lastSeenAvailableTooltip": "The elapsed time since the network registered the last activity of this end device. This is determined from sent uplinks, confirmed downlinks or (re)join requests.{lineBreak}The last activity was received at {lastActivityInfo}",
"console.containers.device-title-section.device-title-section.noActivityTooltip": "The network has not registered any activity from this end device yet. This could mean that your end device has not sent any messages yet or only messages that cannot be handled by the network, e.g. due to a mismatch of EUIs or frequencies.",
"console.containers.devices-table.index.otherClusterTooltip": "This end device is registered on a different cluster (`{host}`). To access this device, use the Console of the cluster that this end device was registered on.",
- "console.containers.freq-plans-select.index.title": "Frequency plan",
"console.containers.freq-plans-select.index.warning": "Frequency plans unavailable",
"console.containers.freq-plans-select.index.none": "Do not set a frequency plan",
"console.containers.gateway-connection.gateway-connection.lastSeenAvailableTooltip": "The elapsed time since the network registered the last activity of this gateway. This is determined from received uplinks, or sent status messages of this gateway.",
@@ -608,14 +532,11 @@
"console.containers.gateway-location-form.gateway-location-form.noLocationSetInfo": "This gateway has no location information set",
"console.containers.gateway-onboarding-form.gateway-provisioning-form.gateway-registration-form-section.index.requireAuthenticatedConnectionDescription": "Select which information can be seen by other network participants, including {packetBrokerURL}",
"console.containers.gateway-onboarding-form.gateway-provisioning-form.gateway-registration-form-section.index.shareGatewayInfoDescription": "Choose this option eg. if your gateway is powered by {loraBasicStationURL}",
- "console.containers.gateway-onboarding-form.gateway-provisioning-form.gateway-registration-form-section.index.generateAPIKeyCups": "Generate API key for CUPS",
- "console.containers.gateway-onboarding-form.gateway-provisioning-form.gateway-registration-form-section.index.generateAPIKeyLNS": "Generate API key for LNS",
"console.containers.gateways-table.index.ownedTabTitle": "Owned gateways",
"console.containers.gateways-table.index.restoreSuccess": "Gateway restored",
"console.containers.gateways-table.index.restoreFail": "There was an error and the gateway could not be restored",
"console.containers.gateways-table.index.purgeSuccess": "Gateway purged",
"console.containers.gateways-table.index.purgeFail": "There was an error and the gateway could not be purged",
- "console.containers.invite-user-form.index.emailPlaceholder": "mail@example.com",
"console.containers.invite-user-form.index.invitationsDescription": "You can invite users to this network by providing an email address. The person will then get an email with instructions on how to join your network.",
"console.containers.log-back-in-modal.index.modalTitle": "Please sign in again",
"console.containers.log-back-in-modal.index.modalMessage": "You were signed out of the Console. You can press 'Reload' to log back into the Console again.",
@@ -624,11 +545,9 @@
"console.containers.lora-cloud-das-form.index.fPortSetTitle": "FPort Set",
"console.containers.lora-cloud-das-form.index.fPortSetDescription": "Comma separated list of F-Port values (1-223) to be used for LoRa Cloud Modem Services",
"console.containers.lora-cloud-das-form.index.modemEncoding": "LoRa Edge Reference Tracker (Modem-E) encoding",
- "console.containers.lora-cloud-das-form.index.setLoRaCloudToken": "Set LoRa Cloud token",
"console.containers.lora-cloud-das-form.index.deleteWarning": "Are you sure you want to delete the LoRa Cloud Modem and Geolocation Services token? This action cannot be undone.",
"console.containers.lora-cloud-das-form.index.fPortSetValidationFormat": "The FPort must be a number between 1 and 223, or a comma-separated list of numbers between 1 and 223",
"console.containers.lora-cloud-gls-form.index.tokenDescription": "Geolocation access token as configured within LoRa Cloud",
- "console.containers.lora-cloud-gls-form.index.setLoRaCloudToken": "Set LoRa Cloud token",
"console.containers.lora-cloud-gls-form.index.deleteWarning": "Are you sure you want to delete the LoRaCloud Geolocation token? This action cannot be undone.",
"console.containers.lora-cloud-gls-form.index.queryType": "Query type",
"console.containers.lora-cloud-gls-form.index.queryTypeDescription": "What kind of geolocation query should be used",
@@ -665,31 +584,8 @@
"console.containers.packet-broker-networks-table.index.search": "Search by tenant ID or name",
"console.containers.packet-broker-networks-table.index.forwarderPolicy": "Their routing policy towards us",
"console.containers.packet-broker-networks-table.index.homeNetworkPolicy": "Our routing policy for them",
- "console.containers.pubsub-formats-select.index.title": "Pub/Sub format",
"console.containers.pubsub-formats-select.index.warning": "Pub/Sub formats unavailable",
- "console.containers.pubsubs-table.index.format": "Format",
"console.containers.pubsubs-table.index.host": "Server host",
- "console.containers.user-data-form.add.adminLabel": "Grant this user admin status",
- "console.containers.user-data-form.add.adminDescription": "Admin status enables overarching rights such as managing other users or modifying entities regardless of collaboration status",
- "console.containers.user-data-form.add.userDescPlaceholder": "Description for my new user",
- "console.containers.user-data-form.add.userDescDescription": "Optional user description; can also be used to save notes about the user",
- "console.containers.user-data-form.add.userIdPlaceholder": "jane-doe",
- "console.containers.user-data-form.add.userNamePlaceholder": "Jane Doe",
- "console.containers.user-data-form.add.emailPlaceholder": "mail@example.com",
- "console.containers.user-data-form.add.emailAddressDescription": "Primary email address used for logging in; this address is not publicly visible",
- "console.containers.user-data-form.add.emailAddressValidation": "Treat email address as validated",
- "console.containers.user-data-form.add.emailAddressValidationDescription": "Enable this option if you do not need this user to validate the email address",
- "console.containers.user-data-form.edit.adminLabel": "Grant this user admin status",
- "console.containers.user-data-form.edit.adminDescription": "Admin status enables overarching rights such as managing other users or modifying entities regardless of collaboration status",
- "console.containers.user-data-form.edit.userDescPlaceholder": "Description for my new user",
- "console.containers.user-data-form.edit.userDescDescription": "Optional user description; can also be used to save notes about the user",
- "console.containers.user-data-form.edit.userIdPlaceholder": "jane-doe",
- "console.containers.user-data-form.edit.userNamePlaceholder": "Jane Doe",
- "console.containers.user-data-form.edit.emailPlaceholder": "mail@example.com",
- "console.containers.user-data-form.edit.emailAddressDescription": "Primary email address used for logging in; this address is not publicly visible",
- "console.containers.user-data-form.edit.emailAddressValidation": "Treat email address as validated",
- "console.containers.user-data-form.edit.emailAddressValidationDescription": "Enable this option if you do not need this user to validate the email address",
- "console.containers.user-data-form.edit.deleteTitle": "Are you sure you want to delete this account?",
"console.containers.user-data-form.edit.deleteWarning": "This will PERMANENTLY DELETE THIS ACCOUNT and LOCK THE USER ID AND EMAIL FOR RE-REGISTRATION. Associated entities (e.g. gateways, applications and end devices) owned by this user that do not have any other collaborators will become UNACCESSIBLE and it will NOT BE POSSIBLE TO REGISTER ENTITIES WITH THE SAME ID OR EUI's AGAIN. Make sure you assign new collaborators to such entities if you plan to continue using them.",
"console.containers.user-data-form.edit.purgeWarning": "This will PERMANENTLY DELETE THIS ACCOUNT. Associated entities (e.g. gateways, applications and end devices) owned by this user that do not have any other collaborators will become UNACCESSIBLE and it will NOT BE POSSIBLE TO REGISTER ENTITIES WITH THE SAME ID OR EUI's AGAIN. Make sure you assign new collaborators to such entities if you plan to continue using them.",
"console.containers.user-data-form.edit.deleteConfirmMessage": "Please type in this user's user ID to confirm.",
@@ -700,19 +596,11 @@
"console.containers.users-table.index.sentAt": "Sent",
"console.containers.users-table.index.revokeSuccess": "Invite removed successfully",
"console.containers.users-table.index.revokeError": "There was an error and the invite could not be revoked",
- "console.containers.webhook-edit.index.editWebhook": "Edit webhook",
- "console.containers.webhook-edit.index.updateSuccess": "Webhook updated",
- "console.containers.webhook-edit.index.deleteSuccess": "Webhook deleted",
- "console.containers.webhook-edit.index.reactivateSuccess": "Webhook activated",
- "console.containers.webhook-formats-select.index.title": "Webhook format",
"console.containers.webhook-formats-select.index.warning": "Webhook formats unavailable",
"console.containers.webhooks-table.index.templateId": "Template ID",
- "console.containers.webhooks-table.index.format": "Format",
- "console.containers.webhooks-table.index.baseUrl": "Base URL",
"console.containers.webhooks-table.index.healthy": "Healthy",
"console.containers.webhooks-table.index.pending": "Pending",
"console.containers.webhooks-table.index.requestsFailing": "Requests failing",
- "console.lib.events.definitions.synthetic.error.unknown:type": "Unknown error",
"console.lib.events.definitions.synthetic.error.unknown:preview": "An unknown error occurred and one or more events could not be retrieved",
"console.lib.events.definitions.synthetic.error.unknown:details": "The Console encountered an unexpected error while handling the event stream data. It is possible that event data could not be displayed (correctly) as a result. Note that this is an internal error which does not imply any malfunction of your gateways or end devices.",
"console.lib.events.definitions.synthetic.error.network_error:type": "Network error",
@@ -742,10 +630,8 @@
"console.lib.events.definitions.synthetic.status.filter_disabled:type": "Filter disabled",
"console.lib.events.definitions.synthetic.status.filter_disabled:preview": "The previously set event filter has been disabled",
"console.lib.events.definitions.synthetic.status.filter_disabled:details": "The event stream will not be filtered anymore. This means that you will see all events that come out of the event stream for this entity.",
- "console.lib.packet-broker.messages.applicationData": "Application data",
"console.lib.packet-broker.messages.applicationDataAllowDesc": "Allow downlink messages with FPort between 1 and 255",
"console.lib.packet-broker.messages.applicationDataDesc": "Forward uplink messages with FPort 1-255",
- "console.lib.packet-broker.messages.joinAccept": "Join accept",
"console.lib.packet-broker.messages.joinAcceptDesc": "Allow join accept messages",
"console.lib.packet-broker.messages.joinRequest": "Join request",
"console.lib.packet-broker.messages.joinRequestDesc": "Forward join-request messages",
@@ -774,17 +660,13 @@
"console.lib.packet-broker.messages.doesNotAllowApplicationData": "Application data is not allowed",
"console.lib.packet-broker.messages.uplinkPolicies": "This top row shows the uplink forwarding policies of this network",
"console.lib.packet-broker.messages.downlinkPolicies": "This bottom row shows the downlink policies of this network",
- "console.lib.packet-broker.messages.gatewayLocationLabel": "Location",
"console.lib.packet-broker.messages.gatewayAntennaPlacementLabel": "Antenna placement",
"console.lib.packet-broker.messages.gatewayAntennaPlacementDescription": "Show antenna placement (indoor/outdoor)",
"console.lib.packet-broker.messages.gatewayAntennaCountLabel": "Antenna count",
"console.lib.packet-broker.messages.gatewayFineTimestampsLabel": "Fine timestamps",
"console.lib.packet-broker.messages.gatewayFineTimestampsDescription": "Whether the gateway produces fine timestamps",
- "console.lib.packet-broker.messages.gatewayContactInfoLabel": "Contact information",
"console.lib.packet-broker.messages.gatewayContactInfoDescription": "Show means to contact the gateway owner or operator",
- "console.lib.packet-broker.messages.gatewayStatusLabel": "Status",
"console.lib.packet-broker.messages.gatewayStatusDescription": "Show whether the gateway is online or offline",
- "console.lib.packet-broker.messages.gatewayFreqPlanLabel": "Frequency plan",
"console.lib.packet-broker.messages.gatewayPacketRatesLabel": "Packet rates",
"console.lib.packet-broker.messages.gatewayPacketRatesDescription": "Receive and transmission packet rates",
"console.store.middleware.logics.packet-broker.unauthenticatedErrorTitle": "Unable to authorize",
@@ -814,8 +696,6 @@
"console.views.admin-packet-broker.messages.defaultRoutingPolicySet": "Default routing policy set",
"console.views.admin-packet-broker.messages.routingPolicySet": "Routing policy set",
"console.views.admin-packet-broker.messages.defaultRoutingPolicy": "Default routing policy",
- "console.views.admin-packet-broker.messages.networks": "Networks",
- "console.views.admin-packet-broker.messages.networkInformation": "Network information",
"console.views.admin-packet-broker.messages.devAddressBlock": "Device address block",
"console.views.admin-packet-broker.messages.devAddressBlocks": "Device address blocks",
"console.views.admin-packet-broker.messages.lastPolicyChange": "Last policy change",
@@ -834,12 +714,9 @@
"console.views.admin-packet-broker.messages.gatewayVisibilityInformation": "You can use the checkboxes to control what information of your gateways will be visible. Note that this information will be visible to the public and not only to registered networks.",
"console.views.admin-packet-broker.messages.defaultGatewayVisibilitySet": "Default gateway visibility set",
"console.views.admin-packet-broker.messages.packetBrokerStatusPage": "Packet Broker Status page",
- "console.views.admin-panel-network-information.index.title": "Network information",
"console.views.application-add.index.appDescription": "Within applications, you can register and manage end devices and their network data. After setting up your device fleet, use one of our many integration options to pass relevant data to your external services.{break}Learn more in our guide on Adding Applications.",
- "console.views.application-data.index.appData": "Application data",
"console.views.application-integrations-lora-cloud.index.loraCloudInfoText": "Lora Cloud provides value added APIs that enable simple solutions for common tasks related to LoRaWAN networks and LoRa-based devices. You can setup our LoRaCloud integrations below.",
"console.views.application-integrations-lora-cloud.index.officialLoRaCloudDocumentation": "Official LoRa Cloud documentation",
- "console.views.application-integrations-lora-cloud.index.setToken": "Set LoRa Cloud token",
"console.views.application-integrations-lora-cloud.index.dasDescription": "With the LoRa Cloud Modem and Geolocation Services protocol, you can manage common device functionality at the application layer for LoRaWAN-enabled devices.",
"console.views.application-integrations-lora-cloud.index.glsDescription": "LoRa Cloud Geolocation is a simple cloud API that can be easily integrated with The Things Stack to enable estimating the location of any LoRa-based device.",
"console.views.application-integrations-mqtt.index.publicAddress": "Public address",
@@ -861,10 +738,6 @@
"console.views.application-integrations-webhook-add-form.index.addCustomWebhook": "Add custom webhook",
"console.views.application-integrations-webhook-add-form.index.addWebhookViaTemplate": "Add webhook for {templateName}",
"console.views.application-integrations-webhook-add-form.index.customWebhook": "Custom webhook",
- "console.views.application-integrations-webhook-edit.index.editWebhook": "Edit webhook",
- "console.views.application-integrations-webhook-edit.index.updateSuccess": "Webhook updated",
- "console.views.application-integrations-webhook-edit.index.deleteSuccess": "Webhook deleted",
- "console.views.application-integrations-webhook-edit.index.reactivateSuccess": "Webhook activated",
"console.views.application-overview.index.failedAccessOtherHostApplication": "The application you attempted to visit is registered on a different cluster and needs to be accessed using its host Console.",
"console.views.device-general-settings.application-server-form.index.skip": "Enforce skipping payload crypto",
"console.views.device-general-settings.application-server-form.index.include": "Enforce payload crypto",
@@ -895,8 +768,6 @@
"console.views.device-general-settings.messages.keysResetWarning": "You do not have sufficient rights to view end device keys. Only overwriting is allowed.",
"console.views.device-general-settings.messages.unclaimFailure": "An error occurred and the end device could not be unclaimed and deleted",
"console.views.device-general-settings.messages.validateSessionKey": "{field} must have non-zero value",
- "console.views.device-general-settings.messages.macSettingsError": "There was an error and the default MAC settings for the {freqPlan} frequency plan could not be loaded",
- "console.views.device-general-settings.messages.fpNotFoundError": "The LoRaWAN version {lorawanVersion} does not support the {freqPlan} frequency plan. Please choose a different MAC version or frequency plan.",
"console.views.device-general-settings.messages.resetUsedDevNonces": "Reset used DevNonces",
"console.views.device-general-settings.messages.resetUsedDevNoncesModal": "Are you sure you want to reset the used DevNonces of this end device?{break}{break}Resetting the used DevNonces enables replay attacks using past nonces. Do not use this option unless you have reset the end device NVRAM.",
"console.views.device-general-settings.messages.resetSuccess": "Used DevNonces reset",
@@ -915,7 +786,6 @@
"console.views.device-overview.index.sessionInfo": "Session information",
"console.views.device-overview.index.pendingSessionInfo": "Session information (pending)",
"console.views.device-overview.index.latestData": "Latest data",
- "console.views.device-overview.index.rootKeys": "Root keys",
"console.views.device-overview.index.keysNotExposed": "Keys are not exposed",
"console.views.device-overview.index.failedAccessOtherHostDevice": "The end device you attempted to visit is registered on a different cluster and needs to be accessed using its host Console.",
"console.views.device-overview.index.macData": "Download MAC data",
@@ -928,7 +798,6 @@
"console.views.gateway-data.index.gtwData": "Gateway data",
"console.views.gateway-general-settings.messages.basicTitle": "Basic settings",
"console.views.gateway-general-settings.messages.basicDescription": "General settings, gateway updates and metadata",
- "console.views.gateway-general-settings.messages.lorawanTitle": "LoRaWAN options",
"console.views.gateway-general-settings.messages.lorawanDescription": "LoRaWAN network-layer settings",
"console.views.gateway-general-settings.messages.updateSuccess": "Gateway updated",
"console.views.gateway-general-settings.messages.deleteSuccess": "Gateway deleted",
@@ -958,8 +827,6 @@
"console.views.overview.index.componentStatus": "Component status",
"console.views.overview.index.versionInfo": "Version info",
"containers.collaborator-form.index.collaboratorIdPlaceholder": "Type to choose a collaborator",
- "containers.collaborator-select.index.noOptionsMessage": "No matching user or organization was found",
- "containers.collaborator-select.index.suggestions": "Suggestions",
"containers.collaborator-select.index.setYourself": "Set yourself as {name}",
"containers.fetch-table.index.errorMessage": "There was an error and the list of {entity, select, applications {applications} organizations {organizations} keys {API keys} collaborators {collaborators} devices {end devices} gateways {gateways} users {users} webhooks {webhooks} other {entities}} could not be displayed",
"lib.components.date-time.relative.justNow": "just now",
@@ -990,7 +857,6 @@
"lib.errors.error-messages.errorOccurred": "An error occurred and the request could not be completed.",
"lib.errors.error-messages.errorId": "Error ID: {errorId}",
"lib.errors.error-messages.correlationId": "Correlation ID: {correlationId}",
- "lib.errors.error-messages.loginFailed": "Login failed",
"lib.errors.error-messages.loginFailedDescription": "There was an error causing the login to fail. This might be due to server-side misconfiguration or a browser-cookie problem. Please try logging in again.",
"lib.errors.error-messages.loginFailedAbortDescription": "The login process was aborted during the authentication with the login provider. You can use the button below to retry logging in.",
"lib.errors.error-messages.connectionFailure": "The servers are currently unavailable. This might be due to a scheduled update or maintenance. Please check the status page (if available) for more information and try again later.",
@@ -1006,22 +872,18 @@
"lib.errors.status-code-messages.501": "Not implemented",
"lib.errors.status-code-messages.503": "Service unavailable",
"lib.errors.status-code-messages.504": "Gateway timeout",
- "lib.errors.status-code-messages.520": "Unknown error",
"lib.field-description-messages.freqPlanDescription": "A frequency plan defines data rates that your end device or gateway is setup to use. It is important that gateways and end devices within reach use the same frequency plan to be able to communicate.",
"lib.field-description-messages.freqPlanLocation": "Your end device or gateway manufacturer should provide information about the applicable frequency plan for a particular device. In some cases they are printed on the device itself but they should always be in the hardware manual or data sheet.",
"lib.field-description-messages.freqPlanAbsence": "Contact the manufacturer or reseller. Using an incorrect frequency plan will prevent traffic between devices.",
"lib.field-description-messages.devEuiDescription": "A 64 bit extended unique identifier for your end device.",
"lib.field-description-messages.devEuiLocation": "It should be provided to you by the manufacturer, or printed on the end device packaging.",
- "lib.field-description-messages.devEuiAbsence": "Contact the manufacturer or your reseller.",
"lib.field-description-messages.joinEuiDescription": "The JoinEUI (formerly called AppEUI) is a 64 bit extended unique identifier used to identify the Join Server during activation.",
"lib.field-description-messages.joinEuiLocation": "It should be provided by the end device manufacturer for pre-provisioned end devices, or by the owner of the Join Server you will use.",
"lib.field-description-messages.joinEuiAbsence": "Contact the manufacturer or your reseller. If they can not provide a JoinEUI, and your end device is programmable, it is okay to use all-zeros, but ensure that you use the same JoinEUI in your end device as you enter in The Things Stack.",
"lib.field-description-messages.appKeyDescription": "An end device specific encryption key used during OTAA to derive the AppSKey (in LoRaWAN 1.1x) or both the NwkSKey and AppSKey in LoRaWAN 1.0x.",
"lib.field-description-messages.appKeyLocation": "It is usually pre-provisioned by the end device manufacturer, but can also be created by the user.",
- "lib.field-description-messages.appKeyAbsence": "Contact the manufacturer or your reseller. If they cannot provide an AppKey, and your end device is programmable, it is okay to generate one.",
"lib.field-description-messages.nwkKeyDescription": "An end device specific encryption key used to derive the FNwkSIntKey, SNwkSIntKey, NwkSEncKey in LoRaWAN 1.1. When a LoRaWAN 1.1 capable device connects to a LoRaWAN 1.0x Network Server which does not support dual root keys (NwkKey and AppKey), the NwkKey value is used as the AppKey value.",
"lib.field-description-messages.nwkKeyLocation": "It is usually pre-provisioned by the end device manufacturer, but some end devices also allow using a user-defined value.",
- "lib.field-description-messages.nwkKeyAbsence": "Contact the manufacturer or your reseller. If they cannot provide an AppKey, and your end device is programmable, it is okay to generate one.",
"lib.field-description-messages.devIdDescription": "A unique, human-readable identifier for your end device.",
"lib.field-description-messages.devIdLocation": "We prefill this value using the previously entered DevEUI but you can use any other unique value you want. End device IDs can not be reused by multiple end devices within the same application.",
"lib.field-description-messages.joinServerDescription": "The Join Server's role is to store root keys, generate session keys, and to send those securely to the Network Server and Application Server of choice. The device contains the same root keys, which can be provisioned as part of assembly, distribution or upon installation.",
@@ -1048,31 +910,22 @@
"lib.field-description-messages.deviceModelDescription": "The particular model of your end device.",
"lib.field-description-messages.deviceHardwareVersionDescription": "The hardware version of your device.",
"lib.field-description-messages.deviceHardwareVersionLocation": "It should be provided by the manufacturer of your device, or printed on the device packaging.",
- "lib.field-description-messages.deviceHardwareVersionAbsence": "Contact the manufacturer or reseller of your device. Providing an incorrect hardware version can result in unwanted device behavior.",
"lib.field-description-messages.deviceFirmwareVersionDescription": "The version of firmware loaded on your device.",
"lib.field-description-messages.deviceFirmwareVersionLocation": "The firmware version should be provided by the manufacturer of your device, or printed on the device packaging. It may be possible to upgrade your device firmware to a known version.",
- "lib.field-description-messages.deviceFirmwareVersionAbsence": "Contact the manufacturer or reseller of your device. Providing an incorrect hardware version can result in unwanted device behavior.",
"lib.field-description-messages.activationModeDescription": "OTAA is the preferred and most secure way to connect a device. Devices perform a join-procedure with the network. ABP requires hardcoding the device address and security keys. Multicast is a virtual group of ABP devices which allows all devices to receive the same downlinks. Multicast groups do not support uplinks.",
"lib.field-description-messages.activationModeLocation": "You decide how to activate your devices. Whenever possible, use OTAA.",
"lib.field-description-messages.deviceNameDescription": "An optional human readable name to help you identify your device.",
- "lib.field-description-messages.deviceNameLocation": "You make it up, so be creative!",
"lib.field-description-messages.deviceDescDescription": "An optional description, which can also be used to save notes about the end device.",
"lib.field-description-messages.frameCounterWidthDescription": "Most devices use a 32 bit frame counter to prevent replay attacks. Devices with extremely limited resources are permitted to use 16 bit counters.",
"lib.field-description-messages.frameCounterWidthLocation": "It should be provided by the device manufacturer.",
"lib.field-description-messages.frameCounterWidthAbsence": "Contact your manufacturer or reseller. Most devices use 32 bit counters. Selecting the wrong value will produce errors once the Up or Down frame counter exceeds 16 bits and rolls over.",
"lib.field-description-messages.rx2DataRateIndexDescription": "The data rate used for the second reception window used by this end device to receive downlinks.",
- "lib.field-description-messages.rx2DataRateIndexLocation": "This should be provided by the device manufacturer.",
- "lib.field-description-messages.rx2DataRateIndexAbsence": "Contact your device manufacturer or reseller.",
"lib.field-description-messages.rx2FrequencyDescription": "The frequency used for the second reception window used by this end device to receive downlinks.",
- "lib.field-description-messages.rx2FrequencyLocation": "This should be provided by the device manufacturer.",
- "lib.field-description-messages.rx2FrequencyAbsence": "Contact your device manufacturer or reseller.",
"lib.field-description-messages.gatewayIdDescription": "A unique identifier for your gateway.",
- "lib.field-description-messages.gatewayIdLocation": "You make it up, so be creative!",
"lib.field-description-messages.gatewayEuiDescription": "A 64 bit extended unique identifier for your gateway.",
"lib.field-description-messages.gatewayEuiLocation": "It should be provided to you by the manufacturer, or printed on the gateway packaging.",
"lib.field-description-messages.gatewayEuiAbsence": "Some gateways do not use EUIs. In that case, you can continue without EUI. If you are unsure, we recommend contacting the manufacturer or reseller.",
"lib.field-description-messages.gatewayNameDescription": "An optional human readable name to help you identify your gateway.",
- "lib.field-description-messages.gatewayNameLocation": "You make it up, so be creative!",
"lib.field-description-messages.gatewayDescDescription": "An optional description, which can also be used to save notes about the gateway.",
"lib.field-description-messages.requireAuthenticatedConnectionDescription": "This will only allow a gateway to connect if it uses a TLS enabled Basic Station or MQTT connection. It will not allow connections from UDP packet forwarders.",
"lib.field-description-messages.gatewayStatusDescription": "Setting your gateway status to public allows status information about the gateway to be shared with other users in the network, and with Packet Broker if enabled by the network operator.",
@@ -1121,14 +974,18 @@
"lib.field-description-messages.resetsJoinNoncesDescription": "Allowing join nonces to be reset disables any reuse checks for the device nonces and join nonces. The join requests can be replayed indefinitely when this option is enabled. This behavior is non compliant with the LoRaWAN specifications and must not be used outside of development environments.",
"lib.field-description-messages.resetUsedDevNoncesDescription": "The device nonces ensure that join requests cannot be replayed by attackers. Resetting the device nonces enables the end device to re-use a previously used nonce. Do not use this option unless you are sure that you would like the nonces to be usable again.",
"lib.field-description-messages.alcsyncDescription": "The Application Layer Clock Synchronization package is part of the LoRa TS003 specification, it synchronizes the real-time clock of an end-device to the network’s Global Positioning System (GPS) clock with near-second accuracy. It is useful for end-devices that do not have access to another accurate time source.",
- "lib.payload-formatter-messages.grpc": "GRPC service",
"lib.payload-formatter-messages.repository": "Repository",
"lib.payload-formatter-messages.javascript": "Javascript",
- "lib.payload-formatter-messages.none": "None",
"lib.payload-formatter-messages.cayennelpp": "CayenneLPP",
"lib.shared-messages.16Bit": "16 bit",
"lib.shared-messages.32Bit": "32 bit",
"lib.shared-messages.abp": "Activation by personalization (ABP)",
+ "lib.shared-messages.absenceBeCreative": "You make it up, so be creative!",
+ "lib.shared-messages.absenceContactManufacturer": "Contact your device manufacturer or reseller.",
+ "lib.shared-messages.absenceProvidedByManufacturer": "This should be provided by the device manufacturer.",
+ "lib.shared-messages.accessTokens": "Access tokens",
+ "lib.shared-messages.accountDeleteConfirmation": "Are you sure you want to delete this account?",
+ "lib.shared-messages.accountDeleted": "Account deleted",
"lib.shared-messages.accuracy": "Accuracy",
"lib.shared-messages.actions": "Actions",
"lib.shared-messages.activationMode": "Activation mode",
@@ -1137,13 +994,16 @@
"lib.shared-messages.addAttributes": "Add attributes",
"lib.shared-messages.addCollaborator": "Add collaborator",
"lib.shared-messages.addDeviceBulk": "End device bulk creation",
+ "lib.shared-messages.addHeaderEntry": "Add header entry",
+ "lib.shared-messages.addOAuthClient": "Add OAuth client",
"lib.shared-messages.addPubsub": "Add Pub/Sub",
+ "lib.shared-messages.addWebhook": "Add webhook",
"lib.shared-messages.address": "Address",
"lib.shared-messages.addressPlaceholder": "host",
- "lib.shared-messages.addWebhook": "Add webhook",
"lib.shared-messages.admin": "Admin",
- "lib.shared-messages.adminPanel": "Admin panel",
"lib.shared-messages.adminContact": "Administrative contact",
+ "lib.shared-messages.adminDescription": "Admin status enables overarching rights such as managing other users or modifying entities regardless of collaboration status",
+ "lib.shared-messages.adminPanel": "Admin panel",
"lib.shared-messages.all": "All",
"lib.shared-messages.allAdmin": "All (Admin)",
"lib.shared-messages.altitude": "Altitude",
@@ -1153,16 +1013,18 @@
"lib.shared-messages.apiKeyCounted": "{count, plural, one {API key} other {API keys}}",
"lib.shared-messages.apiKeyNamePlaceholder": "My new API key",
"lib.shared-messages.apiKeys": "API keys",
+ "lib.shared-messages.appData": "Application data",
"lib.shared-messages.appEUI": "AppEUI",
- "lib.shared-messages.appEUIJoinEUI": "AppEUI/JoinEUI",
"lib.shared-messages.appEUIDescription": "The AppEUI uniquely identifies the owner of the end device. If no AppEUI is provided by the device manufacturer (usually for development), it can be filled with zeros.",
+ "lib.shared-messages.appEUIJoinEUI": "AppEUI/JoinEUI",
"lib.shared-messages.appId": "Application ID",
"lib.shared-messages.appKey": "AppKey",
+ "lib.shared-messages.appKeyAbsence": "Contact the manufacturer or your reseller. If they cannot provide an AppKey, and your end device is programmable, it is okay to generate one.",
+ "lib.shared-messages.appSKey": "AppSKey",
"lib.shared-messages.application": "Application",
- "lib.shared-messages.applications": "Applications",
"lib.shared-messages.applicationServerAddress": "Application Server address",
+ "lib.shared-messages.applications": "Applications",
"lib.shared-messages.approve": "Approve",
- "lib.shared-messages.appSKey": "AppSKey",
"lib.shared-messages.asServerID": "Application Server ID",
"lib.shared-messages.asServerIDDescription": "The AS-ID of the Application Server to use",
"lib.shared-messages.asServerKekLabel": "Application Server KEK label",
@@ -1170,15 +1032,20 @@
"lib.shared-messages.attributeDescription": "Attributes can be used to set arbitrary information about the entity, to be used by scripts, or simply for your own organization",
"lib.shared-messages.attributeKeyValidateTooLong": "Attribute keys must have less than 32 characters",
"lib.shared-messages.attributeKeyValidateTooShort": "Attribute keys must have at least 3 characters and contain no special characters",
+ "lib.shared-messages.attributeValueValidateTooLong": "Attribute values must have less than 200 characters",
"lib.shared-messages.attributes": "Attributes",
"lib.shared-messages.attributesValidateRequired": "All attribute entry values are required. Please remove empty entries.",
"lib.shared-messages.attributesValidateTooMany": "{field} must be 10 items or fewer",
- "lib.shared-messages.attributeValueValidateTooLong": "Attribute values must have less than 200 characters",
+ "lib.shared-messages.authorization": "Authorization",
+ "lib.shared-messages.authorizationCode": "Authorization code",
"lib.shared-messages.authorizations": "Authorizations",
- "lib.shared-messages.automaticUpdates": "Automatic updates",
"lib.shared-messages.autoUpdateDescription": "Gateway can be updated automatically",
- "lib.shared-messages.backToOverview": "Back to overview",
+ "lib.shared-messages.automaticUpdates": "Automatic updates",
+ "lib.shared-messages.backTo": "Back to {siteTitle}",
"lib.shared-messages.backToLogin": "Back to login",
+ "lib.shared-messages.backToOverview": "Back to overview",
+ "lib.shared-messages.beaconFrequency": "Beacon frequency",
+ "lib.shared-messages.bearerMyAuthToken": "Bearer my-auth-token",
"lib.shared-messages.brand": "Brand",
"lib.shared-messages.cancel": "Cancel",
"lib.shared-messages.changeLocation": "Change location settings",
@@ -1186,8 +1053,11 @@
"lib.shared-messages.channel": "Channel",
"lib.shared-messages.claimAuthCode": "Claim authentication code",
"lib.shared-messages.claiming": "Claiming",
+ "lib.shared-messages.classBTimeout": "Class B timeout",
+ "lib.shared-messages.classCTimeout": "Class C timeout",
"lib.shared-messages.clear": "Clear",
"lib.shared-messages.client": "Client",
+ "lib.shared-messages.clientId": "Client ID",
"lib.shared-messages.collaborator": "Collaborator",
"lib.shared-messages.collaboratorCounted": "{count, plural, one {Collaborator} other {Collaborators}}",
"lib.shared-messages.collaboratorDeleteSuccess": "Collaborator removed",
@@ -1195,30 +1065,31 @@
"lib.shared-messages.collaboratorEditRights": "Edit rights of {collaboratorId}",
"lib.shared-messages.collaboratorId": "Collaborator ID",
"lib.shared-messages.collaboratorIdPlaceholder": "collaborator-id",
- "lib.shared-messages.collaboratorWarningSelf": "Changing your own rights could result in loss of access",
- "lib.shared-messages.collaboratorWarningAdmin": "This user is an administrator that will retain all rights to all entities regardless of collaborator status",
- "lib.shared-messages.collaboratorWarningAdminSelf": "As an administrator, you always retain all rights to all entities regardless of collaborator status",
"lib.shared-messages.collaboratorModalWarning": "Are you sure you want to remove {collaboratorId} as a collaborator?",
"lib.shared-messages.collaboratorModalWarningSelf": "Are you sure you want to remove yourself as a collaborator? Access to this entity will be lost until someone else adds you as a collaborator again.",
"lib.shared-messages.collaboratorRemove": "Collaborator remove",
- "lib.shared-messages.collaborators": "Collaborators",
"lib.shared-messages.collaboratorUpdateSuccess": "Collaborator rights updated",
+ "lib.shared-messages.collaboratorWarningAdmin": "This user is an administrator that will retain all rights to all entities regardless of collaborator status",
+ "lib.shared-messages.collaboratorWarningAdminSelf": "As an administrator, you always retain all rights to all entities regardless of collaborator status",
+ "lib.shared-messages.collaboratorWarningSelf": "Changing your own rights could result in loss of access",
+ "lib.shared-messages.collaborators": "Collaborators",
"lib.shared-messages.componentAs": "Application Server",
+ "lib.shared-messages.componentDcs": "Device Claiming Server",
"lib.shared-messages.componentEdtc": "End Device Template Converter",
+ "lib.shared-messages.componentGcs": "Gateway Claiming Server",
"lib.shared-messages.componentGs": "Gateway Server",
"lib.shared-messages.componentIs": "Identity Server",
"lib.shared-messages.componentJs": "Join Server",
"lib.shared-messages.componentNs": "Network Server",
"lib.shared-messages.componentQrg": "QR Code Generator",
- "lib.shared-messages.componentDcs": "Device Claiming Server",
- "lib.shared-messages.componentGcs": "Gateway Claiming Server",
"lib.shared-messages.confirm": "Confirm",
"lib.shared-messages.confirmPassword": "Confirm password",
+ "lib.shared-messages.confirmedDownlink": "Confirmed downlink",
"lib.shared-messages.connected": "Connected",
"lib.shared-messages.connecting": "Connecting",
"lib.shared-messages.connectionIssues": "Connection issues",
- "lib.shared-messages.contactInformation": "Contact information",
"lib.shared-messages.contactFieldPlaceholder": "Type or choose a collaborator",
+ "lib.shared-messages.contactInformation": "Contact information",
"lib.shared-messages.convertMacToEui": "Convert MAC to EUI",
"lib.shared-messages.copiedToClipboard": "Copied to clipboard!",
"lib.shared-messages.copyToClipboard": "Copy to clipboard",
@@ -1232,30 +1103,31 @@
"lib.shared-messages.data": "Data",
"lib.shared-messages.defineRights": "Define rights",
"lib.shared-messages.delayWarning": "Delay too short. The lower bound ({minimumValue}ms) will be used by the Gateway Server.",
- "lib.shared-messages.deleted": "Deleted (Admin)",
- "lib.shared-messages.deleteModalTitle": "Are you sure you want to delete
{entityName}
?",
+ "lib.shared-messages.deleteModalConfirmDeletion": "Confirm deletion",
+ "lib.shared-messages.deleteModalConfirmMessage": "Please enter
{entityId}
to confirm the deletion.",
"lib.shared-messages.deleteModalDefaultMessage": "This will PERMANENTLY DELETE THE ENTITY ITSELF AND ALL ASSOCIATED ENTITIES, including collaborator associations. It will also NOT BE POSSIBLE TO REUSE THE ENTITY ID.",
"lib.shared-messages.deleteModalPurgeMessage": "This will PERMANENTLY DELETE THE ENTITY ITSELF AND ALL ASSOCIATED ENTITIES, including collaborator associations.",
- "lib.shared-messages.deleteModalConfirmMessage": "Please enter
{entityId}
to confirm the deletion.",
- "lib.shared-messages.deleteModalConfirmDeletion": "Confirm deletion",
"lib.shared-messages.deleteModalPurgeWarning": "Releasing the entity IDs will make it possible to register a new entity with the same ID. Note that this irreversible and may lead to other users gaining access to historical data of the entity if they register an entity with the same ID . Please make sure you understand the implications of purging as described here.",
- "lib.shared-messages.deleteModalReleaseIdTitle": "Entity purge (admin only)",
"lib.shared-messages.deleteModalReleaseIdLabel": "Also release entity IDs (purge)",
+ "lib.shared-messages.deleteModalReleaseIdTitle": "Entity purge (admin only)",
+ "lib.shared-messages.deleteModalTitle": "Are you sure you want to delete
{entityName}
?",
+ "lib.shared-messages.deleted": "Deleted (Admin)",
"lib.shared-messages.description": "Description",
"lib.shared-messages.devAddr": "Device address",
"lib.shared-messages.devDesc": "End device description",
"lib.shared-messages.devEUI": "DevEUI",
"lib.shared-messages.devEUIBlockLimitReached": "DevEUI generation limit reached",
+ "lib.shared-messages.devID": "End device ID",
+ "lib.shared-messages.devName": "End device name",
+ "lib.shared-messages.device": "End device",
"lib.shared-messages.deviceCounted": "{count, plural, one {End device} other {End devices}}",
"lib.shared-messages.deviceDescDescription": "Optional end device description; can also be used to save notes about the end device",
"lib.shared-messages.deviceDescPlaceholder": "Description for my new end device",
+ "lib.shared-messages.deviceHardwareVersionAbsence": "Contact the manufacturer or reseller of your device. Providing an incorrect hardware version can result in unwanted device behavior.",
"lib.shared-messages.deviceIdPlaceholder": "my-new-device",
"lib.shared-messages.deviceNamePlaceholder": "My new end device",
"lib.shared-messages.deviceSimulationDisabledWarning": "Simulation is disabled for devices that skip payload crypto",
- "lib.shared-messages.device": "End device",
"lib.shared-messages.devices": "End devices",
- "lib.shared-messages.devID": "End device ID",
- "lib.shared-messages.devName": "End device name",
"lib.shared-messages.disabled": "Disabled",
"lib.shared-messages.disconnected": "Disconnected",
"lib.shared-messages.documentation": "Documentation",
@@ -1265,20 +1137,25 @@
"lib.shared-messages.downlinkFrameCount": "Downlink frame count",
"lib.shared-messages.downlinkNack": "Downlink nack",
"lib.shared-messages.downlinkPush": "Downlink push",
- "lib.shared-messages.downlinkQueued": "Downlink queued",
"lib.shared-messages.downlinkQueueInvalidated": "Downlink queue invalidated",
+ "lib.shared-messages.downlinkQueued": "Downlink queued",
"lib.shared-messages.downlinkReplace": "Downlink replace",
"lib.shared-messages.downlinkSent": "Downlink sent",
"lib.shared-messages.downlinksScheduled": "Downlinks (re)scheduled",
"lib.shared-messages.edit": "Edit",
+ "lib.shared-messages.editWebhook": "Edit webhook",
"lib.shared-messages.email": "Email",
"lib.shared-messages.emailAddress": "Email address",
+ "lib.shared-messages.emailAddressDescription": "Primary email address used for logging in; this address is not publicly visible",
+ "lib.shared-messages.emailAddressValidation": "Treat email address as validated",
+ "lib.shared-messages.emailAddressValidationDescription": "Enable this option if you do not need this user to validate the email address",
+ "lib.shared-messages.emailPlaceholder": "mail@example.com",
"lib.shared-messages.empty": "Empty",
"lib.shared-messages.enabled": "Enabled",
- "lib.shared-messages.enforceDutyCycleDescription": "Recommended for all gateways in order to respect spectrum regulations",
+ "lib.shared-messages.endDeviceModelsUnavailable": "End device models unavailable",
"lib.shared-messages.enforceDutyCycle": "Enforce duty cycle",
+ "lib.shared-messages.enforceDutyCycleDescription": "Recommended for all gateways in order to respect spectrum regulations",
"lib.shared-messages.entityId": "Entity ID",
- "lib.shared-messages.eventEnabledTypes": "Enabled event types",
"lib.shared-messages.eventDownlinkAckDesc": "A confirmed downlink is acknowledged by an end device",
"lib.shared-messages.eventDownlinkFailedDesc": "A downlink cannot be sent",
"lib.shared-messages.eventDownlinkNackDesc": "A sent confirmed downlink fails confirmation by the end device",
@@ -1287,6 +1164,7 @@
"lib.shared-messages.eventDownlinkQueuedDesc": "A downlink is added to the downlink queue",
"lib.shared-messages.eventDownlinkReplaceDesc": "A downlink is used to replace the downlink queue",
"lib.shared-messages.eventDownlinkSentDesc": "A downlink is sent to an end device or multicast group",
+ "lib.shared-messages.eventEnabledTypes": "Enabled event types",
"lib.shared-messages.eventJoinAcceptDesc": "An end device successfully joins the network and starts a session",
"lib.shared-messages.eventLocationSolvedDesc": "An integration succeeded locating the end device",
"lib.shared-messages.eventServiceDataDesc": "An integration emits an event",
@@ -1297,10 +1175,15 @@
"lib.shared-messages.exportJson": "Export as JSON",
"lib.shared-messages.external": "External",
"lib.shared-messages.externalJoinServer": "External Join Server",
+ "lib.shared-messages.fNwkSIntKey": "FNwkSIntKey",
+ "lib.shared-messages.factoryPresetFrequencies": "Factory preset frequencies",
"lib.shared-messages.fetching": "Fetching data…",
"lib.shared-messages.firmwareVersion": "Firmware version",
- "lib.shared-messages.fNwkSIntKey": "FNwkSIntKey",
+ "lib.shared-messages.format": "Format",
+ "lib.shared-messages.fpNotFoundError": "The LoRaWAN version {lorawanVersion} does not support the {freqPlan} frequency plan. Please choose a different MAC version or frequency plan.",
"lib.shared-messages.frameCounterWidth": "Frame counter width",
+ "lib.shared-messages.freqAdd": "Add Frequency",
+ "lib.shared-messages.frequencyPlaceholder": "e.g. 869525000 for 869,525 MHz",
"lib.shared-messages.frequencyPlan": "Frequency plan",
"lib.shared-messages.frequencyPlanWarning": "Without choosing a frequency plan, packets from the gateway will not be correctly processed",
"lib.shared-messages.furtherResources": "Further resources",
@@ -1315,18 +1198,20 @@
"lib.shared-messages.gatewayLocationPublic": "Share location within network",
"lib.shared-messages.gatewayName": "Gateway name",
"lib.shared-messages.gatewayNamePlaceholder": "My new gateway",
- "lib.shared-messages.gateways": "Gateways",
"lib.shared-messages.gatewayScheduleDownlinkLate": "Schedule downlink late",
"lib.shared-messages.gatewayServerAddress": "Gateway Server address",
"lib.shared-messages.gatewayStatus": "Gateway status",
"lib.shared-messages.gatewayStatusPublic": "Share status within network",
"lib.shared-messages.gatewayUpdateOptions": "Gateway updates",
- "lib.shared-messages.generateAPIKeyCups": "Generate API key for CUPS",
- "lib.shared-messages.generateAPIKeyLNS": "Generate API key for LNS",
+ "lib.shared-messages.gateways": "Gateways",
"lib.shared-messages.general": "General",
"lib.shared-messages.generalInformation": "General information",
"lib.shared-messages.generalSettings": "General settings",
+ "lib.shared-messages.generateAPIKeyCups": "Generate API key for CUPS",
+ "lib.shared-messages.generateAPIKeyLNS": "Generate API key for LNS",
"lib.shared-messages.getSupport": "Get support",
+ "lib.shared-messages.grantAdminStatus": "Grant this user admin status",
+ "lib.shared-messages.grpcService": "GRPC service",
"lib.shared-messages.gsServerAddressDescription": "The address of the Gateway Server to connect to",
"lib.shared-messages.hardware": "Hardware",
"lib.shared-messages.hardwareVersion": "Hardware version",
@@ -1337,12 +1222,12 @@
"lib.shared-messages.idAlreadyExists": "ID already exists",
"lib.shared-messages.import": "Import",
"lib.shared-messages.importDevices": "Import end devices",
- "lib.shared-messages.integrations": "Integrations",
- "lib.shared-messages.invite": "Invite",
- "lib.shared-messages.joinAccept": "Join accept",
"lib.shared-messages.inputMethod": "Input method",
"lib.shared-messages.insufficientAppKeyRights": "Insufficient rights to set an AppKey",
"lib.shared-messages.insufficientNwkKeyRights": "Insufficient rights to set a NwkKey",
+ "lib.shared-messages.integrations": "Integrations",
+ "lib.shared-messages.invite": "Invite",
+ "lib.shared-messages.joinAccept": "Join accept",
"lib.shared-messages.joinEUI": "JoinEUI",
"lib.shared-messages.joinServerAddress": "Join Server address",
"lib.shared-messages.key": "key",
@@ -1359,18 +1244,19 @@
"lib.shared-messages.location": "Location",
"lib.shared-messages.locationDescription": "When set to public, the gateway location may be visible to other users of the network",
"lib.shared-messages.locationMarkerDescriptionNonUser": "This location has been set automatically from incoming (status) messages",
- "lib.shared-messages.locationMarkerDescriptionUser": "This location has been set manually (e.g. by using the \"Location\"-tab)",
"lib.shared-messages.locationMarkerDescriptionUntrusted": "This location was determined via an untrusted status message and may be inaccurate",
+ "lib.shared-messages.locationMarkerDescriptionUser": "This location has been set manually (e.g. by using the \"Location\"-tab)",
"lib.shared-messages.locationSolved": "Location solved",
+ "lib.shared-messages.locationSourceBtRssi": "Bluetooth RSSI geolocation",
+ "lib.shared-messages.locationSourceCombined": "Combined geolocation",
"lib.shared-messages.locationSourceGps": "GPS-based location",
- "lib.shared-messages.locationSourceRegistry": "Manually set location",
"lib.shared-messages.locationSourceIpGeolocation": "IP-based geolocation",
- "lib.shared-messages.locationSourceWifiRssi": "Wifi RSSI geolocation",
- "lib.shared-messages.locationSourceBtRssi": "Bluetooth RSSI geolocation",
"lib.shared-messages.locationSourceLoraRssi": "LoRa RSSI geolocation",
"lib.shared-messages.locationSourceLoraTdoa": "LoRa TDOA geolocation",
- "lib.shared-messages.locationSourceCombined": "Combined geolocation",
+ "lib.shared-messages.locationSourceRegistry": "Manually set location",
+ "lib.shared-messages.locationSourceWifiRssi": "Wifi RSSI geolocation",
"lib.shared-messages.login": "Login",
+ "lib.shared-messages.loginFailed": "Login failed",
"lib.shared-messages.logout": "Logout",
"lib.shared-messages.longitude": "Longitude",
"lib.shared-messages.longitudeDesc": "The east-west position in degrees, where 0 is the prime meridian (Greenwich)",
@@ -1380,10 +1266,11 @@
"lib.shared-messages.lorawanInformation": "LoRaWAN information",
"lib.shared-messages.lorawanOptions": "LoRaWAN options",
"lib.shared-messages.lorawanPhyVersionDescription": "The LoRaWAN PHY version of the end device",
+ "lib.shared-messages.macSettingsError": "There was an error and the default MAC settings for the {freqPlan} frequency plan could not be loaded",
"lib.shared-messages.macVersion": "LoRaWAN version",
+ "lib.shared-messages.messageTypes": "Message types",
"lib.shared-messages.messages": "messages",
"lib.shared-messages.messaging": "Messaging",
- "lib.shared-messages.messageTypes": "Message types",
"lib.shared-messages.milliseconds": "milliseconds",
"lib.shared-messages.minutes": "minutes",
"lib.shared-messages.model": "Model",
@@ -1392,24 +1279,25 @@
"lib.shared-messages.multicast": "Define multicast group (ABP & Multicast)",
"lib.shared-messages.name": "Name",
"lib.shared-messages.netId": "Net ID",
- "lib.shared-messages.networks": "Networks",
+ "lib.shared-messages.networkInformation": "Network information",
"lib.shared-messages.networkServerAddress": "Network Server address",
+ "lib.shared-messages.networks": "Networks",
"lib.shared-messages.never": "Never",
"lib.shared-messages.next": "Next",
"lib.shared-messages.noActivityYet": "No activity yet",
- "lib.shared-messages.noRecentActivity": "No recent activity",
"lib.shared-messages.noDesc": "This end device has no description",
"lib.shared-messages.noEvents": "Waiting for events from