@ledvance/base 1.3.77-1 → 1.3.79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/localazy.json +4 -1
- package/package.json +1 -1
- package/src/components/AdvanceCard.tsx +1 -1
- package/src/components/ColorAdjustView.tsx +3 -2
- package/src/components/ColorTempAdjustView.tsx +5 -0
- package/src/components/DeleteButton.tsx +1 -1
- package/src/components/DrawToolView.tsx +1 -0
- package/src/components/OsramFanAdjustView.tsx +93 -0
- package/src/components/Page.tsx +5 -1
- package/src/components/Popup.tsx +2 -0
- package/src/components/Tag.tsx +10 -10
- package/src/components/rect-color-and-bright-picker/WhitePicker.tsx +48 -1
- package/src/components/rect-color-and-bright-picker/utils/storage.ts +97 -0
- package/src/i18n/strings.ts +116 -32
- package/src/utils/interface.ts +1 -1
- package/translateKey.txt +4 -1
package/localazy.json
CHANGED
|
@@ -1200,7 +1200,10 @@
|
|
|
1200
1200
|
"MATCH:setting_set_passwd",
|
|
1201
1201
|
"MATCH:camera_user",
|
|
1202
1202
|
"MATCH:camera_motiondetection",
|
|
1203
|
-
"MATCH:camera_motiondetectiondescription"
|
|
1203
|
+
"MATCH:camera_motiondetectiondescription",
|
|
1204
|
+
"MATCH:wifi_repeater_title",
|
|
1205
|
+
"MATCH:wifi_repeater_description",
|
|
1206
|
+
"MATCH:wifi_repeater_group_tips"
|
|
1204
1207
|
],
|
|
1205
1208
|
"replacements": {
|
|
1206
1209
|
"REGEX:% %1\\$s.*?\\)%": "{0}",
|
package/package.json
CHANGED
|
@@ -63,7 +63,7 @@ const AdvanceCard = (props: AdvanceCardProps) => {
|
|
|
63
63
|
{
|
|
64
64
|
props.children ?
|
|
65
65
|
props.children :
|
|
66
|
-
<View style={styles.titleBg}>
|
|
66
|
+
<View accessibilityLabel='AdvanceCard' accessibilityHint={props.data.title} style={styles.titleBg}>
|
|
67
67
|
<Text style={{...styles.title, color: props.theme?.global.fontColor}}>{props.data.title}</Text>
|
|
68
68
|
<Spacer height={cx(8)} />
|
|
69
69
|
{
|
|
@@ -29,7 +29,7 @@ export interface ColorAdjustViewProps {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
const NewColorPicker = React.memo((props: ColorAdjustViewProps) => {
|
|
32
|
-
const { h = 0, s = 100, v = 100, minBrightness
|
|
32
|
+
const { h = 0, s = 100, v = 100, minBrightness, onHSVChange, onHSVChangeComplete } = props
|
|
33
33
|
const state = useReactive({
|
|
34
34
|
hue: h,
|
|
35
35
|
saturation: scaleUp(s),
|
|
@@ -56,6 +56,7 @@ const NewColorPicker = React.memo((props: ColorAdjustViewProps) => {
|
|
|
56
56
|
|
|
57
57
|
const { hue, saturation, value } = state;
|
|
58
58
|
const hsv = { hue, saturation, value };
|
|
59
|
+
const minBrightnessValue = minBrightness ?? 1
|
|
59
60
|
|
|
60
61
|
return (
|
|
61
62
|
<View style={{justifyContent: 'center', alignItems: 'center'}}>
|
|
@@ -69,7 +70,7 @@ const NewColorPicker = React.memo((props: ColorAdjustViewProps) => {
|
|
|
69
70
|
}}>
|
|
70
71
|
<RectColorAndBrightPicker.ColourPicker
|
|
71
72
|
value={hsv}
|
|
72
|
-
brightOption={{min:
|
|
73
|
+
brightOption={{min: scaleUp(minBrightnessValue), minPercent: minBrightnessValue ? minBrightnessValue : 0}}
|
|
73
74
|
onGrant={() => state.moving = true}
|
|
74
75
|
onMove={handleMove}
|
|
75
76
|
onRelease={handleComplete}
|
|
@@ -33,6 +33,7 @@ const NewColorTempPicker = React.memo((props: ColorTempAdjustViewProps) => {
|
|
|
33
33
|
const {
|
|
34
34
|
colorTemp = 0,
|
|
35
35
|
brightness = 100,
|
|
36
|
+
minBrightness,
|
|
36
37
|
isSupportTemperature,
|
|
37
38
|
onCCTChange,
|
|
38
39
|
onCCTChangeComplete,
|
|
@@ -76,6 +77,7 @@ const NewColorTempPicker = React.memo((props: ColorTempAdjustViewProps) => {
|
|
|
76
77
|
|
|
77
78
|
const { temperature, brightness: stateBrightness } = state
|
|
78
79
|
const white = { temperature, brightness: stateBrightness }
|
|
80
|
+
const minBrightnessValue = minBrightness ?? 1
|
|
79
81
|
|
|
80
82
|
return (
|
|
81
83
|
<View style={{justifyContent: 'center', alignItems: 'center'}}>
|
|
@@ -90,12 +92,15 @@ const NewColorTempPicker = React.memo((props: ColorTempAdjustViewProps) => {
|
|
|
90
92
|
{
|
|
91
93
|
isSupportTemperature ? <RectColorAndBrightPicker.WhitePicker
|
|
92
94
|
value={white}
|
|
95
|
+
brightOption={{min: scaleUp(minBrightnessValue), minPercent: minBrightnessValue ? minBrightnessValue : 0}}
|
|
93
96
|
onGrant={() => state.moving = true}
|
|
94
97
|
onMove={handleMove}
|
|
95
98
|
onRelease={handleComplete}
|
|
96
99
|
onPress={handleComplete}
|
|
97
100
|
/> : <RectColorAndBrightPicker.BrightnessSlider
|
|
98
101
|
value={stateBrightness}
|
|
102
|
+
min={scaleUp(minBrightnessValue)}
|
|
103
|
+
minPercent={minBrightnessValue ? minBrightnessValue : 0}
|
|
99
104
|
clickEnabled={true}
|
|
100
105
|
onGrant={() => state.moving = true}
|
|
101
106
|
onMove={handleBrightnessMove}
|
|
@@ -250,6 +250,7 @@ const DrawToolView = (props: DrawToolViewProps) => {
|
|
|
250
250
|
text={I18n.getLang('auto_scan_system_wifi_confirm')}
|
|
251
251
|
style={{ width: cx(150), height: cx(40), backgroundColor: ledNumValidator(state.ledNum) ? props.theme?.button.primary : props.theme?.button.disabled }}
|
|
252
252
|
textStyle={{ fontSize: cx(14) }}
|
|
253
|
+
disabled={!ledNumValidator(state.ledNum)}
|
|
253
254
|
onPress={() => {
|
|
254
255
|
if (!ledNumValidator(state.ledNum)) return
|
|
255
256
|
props.setLedNum(state.ledNum)
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import React from "react"
|
|
2
|
+
import { View, Text, TouchableOpacity, Image } from "react-native"
|
|
3
|
+
import LdvSwitch from "./ldvSwitch"
|
|
4
|
+
import I18n from "@i18n"
|
|
5
|
+
import LdvSlider from "./ldvSlider"
|
|
6
|
+
import Spacer from "./Spacer"
|
|
7
|
+
import ThemeType from "config/themeType"
|
|
8
|
+
import { Utils } from "tuya-panel-kit"
|
|
9
|
+
import Popup from "./Popup"
|
|
10
|
+
import res from "@res"
|
|
11
|
+
import Segmented from "./Segmented"
|
|
12
|
+
|
|
13
|
+
const cx = Utils.RatioUtils.convertX
|
|
14
|
+
const { withTheme } = Utils.ThemeUtils
|
|
15
|
+
|
|
16
|
+
interface OsramFanAdjustProps {
|
|
17
|
+
theme?: ThemeType
|
|
18
|
+
hideFanSwitch?: boolean
|
|
19
|
+
fanSwitch: boolean
|
|
20
|
+
setFanSwitch: (v: boolean) => void
|
|
21
|
+
fanSpeed: number
|
|
22
|
+
minSpeed?: number
|
|
23
|
+
maxSpeed?: number
|
|
24
|
+
onFanSpeedChange?: (v: number) => void
|
|
25
|
+
setFanSpeed: (v: number) => void
|
|
26
|
+
fanMode: 'fresh' | 'nature'
|
|
27
|
+
setFanMode: (v: 'fresh' | 'nature') => void
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const OsramFanAdjustView = (props: OsramFanAdjustProps) => {
|
|
31
|
+
const { hideFanSwitch = false, fanSwitch, setFanSwitch, fanSpeed, onFanSpeedChange, setFanSpeed, minSpeed = 1, maxSpeed = 3, fanMode, setFanMode } = props
|
|
32
|
+
return (
|
|
33
|
+
<View>
|
|
34
|
+
{
|
|
35
|
+
!hideFanSwitch && <LdvSwitch
|
|
36
|
+
title={I18n.getLang('add_new_dynamic_mood_ceiling_fan_field_headline')}
|
|
37
|
+
enable={fanSwitch}
|
|
38
|
+
setEnable={setFanSwitch}
|
|
39
|
+
/>
|
|
40
|
+
}
|
|
41
|
+
{
|
|
42
|
+
fanSwitch && (
|
|
43
|
+
<>
|
|
44
|
+
<LdvSlider
|
|
45
|
+
title={I18n.getLang('add_new_dynamic_mood_ceiling_fan_field_text')}
|
|
46
|
+
subTitleStr={`${fanSpeed}/${maxSpeed}`}
|
|
47
|
+
value={fanSpeed}
|
|
48
|
+
min={minSpeed}
|
|
49
|
+
max={maxSpeed}
|
|
50
|
+
onValueChange={onFanSpeedChange}
|
|
51
|
+
onSlidingComplete={setFanSpeed}
|
|
52
|
+
/>
|
|
53
|
+
<Spacer />
|
|
54
|
+
<View style={{ marginHorizontal: cx(16) }}>
|
|
55
|
+
<View style={{ flexDirection: 'row', marginBottom: cx(2), alignItems: 'center' }}>
|
|
56
|
+
<Text style={{ marginRight: cx(5), color: props.theme?.global.fontColor }}>{I18n.getLang('ceiling_fan_tile_uvc_fan_mode')}</Text>
|
|
57
|
+
<TouchableOpacity onPress={() => Popup({
|
|
58
|
+
title: I18n.getLang('ceiling_fan_mode_info_headline'),
|
|
59
|
+
confirmText: I18n.getLang('ceiling_fan_direction_info_button_label'),
|
|
60
|
+
content: <View>
|
|
61
|
+
<Text style={{
|
|
62
|
+
fontWeight: 'bold',
|
|
63
|
+
color: props.theme?.global.fontColor,
|
|
64
|
+
}}>{I18n.getLang('ceiling_fan_mode_info_description_text')}</Text>
|
|
65
|
+
<Spacer />
|
|
66
|
+
<Text style={{ color: props.theme?.global.fontColor }}>{I18n.getLang('ceiling_fan_mode_info_option_1_headline')}</Text>
|
|
67
|
+
<Text style={{ color: props.theme?.global.fontColor }}>{I18n.getLang('ceiling_fan_mode_info_option_1_text')}</Text>
|
|
68
|
+
<Spacer />
|
|
69
|
+
<Text style={{ color: props.theme?.global.fontColor }}>{I18n.getLang('ceiling_fan_mode_info_option_2_headline')}</Text>
|
|
70
|
+
<Text style={{ color: props.theme?.global.fontColor }}>{I18n.getLang('ceiling_fan_mode_info_option_2_text')}</Text>
|
|
71
|
+
</View>,
|
|
72
|
+
})}>
|
|
73
|
+
<Image style={{ width: cx(16), height: cx(16), tintColor: props.theme?.icon.primary }} source={{ uri: res.ic_info }} />
|
|
74
|
+
</TouchableOpacity>
|
|
75
|
+
</View>
|
|
76
|
+
<Segmented
|
|
77
|
+
options={[
|
|
78
|
+
{ label: I18n.getLang('ceiling_fan_tile_uvc_fan_mode_opt_1'), value: 'fresh' },
|
|
79
|
+
{ label: I18n.getLang('ceiling_fan_tile_uvc_fan_mode_opt_2'), value: 'nature' },
|
|
80
|
+
]}
|
|
81
|
+
value={fanMode}
|
|
82
|
+
onChange={setFanMode}
|
|
83
|
+
/>
|
|
84
|
+
</View>
|
|
85
|
+
<Spacer />
|
|
86
|
+
</>
|
|
87
|
+
)
|
|
88
|
+
}
|
|
89
|
+
</View>
|
|
90
|
+
)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export default withTheme(OsramFanAdjustView)
|
package/src/components/Page.tsx
CHANGED
|
@@ -70,7 +70,11 @@ const Page = (props: PageProps) => {
|
|
|
70
70
|
|
|
71
71
|
return (
|
|
72
72
|
<>
|
|
73
|
-
<View
|
|
73
|
+
<View
|
|
74
|
+
accessibilityLabel='Page'
|
|
75
|
+
accessibilityHint={props.headlineText}
|
|
76
|
+
style={[{ flex: 1, position: 'relative', backgroundColor: props.theme?.global.background }, props.style]}
|
|
77
|
+
>
|
|
74
78
|
<LDVTopBar
|
|
75
79
|
title={props.backText}
|
|
76
80
|
onBackPress={
|
package/src/components/Popup.tsx
CHANGED
|
@@ -26,6 +26,8 @@ const InformationPopup = (props: InformationPopupProps) => {
|
|
|
26
26
|
}}>{props.title}</Text>
|
|
27
27
|
</View>
|
|
28
28
|
<TouchableOpacity
|
|
29
|
+
accessibilityLabel='PopupCloseButton'
|
|
30
|
+
accessibilityHint={props.confirmText}
|
|
29
31
|
style={{
|
|
30
32
|
flexDirection: 'column-reverse',
|
|
31
33
|
alignItems: 'center',
|
package/src/components/Tag.tsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {Image, StyleSheet, Text, TouchableOpacity, View, ViewProps} from 'react-native'
|
|
1
|
+
import { Image, StyleSheet, Text, TouchableOpacity, View, ViewProps } from 'react-native'
|
|
2
2
|
import React from 'react'
|
|
3
|
-
import {Utils} from 'tuya-panel-kit'
|
|
3
|
+
import { Utils } from 'tuya-panel-kit'
|
|
4
4
|
import res from '../res'
|
|
5
5
|
import ThemeType from '../config/themeType'
|
|
6
6
|
|
|
@@ -49,17 +49,17 @@ const Tag = (props: TagProps) => {
|
|
|
49
49
|
onPress={() => {
|
|
50
50
|
props.onCheckedChange(!props.checked)
|
|
51
51
|
}}>
|
|
52
|
-
<View
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
>
|
|
52
|
+
<View
|
|
53
|
+
accessibilityLabel={"Tag"}
|
|
54
|
+
accessibilityHint={props.text}
|
|
55
|
+
accessibilityState={{ checked: props.checked }}
|
|
56
|
+
style={[styles.root, props.checked ? styles.checked : styles.uncheck, props.style]}
|
|
57
|
+
>
|
|
58
|
+
<Text style={[styles.text, { marginEnd: cx(props.checked ? 4 : 12) }]}>
|
|
59
59
|
{props.text}
|
|
60
60
|
</Text>
|
|
61
61
|
{
|
|
62
|
-
props.checked ? <Image source={{uri: res.ic_arrows_nav_clear}} style={styles.icon}/> : <></>
|
|
62
|
+
props.checked ? <Image accessibilityLabel='TagClearIcon' source={{ uri: res.ic_arrows_nav_clear }} style={styles.icon} /> : <></>
|
|
63
63
|
}
|
|
64
64
|
</View>
|
|
65
65
|
</TouchableOpacity>
|
|
@@ -10,6 +10,7 @@ import RectPicker, {
|
|
|
10
10
|
} from './RectPicker';
|
|
11
11
|
import Slider, { IBrightOption } from './Slider';
|
|
12
12
|
import ColorUtils from './utils/color';
|
|
13
|
+
import StorageUtils from './utils/storage';
|
|
13
14
|
|
|
14
15
|
export interface IWhite {
|
|
15
16
|
brightness: number;
|
|
@@ -52,20 +53,38 @@ const defaultProps = {
|
|
|
52
53
|
onRelease(_v: any, _option?: { isChangeBright: boolean }) {},
|
|
53
54
|
onPress(_v: any, _option?: { isChangeBright: boolean }) {},
|
|
54
55
|
};
|
|
56
|
+
|
|
57
|
+
interface TempStorageData {
|
|
58
|
+
temperature: number;
|
|
59
|
+
position: Point;
|
|
60
|
+
}
|
|
61
|
+
|
|
55
62
|
type DefaultProps = {
|
|
56
63
|
style?: ViewStyle;
|
|
57
64
|
rectStyle?: ViewStyle;
|
|
65
|
+
storageKey?: string;
|
|
58
66
|
} & Readonly<typeof defaultProps>;
|
|
59
67
|
|
|
60
68
|
type WhiteProps = DefaultProps;
|
|
61
69
|
|
|
70
|
+
let storageKeyIndex = 0;
|
|
71
|
+
|
|
62
72
|
export default class WhitePicker extends Component<WhiteProps, IWhite> {
|
|
63
73
|
static defaultProps = defaultProps;
|
|
64
74
|
|
|
65
75
|
constructor(props: WhiteProps) {
|
|
66
76
|
super(props);
|
|
67
|
-
|
|
77
|
+
// 是否定义了storageKey
|
|
78
|
+
const {
|
|
79
|
+
storageKey,
|
|
80
|
+
value: { brightness, temperature },
|
|
81
|
+
} = this.props;
|
|
68
82
|
this.state = { brightness, temperature };
|
|
83
|
+
if (!storageKey) {
|
|
84
|
+
this.storageKey = `temperature_key_${storageKeyIndex++}`;
|
|
85
|
+
} else {
|
|
86
|
+
this.storageKey = storageKey;
|
|
87
|
+
}
|
|
69
88
|
}
|
|
70
89
|
|
|
71
90
|
componentDidUpdate(prevProps: WhiteProps) {
|
|
@@ -199,7 +218,26 @@ export default class WhitePicker extends Component<WhiteProps, IWhite> {
|
|
|
199
218
|
}
|
|
200
219
|
|
|
201
220
|
initData = async (validBound: ValidBound) => {
|
|
221
|
+
let cacheEnabled = true;
|
|
222
|
+
// 尺寸有变化时,不使用缓存
|
|
223
|
+
if (!_.isEqual(validBound, this.pickerBound)) {
|
|
224
|
+
cacheEnabled = false;
|
|
225
|
+
}
|
|
226
|
+
|
|
202
227
|
const { temperature } = this.state;
|
|
228
|
+
|
|
229
|
+
// 获取当前positon的值
|
|
230
|
+
const data = (await StorageUtils.getDevItem(this.storageKey)) as TempStorageData;
|
|
231
|
+
// 是否相同色温,相同使用缓存坐标展示
|
|
232
|
+
if (data && data.temperature === temperature && cacheEnabled) {
|
|
233
|
+
this.thumbPosition = data.position;
|
|
234
|
+
this.currentTemperature = temperature;
|
|
235
|
+
} else {
|
|
236
|
+
// 根据色温计算位置
|
|
237
|
+
this.thumbPosition = this.autoTemperaturePosition(temperature, validBound);
|
|
238
|
+
this.currentTemperature = temperature;
|
|
239
|
+
}
|
|
240
|
+
|
|
203
241
|
// 根据色温计算位置
|
|
204
242
|
this.thumbPosition = this.autoTemperaturePosition(temperature, validBound);
|
|
205
243
|
this.currentTemperature = temperature;
|
|
@@ -217,6 +255,8 @@ export default class WhitePicker extends Component<WhiteProps, IWhite> {
|
|
|
217
255
|
validBound
|
|
218
256
|
);
|
|
219
257
|
}
|
|
258
|
+
|
|
259
|
+
StorageUtils.setDevItem(this.storageKey, { temperature, position });
|
|
220
260
|
return position;
|
|
221
261
|
}
|
|
222
262
|
|
|
@@ -242,6 +282,7 @@ export default class WhitePicker extends Component<WhiteProps, IWhite> {
|
|
|
242
282
|
x: normal.x * length + normalVector.originX,
|
|
243
283
|
y: normal.y * length + normalVector.originY,
|
|
244
284
|
};
|
|
285
|
+
StorageUtils.setDevItem(this.storageKey, { temperature, position });
|
|
245
286
|
return position;
|
|
246
287
|
}
|
|
247
288
|
|
|
@@ -263,6 +304,11 @@ export default class WhitePicker extends Component<WhiteProps, IWhite> {
|
|
|
263
304
|
}
|
|
264
305
|
return this.handleTemperaturePosition(temperature, validBound);
|
|
265
306
|
}
|
|
307
|
+
|
|
308
|
+
StorageUtils.setDevItem(this.storageKey, {
|
|
309
|
+
temperature,
|
|
310
|
+
position: origin,
|
|
311
|
+
});
|
|
266
312
|
this.currentTemperature = temperature;
|
|
267
313
|
this.thumbPosition = origin;
|
|
268
314
|
return origin;
|
|
@@ -281,6 +327,7 @@ export default class WhitePicker extends Component<WhiteProps, IWhite> {
|
|
|
281
327
|
private currentTemperature: number;
|
|
282
328
|
private pickerRef: RectPicker | null;
|
|
283
329
|
private pickerBound: ValidBound;
|
|
330
|
+
private storageKey: string;
|
|
284
331
|
|
|
285
332
|
handlePickerGrant = () => {
|
|
286
333
|
const { temperature, brightness } = this.state;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
|
|
2
|
+
import { AsyncStorage } from 'react-native';
|
|
3
|
+
import { TYSdk } from 'tuya-panel-kit';
|
|
4
|
+
|
|
5
|
+
const getDevKey = (name: string) => {
|
|
6
|
+
const { devId } = TYSdk.devInfo;
|
|
7
|
+
return `${devId}_${name}`;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
const getPidKey = (name: string) => {
|
|
11
|
+
const { productId } = TYSdk.devInfo;
|
|
12
|
+
return `${productId}_${name}`;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const getUiKey = (name: string) => {
|
|
16
|
+
const { uiId } = TYSdk.devInfo;
|
|
17
|
+
return `${uiId}_${name}`;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export default {
|
|
21
|
+
async setItem(key: string, value: any) {
|
|
22
|
+
const data = { value, type: typeof value };
|
|
23
|
+
const jsonValue = JSON.stringify(data);
|
|
24
|
+
return new Promise((resolve, reject) => {
|
|
25
|
+
AsyncStorage.setItem(key, jsonValue, err => {
|
|
26
|
+
if (err) {
|
|
27
|
+
reject(err);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
resolve('');
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
},
|
|
34
|
+
async setDevItem(name: string, value: any) {
|
|
35
|
+
const key = getDevKey(name);
|
|
36
|
+
return this.setItem(key, value);
|
|
37
|
+
},
|
|
38
|
+
async setPidItem(name: string, value: any) {
|
|
39
|
+
const key = getPidKey(name);
|
|
40
|
+
return this.setItem(key, value);
|
|
41
|
+
},
|
|
42
|
+
async setUiItem(name: string, value: any) {
|
|
43
|
+
const key = getUiKey(name);
|
|
44
|
+
return this.setItem(key, value);
|
|
45
|
+
},
|
|
46
|
+
async getItem(key: string) {
|
|
47
|
+
return new Promise((resolve, reject) => {
|
|
48
|
+
AsyncStorage.getItem(key, (err, data) => {
|
|
49
|
+
if (err) {
|
|
50
|
+
reject(err);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (data) {
|
|
54
|
+
resolve(JSON.parse(data).value);
|
|
55
|
+
}
|
|
56
|
+
resolve(null);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
},
|
|
60
|
+
async getDevItem(name: string) {
|
|
61
|
+
const key = getDevKey(name);
|
|
62
|
+
return this.getItem(key);
|
|
63
|
+
},
|
|
64
|
+
async getPidItem(name: string) {
|
|
65
|
+
const key = getPidKey(name);
|
|
66
|
+
return this.getItem(key);
|
|
67
|
+
},
|
|
68
|
+
async getUiItem(name: string) {
|
|
69
|
+
const key = getUiKey(name);
|
|
70
|
+
return this.getItem(key);
|
|
71
|
+
},
|
|
72
|
+
async removeItem(key: string) {
|
|
73
|
+
return new Promise((resolve, reject) => {
|
|
74
|
+
AsyncStorage.removeItem(key, err => {
|
|
75
|
+
if (err) {
|
|
76
|
+
reject(err);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
resolve('');
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
},
|
|
83
|
+
|
|
84
|
+
async removeDevItem(name: string) {
|
|
85
|
+
const key = getDevKey(name);
|
|
86
|
+
return this.removeItem(key);
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
async removePidItem(name: string) {
|
|
90
|
+
const key = getDevKey(name);
|
|
91
|
+
return this.removeItem(key);
|
|
92
|
+
},
|
|
93
|
+
async removeUiItem(name: string) {
|
|
94
|
+
const key = getUiKey(name);
|
|
95
|
+
return this.removeItem(key);
|
|
96
|
+
},
|
|
97
|
+
};
|
package/src/i18n/strings.ts
CHANGED
|
@@ -128,7 +128,7 @@ export default {
|
|
|
128
128
|
"camera_net_err": "La conexión del dispositivo está interrumpida, compruebe el dispositivo y su red",
|
|
129
129
|
"camera_operation_site_error": "No se puede editar en el modo de patrulla in situ",
|
|
130
130
|
"camera_patrol": "Patrullando",
|
|
131
|
-
"camera_patrol_cruise_time": "
|
|
131
|
+
"camera_patrol_cruise_time": "Tiempo de crucero:{0} - {1}",
|
|
132
132
|
"camera_patrol_enable": "Habilitar el patrullaje",
|
|
133
133
|
"camera_preset_point": "Punto preestablecido",
|
|
134
134
|
"camera_private_mode_sleep": "Dispositivo en modo de reposo",
|
|
@@ -841,10 +841,10 @@ export default {
|
|
|
841
841
|
"power_strip_feature_2_socket_2_text_min_on": "Enchufe 2 encendido en {0} min",
|
|
842
842
|
"power_strip_feature_2_socket_3_text_min_off": "Enchufe 3 apagado en {0} min",
|
|
843
843
|
"power_strip_feature_2_socket_3_text_min_on": "Enchufe 3 encendido en {0} min",
|
|
844
|
-
"power_strip_feature_2_socket_4_text_min_off": "
|
|
845
|
-
"power_strip_feature_2_socket_4_text_min_on": "
|
|
846
|
-
"power_strip_feature_2_socket_5_text_min_off": "
|
|
847
|
-
"power_strip_feature_2_socket_5_text_min_on": "
|
|
844
|
+
"power_strip_feature_2_socket_4_text_min_off": "La toma 4 se apagará en {0} ",
|
|
845
|
+
"power_strip_feature_2_socket_4_text_min_on": "La toma 4 se encenderá en {0}",
|
|
846
|
+
"power_strip_feature_2_socket_5_text_min_off": "El enchufe 5 se apagará en {0}",
|
|
847
|
+
"power_strip_feature_2_socket_5_text_min_on": "La toma 5 se encenderá en {0}",
|
|
848
848
|
"power_strip_feature_2_socket_usb_text_min_off": "USB apagado en {0} min",
|
|
849
849
|
"power_strip_feature_2_socket_usb_text_min_on": "USB encendido en {0} min",
|
|
850
850
|
"power_strip_specific_settings_desc_socket_1": "Enchufe 1 Descripción",
|
|
@@ -902,16 +902,16 @@ export default {
|
|
|
902
902
|
"smoke_alerteffect": "Humo detectado",
|
|
903
903
|
"smoke_alertfree": "No se detectó humo",
|
|
904
904
|
"smoke_equipmentselftest": "Autoprueba del equipo",
|
|
905
|
-
"socket1_active_timer_field_small_off_text": "
|
|
906
|
-
"socket1_active_timer_field_small_on_text": "
|
|
907
|
-
"socket2_active_timer_field_small_off_text": "
|
|
908
|
-
"socket2_active_timer_field_small_on_text": "
|
|
909
|
-
"socket3_active_timer_field_small_off_text": "
|
|
910
|
-
"socket3_active_timer_field_small_on_text": "
|
|
911
|
-
"socket4_active_timer_field_small_off_text": "
|
|
912
|
-
"socket4_active_timer_field_small_on_text": "
|
|
913
|
-
"socket5_active_timer_field_small_off_text": "
|
|
914
|
-
"socket5_active_timer_field_small_on_text": "
|
|
905
|
+
"socket1_active_timer_field_small_off_text": "Enchufe 1 apagado en {0}",
|
|
906
|
+
"socket1_active_timer_field_small_on_text": "Enchufe 1 encendido en {0}",
|
|
907
|
+
"socket2_active_timer_field_small_off_text": "Enchufe 2 apagado en {0}",
|
|
908
|
+
"socket2_active_timer_field_small_on_text": "Enchufe 2 activado en {0}",
|
|
909
|
+
"socket3_active_timer_field_small_off_text": "Enchufe 3 apagado en {0}",
|
|
910
|
+
"socket3_active_timer_field_small_on_text": "Enchufe 3 encendido en {0}",
|
|
911
|
+
"socket4_active_timer_field_small_off_text": "Enchufe 4 apagado en {0}",
|
|
912
|
+
"socket4_active_timer_field_small_on_text": "Enchufe 4 encendido en {0}",
|
|
913
|
+
"socket5_active_timer_field_small_off_text": "Enchufe 5 apagado en {0}",
|
|
914
|
+
"socket5_active_timer_field_small_on_text": "Enchufe 5 encendido en {0}",
|
|
915
915
|
"socket_settings_firstbox_status1_description": "El dispositivo permanece apagado",
|
|
916
916
|
"socket_settings_firstbox_status2_description": "El dispositivo permanece encendido",
|
|
917
917
|
"socket_settings_firstbox_status3_description": "Volver al estado anterior antes de desconectar la alimentación",
|
|
@@ -928,8 +928,8 @@ export default {
|
|
|
928
928
|
"sockets_specific_settings_relay_status": "Comportamiento de encendido",
|
|
929
929
|
"sockets_specific_settings_relay_status_remember": "Recordar el último estado",
|
|
930
930
|
"sockets_specific_settings_switch_inching": "Apagado automático ",
|
|
931
|
-
"socketusb_active_timer_field_small_off_text": "USB
|
|
932
|
-
"socketusb_active_timer_field_small_on_text": "USB
|
|
931
|
+
"socketusb_active_timer_field_small_off_text": "USB apagado en {0}",
|
|
932
|
+
"socketusb_active_timer_field_small_on_text": "USB encendido en {0}",
|
|
933
933
|
"software_update_found_failed_update_error_5012": "El dispositivo está desconectado.",
|
|
934
934
|
"soilsensor_R": "Rutinas sugeridas",
|
|
935
935
|
"soilsensor_R1": "Iniciar el riego cuando la humedad del suelo sea inferior al 20%",
|
|
@@ -1024,10 +1024,10 @@ export default {
|
|
|
1024
1024
|
"striplight_adaptbutton": "Adaptar",
|
|
1025
1025
|
"striplight_lengthadaptationtext": "Si la tira de luz se ha cortado, puedes ajustar la longitud en la aplicación para adaptarla.",
|
|
1026
1026
|
"striplight_lengthtitle": "Longitud de la tira de luz",
|
|
1027
|
-
"switch1_active_timer_field_small_off_text": "
|
|
1028
|
-
"switch1_active_timer_field_small_on_text": "
|
|
1029
|
-
"switch2_active_timer_field_small_off_text": "
|
|
1030
|
-
"switch2_active_timer_field_small_on_text": "
|
|
1027
|
+
"switch1_active_timer_field_small_off_text": "Apagar el interruptor 1 en {0}",
|
|
1028
|
+
"switch1_active_timer_field_small_on_text": "Activa el interruptor 1 en {0}",
|
|
1029
|
+
"switch2_active_timer_field_small_off_text": "Interruptor 2 apagado en {0}",
|
|
1030
|
+
"switch2_active_timer_field_small_on_text": "Interruptor 2 encendido en {0}",
|
|
1031
1031
|
"switch_4channelfunctions1": "Interruptor 1",
|
|
1032
1032
|
"switch_4channelfunctions2": "Interruptor 2",
|
|
1033
1033
|
"switch_4channelfunctions3": "Interruptor 3",
|
|
@@ -1036,8 +1036,8 @@ export default {
|
|
|
1036
1036
|
"switch_4channels2setting": "Configuración Switch 2",
|
|
1037
1037
|
"switch_4channels3setting": "Configuración Switch 3",
|
|
1038
1038
|
"switch_4channels4setting": "Configuración Switch 4",
|
|
1039
|
-
"switch_active_timer_field_small_off_text": "
|
|
1040
|
-
"switch_active_timer_field_small_on_text": "
|
|
1039
|
+
"switch_active_timer_field_small_off_text": "Apagar en {0}",
|
|
1040
|
+
"switch_active_timer_field_small_on_text": "Conectar en {0}",
|
|
1041
1041
|
"switch_doublepress": "Prensa doble",
|
|
1042
1042
|
"switch_interlock": "Enclavamiento",
|
|
1043
1043
|
"switch_interlock_addbtn_text": "Añadir interbloqueo",
|
|
@@ -1133,12 +1133,12 @@ export default {
|
|
|
1133
1133
|
"timer_powerstrip_socket1_switched_off_text": "El Enchufe 1 se apagará aproximadamente a las {0}",
|
|
1134
1134
|
"timer_powerstrip_socket1_switched_on_text": "Enchufe 1 se encenderá aproximadamente a las {0}",
|
|
1135
1135
|
"timer_sockets_button_text": "Comenzar",
|
|
1136
|
-
"timer_switch1_active_timer_field_description_off_text": "
|
|
1136
|
+
"timer_switch1_active_timer_field_description_off_text": "El interruptor 1 se apagará aproximadamente en {0}",
|
|
1137
1137
|
"timer_switch1_active_timer_field_description_on_text": "El interruptor 1 se encenderá aproximadamente en {0}",
|
|
1138
|
-
"timer_switch2_active_timer_field_description_off_text": "
|
|
1139
|
-
"timer_switch2_active_timer_field_description_on_text": "
|
|
1140
|
-
"timer_switch_active_timer_field_description_off_text": "
|
|
1141
|
-
"timer_switch_active_timer_field_description_on_text": "
|
|
1138
|
+
"timer_switch2_active_timer_field_description_off_text": "El interruptor 2 se apagará aproximadamente en {0}",
|
|
1139
|
+
"timer_switch2_active_timer_field_description_on_text": "El interruptor 2 se encenderá aproximadamente en {0}",
|
|
1140
|
+
"timer_switch_active_timer_field_description_off_text": "El interruptor se apagará aproximadamente en {0}",
|
|
1141
|
+
"timer_switch_active_timer_field_description_on_text": "El interruptor se encenderá aproximadamente en {0}",
|
|
1142
1142
|
"timeschedule_add_schedule_Lighting_applyfor_selection2_text": "Iluminación secundaria",
|
|
1143
1143
|
"timeschedule_add_schedule_Lighting_applyfor_selection_text": "Iluminación principal",
|
|
1144
1144
|
"timeschedule_add_schedule_ceiling_fan_selectionfield_text": "Iluminación",
|
|
@@ -1172,6 +1172,9 @@ export default {
|
|
|
1172
1172
|
"water_alerteffect": "Fuga de agua detectada",
|
|
1173
1173
|
"water_consumption": "Consumo de agua",
|
|
1174
1174
|
"waterleakage_alertfree": "No se detectó ninguna fuga de agua",
|
|
1175
|
+
"wifi_repeater_description": "Descripción del repetidor WiFi",
|
|
1176
|
+
"wifi_repeater_group_tips": "Esta función no es compatible con la página de grupo.",
|
|
1177
|
+
"wifi_repeater_title": "Repetidor WiFi",
|
|
1175
1178
|
"working_status": "Estado de trabajo",
|
|
1176
1179
|
"working_status_automatic": "Riego automático",
|
|
1177
1180
|
"working_status_delay": "Retraso por lluvia",
|
|
@@ -2353,6 +2356,9 @@ export default {
|
|
|
2353
2356
|
"water_alerteffect": "Zjištěn únik vody",
|
|
2354
2357
|
"water_consumption": "Spotřeba vody",
|
|
2355
2358
|
"waterleakage_alertfree": "Nebyl zjištěn žádný únik vody",
|
|
2359
|
+
"wifi_repeater_description": "Popis WiFi opakovače",
|
|
2360
|
+
"wifi_repeater_group_tips": "Tato funkce není podporována na stránce skupiny.",
|
|
2361
|
+
"wifi_repeater_title": "Zesilovač Wi-Fi",
|
|
2356
2362
|
"working_status": "Pracovní stav",
|
|
2357
2363
|
"working_status_automatic": "Automatické zavlažování",
|
|
2358
2364
|
"working_status_delay": "Zpoždění deště",
|
|
@@ -3144,7 +3150,7 @@ export default {
|
|
|
3144
3150
|
"motion_detection_headline_text": "Motion Detection",
|
|
3145
3151
|
"motion_detection_no_safe_mode_text": "Trigger lighting",
|
|
3146
3152
|
"motion_detection_no_safe_mode_trigger_text": "Trigger notifications",
|
|
3147
|
-
"motion_detection_pir": "Motion detection
|
|
3153
|
+
"motion_detection_pir": "Motion detection",
|
|
3148
3154
|
"motion_detection_select_detection_sensitivity_level": "Detection sensitivity level",
|
|
3149
3155
|
"motion_detection_selectionfield2_topic_text": "Lux value",
|
|
3150
3156
|
"motion_detection_selectionfield2_value2_text": "300(dusk)",
|
|
@@ -3534,6 +3540,9 @@ export default {
|
|
|
3534
3540
|
"water_alerteffect": "Water leakage detected",
|
|
3535
3541
|
"water_consumption": "Water consumption",
|
|
3536
3542
|
"waterleakage_alertfree": "No water leakage detected",
|
|
3543
|
+
"wifi_repeater_description": "WiFi Repeater Description",
|
|
3544
|
+
"wifi_repeater_group_tips": "This function can't be supported in the group page.",
|
|
3545
|
+
"wifi_repeater_title": "WiFi Repeater",
|
|
3537
3546
|
"working_status": "Working status",
|
|
3538
3547
|
"working_status_automatic": "Automatic watering",
|
|
3539
3548
|
"working_status_delay": "Rain Delay",
|
|
@@ -4715,6 +4724,9 @@ export default {
|
|
|
4715
4724
|
"water_alerteffect": "Откритo е изтичане на вода",
|
|
4716
4725
|
"water_consumption": "Консумация на вода",
|
|
4717
4726
|
"waterleakage_alertfree": "Не е открито изтичане на вода",
|
|
4727
|
+
"wifi_repeater_description": "Описание на WiFi репитер",
|
|
4728
|
+
"wifi_repeater_group_tips": "Тази функция не може да бъде поддържана в груповата страница.",
|
|
4729
|
+
"wifi_repeater_title": "WiFi повторител",
|
|
4718
4730
|
"working_status": "Работен статус",
|
|
4719
4731
|
"working_status_automatic": "Автоматично поливане",
|
|
4720
4732
|
"working_status_delay": "Забавяне на дъжда",
|
|
@@ -5896,6 +5908,9 @@ export default {
|
|
|
5896
5908
|
"water_alerteffect": "Vandlækage registreret",
|
|
5897
5909
|
"water_consumption": "Vandforbrug",
|
|
5898
5910
|
"waterleakage_alertfree": "Ingen vandlækage opdaget",
|
|
5911
|
+
"wifi_repeater_description": "Beskrivelse af WiFi-repeater",
|
|
5912
|
+
"wifi_repeater_group_tips": "Denne funktion kan ikke understøttes på gruppesiden.",
|
|
5913
|
+
"wifi_repeater_title": "Wi-fi-repeater",
|
|
5899
5914
|
"working_status": "Arbejdsstatus",
|
|
5900
5915
|
"working_status_automatic": "Automatisk vanding",
|
|
5901
5916
|
"working_status_delay": "Regnforsinkelse",
|
|
@@ -6029,7 +6044,7 @@ export default {
|
|
|
6029
6044
|
"camera_local_recording": "Lokale Aufnahme",
|
|
6030
6045
|
"camera_mic_two_way_talking": "Anrufen…",
|
|
6031
6046
|
"camera_motiondetection": "PIR-Sensor",
|
|
6032
|
-
"camera_motiondetectiondescription": "Der PIR-Sensor muss aktiviert sein, um die Kamera bei Bewegungserkennung zu
|
|
6047
|
+
"camera_motiondetectiondescription": "Der PIR-Sensor muss aktiviert sein, um die Kamera bei Bewegungserkennung zu aufzuwecken. Nach der Aktivierung wird der Kamerastream analysiert, um Benachrichtigungen bei Bewegung oder menschlicher Anwesenheit auszulösen.",
|
|
6033
6048
|
"camera_net_err": "Die Geräteverbindung ist unterbrochen. Bitte überprüfe das Gerät und sein Netzwerk",
|
|
6034
6049
|
"camera_operation_site_error": "Nicht bearbeitbar im Standortpatrouillenmodus",
|
|
6035
6050
|
"camera_patrol": "Patrouille",
|
|
@@ -6099,7 +6114,7 @@ export default {
|
|
|
6099
6114
|
"camera_site_delete_dialog_title": "Möchtest Du den Standort wirklich löschen?",
|
|
6100
6115
|
"camera_site_name": "Standortname",
|
|
6101
6116
|
"camera_site_overview_empty_button_add_text": "Standort hinzufügen",
|
|
6102
|
-
"camera_site_overview_empty_information_text": "Du hast noch
|
|
6117
|
+
"camera_site_overview_empty_information_text": "Du hast noch keinen Ort hinzugefügt",
|
|
6103
6118
|
"camera_site_overview_warning_max_number_text": "Die maximale Anzahl an Orte wurde erreicht.",
|
|
6104
6119
|
"camera_status_indicator": "LED-Anzeige",
|
|
6105
6120
|
"camera_tile_camera_button_label_photo": "Foto aufnehmen",
|
|
@@ -6687,7 +6702,7 @@ export default {
|
|
|
6687
6702
|
"motion_detection_headline_text": "Bewegungserkennung",
|
|
6688
6703
|
"motion_detection_no_safe_mode_text": "Beleuchtung auslösen",
|
|
6689
6704
|
"motion_detection_no_safe_mode_trigger_text": "Benachrichtigungen auslösen",
|
|
6690
|
-
"motion_detection_pir": "
|
|
6705
|
+
"motion_detection_pir": "Bewegungserkennung",
|
|
6691
6706
|
"motion_detection_select_detection_sensitivity_level": "Empfindlichkeitsstufe der Erkennung",
|
|
6692
6707
|
"motion_detection_selectionfield2_topic_text": "Lux-Wert",
|
|
6693
6708
|
"motion_detection_selectionfield2_value2_text": "300 (Dämmerung)",
|
|
@@ -7077,6 +7092,9 @@ export default {
|
|
|
7077
7092
|
"water_alerteffect": "Wasserleck erkannt",
|
|
7078
7093
|
"water_consumption": "Wasserverbrauch",
|
|
7079
7094
|
"waterleakage_alertfree": "Kein Wasserleck erkannt",
|
|
7095
|
+
"wifi_repeater_description": "Beschreibung des WLAN-Repeaters",
|
|
7096
|
+
"wifi_repeater_group_tips": "Diese Funktion kann auf der Gruppenseite nicht unterstützt werden.",
|
|
7097
|
+
"wifi_repeater_title": "WiFi Repeater",
|
|
7080
7098
|
"working_status": "Arbeitsstatus",
|
|
7081
7099
|
"working_status_automatic": "Automatische Bewässerung",
|
|
7082
7100
|
"working_status_delay": "Regenverzögerung",
|
|
@@ -8258,6 +8276,9 @@ export default {
|
|
|
8258
8276
|
"water_alerteffect": "Εντοπίστηκε διαρροή νερού",
|
|
8259
8277
|
"water_consumption": "Κατανάλωση νερού",
|
|
8260
8278
|
"waterleakage_alertfree": "Δεν εντοπίστηκε διαρροή νερού",
|
|
8279
|
+
"wifi_repeater_description": "Περιγραφή του WiFi Repeater",
|
|
8280
|
+
"wifi_repeater_group_tips": "Αυτή η λειτουργία δεν υποστηρίζεται στη σελίδα της ομάδας.",
|
|
8281
|
+
"wifi_repeater_title": "WiFi Repeater",
|
|
8261
8282
|
"working_status": "Κατάσταση εργασίας",
|
|
8262
8283
|
"working_status_automatic": "Αυτόματο πότισμα",
|
|
8263
8284
|
"working_status_delay": "Καθυστέρηση βροχής",
|
|
@@ -9439,6 +9460,9 @@ export default {
|
|
|
9439
9460
|
"water_alerteffect": "Se detectó una fuga de agua",
|
|
9440
9461
|
"water_consumption": "Consumo de agua",
|
|
9441
9462
|
"waterleakage_alertfree": "No se detectó ninguna fuga de agua",
|
|
9463
|
+
"wifi_repeater_description": "Descripción del repetidor WiFi",
|
|
9464
|
+
"wifi_repeater_group_tips": "Esta función no se puede admitir en la página de grupo.",
|
|
9465
|
+
"wifi_repeater_title": "Repetidor WiFi",
|
|
9442
9466
|
"working_status": "Estado de funcionamiento",
|
|
9443
9467
|
"working_status_automatic": "Riego automático",
|
|
9444
9468
|
"working_status_delay": "Retraso por lluvia",
|
|
@@ -10620,6 +10644,9 @@ export default {
|
|
|
10620
10644
|
"water_alerteffect": "Tuvastatud vee leke",
|
|
10621
10645
|
"water_consumption": "Veetarbimine",
|
|
10622
10646
|
"waterleakage_alertfree": "Vee leket ei tuvastatud",
|
|
10647
|
+
"wifi_repeater_description": "WiFi-korduvaadiku kirjeldus",
|
|
10648
|
+
"wifi_repeater_group_tips": "Seda funktsiooni ei saa grupi lehel toetada.",
|
|
10649
|
+
"wifi_repeater_title": "WiFi repiiter",
|
|
10623
10650
|
"working_status": "Tööstaatus",
|
|
10624
10651
|
"working_status_automatic": "Automaatne kastmine",
|
|
10625
10652
|
"working_status_delay": "Vihma viivitus",
|
|
@@ -11801,6 +11828,9 @@ export default {
|
|
|
11801
11828
|
"water_alerteffect": "Vesivuoto havaittu",
|
|
11802
11829
|
"water_consumption": "Vedenkulutus",
|
|
11803
11830
|
"waterleakage_alertfree": "Vesivuotoa ei havaittu",
|
|
11831
|
+
"wifi_repeater_description": "WiFi-toistin Kuvaus",
|
|
11832
|
+
"wifi_repeater_group_tips": "Tätä toimintoa ei tueta ryhmäsivulla.",
|
|
11833
|
+
"wifi_repeater_title": "WiFi-toistin",
|
|
11804
11834
|
"working_status": "Työtila",
|
|
11805
11835
|
"working_status_automatic": "Automaattinen kastelu",
|
|
11806
11836
|
"working_status_delay": "Sateen viivästyminen",
|
|
@@ -12982,6 +13012,9 @@ export default {
|
|
|
12982
13012
|
"water_alerteffect": "Fuite d'eau détectée",
|
|
12983
13013
|
"water_consumption": "Consommation d'eau",
|
|
12984
13014
|
"waterleakage_alertfree": "Aucune fuite d'eau détectée",
|
|
13015
|
+
"wifi_repeater_description": "Description du répéteur WiFi",
|
|
13016
|
+
"wifi_repeater_group_tips": "Cette fonction n'est pas prise en charge dans la page de Groupe.",
|
|
13017
|
+
"wifi_repeater_title": "Répéteur WiFi",
|
|
12985
13018
|
"working_status": "État de fonctionnement",
|
|
12986
13019
|
"working_status_automatic": "Arrosage automatique",
|
|
12987
13020
|
"working_status_delay": "Délai en raison de la pluie",
|
|
@@ -14163,6 +14196,9 @@ export default {
|
|
|
14163
14196
|
"water_alerteffect": "Otkriveno curenje vode",
|
|
14164
14197
|
"water_consumption": "Potrošnja vode",
|
|
14165
14198
|
"waterleakage_alertfree": "Nije otkriveno curenje vode",
|
|
14199
|
+
"wifi_repeater_description": "Opis WiFi repetitora",
|
|
14200
|
+
"wifi_repeater_group_tips": "Ova funkcija ne može biti podržana na stranici grupe.",
|
|
14201
|
+
"wifi_repeater_title": "WiFi repetitor",
|
|
14166
14202
|
"working_status": "Radni status",
|
|
14167
14203
|
"working_status_automatic": "Automatsko zalijevanje",
|
|
14168
14204
|
"working_status_delay": "Odgoda zbog kiše",
|
|
@@ -15344,6 +15380,9 @@ export default {
|
|
|
15344
15380
|
"water_alerteffect": "Vízszivárgás érzékelve",
|
|
15345
15381
|
"water_consumption": "Vízfogyasztás",
|
|
15346
15382
|
"waterleakage_alertfree": "Nem észlelhető vízszivárgás",
|
|
15383
|
+
"wifi_repeater_description": "WiFi-ismétlő leírása",
|
|
15384
|
+
"wifi_repeater_group_tips": "Ez a funkció a csoportoldalon nem támogatott.",
|
|
15385
|
+
"wifi_repeater_title": "WiFi Repeater",
|
|
15347
15386
|
"working_status": "Működési állapot",
|
|
15348
15387
|
"working_status_automatic": "Automatikus öntözés",
|
|
15349
15388
|
"working_status_delay": "Esős késleltetés",
|
|
@@ -16525,6 +16564,9 @@ export default {
|
|
|
16525
16564
|
"water_alerteffect": "Rilevata perdita d'acqua",
|
|
16526
16565
|
"water_consumption": "Consumo di acqua",
|
|
16527
16566
|
"waterleakage_alertfree": "Non sono state rilevate perdite d'acqua",
|
|
16567
|
+
"wifi_repeater_description": "Descrizione del ripetitore WiFi",
|
|
16568
|
+
"wifi_repeater_group_tips": "Questa funzione non è supportata nella pagina del gruppo.",
|
|
16569
|
+
"wifi_repeater_title": "WiFi Repeater",
|
|
16528
16570
|
"working_status": "Stato di lavoro",
|
|
16529
16571
|
"working_status_automatic": "Irrigazione automatica",
|
|
16530
16572
|
"working_status_delay": "Ritardo della pioggia",
|
|
@@ -17706,6 +17748,9 @@ export default {
|
|
|
17706
17748
|
"water_alerteffect": "누수 감지",
|
|
17707
17749
|
"water_consumption": "용수 소비량",
|
|
17708
17750
|
"waterleakage_alertfree": "누수가 감지되지 않음",
|
|
17751
|
+
"wifi_repeater_description": "WiFi 리피터 설명",
|
|
17752
|
+
"wifi_repeater_group_tips": "이 기능은 그룹 페이지에서는 지원되지 않습니다.",
|
|
17753
|
+
"wifi_repeater_title": "와이파이 라우터",
|
|
17709
17754
|
"working_status": "근무 상태",
|
|
17710
17755
|
"working_status_automatic": "자동 급수",
|
|
17711
17756
|
"working_status_delay": "레인 딜레이",
|
|
@@ -18887,6 +18932,9 @@ export default {
|
|
|
18887
18932
|
"water_alerteffect": "Aptiktas vandens nuotėkis",
|
|
18888
18933
|
"water_consumption": "Vandens suvartojimas",
|
|
18889
18934
|
"waterleakage_alertfree": "Vandens nuotėkio neaptikta",
|
|
18935
|
+
"wifi_repeater_description": "WiFi kartotuvo aprašymas",
|
|
18936
|
+
"wifi_repeater_group_tips": "Ši funkcija negali būti palaikoma grupės puslapyje.",
|
|
18937
|
+
"wifi_repeater_title": "WiFi kartotuvas",
|
|
18890
18938
|
"working_status": "Darbo būsena",
|
|
18891
18939
|
"working_status_automatic": "Automatinis laistymas",
|
|
18892
18940
|
"working_status_delay": "Lietaus vėlavimas",
|
|
@@ -20068,6 +20116,9 @@ export default {
|
|
|
20068
20116
|
"water_alerteffect": "Konstatēta ūdens noplūde",
|
|
20069
20117
|
"water_consumption": "Ūdens patēriņš",
|
|
20070
20118
|
"waterleakage_alertfree": "Ūdens noplūde nav konstatēta",
|
|
20119
|
+
"wifi_repeater_description": "WiFi atkārtotāja apraksts",
|
|
20120
|
+
"wifi_repeater_group_tips": "Šī funkcija nav pieejama grupas lapā.",
|
|
20121
|
+
"wifi_repeater_title": "WiFi atkārtotājs",
|
|
20071
20122
|
"working_status": "Darba statuss",
|
|
20072
20123
|
"working_status_automatic": "Automātiska laistīšana",
|
|
20073
20124
|
"working_status_delay": "Lietus kavēšanās",
|
|
@@ -21249,6 +21300,9 @@ export default {
|
|
|
21249
21300
|
"water_alerteffect": "Vannlekkasje oppdaget",
|
|
21250
21301
|
"water_consumption": "Vannforbruk",
|
|
21251
21302
|
"waterleakage_alertfree": "Ingen vannlekkasje oppdaget",
|
|
21303
|
+
"wifi_repeater_description": "Beskrivelse av WiFi-repeater",
|
|
21304
|
+
"wifi_repeater_group_tips": "Denne funksjonen støttes ikke på gruppesiden.",
|
|
21305
|
+
"wifi_repeater_title": "WiFi-repeater",
|
|
21252
21306
|
"working_status": "Arbeidsstatus",
|
|
21253
21307
|
"working_status_automatic": "Automatisk vanning",
|
|
21254
21308
|
"working_status_delay": "Regnforsinkelse",
|
|
@@ -22430,6 +22484,9 @@ export default {
|
|
|
22430
22484
|
"water_alerteffect": "Waterlek gedetecteerd",
|
|
22431
22485
|
"water_consumption": "Waterverbruik",
|
|
22432
22486
|
"waterleakage_alertfree": "Geen waterlekkage gedetecteerd",
|
|
22487
|
+
"wifi_repeater_description": "Beschrijving WiFi-repeater",
|
|
22488
|
+
"wifi_repeater_group_tips": "Deze functie wordt niet ondersteund op de groepspagina.",
|
|
22489
|
+
"wifi_repeater_title": "WiFi-repeater",
|
|
22433
22490
|
"working_status": "Werkstatus",
|
|
22434
22491
|
"working_status_automatic": "Automatische bewatering",
|
|
22435
22492
|
"working_status_delay": "Regen Vertraging",
|
|
@@ -23611,6 +23668,9 @@ export default {
|
|
|
23611
23668
|
"water_alerteffect": "Wykryto wyciek wody",
|
|
23612
23669
|
"water_consumption": "Zużycie wody",
|
|
23613
23670
|
"waterleakage_alertfree": "Nie wykryto wycieku wody",
|
|
23671
|
+
"wifi_repeater_description": "Opis repeatera WiFi",
|
|
23672
|
+
"wifi_repeater_group_tips": "Ta funkcja nie jest obsługiwana na stronie grupy.",
|
|
23673
|
+
"wifi_repeater_title": "Wzmacniacz Wi-Fi",
|
|
23614
23674
|
"working_status": "Status pracy",
|
|
23615
23675
|
"working_status_automatic": "Automatyczne nawadnianie",
|
|
23616
23676
|
"working_status_delay": "Opóźnienie deszczu",
|
|
@@ -24792,6 +24852,9 @@ export default {
|
|
|
24792
24852
|
"water_alerteffect": "Vazamento de água detectado",
|
|
24793
24853
|
"water_consumption": "Consumo de água",
|
|
24794
24854
|
"waterleakage_alertfree": "Nenhum vazamento de água detectado",
|
|
24855
|
+
"wifi_repeater_description": "Descrição do repetidor WiFi",
|
|
24856
|
+
"wifi_repeater_group_tips": "Essa função não pode ser suportada na página do grupo.",
|
|
24857
|
+
"wifi_repeater_title": "Repetidor WiFi",
|
|
24795
24858
|
"working_status": "Status de trabalho",
|
|
24796
24859
|
"working_status_automatic": "Rega automática",
|
|
24797
24860
|
"working_status_delay": "Atraso de chuva",
|
|
@@ -25973,6 +26036,9 @@ export default {
|
|
|
25973
26036
|
"water_alerteffect": "S-au detectat scurgeri de apă",
|
|
25974
26037
|
"water_consumption": "Consumul de apă",
|
|
25975
26038
|
"waterleakage_alertfree": "Nu sunt detectate scurgeri de apă",
|
|
26039
|
+
"wifi_repeater_description": "Descriere repetor WiFi",
|
|
26040
|
+
"wifi_repeater_group_tips": "Această funcție nu poate fi acceptată în pagina de grup.",
|
|
26041
|
+
"wifi_repeater_title": "Repetor WiFi",
|
|
25976
26042
|
"working_status": "Starea de lucru",
|
|
25977
26043
|
"working_status_automatic": "Udare automată",
|
|
25978
26044
|
"working_status_delay": "Întârzierea ploii",
|
|
@@ -27154,6 +27220,9 @@ export default {
|
|
|
27154
27220
|
"water_alerteffect": "Обнаружена утечка воды",
|
|
27155
27221
|
"water_consumption": "Потребление воды",
|
|
27156
27222
|
"waterleakage_alertfree": "Утечки воды не обнаружено",
|
|
27223
|
+
"wifi_repeater_description": "Описание WiFi-ретранслятора",
|
|
27224
|
+
"wifi_repeater_group_tips": "Эта функция не доступна на странице группы.",
|
|
27225
|
+
"wifi_repeater_title": "WiFi ретранслятор",
|
|
27157
27226
|
"working_status": "Рабочий статус",
|
|
27158
27227
|
"working_status_automatic": "Автоматический полив",
|
|
27159
27228
|
"working_status_delay": "Задержка из-за дождя",
|
|
@@ -28335,6 +28404,9 @@ export default {
|
|
|
28335
28404
|
"water_alerteffect": "Zistený únik vody",
|
|
28336
28405
|
"water_consumption": "Spotreba vody",
|
|
28337
28406
|
"waterleakage_alertfree": "Nebol zistený žiadny únik vody",
|
|
28407
|
+
"wifi_repeater_description": "Popis WiFi repeatera",
|
|
28408
|
+
"wifi_repeater_group_tips": "Táto funkcia nie je podporovaná na stránke skupiny.",
|
|
28409
|
+
"wifi_repeater_title": "Opakovač WiFi",
|
|
28338
28410
|
"working_status": "Pracovný stav",
|
|
28339
28411
|
"working_status_automatic": "Automatické zavlažovanie",
|
|
28340
28412
|
"working_status_delay": "Oneskorenie dažďa",
|
|
@@ -29516,6 +29588,9 @@ export default {
|
|
|
29516
29588
|
"water_alerteffect": "Vattenläcka upptäckt",
|
|
29517
29589
|
"water_consumption": "Vattenförbrukning",
|
|
29518
29590
|
"waterleakage_alertfree": "Inget vattenläckage upptäckt",
|
|
29591
|
+
"wifi_repeater_description": "WiFi-repeater Beskrivning",
|
|
29592
|
+
"wifi_repeater_group_tips": "Denna funktion kan inte stödjas på gruppsidan.",
|
|
29593
|
+
"wifi_repeater_title": "WiFi-Repeater",
|
|
29519
29594
|
"working_status": "Arbetsstatus",
|
|
29520
29595
|
"working_status_automatic": "Automatisk bevattning",
|
|
29521
29596
|
"working_status_delay": "Regnfördröjning",
|
|
@@ -30697,6 +30772,9 @@ export default {
|
|
|
30697
30772
|
"water_alerteffect": "Su kaçağı tespit edildi",
|
|
30698
30773
|
"water_consumption": "Su tüketimi",
|
|
30699
30774
|
"waterleakage_alertfree": "Su kaçağı tespit edilmedi",
|
|
30775
|
+
"wifi_repeater_description": "WiFi Tekrarlayıcı Açıklaması",
|
|
30776
|
+
"wifi_repeater_group_tips": "Bu işlev grup sayfasında desteklenmemektedir.",
|
|
30777
|
+
"wifi_repeater_title": "WiFi Tekrarlayıcı",
|
|
30700
30778
|
"working_status": "Çalışma durumu",
|
|
30701
30779
|
"working_status_automatic": "Otomatik sulama",
|
|
30702
30780
|
"working_status_delay": "Yağmur Gecikmesi",
|
|
@@ -31878,6 +31956,9 @@ export default {
|
|
|
31878
31956
|
"water_alerteffect": "Виявлено витік води",
|
|
31879
31957
|
"water_consumption": "Споживання води",
|
|
31880
31958
|
"waterleakage_alertfree": "Протікання води не виявлено",
|
|
31959
|
+
"wifi_repeater_description": "Характеристики Wi-Fi ретранслятора",
|
|
31960
|
+
"wifi_repeater_group_tips": "Ця функція не підтримується на сторінці групи.",
|
|
31961
|
+
"wifi_repeater_title": "Ретранслятор WiFi",
|
|
31881
31962
|
"working_status": "Робочий стан",
|
|
31882
31963
|
"working_status_automatic": "Автоматичний полив",
|
|
31883
31964
|
"working_status_delay": "Затримка поливу",
|
|
@@ -33059,6 +33140,9 @@ export default {
|
|
|
33059
33140
|
"water_alerteffect": "Vazamento de água detectado",
|
|
33060
33141
|
"water_consumption": "Consumo de água",
|
|
33061
33142
|
"waterleakage_alertfree": "Nenhum vazamento de água detectado",
|
|
33143
|
+
"wifi_repeater_description": "Descrição do repetidor WiFi",
|
|
33144
|
+
"wifi_repeater_group_tips": "Essa função não pode ser suportada na página do grupo.",
|
|
33145
|
+
"wifi_repeater_title": "Repetidor WiFi",
|
|
33062
33146
|
"working_status": "Status de trabalho",
|
|
33063
33147
|
"working_status_automatic": "Rega automática",
|
|
33064
33148
|
"working_status_delay": "Atraso de chuva",
|
package/src/utils/interface.ts
CHANGED
|
@@ -11,7 +11,7 @@ export enum WorkMode {
|
|
|
11
11
|
LoveScene = 'love_scene'
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
export type Category = 'light' | 'socket' | 'fan' | 'mainLight' | 'secondaryLight'
|
|
14
|
+
export type Category = 'light' | 'socket' | 'fan' | 'mainLight' | 'secondaryLight' | 'shutter' | 'osramFan'
|
|
15
15
|
|
|
16
16
|
export interface ApplyForItem {
|
|
17
17
|
key: string;
|
package/translateKey.txt
CHANGED