@things-factory/auth-ui 10.1.232 → 10.1.234
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/dist-client/components/change-password.d.ts +1 -5
- package/dist-client/components/change-password.js +9 -14
- package/dist-client/components/change-password.js.map +1 -1
- package/dist-client/components/create-domain-popup.js +5 -5
- package/dist-client/components/create-domain-popup.js.map +1 -1
- package/dist-client/components/profile-component.js +1 -1
- package/dist-client/components/profile-component.js.map +1 -1
- package/dist-client/pages/domain/domain-management.js +5 -1
- package/dist-client/pages/domain/domain-management.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
- package/tests/domain-words.test.ts +25 -0
- package/tests/password-rule-shown.test.ts +42 -0
- package/translations/en.json +7 -5
- package/translations/es.json +7 -5
- package/translations/ja.json +7 -5
- package/translations/ko.json +7 -5
- package/translations/ms.json +7 -5
- package/translations/zh.json +7 -5
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/auth-ui",
|
|
3
|
-
"version": "10.1.
|
|
3
|
+
"version": "10.1.234",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "dist-client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
"@operato/shell": "^10.29.39",
|
|
43
43
|
"@operato/styles": "^10.0.0",
|
|
44
44
|
"@operato/utils": "^10.29.39",
|
|
45
|
-
"@things-factory/apptool-base": "^10.1.
|
|
46
|
-
"@things-factory/auth-base": "^10.1.
|
|
47
|
-
"@things-factory/component-ui": "^10.1.
|
|
48
|
-
"@things-factory/more-base": "^10.1.
|
|
45
|
+
"@things-factory/apptool-base": "^10.1.234",
|
|
46
|
+
"@things-factory/auth-base": "^10.1.234",
|
|
47
|
+
"@things-factory/component-ui": "^10.1.234",
|
|
48
|
+
"@things-factory/more-base": "^10.1.234",
|
|
49
49
|
"base64url": "^3.0.1",
|
|
50
50
|
"clipboard": "^2.0.6"
|
|
51
51
|
},
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "92f29853680fff527a5f1d167ab3ad9b27837ba9"
|
|
53
53
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Inline help audit 2026-10-30: the domain popup's refusal key held a ':' - i18next's namespace separator - so its
|
|
3
|
+
* Korean was never reached; typing and sending checked two different rules; the theme column offered `ocean-blue`.
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync } from 'fs'
|
|
6
|
+
import { join } from 'path'
|
|
7
|
+
|
|
8
|
+
const ROOT = join(__dirname, '..')
|
|
9
|
+
const read = (file: string) => readFileSync(join(ROOT, file), 'utf8')
|
|
10
|
+
const ko: Record<string, string> = JSON.parse(read('translations/ko.json'))
|
|
11
|
+
|
|
12
|
+
test('★ the domain name refusal is a key i18next can reach, and typing and sending check one rule', () => {
|
|
13
|
+
const popup = read('client/components/create-domain-popup.ts')
|
|
14
|
+
expect(Object.keys(ko).filter(key => /^error: /.test(key))).toEqual([])
|
|
15
|
+
expect(popup).toMatch(/i18next\.t\('error\.domain-name-characters'\)/)
|
|
16
|
+
expect(popup.match(/DOMAIN_NAME\.test\(/g)?.length).toBe(2)
|
|
17
|
+
expect(popup).toMatch(/const DOMAIN_NAME = \/\^\[a-zA-Z0-9- \]\+\$\/\n/)
|
|
18
|
+
expect(ko['error.domain-name-characters']).toBeTruthy()
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
test('★ the theme column shows the theme’s name, not its id', () => {
|
|
22
|
+
const page = read('client/pages/domain/domain-management.ts')
|
|
23
|
+
expect(page).not.toMatch(/options: \['', 'ocean-blue'/)
|
|
24
|
+
for (const theme of ['ocean-blue', 'forest-green', 'sunset-orange', 'royal-purple', 'cherry-red']) expect([theme, !!ko[`label.theme-${theme}`]]).toEqual([theme, true])
|
|
25
|
+
})
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { readFileSync } from 'fs'
|
|
2
|
+
import path from 'path'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The rule a person reads under the new password is the server's rule.
|
|
6
|
+
*
|
|
7
|
+
* The profile handed the change-password form the whole query answer (`{ passwordRule }`) instead of the rule,
|
|
8
|
+
* so every field read as missing and the form drew the default rule - uppercase required, no repeats - which
|
|
9
|
+
* the server did not enforce. The form also copied the rule into plain fields in updated(), after its render
|
|
10
|
+
* had read them.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
const read = (file: string) => readFileSync(path.resolve(__dirname, '..', file), 'utf-8')
|
|
14
|
+
|
|
15
|
+
describe('the password rule shown is the server rule', () => {
|
|
16
|
+
it('★ the profile hands over the rule, not the query answer', () => {
|
|
17
|
+
const source = read('client/components/profile-component.ts')
|
|
18
|
+
expect(source).toMatch(/this\.passwordRule = response\.data\?\.passwordRule\b/)
|
|
19
|
+
expect(source).not.toMatch(/this\.passwordRule = response\.data\s*$/m)
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
it('★ the form draws the pattern and the help from the rule in render', () => {
|
|
23
|
+
const source = read('client/components/change-password.ts')
|
|
24
|
+
const render = source.match(/\n render\(\) \{([\s\S]*?)\n \}\n/)![1]
|
|
25
|
+
expect(render).toMatch(/generatePasswordPatternRegExp\(this\.passwordRule\)/)
|
|
26
|
+
expect(render).toMatch(/generatePasswordPatternHelp\(this\.passwordRule\)/)
|
|
27
|
+
expect(source).not.toMatch(/this\.passwordPattern|this\.passwordHelp/)
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
it('★ "no repeats" says what the server refuses: the same character 3 times in a row', () => {
|
|
31
|
+
const server = read('../auth-base/server/controllers/utils/password-rule.ts')
|
|
32
|
+
const repeat = server.match(/!allowRepeat \? '([^']+)'/)![1].replace(/\\\\/g, '\\')
|
|
33
|
+
const pattern = new RegExp(`^${repeat}.*$`)
|
|
34
|
+
expect(pattern.test('ab1aa')).toBe(true)
|
|
35
|
+
expect(pattern.test('ab1aaa')).toBe(false)
|
|
36
|
+
|
|
37
|
+
for (const locale of ['en', 'ko', 'ja', 'zh', 'ms', 'es']) {
|
|
38
|
+
const sentences = JSON.parse(read(`../auth-base/translations/${locale}.json`))
|
|
39
|
+
expect([locale, sentences['text.pattern_not_allowed']]).toEqual([locale, expect.stringContaining('3')])
|
|
40
|
+
}
|
|
41
|
+
})
|
|
42
|
+
})
|
package/translations/en.json
CHANGED
|
@@ -53,7 +53,6 @@
|
|
|
53
53
|
"error.user-locked": "user account is locked",
|
|
54
54
|
"error.value is empty": "{value} is empty",
|
|
55
55
|
"error.x already exists in y": "{x} already exists in {y}",
|
|
56
|
-
"error: domain name should consist only of letters or dashes": "a domain name can use letters and dashes only",
|
|
57
56
|
"field.accepted at": "accepted at",
|
|
58
57
|
"field.access token url": "access token url",
|
|
59
58
|
"field.accessed-at": "accessed at",
|
|
@@ -118,7 +117,6 @@
|
|
|
118
117
|
"label.all": "All",
|
|
119
118
|
"label.application": "application",
|
|
120
119
|
"label.banned-user": "banned",
|
|
121
|
-
"label.blacklist": "blacklist",
|
|
122
120
|
"label.category": "category",
|
|
123
121
|
"label.change password": "change password",
|
|
124
122
|
"label.client-id": "client id",
|
|
@@ -146,7 +144,6 @@
|
|
|
146
144
|
"label.password": "password",
|
|
147
145
|
"label.privilege": "privilege",
|
|
148
146
|
"label.protected-request-ip": "safe request IP",
|
|
149
|
-
"label.protectedlist": "protected IP list",
|
|
150
147
|
"label.read": "Read",
|
|
151
148
|
"label.redirect_uri": "redirect uri",
|
|
152
149
|
"label.refresh token": "refresh token",
|
|
@@ -162,7 +159,6 @@
|
|
|
162
159
|
"label.user": "user",
|
|
163
160
|
"label.user-id": "user ID",
|
|
164
161
|
"label.vendors": "vendors",
|
|
165
|
-
"label.whitelist": "whitelist",
|
|
166
162
|
"label.write": "Write",
|
|
167
163
|
"label.x description": "{x} description",
|
|
168
164
|
"label.x name": "{x} name",
|
|
@@ -538,5 +534,11 @@
|
|
|
538
534
|
"label.no template": "no template",
|
|
539
535
|
"text.an empty role with no privileges": "an empty role with no privileges",
|
|
540
536
|
"text.add starts the role as the template is": "Press {add} to start the new role with the picked template's tasks and privileges. Change them later with {edit} in the list.",
|
|
541
|
-
"text.add starts an empty role": "Press {add} to start an empty role with no privileges. Give it privileges with {edit} in the list."
|
|
537
|
+
"text.add starts an empty role": "Press {add} to start an empty role with no privileges. Give it privileges with {edit} in the list.",
|
|
538
|
+
"error.domain-name-characters": "a domain name can use letters, digits, dashes and spaces only",
|
|
539
|
+
"label.theme-ocean-blue": "ocean blue",
|
|
540
|
+
"label.theme-forest-green": "forest green",
|
|
541
|
+
"label.theme-sunset-orange": "sunset orange",
|
|
542
|
+
"label.theme-royal-purple": "royal purple",
|
|
543
|
+
"label.theme-cherry-red": "cherry red"
|
|
542
544
|
}
|
package/translations/es.json
CHANGED
|
@@ -53,7 +53,6 @@
|
|
|
53
53
|
"error.user-locked": "la cuenta de usuario está bloqueada",
|
|
54
54
|
"error.value is empty": "{value} está vacío",
|
|
55
55
|
"error.x already exists in y": "{x} ya existe en {y}",
|
|
56
|
-
"error: domain name should consist only of letters or dashes": "el nombre de dominio solo puede contener letras y guiones",
|
|
57
56
|
"field.accepted at": "fecha de aceptación",
|
|
58
57
|
"field.access token url": "URL del token de acceso",
|
|
59
58
|
"field.accessed-at": "fecha de acceso",
|
|
@@ -118,7 +117,6 @@
|
|
|
118
117
|
"label.all": "Todos",
|
|
119
118
|
"label.application": "aplicación",
|
|
120
119
|
"label.banned-user": "vetado",
|
|
121
|
-
"label.blacklist": "lista de bloqueo",
|
|
122
120
|
"label.category": "categoría",
|
|
123
121
|
"label.change password": "cambiar contraseña",
|
|
124
122
|
"label.client-id": "ID de cliente",
|
|
@@ -146,7 +144,6 @@
|
|
|
146
144
|
"label.password": "contraseña",
|
|
147
145
|
"label.privilege": "privilegio",
|
|
148
146
|
"label.protected-request-ip": "IP de solicitud segura",
|
|
149
|
-
"label.protectedlist": "lista de IP protegidas",
|
|
150
147
|
"label.read": "Lectura",
|
|
151
148
|
"label.redirect_uri": "URI de redirección",
|
|
152
149
|
"label.refresh token": "token de actualización",
|
|
@@ -162,7 +159,6 @@
|
|
|
162
159
|
"label.user": "usuario",
|
|
163
160
|
"label.user-id": "ID de usuario",
|
|
164
161
|
"label.vendors": "proveedores",
|
|
165
|
-
"label.whitelist": "lista de permitidos",
|
|
166
162
|
"label.write": "Escritura",
|
|
167
163
|
"label.x description": "descripción de {x}",
|
|
168
164
|
"label.x name": "nombre de {x}",
|
|
@@ -538,5 +534,11 @@
|
|
|
538
534
|
"label.no template": "sin plantilla",
|
|
539
535
|
"text.an empty role with no privileges": "un rol vacío sin privilegios",
|
|
540
536
|
"text.add starts the role as the template is": "Pulse {add} para iniciar el nuevo rol con las tareas y privilegios de la plantilla elegida. Cámbielos después con {edit} en la lista.",
|
|
541
|
-
"text.add starts an empty role": "Pulse {add} para iniciar un rol vacío sin privilegios. Asígnelos después con {edit} en la lista."
|
|
537
|
+
"text.add starts an empty role": "Pulse {add} para iniciar un rol vacío sin privilegios. Asígnelos después con {edit} en la lista.",
|
|
538
|
+
"error.domain-name-characters": "el nombre de dominio solo puede contener letras, números, guiones y espacios",
|
|
539
|
+
"label.theme-ocean-blue": "azul océano",
|
|
540
|
+
"label.theme-forest-green": "verde bosque",
|
|
541
|
+
"label.theme-sunset-orange": "naranja atardecer",
|
|
542
|
+
"label.theme-royal-purple": "púrpura real",
|
|
543
|
+
"label.theme-cherry-red": "rojo cereza"
|
|
542
544
|
}
|
package/translations/ja.json
CHANGED
|
@@ -47,7 +47,6 @@
|
|
|
47
47
|
"error.user-locked": "アカウントがロックされました. メールで再アクティブ化してください.",
|
|
48
48
|
"error.value is empty": "{value}の値が存在しません.",
|
|
49
49
|
"error.x already exists in y": "{x}が既に{y}に存在します.",
|
|
50
|
-
"error: domain name should consist only of letters or dashes": "$t(term.domain)名には英字とハイフンのみ使えます",
|
|
51
50
|
"field.accepted at": "承諾日時",
|
|
52
51
|
"field.access token url": "access token url",
|
|
53
52
|
"field.accessed-at": "ログイン日時",
|
|
@@ -101,7 +100,6 @@
|
|
|
101
100
|
"label.admin-user": "管理者",
|
|
102
101
|
"label.application": "応用プログラム",
|
|
103
102
|
"label.banned-user": "使用禁止",
|
|
104
|
-
"label.blacklist": "ブラックリスト",
|
|
105
103
|
"label.category": "カテゴリー",
|
|
106
104
|
"label.change password": "パスワード変更",
|
|
107
105
|
"label.client-id": "クライアントID",
|
|
@@ -124,7 +122,6 @@
|
|
|
124
122
|
"label.password": "パスワード",
|
|
125
123
|
"label.privilege": "特権",
|
|
126
124
|
"label.protected-request-ip": "安全なリクエスト IP",
|
|
127
|
-
"label.protectedlist": "保護された IP リスト",
|
|
128
125
|
"label.redirect_uri": "リダイレクトuri",
|
|
129
126
|
"label.refresh token": "リフレッシュトークン",
|
|
130
127
|
"label.resend": "再送信",
|
|
@@ -139,7 +136,6 @@
|
|
|
139
136
|
"label.user": "ユーザー",
|
|
140
137
|
"label.user-id": "ユーザーID",
|
|
141
138
|
"label.vendors": "ベンダー",
|
|
142
|
-
"label.whitelist": "ホワイトリスト",
|
|
143
139
|
"label.x description": "{x}説明",
|
|
144
140
|
"label.x name": "{x}名前",
|
|
145
141
|
"text.a role of this name exists and will be added to": "A role of this name already exists. It will be used as it stands and these privileges added to it.",
|
|
@@ -538,5 +534,11 @@
|
|
|
538
534
|
"label.no template": "テンプレートなし",
|
|
539
535
|
"text.an empty role with no privileges": "権限のない空のロール",
|
|
540
536
|
"text.add starts the role as the template is": "「{add}」を押すと、選択したテンプレートと同じ業務・権限で新しいロールが始まります。変更は一覧の「{edit}」で行います。",
|
|
541
|
-
"text.add starts an empty role": "「{add}」を押すと、権限のない空のロールが始まります。権限は一覧の「{edit}」で付与します。"
|
|
537
|
+
"text.add starts an empty role": "「{add}」を押すと、権限のない空のロールが始まります。権限は一覧の「{edit}」で付与します。",
|
|
538
|
+
"error.domain-name-characters": "$t(term.domain)名には英字・数字・ハイフン・空白のみ使えます",
|
|
539
|
+
"label.theme-ocean-blue": "オーシャンブルー",
|
|
540
|
+
"label.theme-forest-green": "フォレストグリーン",
|
|
541
|
+
"label.theme-sunset-orange": "サンセットオレンジ",
|
|
542
|
+
"label.theme-royal-purple": "ロイヤルパープル",
|
|
543
|
+
"label.theme-cherry-red": "チェリーレッド"
|
|
542
544
|
}
|
package/translations/ko.json
CHANGED
|
@@ -53,7 +53,6 @@
|
|
|
53
53
|
"error.user-locked": "계정이 잠겼습니다. 이메일을 통해 재활성화하세요.",
|
|
54
54
|
"error.value is empty": "{value}의 값이 존재하지 않습니다.",
|
|
55
55
|
"error.x already exists in y": "{x}이/가 이미 {y}에 존재합니다.",
|
|
56
|
-
"error: domain name should consist only of letters or dashes": "$t(term.domain) 이름에는 영문자와 붙임표만 사용할 수 있습니다",
|
|
57
56
|
"field.accepted at": "수락 시점",
|
|
58
57
|
"field.access token url": "access token url",
|
|
59
58
|
"field.accessed-at": "로그인 일시",
|
|
@@ -118,7 +117,6 @@
|
|
|
118
117
|
"label.all": "전체",
|
|
119
118
|
"label.application": "응용프로그램",
|
|
120
119
|
"label.banned-user": "사용금지",
|
|
121
|
-
"label.blacklist": "블랙리스트",
|
|
122
120
|
"label.category": "카테고리",
|
|
123
121
|
"label.change password": "비밀번호 변경",
|
|
124
122
|
"label.client-id": "클라이언트 아이디",
|
|
@@ -146,7 +144,6 @@
|
|
|
146
144
|
"label.password": "비밀번호",
|
|
147
145
|
"label.privilege": "권한",
|
|
148
146
|
"label.protected-request-ip": "안전한 요청 IP",
|
|
149
|
-
"label.protectedlist": "보호 IP 리스트",
|
|
150
147
|
"label.read": "읽기",
|
|
151
148
|
"label.redirect_uri": "리디렉션 uri",
|
|
152
149
|
"label.refresh token": "리프레시 토큰",
|
|
@@ -162,7 +159,6 @@
|
|
|
162
159
|
"label.user": "사용자",
|
|
163
160
|
"label.user-id": "사용자 아이디",
|
|
164
161
|
"label.vendors": "공급 업체",
|
|
165
|
-
"label.whitelist": "화이트리스트",
|
|
166
162
|
"label.write": "쓰기",
|
|
167
163
|
"label.x description": "{x} 설명",
|
|
168
164
|
"label.x name": "{x} 이름",
|
|
@@ -538,5 +534,11 @@
|
|
|
538
534
|
"label.no template": "템플릿 없이",
|
|
539
535
|
"text.an empty role with no privileges": "권한이 없는 빈 역할",
|
|
540
536
|
"text.add starts the role as the template is": "「{add}」를 누르면 선택한 템플릿과 같은 업무 · 권한으로 새 역할이 시작됩니다. 고치는 것은 목록의 「{edit}」에서 합니다.",
|
|
541
|
-
"text.add starts an empty role": "「{add}」를 누르면 권한이 없는 빈 역할이 시작됩니다. 권한은 목록의 「{edit}」에서 줍니다."
|
|
537
|
+
"text.add starts an empty role": "「{add}」를 누르면 권한이 없는 빈 역할이 시작됩니다. 권한은 목록의 「{edit}」에서 줍니다.",
|
|
538
|
+
"error.domain-name-characters": "$t(term.domain) 이름에는 영문자·숫자·붙임표(-)·공백만 쓸 수 있습니다",
|
|
539
|
+
"label.theme-ocean-blue": "바다 파랑",
|
|
540
|
+
"label.theme-forest-green": "숲 초록",
|
|
541
|
+
"label.theme-sunset-orange": "노을 주황",
|
|
542
|
+
"label.theme-royal-purple": "로열 보라",
|
|
543
|
+
"label.theme-cherry-red": "체리 빨강"
|
|
542
544
|
}
|
package/translations/ms.json
CHANGED
|
@@ -47,7 +47,6 @@
|
|
|
47
47
|
"error.user-locked": "pengguna dikunci",
|
|
48
48
|
"error.value is empty": "{value} kosong",
|
|
49
49
|
"error.x already exists in y": "{x} telah wujud dalam {y}",
|
|
50
|
-
"error: domain name should consist only of letters or dashes": "nama domain hanya boleh menggunakan huruf dan sengkang",
|
|
51
50
|
"field.accepted at": "diterima pada",
|
|
52
51
|
"field.access token url": "access token url",
|
|
53
52
|
"field.accessed-at": "diakses pada",
|
|
@@ -101,7 +100,6 @@
|
|
|
101
100
|
"label.admin-user": "admin",
|
|
102
101
|
"label.application": "aplikasi",
|
|
103
102
|
"label.banned-user": "disenarai hitam",
|
|
104
|
-
"label.blacklist": "senarai hitam",
|
|
105
103
|
"label.category": "kategori",
|
|
106
104
|
"label.change password": "tukar kata laluan",
|
|
107
105
|
"label.client-id": "id pelanggan",
|
|
@@ -124,7 +122,6 @@
|
|
|
124
122
|
"label.password": "kata laluan",
|
|
125
123
|
"label.privilege": "keistimewaan",
|
|
126
124
|
"label.protected-request-ip": "IP permintaan yang selamat",
|
|
127
|
-
"label.protectedlist": "senarai IP yang dilindungi",
|
|
128
125
|
"label.redirect_uri": "redirect uri",
|
|
129
126
|
"label.refresh token": "token segar semula",
|
|
130
127
|
"label.resend": "hantar semula",
|
|
@@ -139,7 +136,6 @@
|
|
|
139
136
|
"label.user": "pengguna",
|
|
140
137
|
"label.user-id": "ID pengguna",
|
|
141
138
|
"label.vendors": "penjual",
|
|
142
|
-
"label.whitelist": "senarai putih",
|
|
143
139
|
"label.x description": "{x} penerangan",
|
|
144
140
|
"label.x name": "{x} nama",
|
|
145
141
|
"text.a role of this name exists and will be added to": "A role of this name already exists. It will be used as it stands and these privileges added to it.",
|
|
@@ -538,5 +534,11 @@
|
|
|
538
534
|
"label.no template": "tanpa templat",
|
|
539
535
|
"text.an empty role with no privileges": "peranan kosong tanpa keistimewaan",
|
|
540
536
|
"text.add starts the role as the template is": "Tekan {add} untuk memulakan peranan baharu dengan tugas dan keistimewaan templat yang dipilih. Ubahnya kemudian dengan {edit} dalam senarai.",
|
|
541
|
-
"text.add starts an empty role": "Tekan {add} untuk memulakan peranan kosong tanpa keistimewaan. Berikan keistimewaan dengan {edit} dalam senarai."
|
|
537
|
+
"text.add starts an empty role": "Tekan {add} untuk memulakan peranan kosong tanpa keistimewaan. Berikan keistimewaan dengan {edit} dalam senarai.",
|
|
538
|
+
"error.domain-name-characters": "nama domain hanya boleh menggunakan huruf, angka, sengkang dan ruang",
|
|
539
|
+
"label.theme-ocean-blue": "biru lautan",
|
|
540
|
+
"label.theme-forest-green": "hijau hutan",
|
|
541
|
+
"label.theme-sunset-orange": "jingga senja",
|
|
542
|
+
"label.theme-royal-purple": "ungu diraja",
|
|
543
|
+
"label.theme-cherry-red": "merah ceri"
|
|
542
544
|
}
|
package/translations/zh.json
CHANGED
|
@@ -47,7 +47,6 @@
|
|
|
47
47
|
"error.user-locked": "用户帐户已锁定",
|
|
48
48
|
"error.value is empty": "{value}为空",
|
|
49
49
|
"error.x already exists in y": "{x}已存在于{y}",
|
|
50
|
-
"error: domain name should consist only of letters or dashes": "$t(term.domain)名只能使用字母和连字符",
|
|
51
50
|
"field.accepted at": "接受时间",
|
|
52
51
|
"field.access token url": "access token url",
|
|
53
52
|
"field.accessed-at": "访问于",
|
|
@@ -101,7 +100,6 @@
|
|
|
101
100
|
"label.admin-user": "管理用户",
|
|
102
101
|
"label.application": "应用程序",
|
|
103
102
|
"label.banned-user": "黑名单用户",
|
|
104
|
-
"label.blacklist": "黑名单",
|
|
105
103
|
"label.category": "类别",
|
|
106
104
|
"label.change password": "更改密码",
|
|
107
105
|
"label.client-id": "客户端id",
|
|
@@ -124,7 +122,6 @@
|
|
|
124
122
|
"label.password": "密码",
|
|
125
123
|
"label.privilege": "特权",
|
|
126
124
|
"label.protected-request-ip": "安全请求 IP",
|
|
127
|
-
"label.protectedlist": "受保护的 IP 列表",
|
|
128
125
|
"label.redirect_uri": "重定向URI",
|
|
129
126
|
"label.refresh token": "刷新令牌",
|
|
130
127
|
"label.resend": "发过验证邮件",
|
|
@@ -139,7 +136,6 @@
|
|
|
139
136
|
"label.user": "用户",
|
|
140
137
|
"label.user-id": "用户ID",
|
|
141
138
|
"label.vendors": "供应商",
|
|
142
|
-
"label.whitelist": "白名单",
|
|
143
139
|
"label.x description": "{x} 描述",
|
|
144
140
|
"label.x name": "{x} 名称",
|
|
145
141
|
"text.a role of this name exists and will be added to": "A role of this name already exists. It will be used as it stands and these privileges added to it.",
|
|
@@ -538,5 +534,11 @@
|
|
|
538
534
|
"label.no template": "不使用模板",
|
|
539
535
|
"text.an empty role with no privileges": "没有权限的空角色",
|
|
540
536
|
"text.add starts the role as the template is": "按「{add}」将以所选模板相同的业务与权限创建新角色。之后在列表的「{edit}」中修改。",
|
|
541
|
-
"text.add starts an empty role": "按「{add}」将创建没有权限的空角色。之后在列表的「{edit}」中授予权限。"
|
|
537
|
+
"text.add starts an empty role": "按「{add}」将创建没有权限的空角色。之后在列表的「{edit}」中授予权限。",
|
|
538
|
+
"error.domain-name-characters": "$t(term.domain)名只能使用字母、数字、连字符和空格",
|
|
539
|
+
"label.theme-ocean-blue": "海洋蓝",
|
|
540
|
+
"label.theme-forest-green": "森林绿",
|
|
541
|
+
"label.theme-sunset-orange": "日落橙",
|
|
542
|
+
"label.theme-royal-purple": "皇家紫",
|
|
543
|
+
"label.theme-cherry-red": "樱桃红"
|
|
542
544
|
}
|