@operato/input 10.29.30 → 10.29.36
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/CHANGELOG.md +9 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +776 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +210 -0
- package/coverage/lcov-report/webpack/bootstrap.html +118 -0
- package/coverage/lcov-report/webpack/index.html +116 -0
- package/coverage/lcov-report/webpack/runtime/define property getters.html +118 -0
- package/coverage/lcov-report/webpack/runtime/global.html +118 -0
- package/coverage/lcov-report/webpack/runtime/hasOwnProperty shorthand.html +118 -0
- package/coverage/lcov-report/webpack/runtime/index.html +161 -0
- package/coverage/lcov-report/webpack/runtime/make namespace object.html +118 -0
- package/coverage/lcov.info +46329 -0
- package/dist/src/ox-input-file.d.ts +42 -0
- package/dist/src/ox-input-file.js +271 -38
- package/dist/src/ox-input-file.js.map +1 -1
- package/dist/test/ox-input-file.test.d.ts +1 -0
- package/dist/test/ox-input-file.test.js +103 -0
- package/dist/test/ox-input-file.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/test/ox-input-file.test.ts +136 -0
- package/translations/en.json +9 -0
- package/translations/es.json +9 -0
- package/translations/ja.json +9 -0
- package/translations/ko.json +9 -0
- package/translations/ms.json +9 -0
- package/translations/zh.json +9 -0
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@operato/input",
|
|
3
3
|
"description": "Webcomponents for input following open-wc recommendations",
|
|
4
4
|
"author": "heartyoh@hatiolab.com",
|
|
5
|
-
"version": "10.29.
|
|
5
|
+
"version": "10.29.36",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "dist/src/index.js",
|
|
8
8
|
"module": "dist/src/index.js",
|
|
@@ -251,9 +251,9 @@
|
|
|
251
251
|
"@material/web": "^2.0.0",
|
|
252
252
|
"@operato/i18n": "^10.29.27",
|
|
253
253
|
"@operato/pickr": "^10.29.1",
|
|
254
|
-
"@operato/popup": "^10.29.
|
|
254
|
+
"@operato/popup": "^10.29.36",
|
|
255
255
|
"@operato/styles": "^10.29.30",
|
|
256
|
-
"@operato/utils": "^10.29.
|
|
256
|
+
"@operato/utils": "^10.29.36",
|
|
257
257
|
"@types/codemirror": "^5.60.5",
|
|
258
258
|
"@undecaf/zbar-wasm": "^0.11.0",
|
|
259
259
|
"codemirror": "^6.0.1",
|
|
@@ -294,5 +294,5 @@
|
|
|
294
294
|
"prettier --write"
|
|
295
295
|
]
|
|
296
296
|
},
|
|
297
|
-
"gitHead": "
|
|
297
|
+
"gitHead": "90c8bc8593e5d68745aeddd45752fab83c50cc16"
|
|
298
298
|
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { aTimeout, expect, fixture } from '@open-wc/testing'
|
|
2
|
+
import { html } from 'lit'
|
|
3
|
+
|
|
4
|
+
import { registerFileUploadLimits } from '@operato/utils'
|
|
5
|
+
|
|
6
|
+
import '../src/ox-input-file.js'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The one file picker.
|
|
10
|
+
*
|
|
11
|
+
* ## Why this is tested
|
|
12
|
+
*
|
|
13
|
+
* Every screen that takes a file goes through this element, and a 360 uses its quiet look. What
|
|
14
|
+
* must hold:
|
|
15
|
+
*
|
|
16
|
+
* ```
|
|
17
|
+
* quiet no box: an attach button; once picked, the name with replace and remove
|
|
18
|
+
* refusal a type outside accept or a file over the server's limit never becomes the value,
|
|
19
|
+
* and says so in place — a drop skips the native accept filter
|
|
20
|
+
* drop target a drop lands on the element the owner gives (a 360 section), and only there
|
|
21
|
+
* progress while the owner uploads, the buttons wait and the percent shows
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
describe('ox-input-file', () => {
|
|
25
|
+
const file = (name: string, type: string, size = 10) => new File([new Uint8Array(size)], name, { type })
|
|
26
|
+
|
|
27
|
+
const drop = (area: HTMLElement, ...files: File[]) => {
|
|
28
|
+
const dataTransfer = new DataTransfer()
|
|
29
|
+
files.forEach(one => dataTransfer.items.add(one))
|
|
30
|
+
area.dispatchEvent(new DragEvent('drop', { dataTransfer, bubbles: true, cancelable: true }))
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const settle = async (el: any) => {
|
|
34
|
+
await aTimeout(0)
|
|
35
|
+
await el.updateComplete
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const buttons = (el: any) => [...el.renderRoot.querySelectorAll('button')] as HTMLButtonElement[]
|
|
39
|
+
|
|
40
|
+
/* The theme token the box border is drawn with; without it the border falls away and every look reads 'none'. */
|
|
41
|
+
before(() => document.documentElement.style.setProperty('--md-sys-color-outline-variant', 'gray'))
|
|
42
|
+
after(() => document.documentElement.style.removeProperty('--md-sys-color-outline-variant'))
|
|
43
|
+
|
|
44
|
+
afterEach(() => registerFileUploadLimits(async () => ({})))
|
|
45
|
+
|
|
46
|
+
it('draws no box when quiet, and shows the picked name with replace and remove', async () => {
|
|
47
|
+
const el: any = await fixture(html`<ox-input-file quiet accept="image/*,application/pdf"></ox-input-file>`)
|
|
48
|
+
|
|
49
|
+
expect(getComputedStyle(el).borderTopStyle, 'quiet still draws a box').to.equal('none')
|
|
50
|
+
expect(buttons(el).length, 'one attach button before a pick').to.equal(1)
|
|
51
|
+
|
|
52
|
+
let changes = 0
|
|
53
|
+
el.addEventListener('change', () => changes++)
|
|
54
|
+
|
|
55
|
+
drop(el, file('paper.pdf', 'application/pdf'))
|
|
56
|
+
await settle(el)
|
|
57
|
+
|
|
58
|
+
expect(el.value.map((one: File) => one.name)).to.deep.equal(['paper.pdf'])
|
|
59
|
+
expect(el.renderRoot.querySelector('.picked .name').textContent).to.equal('paper.pdf')
|
|
60
|
+
expect(buttons(el).length, 'replace and remove').to.equal(2)
|
|
61
|
+
|
|
62
|
+
const remove = buttons(el).find(one => one.hasAttribute('danger'))!
|
|
63
|
+
remove.click()
|
|
64
|
+
await el.updateComplete
|
|
65
|
+
|
|
66
|
+
expect(el.value).to.deep.equal([])
|
|
67
|
+
expect(changes).to.equal(2)
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
it('refuses a type outside accept and a file over the server limit, in place', async () => {
|
|
71
|
+
registerFileUploadLimits(async () => ({ maxFileSize: 20 }))
|
|
72
|
+
|
|
73
|
+
const el: any = await fixture(html`<ox-input-file quiet multiple accept="image/*"></ox-input-file>`)
|
|
74
|
+
|
|
75
|
+
drop(el, file('note.txt', 'text/plain'), file('big.png', 'image/png', 50), file('ok.png', 'image/png', 5))
|
|
76
|
+
await settle(el)
|
|
77
|
+
|
|
78
|
+
expect(el.value.map((one: File) => one.name)).to.deep.equal(['ok.png'])
|
|
79
|
+
|
|
80
|
+
const refusal = el.renderRoot.querySelector('[role="alert"]')
|
|
81
|
+
expect(refusal, 'no refusal shown').to.exist
|
|
82
|
+
expect(refusal.textContent).to.contain('note.txt')
|
|
83
|
+
expect(refusal.textContent).to.contain('big.png')
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
it('takes a drop on the given target and lets go of the old one', async () => {
|
|
87
|
+
const section = document.createElement('section')
|
|
88
|
+
const other = document.createElement('section')
|
|
89
|
+
document.body.append(section, other)
|
|
90
|
+
|
|
91
|
+
const el: any = await fixture(html`<ox-input-file quiet .dropTarget=${section}></ox-input-file>`)
|
|
92
|
+
|
|
93
|
+
drop(section, file('a.pdf', 'application/pdf'))
|
|
94
|
+
await settle(el)
|
|
95
|
+
expect(el.value.map((one: File) => one.name)).to.deep.equal(['a.pdf'])
|
|
96
|
+
|
|
97
|
+
el.dropTarget = other
|
|
98
|
+
await el.updateComplete
|
|
99
|
+
|
|
100
|
+
drop(section, file('b.pdf', 'application/pdf'))
|
|
101
|
+
await settle(el)
|
|
102
|
+
expect(el.value.map((one: File) => one.name), 'the old target still takes drops').to.deep.equal(['a.pdf'])
|
|
103
|
+
|
|
104
|
+
section.dispatchEvent(new DragEvent('dragenter', { bubbles: true }))
|
|
105
|
+
expect(section.classList.contains('candrop'), 'the old target still lights up').to.equal(false)
|
|
106
|
+
|
|
107
|
+
drop(other, file('c.pdf', 'application/pdf'))
|
|
108
|
+
await settle(el)
|
|
109
|
+
expect(el.value.map((one: File) => one.name)).to.deep.equal(['c.pdf'])
|
|
110
|
+
|
|
111
|
+
section.remove()
|
|
112
|
+
other.remove()
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
it('waits while the owner uploads and shows the percent', async () => {
|
|
116
|
+
const el: any = await fixture(html`<ox-input-file quiet .progress=${0.4}></ox-input-file>`)
|
|
117
|
+
|
|
118
|
+
expect(buttons(el).every(one => one.disabled), 'a button works mid-upload').to.equal(true)
|
|
119
|
+
expect(el.renderRoot.querySelector('[role="status"]').textContent).to.contain('40')
|
|
120
|
+
|
|
121
|
+
drop(el, file('a.pdf', 'application/pdf'))
|
|
122
|
+
await settle(el)
|
|
123
|
+
expect(el.value ?? [], 'a drop landed mid-upload').to.deep.equal([])
|
|
124
|
+
})
|
|
125
|
+
|
|
126
|
+
it('keeps the drop box when not quiet', async () => {
|
|
127
|
+
const el: any = await fixture(html`<ox-input-file></ox-input-file>`)
|
|
128
|
+
|
|
129
|
+
expect(getComputedStyle(el).borderTopStyle).to.equal('dashed')
|
|
130
|
+
expect(el.renderRoot.querySelector('label[for="input-file"]')).to.exist
|
|
131
|
+
|
|
132
|
+
drop(el, file('a.bin', ''))
|
|
133
|
+
await settle(el)
|
|
134
|
+
expect(el.renderRoot.querySelectorAll('li').length).to.equal(1)
|
|
135
|
+
})
|
|
136
|
+
})
|
package/translations/en.json
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
+
"label.attach file": "attach",
|
|
2
3
|
"label.available-variables": "available variables",
|
|
3
4
|
"label.daily": "daily",
|
|
4
5
|
"label.day-of-month": "day of month",
|
|
@@ -20,16 +21,20 @@
|
|
|
20
21
|
"label.operators": "operators",
|
|
21
22
|
"label.privilege": "privilege",
|
|
22
23
|
"label.protected-request-ip": "safe request IP",
|
|
24
|
+
"label.remove file": "remove",
|
|
25
|
+
"label.replace file": "replace",
|
|
23
26
|
"label.search": "search",
|
|
24
27
|
"label.second": "second",
|
|
25
28
|
"label.second by second": "second by second",
|
|
26
29
|
"label.seconds": "seconds",
|
|
30
|
+
"label.select files": "select files",
|
|
27
31
|
"label.superuser": "superuser",
|
|
28
32
|
"label.weekly": "weekly",
|
|
29
33
|
"label.yearly": "yearly",
|
|
30
34
|
"text.10 am on every payday": "10 am on every payday",
|
|
31
35
|
"text.allowed values": "allowed values",
|
|
32
36
|
"text.any value": "any value",
|
|
37
|
+
"text.drop files here": "drop files here",
|
|
33
38
|
"text.every 12 hours": "every 12 hours",
|
|
34
39
|
"text.every 15 minutes": "every 15 minutes",
|
|
35
40
|
"text.every 15 seconds": "every 15 seconds",
|
|
@@ -46,6 +51,9 @@
|
|
|
46
51
|
"text.every second": "every second",
|
|
47
52
|
"text.every sunday": "every sunday",
|
|
48
53
|
"text.every weekday": "every weekday",
|
|
54
|
+
"text.file refused for count": "{name}: {limit} files at most",
|
|
55
|
+
"text.file refused for size": "{name}: over {limit}",
|
|
56
|
+
"text.file refused for type": "{name}: not a type taken here",
|
|
49
57
|
"text.input-secret-hide": "hide",
|
|
50
58
|
"text.input-secret-placeholder": "enter secret information",
|
|
51
59
|
"text.input-secret-show": "show",
|
|
@@ -54,5 +62,6 @@
|
|
|
54
62
|
"text.step values": "step values",
|
|
55
63
|
"text.the first day of every month": "the first day of every month",
|
|
56
64
|
"text.the first day of every year": "the first day of every year",
|
|
65
|
+
"text.uploading file": "uploading {percent}%",
|
|
57
66
|
"text.value list separator": "value list separator"
|
|
58
67
|
}
|
package/translations/es.json
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
+
"label.attach file": "adjuntar",
|
|
2
3
|
"label.available-variables": "variables disponibles",
|
|
3
4
|
"label.daily": "diario",
|
|
4
5
|
"label.day-of-month": "día del mes",
|
|
@@ -20,16 +21,20 @@
|
|
|
20
21
|
"label.operators": "operadores",
|
|
21
22
|
"label.privilege": "privilegio",
|
|
22
23
|
"label.protected-request-ip": "IP de solicitud segura",
|
|
24
|
+
"label.remove file": "quitar",
|
|
25
|
+
"label.replace file": "reemplazar",
|
|
23
26
|
"label.search": "buscar",
|
|
24
27
|
"label.second": "segundo",
|
|
25
28
|
"label.second by second": "segundo a segundo",
|
|
26
29
|
"label.seconds": "segundos",
|
|
30
|
+
"label.select files": "seleccionar archivos",
|
|
27
31
|
"label.superuser": "superusuario",
|
|
28
32
|
"label.weekly": "semanal",
|
|
29
33
|
"label.yearly": "anual",
|
|
30
34
|
"text.10 am on every payday": "a las 10:00 cada día de pago",
|
|
31
35
|
"text.allowed values": "valores permitidos",
|
|
32
36
|
"text.any value": "cualquier valor",
|
|
37
|
+
"text.drop files here": "suelte los archivos aquí",
|
|
33
38
|
"text.every 12 hours": "cada 12 horas",
|
|
34
39
|
"text.every 15 minutes": "cada 15 minutos",
|
|
35
40
|
"text.every 15 seconds": "cada 15 segundos",
|
|
@@ -46,6 +51,9 @@
|
|
|
46
51
|
"text.every second": "cada segundo",
|
|
47
52
|
"text.every sunday": "cada domingo",
|
|
48
53
|
"text.every weekday": "cada día laborable",
|
|
54
|
+
"text.file refused for count": "{name}: {limit} archivos como máximo",
|
|
55
|
+
"text.file refused for size": "{name}: supera {limit}",
|
|
56
|
+
"text.file refused for type": "{name}: tipo no admitido",
|
|
49
57
|
"text.input-secret-hide": "ocultar",
|
|
50
58
|
"text.input-secret-placeholder": "introduzca la información secreta",
|
|
51
59
|
"text.input-secret-show": "mostrar",
|
|
@@ -54,5 +62,6 @@
|
|
|
54
62
|
"text.step values": "valores de incremento",
|
|
55
63
|
"text.the first day of every month": "el primer día de cada mes",
|
|
56
64
|
"text.the first day of every year": "el primer día de cada año",
|
|
65
|
+
"text.uploading file": "subiendo {percent}%",
|
|
57
66
|
"text.value list separator": "separador de lista de valores"
|
|
58
67
|
}
|
package/translations/ja.json
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
+
"label.attach file": "添付",
|
|
2
3
|
"label.available-variables": "利用可能な変数",
|
|
3
4
|
"label.daily": "毎日",
|
|
4
5
|
"label.day-of-month": "日付",
|
|
@@ -19,15 +20,19 @@
|
|
|
19
20
|
"label.operators": "演算子",
|
|
20
21
|
"label.privilege": "権限",
|
|
21
22
|
"label.protected-request-ip": "安全なリクエスト IP",
|
|
23
|
+
"label.remove file": "外す",
|
|
24
|
+
"label.replace file": "差し替え",
|
|
22
25
|
"label.search": "検索キーワード",
|
|
23
26
|
"label.second": "秒",
|
|
24
27
|
"label.seconds": "秒",
|
|
28
|
+
"label.select files": "ファイル選択",
|
|
25
29
|
"label.superuser": "スーパーユーザー",
|
|
26
30
|
"label.weekly": "週間",
|
|
27
31
|
"label.yearly": "年間",
|
|
28
32
|
"text.10 am on every payday": "給料日の毎朝10時",
|
|
29
33
|
"text.allowed values": "許可された値",
|
|
30
34
|
"text.any value": "任意の値",
|
|
35
|
+
"text.drop files here": "ここにファイルをドロップ",
|
|
31
36
|
"text.every 12 hours": "12時間毎",
|
|
32
37
|
"text.every 15 minutes": "15分毎",
|
|
33
38
|
"text.every 15 seconds": "15秒毎",
|
|
@@ -44,6 +49,9 @@
|
|
|
44
49
|
"text.every second": "毎秒",
|
|
45
50
|
"text.every sunday": "毎週日曜日",
|
|
46
51
|
"text.every weekday": "平日毎日",
|
|
52
|
+
"text.file refused for count": "{name}: {limit}件まで",
|
|
53
|
+
"text.file refused for size": "{name}: {limit} 超過",
|
|
54
|
+
"text.file refused for type": "{name}: 受け付けない形式",
|
|
47
55
|
"text.input-secret-hide": "非表示",
|
|
48
56
|
"text.input-secret-placeholder": "機密情報を入力",
|
|
49
57
|
"text.input-secret-show": "表示",
|
|
@@ -52,5 +60,6 @@
|
|
|
52
60
|
"text.step values": "ステップ値",
|
|
53
61
|
"text.the first day of every month": "毎月1日",
|
|
54
62
|
"text.the first day of every year": "毎年1月1日",
|
|
63
|
+
"text.uploading file": "アップロード中 {percent}%",
|
|
55
64
|
"text.value list separator": "値リスト区切り"
|
|
56
65
|
}
|
package/translations/ko.json
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
+
"label.attach file": "첨부",
|
|
2
3
|
"label.available-variables": "사용 가능한 변수",
|
|
3
4
|
"label.daily": "일간",
|
|
4
5
|
"label.day-of-month": "날짜",
|
|
@@ -19,15 +20,19 @@
|
|
|
19
20
|
"label.operators": "연산자",
|
|
20
21
|
"label.privilege": "권한",
|
|
21
22
|
"label.protected-request-ip": "안전한 요청 IP",
|
|
23
|
+
"label.remove file": "빼기",
|
|
24
|
+
"label.replace file": "바꾸기",
|
|
22
25
|
"label.search": "검색어",
|
|
23
26
|
"label.second": "초",
|
|
24
27
|
"label.seconds": "초",
|
|
28
|
+
"label.select files": "파일 선택",
|
|
25
29
|
"label.superuser": "수퍼유저",
|
|
26
30
|
"label.weekly": "주간",
|
|
27
31
|
"label.yearly": "연간",
|
|
28
32
|
"text.10 am on every payday": "월급날 오전 10시마다",
|
|
29
33
|
"text.allowed values": "허용된 값",
|
|
30
34
|
"text.any value": "아무값",
|
|
35
|
+
"text.drop files here": "파일을 여기에 끌어 놓기",
|
|
31
36
|
"text.every 12 hours": "매 12시간마다",
|
|
32
37
|
"text.every 15 minutes": "매 15분마다",
|
|
33
38
|
"text.every 15 seconds": "매 15초마다",
|
|
@@ -44,6 +49,9 @@
|
|
|
44
49
|
"text.every second": "매초",
|
|
45
50
|
"text.every sunday": "매주 일요일마다",
|
|
46
51
|
"text.every weekday": "평일마다",
|
|
52
|
+
"text.file refused for count": "{name}: {limit}개까지",
|
|
53
|
+
"text.file refused for size": "{name}: {limit} 초과",
|
|
54
|
+
"text.file refused for type": "{name}: 받지 않는 형식",
|
|
47
55
|
"text.input-secret-hide": "숨기기",
|
|
48
56
|
"text.input-secret-placeholder": "보안 정보 입력",
|
|
49
57
|
"text.input-secret-show": "보기",
|
|
@@ -52,5 +60,6 @@
|
|
|
52
60
|
"text.step values": "단계 값",
|
|
53
61
|
"text.the first day of every month": "매월 1일마다",
|
|
54
62
|
"text.the first day of every year": "매년 1월 1일마다",
|
|
63
|
+
"text.uploading file": "올리는 중 {percent}%",
|
|
55
64
|
"text.value list separator": "값 구분자"
|
|
56
65
|
}
|
package/translations/ms.json
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
+
"label.attach file": "lampirkan",
|
|
2
3
|
"label.available-variables": "variabel yang tersedia",
|
|
3
4
|
"label.daily": "harian",
|
|
4
5
|
"label.day-of-month": "tarikh",
|
|
@@ -19,15 +20,19 @@
|
|
|
19
20
|
"label.operators": "operator",
|
|
20
21
|
"label.privilege": "keistimewaan",
|
|
21
22
|
"label.protected-request-ip": "IP permintaan yang selamat",
|
|
23
|
+
"label.remove file": "buang",
|
|
24
|
+
"label.replace file": "ganti",
|
|
22
25
|
"label.search": "carian",
|
|
23
26
|
"label.second": "saat",
|
|
24
27
|
"label.seconds": "saat",
|
|
28
|
+
"label.select files": "pilih fail",
|
|
25
29
|
"label.superuser": "pengguna super",
|
|
26
30
|
"label.weekly": "mingguan",
|
|
27
31
|
"label.yearly": "tahunan",
|
|
28
32
|
"text.10 am on every payday": "pukul 10 pagi setiap hari gaji",
|
|
29
33
|
"text.allowed values": "nilai yang dibenarkan",
|
|
30
34
|
"text.any value": "apa-apa nilai",
|
|
35
|
+
"text.drop files here": "lepaskan fail di sini",
|
|
31
36
|
"text.every 12 hours": "setiap 12 jam",
|
|
32
37
|
"text.every 15 minutes": "setiap 15 minit",
|
|
33
38
|
"text.every 15 seconds": "setiap 15 saat",
|
|
@@ -44,6 +49,9 @@
|
|
|
44
49
|
"text.every second": "setiap saat",
|
|
45
50
|
"text.every sunday": "setiap hari Ahad",
|
|
46
51
|
"text.every weekday": "setiap hari minggu",
|
|
52
|
+
"text.file refused for count": "{name}: maksimum {limit} fail",
|
|
53
|
+
"text.file refused for size": "{name}: melebihi {limit}",
|
|
54
|
+
"text.file refused for type": "{name}: jenis tidak diterima",
|
|
47
55
|
"text.input-secret-hide": "Sembunyi",
|
|
48
56
|
"text.input-secret-placeholder": "Masukkan maklumat rahsia",
|
|
49
57
|
"text.input-secret-show": "Tunjuk",
|
|
@@ -52,5 +60,6 @@
|
|
|
52
60
|
"text.step values": "nilai langkah",
|
|
53
61
|
"text.the first day of every month": "hari pertama setiap bulan",
|
|
54
62
|
"text.the first day of every year": "hari pertama setiap tahun",
|
|
63
|
+
"text.uploading file": "memuat naik {percent}%",
|
|
55
64
|
"text.value list separator": "pemisah senarai nilai"
|
|
56
65
|
}
|
package/translations/zh.json
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
+
"label.attach file": "附件",
|
|
2
3
|
"label.available-variables": "可用变量",
|
|
3
4
|
"label.daily": "每日",
|
|
4
5
|
"label.day-of-month": "日期",
|
|
@@ -19,15 +20,19 @@
|
|
|
19
20
|
"label.operators": "运算符",
|
|
20
21
|
"label.privilege": "权限",
|
|
21
22
|
"label.protected-request-ip": "安全请求 IP",
|
|
23
|
+
"label.remove file": "移除",
|
|
24
|
+
"label.replace file": "替换",
|
|
22
25
|
"label.search": "搜索关键词",
|
|
23
26
|
"label.second": "秒",
|
|
24
27
|
"label.seconds": "秒",
|
|
28
|
+
"label.select files": "选择文件",
|
|
25
29
|
"label.superuser": "超级用户",
|
|
26
30
|
"label.weekly": "每周",
|
|
27
31
|
"label.yearly": "每年",
|
|
28
32
|
"text.10 am on every payday": "发薪日每天上午10点",
|
|
29
33
|
"text.allowed values": "允许的值",
|
|
30
34
|
"text.any value": "任何值",
|
|
35
|
+
"text.drop files here": "将文件拖放到此处",
|
|
31
36
|
"text.every 12 hours": "每12小时",
|
|
32
37
|
"text.every 15 minutes": "每15分钟",
|
|
33
38
|
"text.every 15 seconds": "每15秒",
|
|
@@ -44,6 +49,9 @@
|
|
|
44
49
|
"text.every second": "每秒",
|
|
45
50
|
"text.every sunday": "每个星期天",
|
|
46
51
|
"text.every weekday": "每个工作日",
|
|
52
|
+
"text.file refused for count": "{name}: 最多 {limit} 个",
|
|
53
|
+
"text.file refused for size": "{name}: 超过 {limit}",
|
|
54
|
+
"text.file refused for type": "{name}: 不接受的格式",
|
|
47
55
|
"text.input-secret-hide": "隐藏",
|
|
48
56
|
"text.input-secret-placeholder": "输入机密信息",
|
|
49
57
|
"text.input-secret-show": "显示",
|
|
@@ -52,5 +60,6 @@
|
|
|
52
60
|
"text.step values": "步进值",
|
|
53
61
|
"text.the first day of every month": "每月第一天",
|
|
54
62
|
"text.the first day of every year": "每年1月1日",
|
|
63
|
+
"text.uploading file": "上传中 {percent}%",
|
|
55
64
|
"text.value list separator": "值列表分隔符"
|
|
56
65
|
}
|