@aiquants/auth-react-router 0.9.1 → 0.12.0

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.
@@ -10,60 +10,123 @@
10
10
 
11
11
  export type UserAdminLabels = {
12
12
  title: string
13
+ /**
14
+ * BCP 47 locale used to format dates. 日付整形に使う BCP 47 ロケール。
15
+ *
16
+ * 実行環境任せにするとサーバーとブラウザで別の文字列になり、水和が壊れる。
17
+ */
18
+ locale: string
19
+ /** IANA time zone used to format dates. 日付整形に使う IANA タイムゾーン。 */
20
+ timeZone: string
21
+ /**
22
+ * Strings shared by more than one view. 複数のビューが共有する文言。
23
+ *
24
+ * ビューごとに同じ語を持たせると、ある画面の「削除」だけを言い換えることが **できなく
25
+ * なる** (実装がどのビューのキーを読んでいるかは呼び出し側から見えない)。共有する語は
26
+ * ここ 1 か所に置く。
27
+ */
28
+ common: {
29
+ add: string
30
+ create: string
31
+ edit: string
32
+ delete: string
33
+ save: string
34
+ cancel: string
35
+ actions: string
36
+ status: string
37
+ id: string
38
+ /** 変更不能な供給元 (環境変数など) 由来の行に出す表示。 */
39
+ readOnly: string
40
+ /** 上流所有のグループに出す編集不可の表示。 */
41
+ managedUpstream: string
42
+ /** `#{id}` の表示。記号の位置は言語で変わる。 */
43
+ idTemplate: string
44
+ /** 値が無いことの表示 (説明欄など)。 */
45
+ none: string
46
+ }
47
+ /** アクションが拒否・失敗したときの文言。 */
48
+ errors: {
49
+ /**
50
+ * Shown when the actor lacks permission for the attempted operation.
51
+ * 操作の権限が無いときに出す文言。
52
+ *
53
+ * ガードの例外メッセージをそのまま返してはならない。テナント ID・アプリキー・
54
+ * 拒否理由といった内部の語彙が、権限を持たない相手にそのまま渡る。
55
+ */
56
+ forbidden: string
57
+ }
13
58
  /** シェル (タブ枠) の見出し。 */
14
59
  heading: string
60
+ /** シェルが描く自己権限バッジの文言。 */
61
+ permissions: {
62
+ label: string
63
+ canWrite: string
64
+ canRead: string
65
+ none: string
66
+ /** 未結線・取得失敗・付与ゼロのいずれも「不明」であり、許可ではない。 */
67
+ unknown: string
68
+ }
15
69
  tabs: {
16
70
  users: string
17
71
  groups: string
18
72
  groupMembers: string
19
73
  allowlist: string
74
+ directory: string
20
75
  }
21
76
  usersView: {
22
77
  title: string
23
78
  searchPlaceholder: string
79
+ /** 検索欄の読み上げ名。プレースホルダは入力すると消えるため名前にならない。 */
80
+ searchLabel: string
24
81
  addUser: string
25
82
  editUser: string
26
- id: string
27
83
  displayName: string
28
84
  email: string
29
- status: string
30
85
  active: string
31
86
  inactive: string
32
- actions: string
33
- edit: string
34
87
  activate: string
35
88
  deactivate: string
89
+ /** 行ごとの読み上げ名。`{user}` を利用者名へ置換する。 */
90
+ editUserAria: string
91
+ activateAria: string
92
+ deactivateAria: string
93
+ /** 無効化はサインインを止める。確認を取る。 */
94
+ confirmDeactivate: string
36
95
  empty: string
37
- save: string
38
- cancel: string
39
96
  }
40
97
  groupsView: {
98
+ /** 検索語に一致しないときの説明。空状態と混ぜると「消えた」と誤読される。 */
99
+ emptyFiltered: string
41
100
  title: string
42
101
  searchPlaceholder: string
102
+ searchLabel: string
43
103
  addGroup: string
44
104
  editGroup: string
45
- id: string
46
105
  groupKey: string
47
106
  name: string
48
107
  description: string
49
- memberCount: string
50
- status: string
51
- actions: string
52
- edit: string
53
- delete: string
108
+ /** 所属人数。`{count}` を人数へ置換する。 */
109
+ memberCountTemplate: string
54
110
  confirmDelete: string
55
111
  noDescription: string
56
112
  groupKeyPlaceholder: string
57
113
  namePlaceholder: string
58
114
  empty: string
59
- save: string
60
- cancel: string
61
115
  }
62
116
  groupMembersView: {
117
+ title: string
63
118
  selectGroup: string
64
119
  selectPrompt: string
65
120
  actionAdd: string
66
121
  actionRemove: string
122
+ /** 行ごとの読み上げ名。`{user}` を利用者名へ置換する。 */
123
+ actionAddAria: string
124
+ actionRemoveAria: string
125
+ /** 上流所有グループで編集を出さない理由。押せない理由を書かないと故障に見える。 */
126
+ upstreamNotice: string
127
+ /** 見出し。`{group}` をグループ名へ置換する。語順が言語で変わるため位置指定にする。 */
128
+ membersOfTemplate: string
129
+ groupKeyLabel: string
67
130
  }
68
131
  allowlistView: {
69
132
  title: string
@@ -75,14 +138,85 @@ export type UserAdminLabels = {
75
138
  /** 一覧のバッジ表示 (短縮形)。 */
76
139
  emailTypeShort: string
77
140
  domainTypeShort: string
141
+ /** グループ単位の許可。上流ディレクトリの所属で判定される。 */
142
+ groupTypeShort: string
143
+ /** 対象列の見出し。パターンとグループが混在するため「パターン」ではない。 */
144
+ target: string
78
145
  description: string
79
- actions: string
80
- /** 変更不能な供給元 (環境変数など) 由来の行に出す表示。 */
81
- readOnly: string
82
- delete: string
146
+ /** 配備全体が所有する行 (環境変数由来) の所有者表示。 */
147
+ deploymentOwner: string
148
+ /** 許可の取り消しはサインインを止める。確認を取る。 */
149
+ confirmDelete: string
150
+ /** 行ごとの読み上げ名。`{target}` を対象へ置換する。 */
151
+ deleteAria: string
83
152
  empty: string
84
- save: string
85
- cancel: string
153
+ }
154
+ directoryView: {
155
+ title: string
156
+ /** 出所列。ローカル管理か、どの上流かを示す。 */
157
+ source: string
158
+ localSource: string
159
+ membershipMode: string
160
+ directMode: string
161
+ transitiveMode: string
162
+ lastSynced: string
163
+ neverSynced: string
164
+ /** 上流に居るがローカルユーザーへ解決できていない人数。`{count}` を人数へ置換する。 */
165
+ unresolvedTemplate: string
166
+ syncPaused: string
167
+ syncEnabled: string
168
+ syncNow: string
169
+ syncQueued: string
170
+ /** 同期が滞っていることの警告。停止はセキュリティ事象である。 */
171
+ staleWarning: string
172
+ disabledWarning: string
173
+ /** 停止件数。`{paused}` / `{total}` を件数へ置換する。 */
174
+ pausedTemplate: string
175
+ /** 失敗したグループの列挙。`{groups}` を名前の並びへ置換する。 */
176
+ erroredTemplate: string
177
+ /** 失敗理由付きの 1 件。`{group}` / `{reason}`。 */
178
+ erroredItemTemplate: string
179
+ /** 列挙の区切り。言語で変わる。 */
180
+ listSeparator: string
181
+ /** 滞留警告に添える最終成功時刻。`{at}`。 */
182
+ oldestSyncedTemplate: string
183
+ /** 未処理の同期要求。`{count}`。 */
184
+ pendingTemplate: string
185
+ /** 連携先が 1 つも残っていないときの説明。 */
186
+ nothingToLink: string
187
+ /** 未結線の配備で操作を出さない理由。 */
188
+ notWiredNotice: string
189
+ /** 行ごとの読み上げ名。`{group}` をグループ名へ置換する。 */
190
+ syncNowAria: string
191
+ pauseAria: string
192
+ resumeAria: string
193
+ allowGroupAria: string
194
+ disallowGroupAria: string
195
+ unlinkAria: string
196
+ /** グループ単位のサインイン許可を外す確認。 */
197
+ confirmDisallow: string
198
+ link: string
199
+ unlink: string
200
+ externalKey: string
201
+ empty: string
202
+ /** 直近の同期が失敗したグループの見出し。件数だけでは何が起きたか判らない。 */
203
+ erroredWarning: string
204
+ /** 同期有効なリンクのうち最も古い成功時刻。滞留の実際の深さを示す。 */
205
+ oldestSyncedAt: string
206
+ /** 連携するグループを選ぶ欄。 */
207
+ selectGroup: string
208
+ /** 上流グループのアドレス入力。 */
209
+ externalKeyPlaceholder: string
210
+ /** 連携解除の確認。台帳と許可設定が消える。 */
211
+ confirmUnlink: string
212
+ /** 同期の一時停止・再開。 */
213
+ pause: string
214
+ resume: string
215
+ /** 許可グループに加える / 外す。 */
216
+ allowGroup: string
217
+ disallowGroup: string
218
+ /** グループ名と鍵の併記。`{name}` / `{key}`。 */
219
+ groupOptionTemplate: string
86
220
  }
87
221
  }
88
222
 
@@ -92,76 +226,150 @@ export type UserAdminLabels = {
92
226
  */
93
227
  export const defaultUserAdminLabels: UserAdminLabels = {
94
228
  title: "Users & Groups",
95
- heading: "👤 User administration",
229
+ locale: "en-US",
230
+ timeZone: "UTC",
231
+ heading: "\u{1F464} User administration",
232
+ common: {
233
+ add: "Add",
234
+ create: "Create",
235
+ edit: "Edit",
236
+ delete: "Delete",
237
+ save: "Save",
238
+ cancel: "Cancel",
239
+ actions: "Actions",
240
+ status: "Status",
241
+ id: "ID",
242
+ readOnly: "Read-only",
243
+ managedUpstream: "Managed upstream",
244
+ idTemplate: "#{id}",
245
+ none: "-",
246
+ },
247
+ errors: {
248
+ forbidden: "You do not have permission for this operation.",
249
+ },
250
+ permissions: {
251
+ label: "Your permissions:",
252
+ canWrite: "Editable",
253
+ canRead: "Read only",
254
+ none: "No access",
255
+ unknown: "Unknown",
256
+ },
96
257
  tabs: {
97
- users: "👤 Users",
98
- groups: "👥 Groups",
99
- groupMembers: "🔗 Members",
100
- allowlist: "✉️ Allowlist",
258
+ users: "\u{1F464} Users",
259
+ groups: "\u{1F465} Groups",
260
+ groupMembers: "\u{1F517} Members",
261
+ allowlist: "\u2709\uFE0F Allowlist",
262
+ directory: "\u{1F504} Directory",
101
263
  },
102
264
  usersView: {
103
265
  title: "Users",
104
266
  searchPlaceholder: "Search by name or email...",
105
- addUser: "+ Add user",
267
+ searchLabel: "Search users",
268
+ addUser: "\uFF0B Add user",
106
269
  editUser: "Edit user",
107
- id: "ID",
108
270
  displayName: "Name",
109
271
  email: "Email",
110
- status: "Status",
111
272
  active: "Active",
112
273
  inactive: "Inactive",
113
- actions: "Actions",
114
- edit: "Edit",
115
274
  activate: "Activate",
116
275
  deactivate: "Deactivate",
276
+ editUserAria: "Edit {user}",
277
+ activateAria: "Activate {user}",
278
+ deactivateAria: "Deactivate {user}",
279
+ confirmDeactivate: "Deactivate this user? They will no longer be able to sign in.",
117
280
  empty: "No matching users",
118
- save: "Save",
119
- cancel: "Cancel",
120
281
  },
121
282
  groupsView: {
283
+ emptyFiltered: "No group matches this search",
122
284
  title: "Groups",
123
285
  searchPlaceholder: "Search by group name or key...",
124
- addGroup: "+ Add group",
286
+ searchLabel: "Search groups",
287
+ addGroup: "\uFF0B Add group",
125
288
  editGroup: "Edit group",
126
- id: "ID",
127
289
  groupKey: "Group key",
128
290
  name: "Name",
129
291
  description: "Description",
130
- memberCount: "Members",
131
- status: "Status",
132
- actions: "Actions",
133
- edit: "Edit",
134
- delete: "Delete",
292
+ memberCountTemplate: "{count} members",
135
293
  confirmDelete: "Delete this group?",
136
294
  noDescription: "No description",
137
295
  groupKeyPlaceholder: "e.g. dev-team",
138
296
  namePlaceholder: "e.g. Development team",
139
297
  empty: "No groups registered",
140
- save: "Save",
141
- cancel: "Cancel",
142
298
  },
143
299
  groupMembersView: {
300
+ title: "Group members",
144
301
  selectGroup: "Select a group",
145
302
  selectPrompt: "Select a group to manage its members",
146
303
  actionAdd: "Add",
147
304
  actionRemove: "Remove",
305
+ actionAddAria: "Add {user} to this group",
306
+ actionRemoveAria: "Remove {user} from this group",
307
+ upstreamNotice: "Membership of this group is owned by the upstream directory. Edit it there \u2014 a local change would be reverted at the next synchronization.",
308
+ membersOfTemplate: "Members of {group}",
309
+ groupKeyLabel: "Group key",
148
310
  },
149
311
  allowlistView: {
150
312
  title: "Sign-in allowlist",
151
- addEntry: "+ Add pattern",
313
+ addEntry: "\uFF0B Add pattern",
152
314
  pattern: "Pattern (e.g. @example.com or user@example.com)",
153
315
  type: "Type",
154
316
  emailType: "Exact email match",
155
317
  domainType: "Domain match",
156
318
  emailTypeShort: "Email",
157
319
  domainTypeShort: "Domain",
320
+ groupTypeShort: "Group",
321
+ target: "Target",
158
322
  description: "Description",
159
- actions: "Actions",
160
- readOnly: "Read-only",
161
- delete: "Delete",
323
+ deploymentOwner: "Deployment-wide",
324
+ confirmDelete: "Remove this allowlist entry? Anyone who could sign in only through it will be locked out.",
325
+ deleteAria: "Remove the allowlist entry for {target}",
162
326
  empty: "No allowlist entries registered",
163
- save: "Add",
164
- cancel: "Cancel",
327
+ },
328
+ directoryView: {
329
+ title: "Directory synchronization",
330
+ source: "Source",
331
+ localSource: "Local",
332
+ membershipMode: "Membership",
333
+ directMode: "Direct only",
334
+ transitiveMode: "Nested expanded",
335
+ lastSynced: "Last synced",
336
+ neverSynced: "Never",
337
+ unresolvedTemplate: "{count} unresolved",
338
+ syncPaused: "Paused",
339
+ syncEnabled: "Active",
340
+ syncNow: "Sync now",
341
+ syncQueued: "Queued",
342
+ staleWarning: "Synchronization is overdue. Until it runs, people removed upstream keep their access.",
343
+ disabledWarning: "Directory synchronization is not wired for this deployment. Existing memberships remain in force and are no longer being refreshed.",
344
+ pausedTemplate: "{paused} of {total} links are paused",
345
+ erroredTemplate: "Last synchronization failed for {groups}",
346
+ erroredItemTemplate: "{group}: {reason}",
347
+ listSeparator: ", ",
348
+ oldestSyncedTemplate: "oldest successful sync: {at}",
349
+ pendingTemplate: "{count} sync requests are queued",
350
+ nothingToLink: "Every group is already linked to a directory.",
351
+ notWiredNotice: "Directory synchronization is not wired for this deployment, so links cannot be created or changed here.",
352
+ syncNowAria: "Synchronize {group} now",
353
+ pauseAria: "Pause synchronization of {group}",
354
+ resumeAria: "Resume synchronization of {group}",
355
+ allowGroupAria: "Allow members of {group} to sign in",
356
+ disallowGroupAria: "Stop allowing members of {group} to sign in",
357
+ unlinkAria: "Unlink {group} from the directory",
358
+ confirmDisallow: "Stop allowing this group to sign in? Anyone who could sign in only through it will be locked out.",
359
+ link: "Link to a directory group",
360
+ unlink: "Unlink",
361
+ externalKey: "Upstream group",
362
+ empty: "No groups are linked to a directory",
363
+ erroredWarning: "Last synchronization failed for",
364
+ oldestSyncedAt: "Oldest successful sync",
365
+ selectGroup: "Group to link",
366
+ externalKeyPlaceholder: "e.g. dev-team@example.com",
367
+ confirmUnlink: "Unlink this group? Its member ledger and group-based sign-in permission are removed.",
368
+ pause: "Pause",
369
+ resume: "Resume",
370
+ allowGroup: "Allow sign-in",
371
+ disallowGroup: "Stop allowing sign-in",
372
+ groupOptionTemplate: "{name} ({key})",
165
373
  },
166
374
  }
167
375
 
@@ -171,88 +379,168 @@ export const defaultUserAdminLabels: UserAdminLabels = {
171
379
  */
172
380
  export const jaUserAdminLabels: UserAdminLabels = {
173
381
  title: "ユーザー・グループ管理",
174
- heading: "👤 ユーザー管理",
382
+ locale: "ja-JP",
383
+ timeZone: "Asia/Tokyo",
384
+ heading: "\u{1F464} ユーザー管理",
385
+ common: {
386
+ add: "追加",
387
+ create: "作成",
388
+ edit: "編集",
389
+ delete: "削除",
390
+ save: "保存",
391
+ cancel: "キャンセル",
392
+ actions: "操作",
393
+ status: "状態",
394
+ id: "ID",
395
+ readOnly: "変更不可",
396
+ managedUpstream: "上流が所有",
397
+ idTemplate: "#{id}",
398
+ none: "-",
399
+ },
400
+ errors: {
401
+ forbidden: "この操作を行う権限がありません。",
402
+ },
403
+ permissions: {
404
+ label: "あなたの権限:",
405
+ canWrite: "編集可",
406
+ canRead: "閲覧のみ",
407
+ none: "権限なし",
408
+ unknown: "権限不明",
409
+ },
175
410
  tabs: {
176
- users: "👤 ユーザー一覧",
177
- groups: "👥 ユーザーグループ",
178
- groupMembers: "🔗 グループメンバー",
179
- allowlist: "✉️ アクセス許可リスト",
411
+ users: "\u{1F464} ユーザー一覧",
412
+ groups: "\u{1F465} ユーザーグループ",
413
+ groupMembers: "\u{1F517} グループメンバー",
414
+ allowlist: "\u2709\uFE0F アクセス許可リスト",
415
+ directory: "\u{1F504} ディレクトリ連携",
180
416
  },
181
417
  usersView: {
182
418
  title: "ユーザー管理",
183
419
  searchPlaceholder: "表示名や Email で検索...",
184
- addUser: "+ ユーザー追加",
185
- editUser: "ユーザーの編集",
186
- id: "ID",
420
+ searchLabel: "ユーザーを検索",
421
+ addUser: "\uFF0B ユーザー追加",
422
+ editUser: "ユーザー編集",
187
423
  displayName: "表示名",
188
- email: "メールアドレス",
189
- status: "ステータス",
424
+ email: "Email",
190
425
  active: "有効",
191
426
  inactive: "無効",
192
- actions: "操作",
193
- edit: "編集",
194
427
  activate: "有効化",
195
428
  deactivate: "無効化",
429
+ editUserAria: "{user} を編集",
430
+ activateAria: "{user} を有効化",
431
+ deactivateAria: "{user} を無効化",
432
+ confirmDeactivate: "このユーザーを無効化しますか? 以後サインインできなくなります。",
196
433
  empty: "該当するユーザーが見つかりません",
197
- save: "保存",
198
- cancel: "キャンセル",
199
434
  },
200
435
  groupsView: {
436
+ emptyFiltered: "検索条件に一致するグループはありません",
201
437
  title: "ユーザーグループ管理",
202
438
  searchPlaceholder: "グループ名やキーで検索...",
203
- addGroup: "+ グループ作成",
204
- editGroup: "グループの編集",
205
- id: "ID",
439
+ searchLabel: "グループを検索",
440
+ addGroup: "\uFF0B グループ追加",
441
+ editGroup: "グループ編集",
206
442
  groupKey: "グループキー",
207
- name: "グループ名",
443
+ name: "名称",
208
444
  description: "説明",
209
- memberCount: "メンバー数",
210
- status: "ステータス",
211
- actions: "操作",
212
- edit: "編集",
213
- delete: "削除",
214
- confirmDelete: "このグループを削除してもよろしいですか?",
445
+ memberCountTemplate: "所属 {count} 名",
446
+ confirmDelete: "このグループを削除しますか?",
215
447
  noDescription: "説明なし",
216
448
  groupKeyPlaceholder: "例: dev-team",
217
449
  namePlaceholder: "例: 開発チーム",
218
- empty: "グループが登録されていません",
219
- save: "保存",
220
- cancel: "キャンセル",
450
+ empty: "ユーザーグループが登録されていません",
221
451
  },
222
452
  groupMembersView: {
453
+ title: "グループメンバー管理",
223
454
  selectGroup: "グループ選択",
224
455
  selectPrompt: "グループを選択してください",
225
456
  actionAdd: "追加",
226
457
  actionRemove: "除外",
458
+ actionAddAria: "{user} をこのグループへ追加",
459
+ actionRemoveAria: "{user} をこのグループから除外",
460
+ upstreamNotice: "このグループの所属は上流ディレクトリが所有しています。変更は上流で行ってください (ここで変えても次の同期で元に戻ります)。",
461
+ membersOfTemplate: "{group} の所属メンバー",
462
+ groupKeyLabel: "グループキー",
227
463
  },
228
464
  allowlistView: {
229
- title: "アクセス許可リスト (Allowlist)",
230
- addEntry: "+ 許可パターン追加",
465
+ title: "サインイン許可リスト",
466
+ addEntry: "\uFF0B パターン追加",
231
467
  pattern: "パターン (例: @example.com または user@example.com)",
232
468
  type: "種別",
233
469
  emailType: "メールアドレス完全一致",
234
470
  domainType: "ドメイン一致",
235
- emailTypeShort: "Email 完全一致",
236
- domainTypeShort: "ドメイン一致",
471
+ emailTypeShort: "メール",
472
+ domainTypeShort: "ドメイン",
473
+ groupTypeShort: "グループ",
474
+ target: "対象",
237
475
  description: "説明 / 備考",
238
- actions: "操作",
239
- readOnly: "変更不可",
240
- delete: "削除",
476
+ deploymentOwner: "配備共通",
477
+ confirmDelete: "この許可を削除しますか? これでしかサインインできない人はログインできなくなります。",
478
+ deleteAria: "{target} の許可を削除",
241
479
  empty: "アロワリストエントリが登録されていません",
242
- save: "登録",
243
- cancel: "キャンセル",
480
+ },
481
+ directoryView: {
482
+ title: "ディレクトリ同期",
483
+ source: "出所",
484
+ localSource: "ローカル管理",
485
+ membershipMode: "所属の展開",
486
+ directMode: "直接所属のみ",
487
+ transitiveMode: "入れ子を展開",
488
+ lastSynced: "最終同期",
489
+ neverSynced: "未実行",
490
+ unresolvedTemplate: "{count} 件が未解決",
491
+ syncPaused: "停止中",
492
+ syncEnabled: "有効",
493
+ syncNow: "今すぐ同期",
494
+ syncQueued: "同期を要求しました",
495
+ staleWarning: "同期が滞っています。実行されるまで、上流から外れた人のアクセスは残り続けます。",
496
+ disabledWarning: "この配備ではディレクトリ同期が結線されていません。既存の所属はそのまま有効で、更新だけが止まっています。",
497
+ pausedTemplate: "連携 {total} 件のうち {paused} 件が停止中",
498
+ erroredTemplate: "直近の同期に失敗したグループ: {groups}",
499
+ erroredItemTemplate: "{group}: {reason}",
500
+ listSeparator: " / ",
501
+ oldestSyncedTemplate: "最も古い同期成功: {at}",
502
+ pendingTemplate: "{count} 件の同期要求が未処理",
503
+ nothingToLink: "すべてのグループが既にディレクトリと連携しています。",
504
+ notWiredNotice: "この配備ではディレクトリ同期が結線されていないため、ここから連携の作成・変更はできません。",
505
+ syncNowAria: "{group} を今すぐ同期",
506
+ pauseAria: "{group} の同期を一時停止",
507
+ resumeAria: "{group} の同期を再開",
508
+ allowGroupAria: "{group} のメンバーのサインインを許可",
509
+ disallowGroupAria: "{group} のメンバーのサインイン許可を外す",
510
+ unlinkAria: "{group} のディレクトリ連携を解除",
511
+ confirmDisallow: "このグループのサインイン許可を外しますか? これでしかサインインできない人はログインできなくなります。",
512
+ link: "ディレクトリのグループと連携する",
513
+ unlink: "連携を解除",
514
+ externalKey: "上流グループ",
515
+ empty: "ディレクトリと連携しているグループはありません",
516
+ erroredWarning: "直近の同期に失敗したグループ",
517
+ oldestSyncedAt: "最も古い同期成功",
518
+ selectGroup: "連携するグループ",
519
+ externalKeyPlaceholder: "例: dev-team@example.com",
520
+ confirmUnlink: "このグループの連携を解除しますか? メンバー台帳とグループ単位のサインイン許可が失われます。",
521
+ pause: "一時停止",
522
+ resume: "再開",
523
+ allowGroup: "サインインを許可",
524
+ disallowGroup: "サインイン許可を外す",
525
+ groupOptionTemplate: "{name} ({key})",
244
526
  },
245
527
  }
246
528
 
247
529
  /** セクション単位の部分上書き。 */
248
530
  export type PartialUserAdminLabels = {
249
531
  title?: string
532
+ locale?: string
533
+ timeZone?: string
534
+ common?: Partial<UserAdminLabels["common"]>
535
+ errors?: Partial<UserAdminLabels["errors"]>
250
536
  heading?: string
537
+ permissions?: Partial<UserAdminLabels["permissions"]>
251
538
  tabs?: Partial<UserAdminLabels["tabs"]>
252
539
  usersView?: Partial<UserAdminLabels["usersView"]>
253
540
  groupsView?: Partial<UserAdminLabels["groupsView"]>
254
541
  groupMembersView?: Partial<UserAdminLabels["groupMembersView"]>
255
542
  allowlistView?: Partial<UserAdminLabels["allowlistView"]>
543
+ directoryView?: Partial<UserAdminLabels["directoryView"]>
256
544
  }
257
545
 
258
546
  /**
@@ -264,11 +552,17 @@ export function resolveUserAdminLabels(over?: PartialUserAdminLabels): UserAdmin
264
552
  if (!over) return d
265
553
  return {
266
554
  title: over.title ?? d.title,
555
+ locale: over.locale ?? d.locale,
556
+ timeZone: over.timeZone ?? d.timeZone,
267
557
  heading: over.heading ?? d.heading,
558
+ common: { ...d.common, ...over.common },
559
+ errors: { ...d.errors, ...over.errors },
560
+ permissions: { ...d.permissions, ...over.permissions },
268
561
  tabs: { ...d.tabs, ...over.tabs },
269
562
  usersView: { ...d.usersView, ...over.usersView },
270
563
  groupsView: { ...d.groupsView, ...over.groupsView },
271
564
  groupMembersView: { ...d.groupMembersView, ...over.groupMembersView },
272
565
  allowlistView: { ...d.allowlistView, ...over.allowlistView },
566
+ directoryView: { ...d.directoryView, ...over.directoryView },
273
567
  }
274
568
  }