From d2cefe3f39c81fd1c033ba1ed65f779a1d69d7b3 Mon Sep 17 00:00:00 2001 From: sky121113 Date: Fri, 20 Mar 2026 13:41:51 +0800 Subject: [PATCH] =?UTF-8?q?[FEAT]=20=E5=AE=8C=E5=96=84=E5=85=A8=E7=AB=99?= =?UTF-8?q?=E5=A4=9A=E8=AA=9E=E7=B3=BB=E6=94=AF=E6=8F=B4=E3=80=81=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E6=AC=8A=E9=99=90=E7=AF=A9=E9=81=B8=E5=84=AA=E5=8C=96?= =?UTF-8?q?=E5=8F=8A=20UI=20=E5=85=83=E4=BB=B6=E9=87=8D=E6=A7=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [DOCS] 補齊 en, ja, zh_TW 語系檔翻譯並完善驗證錯誤訊息 (validation.php) - [FEAT] 角色權限頁面新增「所屬單位」篩選功能 (僅限系統管理員) - [STYLE] 優化角色列表顯示,將「類型」變更為具體「所屬單位」名稱 - [STYLE] 修正角色頁面工具列佈局,搜尋框置前並修正下拉箭頭顯示 - [REFACTOR] 統一全站刪除確認視窗,導入新版 組件 - [REFACTOR] 優化 PermissionController 查詢效能 (Eager Loading) - [FIX] 修正 RoleSeeder 角色命名與資料庫同步邏輯 --- .agents/rules/rbac-rules.md | 11 + .agents/skills/ui-minimal-luxury/SKILL.md | 120 +-- .../BasicSettings/PaymentConfigController.php | 6 + .../Controllers/Admin/CompanyController.php | 16 +- .../Admin/PermissionController.php | 90 +- .../Controllers/Auth/PasswordController.php | 2 +- app/Http/Controllers/ProfileController.php | 2 +- app/Models/System/Role.php | 4 + database/seeders/RoleSeeder.php | 10 +- lang/en.json | 830 +++++++++------- lang/ja.json | 848 +++++++++-------- lang/zh_TW.json | 889 ++++++++++-------- lang/zh_TW/validation.php | 279 +++--- .../basic-settings/machines/edit.blade.php | 132 ++- .../basic-settings/machines/index.blade.php | 231 +++-- .../payment-configs/create.blade.php | 76 +- .../payment-configs/edit.blade.php | 76 +- .../payment-configs/index.blade.php | 50 +- .../views/admin/companies/index.blade.php | 31 +- .../admin/data-config/accounts.blade.php | 46 +- .../admin/deposit-bonus-rules/index.blade.php | 29 +- .../admin/gift-definitions/index.blade.php | 29 +- .../admin/membership-tiers/index.blade.php | 29 +- .../views/admin/permission/roles.blade.php | 116 ++- .../views/admin/point-rules/index.blade.php | 29 +- .../components/delete-confirm-modal.blade.php | 60 ++ resources/views/components/toast.blade.php | 52 + resources/views/layouts/admin.blade.php | 4 +- .../partials/update-password-form.blade.php | 9 - .../update-profile-information-form.blade.php | 9 - tests/Feature/RoleDeletionTest.php | 91 ++ 31 files changed, 2431 insertions(+), 1775 deletions(-) create mode 100644 resources/views/components/delete-confirm-modal.blade.php create mode 100644 resources/views/components/toast.blade.php create mode 100644 tests/Feature/RoleDeletionTest.php diff --git a/.agents/rules/rbac-rules.md b/.agents/rules/rbac-rules.md index 2bdb1f7..2d4b140 100644 --- a/.agents/rules/rbac-rules.md +++ b/.agents/rules/rbac-rules.md @@ -24,6 +24,11 @@ trigger: always_on - 建立新資源時,必須在背景強制綁定 `company_id`,禁止由前端傳參決定。 - 範例:`$model->company_id = Auth::user()->company_id;` +### 1.4 角色清單隔離 (Role List Isolation) +- 租戶管理員 (Tenant Admin) 只能管理隸屬於其公司下的角色。 +- **嚴禁使用**包含 `NULL` 的 `forCompany` 廣義作用域來展示管理清單。 +- 查詢時必須嚴格使用 `where('company_id', auth()->user()->company_id)` 隔離系統 Super Admin 或 角色範本。 + --- ## 2. 權限開發規範 (spatie/laravel-permission) @@ -36,6 +41,12 @@ trigger: always_on - 權限名稱應遵循 `[module].[action]` 格式(例如 `machine.view`, `machine.edit`)。 - 所有租戶共用相同的權限定義。 +### 2.3 權限遞迴約束 (Privilege Delegation Constraint) +為防止權限提升 (Privilege Escalation): +- **權限子集驗證**:管理員僅能指派其**自身持有**之權限給其他角色或帳號。 +- **Controller 實作**:在 `store` 或 `update` 時,必須比對傳入的權限集合是否為操作者 `getPermissionNames()` 的子集。 +- **UI 過濾**:權限分配介面應基於當前使用者權限清單進行動態過濾展示。 + --- ## 3. 介面安全 (UI/Blade) diff --git a/.agents/skills/ui-minimal-luxury/SKILL.md b/.agents/skills/ui-minimal-luxury/SKILL.md index d9bf821..34dea32 100644 --- a/.agents/skills/ui-minimal-luxury/SKILL.md +++ b/.agents/skills/ui-minimal-luxury/SKILL.md @@ -67,8 +67,9 @@ description: 定義 Star Cloud 管理後台的「極簡奢華風」設計規範 ## 4. 實作檢查清單 (Checklist) -- [ ] **列表佈局**: 是否採用「整合式卡片」結構且內距設為 `p-8`? +- [x] **列表佈局**: 是否採用「整合式卡片」結構且內距設為 `p-8`? - [ ] **分頁與總數**: 列表底部是否正確召喚 `vendor.pagination.luxury`? +- [ ] **刪除動作**: 是否已全面使用 `` 封裝執行路徑? - [ ] **文字色階**: 符合標題 `slate-900/white` 與標籤 `slate-500` 的對比度。 - [ ] **可讀性檢查**: 二級資訊是否達到 `text-xs` (12px) 且權重不超過 `font-bold`? @@ -136,7 +137,7 @@ description: 定義 Star Cloud 管理後台的「極簡奢華風」設計規範 - Example Name + Example Name @@ -152,8 +153,9 @@ description: 定義 Star Cloud 管理後台的「極簡奢華風」設計規範 ``` ### 佈局核心原則: -1. **移除重複內距**: 根容器 `div` 應**禁止**使用 `p-6` 或 `p-10`,因為佈局基底已提供基礎間距。僅使用 `space-y-6` (或 `space-y-8`) 控制區塊間隙。 -2. **主容器樣式**: 強制對齊為 `luxury-card rounded-3xl p-8`。 +1. **移除重複內距**: 根容器 `div` 應**禁止**使用 `p-6` 或 `p-10`,因為佈局基底已提供基礎間距。 +2. **區塊間隙**: 建議使用 `space-y-6` 或 `space-y-8` 以獲得最佳空氣感。但在「高密度資料管理」或使用者有特殊緊湊需求的情境下,容許縮減至 **`space-y-2`**。 +3. **主容器樣式**: 強制對齊為 `luxury-card rounded-3xl p-8`。 3. **標題排版**: - 主標題需應用 `font-display` (Outfit)。 - 描述文字需應用 `uppercase tracking-widest font-bold` 以呈現高級設計感。 @@ -212,61 +214,24 @@ description: 定義 Star Cloud 管理後台的「極簡奢華風」設計規範 ### 空間與反應 (Spacing & Interaction) - **單元格內距**: 統一使用 `px-6 py-6`。 -- **懸停反應**: 必須在 `tr` 套用 `group` 且子元素套用 `group-hover:bg-slate-50/80` (深色: `dark:group-hover:bg-slate-800/40`) 以提供高級的互動感知。 -- **圖示容器懸停 (Icon Hover Palette)**: - - 列表左側的主圖示容器在 `group-hover` 時,應由淡色背景轉為 **實體主題色**。 - - 類別: `group-hover:bg-cyan-500 group-hover:text-white transition-all duration-300`。 -- **文字同步變色**: - - 主標題文字在 `group-hover` 時應同步變色,以強化點擊引導。 - - 類別: `group-hover:text-cyan-600 dark:group-hover:text-cyan-400 transition-colors`。 +- **懸停反應**: 必須在 `tr` 套用 `group` 且子�### 9.4 標竿刪除確認模式 (Luxury Delete Modal Pattern) +當執行刪除或具備破壞性的操作時,**禁止**使用瀏覽器原生 `confirm()` 或簡易的 `x-modal`。全站統一使用 **``** Blade 組件進行二次確認。 -### 分頁與列表控制項 (Pagination & Controls) -為了維持操作一致性,所有列表的分頁與切換組件必須遵循以下「Luxury Jump」模式: -- **統一高度**: 所有控制項(按鈕、下拉選單)固定為 `h-9` (36px)。 -- **筆數切換 (Limit Selector)**: - - 規範: **禁止**在表格上方(Header/Toolbar)重複放置筆數切換選單。統一收納於底部分頁欄位。 -- **分頁導航 (Luxury Jump)**: - - 模式: 捨棄傳統頁碼按鈕,全端統一使用「跳轉選單」。 - - 寬度: 下拉選單內部 Padding 為 `pl-4 pr-10`。 - - 字體: 使用 `text-xs font-black tracking-widest`。 -- **指示文字**: - - 行動端隱藏多餘詞彙,僅保留「1 - 10 / 50」格式。 - - 數字顏色對齊 `text-slate-600` (深色: `text-slate-300`)。 +1. **參數配置**: + - `title`: (選填) 預設為「確認刪除」。 + - `message`: (選填) 定義具體的刪除警告訊息(例如「您確定要永久刪除此帳號嗎?」)。 +2. **視覺特徵**: + - **背景**: `bg-slate-900/60 backdrop-blur-sm`。 + - **容器**: `rounded-3xl shadow-2xl animate-luxury-in`。 + - **圖示**: 警告圖示使用 `bg-amber-100/10 text-amber-600`。 + - **按鈕**: 刪除按鈕使用 `bg-rose-500` 搭配 `shadow-rose-200` 投影,取消按鈕使用 `bg-slate-100`。 +3. **交互規範**: + - **禁止斜體 (No Italics)**: 彈窗標題與按鈕文字嚴禁使用 `italic`,保持直挺專業感。 -### 底部清單控制項 (Bottom List Controls) -為了確保長列表的操作便利,清單底部應保持乾淨,統一由分頁與總數組件接管操作。 - -### 標準操作按鈕 (Standard Action Icons) -表格內的操作欄位(如「編輯」、「刪除」、「詳情」)必須使用以下定義之 **「黃金標準 (Gold Standard)」**: - -- **共同樣式**: - - 容器: `p-2 rounded-lg bg-slate-50 dark:bg-slate-800` - - 主色: `text-slate-400` - - 邊框: `border border-transparent` (防閃爍處理) - - 過渡: `transition-all` (使用預設速度以確保俐落感) - - 圖示粗細: `stroke-width="2.5"` - - 尺寸: `w-4 h-4` - -- **編輯按鈕 (Edit)**: - - 懸停特效: `hover:text-cyan-500 hover:bg-cyan-500/10 hover:border-cyan-500/20` - - SVG 路徑: - ```html - - ``` - -- **查看詳情 (View/Detail)**: - - 懸停特效: `hover:text-indigo-500 hover:bg-indigo-500/10 hover:border-indigo-500/20` - - SVG 路徑: - ```html - - ``` - -- **刪除按鈕 (Delete)**: - - 懸停特效: `hover:text-rose-500 hover:bg-rose-500/10 hover:border-rose-500/20` - - SVG 路徑: - ```html - - ``` +```html + + +``` ## 10. 系統兼容性與標準化 (Compatibility & Standardization) @@ -296,6 +261,47 @@ description: 定義 Star Cloud 管理後台的「極簡奢華風」設計規範 - **權重載入 (Font Weights)**: 確保 HTML Header 載入了 `800` 與 `900` 權重,避免瀏覽器模擬出的假粗體。 - **清單資訊密度**: 對於高密度清單中的時間資訊,應優先使用 `font-black` 與 `tracking-widest` 來建立明確的「標籤感」,而非僅僅是「微縮文字」。 +--- +## 12. 提示與告警規範 (Alerts & Notifications) + +為了確保全站操作回饋的一致性與專業感,所有系統內部的提示(成功、錯誤、警告)必須遵循以下規範。 + +### 1. 懸浮式自動消失提示 (Auto-hiding Toasts) +- **視覺樣式**: + - 位置: 固定於畫面上方中央 (`fixed top-8 left-1/2 -translate-x-1/2`)。 + - 特效: 毛玻璃背景 (`backdrop-blur-xl`)、圓角 (`rounded-2xl`)、軟陰影。 + - 動畫: 滑入 (`translate-y-0`) / 滑出 (`-translate-y-4`),配合 `opacity` 變化。 +- **型態定義**: + - **Success (成功)**: 使用 `emerald` 色系。 + - **Error (錯誤)**: 使用 `rose` 色系。 +- **時長規範**: + - 成功提示: 3 秒後消失。 + - 錯誤提示: 5 秒後消失(提供使用者更多閱讀錯誤原因的時間)。 +- **組件實作**: 統一調用 ``。 + +### 2. 視窗內操作警告 (Inline Action Warnings) +- **適用場景**: 在 Modal 或編輯頁面中,提示可能導致風險的操作(如編輯自身角色)。 +- **視覺樣式**: + - 背景: `bg-amber-500/10` (琥珀色)。 + - 邊框: `border-amber-500/20`。 + - 進場動畫: `animate-luxury-in`。 +- **實作範例**: +```html +
+ +
+``` + +### 3. 通用豪華確認與告警視窗 (General Luxury Modals) +**統一準則**: 所有的系統確認 (Confirm) 或重要告警 (Alert/Warning) **必須** 捨棄 `x-modal` 組件,改用 Section 9.4 定義的自定義 Div 結構。 + +- **警告模式 (Warning/Alert)**: + - 僅提供「關閉/確定」一個按鈕。 + - 樣式同 9.4,但隱藏刪除 Form 與相關色彩。 +- **確認模式 (Confirm)**: + - 提供「取消」與「執行」兩個按鈕。 + - 執行按鈕顏色視操作性質而定 (Delete: `rose`, Save/Action: `cyan`)。 + --- > [!IMPORTANT] > **開發新功能前,必須確認 `app.css` 中的 `.btn-luxury-*` 系列組件是否滿足需求。** diff --git a/app/Http/Controllers/Admin/BasicSettings/PaymentConfigController.php b/app/Http/Controllers/Admin/BasicSettings/PaymentConfigController.php index a7936d4..a4d41de 100644 --- a/app/Http/Controllers/Admin/BasicSettings/PaymentConfigController.php +++ b/app/Http/Controllers/Admin/BasicSettings/PaymentConfigController.php @@ -17,6 +17,12 @@ class PaymentConfigController extends AdminController { $per_page = $request->input('per_page', 20); $configs = PaymentConfig::query() + ->when($request->search, function ($query, $search) { + $query->where('name', 'like', "%{$search}%") + ->orWhereHas('company', function ($q) use ($search) { + $q->where('name', 'like', "%{$search}%"); + }); + }) ->with(['company', 'creator']) ->latest() ->paginate($per_page) diff --git a/app/Http/Controllers/Admin/CompanyController.php b/app/Http/Controllers/Admin/CompanyController.php index 6858ab8..b1e3c14 100644 --- a/app/Http/Controllers/Admin/CompanyController.php +++ b/app/Http/Controllers/Admin/CompanyController.php @@ -32,9 +32,9 @@ class CompanyController extends Controller $per_page = $request->input('per_page', 10); $companies = $query->latest()->paginate($per_page)->withQueryString(); - // 取得可供選擇的客戶角色範本 (is_system = 0, company_id = null) - $template_roles = \App\Models\System\Role::where('is_system', 0) - ->whereNull('company_id') + // 取得可供選擇的客戶角色範本 (系統層級的角色,排除 super-admin) + $template_roles = \App\Models\System\Role::whereNull('company_id') + ->where('name', '!=', 'super-admin') ->get(); return view('admin.companies.index', compact('companies', 'template_roles')); @@ -86,23 +86,23 @@ class CompanyController extends Controller ]); // 角色初始化與克隆邏輯 (優先使用選擇的角色,否則使用預設) - $selected_role_name = $validated['admin_role'] ?? '通用客戶角色範本'; - $role_to_assign = '管理員'; + $selected_role_name = $validated['admin_role'] ?? '客戶管理員角色模板'; + $role_to_assign = null; $template_role = \App\Models\System\Role::where('name', $selected_role_name) ->whereNull('company_id') - ->where('is_system', 0) + ->where('name', '!=', 'super-admin') ->first(); if ($template_role) { // 克隆範本為該公司的「管理員」 - $clonedRole = \App\Models\System\Role::query()->create([ + $role_to_assign = \App\Models\System\Role::query()->create([ 'name' => '管理員', 'guard_name' => 'web', 'company_id' => $company->id, 'is_system' => false, ]); - $clonedRole->syncPermissions($template_role->permissions); + $role_to_assign->syncPermissions($template_role->getPermissionNames()); } else { // 如果找不到選定的角色範本,退而求其次嘗試指派現有角色 (通常不應發生) $role_to_assign = $selected_role_name; diff --git a/app/Http/Controllers/Admin/PermissionController.php b/app/Http/Controllers/Admin/PermissionController.php index b718372..3f1f538 100644 --- a/app/Http/Controllers/Admin/PermissionController.php +++ b/app/Http/Controllers/Admin/PermissionController.php @@ -12,9 +12,9 @@ class PermissionController extends Controller { $per_page = request()->input('per_page', 10); $user = auth()->user(); - $query = \App\Models\System\Role::query()->with(['permissions', 'users']); + $query = \App\Models\System\Role::query()->with(['permissions', 'users', 'company']); - // 租戶隔離:租戶只能看到自己公司的角色 + 系統角色 (company_id is null) + // 租戶隔離:租戶只能看到自己公司的角色 if (!$user->isSystemAdmin()) { $query->where('company_id', $user->company_id); } @@ -24,10 +24,27 @@ class PermissionController extends Controller $query->where('name', 'like', "%{$search}%"); } + // 篩選:所屬單位 (僅限系統管理員) + if ($user->isSystemAdmin() && request()->filled('company_id')) { + if (request()->company_id === 'system') { + $query->where('is_system', true); + } else { + $query->where('company_id', request()->company_id); + } + } + $roles = $query->latest()->paginate($per_page)->withQueryString(); - $all_permissions = \Spatie\Permission\Models\Permission::all() + $companies = $user->isSystemAdmin() ? \App\Models\System\Company::all() : collect(); + + // 權限遞迴約束:租戶管理員只能看到並指派自己擁有的權限 + $permissionQuery = \Spatie\Permission\Models\Permission::query(); + if (!$user->isSystemAdmin()) { + $permissionQuery->whereIn('name', $user->getAllPermissions()->pluck('name')); + } + + $all_permissions = $permissionQuery->get() ->filter(function($perm) { - // 排除子項目的權限,只顯示主選單權限 + // 排除子項項目,只顯示主要權限 $excluded = [ 'menu.basic.machines', 'menu.basic.payment-configs', @@ -47,7 +64,8 @@ class PermissionController extends Controller // 根據路由決定標題 $title = request()->routeIs('*.sub-account-roles') ? __('Sub Account Roles') : __('Role Settings'); - return view('admin.permission.roles', compact('roles', 'all_permissions', 'title')); + $currentUserRoleIds = $user->roles->pluck('id')->toArray(); + return view('admin.permission.roles', compact('roles', 'all_permissions', 'title', 'currentUserRoleIds', 'companies')); } /** @@ -78,6 +96,15 @@ class PermissionController extends Controller if (!empty($validated['permissions'])) { $perms = $validated['permissions']; + + // 權限遞迴約束驗證:確保指派的權限是操作者權限的子集 + if (!auth()->user()->isSystemAdmin()) { + $currentUserPerms = auth()->user()->getAllPermissions()->pluck('name'); + if (collect($perms)->diff($currentUserPerms)->isNotEmpty()) { + return redirect()->back()->with('error', __('You cannot assign permissions you do not possess.')); + } + } + // 如果不是系統角色,排除主選單的系統權限 if (!$is_system) { $perms = array_diff($perms, ['menu.basic-settings', 'menu.permissions']); @@ -128,6 +155,15 @@ class PermissionController extends Controller ]); $perms = $validated['permissions'] ?? []; + + // 權限遞迴約束驗證 + if (!auth()->user()->isSystemAdmin()) { + $currentUserPerms = auth()->user()->getAllPermissions()->pluck('name'); + if (collect($perms)->diff($currentUserPerms)->isNotEmpty()) { + return redirect()->back()->with('error', __('You cannot assign permissions you do not possess.')); + } + } + // 如果不是系統角色,排除主選單的系統權限 if (!$is_system) { $perms = array_diff($perms, ['menu.basic-settings', 'menu.permissions']); @@ -188,9 +224,9 @@ class PermissionController extends Controller $per_page = $request->input('per_page', 10); $users = $query->latest()->paginate($per_page)->withQueryString(); $companies = auth()->user()->isSystemAdmin() ? \App\Models\System\Company::all() : collect(); - $roles_query = \App\Models\System\Role::where('name', '!=', 'super-admin'); + $roles_query = \App\Models\System\Role::query(); if (!auth()->user()->isSystemAdmin()) { - $roles_query->where('company_id', auth()->user()->company_id); + $roles_query->forCompany(auth()->user()->company_id); } $roles = $roles_query->get(); @@ -231,9 +267,9 @@ class PermissionController extends Controller // 驗證角色與公司的匹配性 (RBAC Safeguard) if ($company_id !== null) { - // 如果是租戶帳號,不能選各項系統角色 (is_system = 1) - if ($role->is_system) { - return redirect()->back()->with('error', __('System roles cannot be assigned to tenant accounts.')); + // 如果是租戶帳號,不能選超級管理員角色 + if ($role->is_system && $role->name === 'super-admin') { + return redirect()->back()->with('error', __('Super-admin role cannot be assigned to tenant accounts.')); } // 如果角色有特定的 company_id,必須匹配 if ($role->company_id !== null && $role->company_id != $company_id) { @@ -247,10 +283,9 @@ class PermissionController extends Controller } // 角色初始化與克隆邏輯 (只有 super-admin 在幫空白公司開帳號時觸發) - $role_to_assign = $validated['role']; $company_id = auth()->user()->isSystemAdmin() ? ($validated['company_id'] ?? null) : auth()->user()->company_id; - if ($company_id && $role && !$role->is_system && $role->company_id === null) { + if ($company_id && $role && $role->company_id === null && $role->name !== 'super-admin') { // 檢查該公司是否已有名為「管理員」的角色 $existingRole = \App\Models\System\Role::where('company_id', $company_id) ->where('name', '管理員') @@ -258,17 +293,17 @@ class PermissionController extends Controller if (!$existingRole) { // 克隆範本為該公司的「管理員」 - $clonedRole = \App\Models\System\Role::query()->create([ + $newRole = \App\Models\System\Role::query()->create([ 'name' => '管理員', 'guard_name' => 'web', 'company_id' => $company_id, 'is_system' => false, ]); - $clonedRole->syncPermissions($role->permissions); - $role_to_assign = '管理員'; + $newRole->syncPermissions($role->getPermissionNames()); + $role = $newRole; } else { // 如果已存在名為「管理員」的角色,則直接使用它 - $role_to_assign = '管理員'; + $role = $existingRole; } } @@ -279,10 +314,10 @@ class PermissionController extends Controller 'password' => \Illuminate\Support\Facades\Hash::make($validated['password']), 'status' => $validated['status'], 'company_id' => $company_id, - 'phone' => $validated['phone'], + 'phone' => $validated['phone'] ?? null, ]); - $user->assignRole($role_to_assign); + $user->assignRole($role); return redirect()->back()->with('success', __('Account created successfully.')); } @@ -325,8 +360,8 @@ class PermissionController extends Controller // 驗證角色與公司的匹配性 (RBAC Safeguard) if ($user->id !== auth()->id()) { // 排除編輯自己 (super-admin 有特殊邏輯) if ($target_company_id !== null) { - if ($roleObj->is_system) { - return redirect()->back()->with('error', __('System roles cannot be assigned to tenant accounts.')); + if ($roleObj->is_system && $roleObj->name === 'super-admin') { + return redirect()->back()->with('error', __('Super-admin role cannot be assigned to tenant accounts.')); } if ($roleObj->company_id !== null && $roleObj->company_id != $target_company_id) { return redirect()->back()->with('error', __('This role belongs to another company and cannot be assigned.')); @@ -343,7 +378,7 @@ class PermissionController extends Controller 'username' => $validated['username'], 'email' => $validated['email'], 'status' => $validated['status'], - 'phone' => $validated['phone'], + 'phone' => $validated['phone'] ?? null, ]; if (auth()->user()->isSystemAdmin()) { @@ -361,26 +396,25 @@ class PermissionController extends Controller } // 角色初始化與克隆邏輯 - $role_to_assign = $validated['role']; $target_company_id = auth()->user()->isSystemAdmin() ? ($validated['company_id'] ?? null) : auth()->user()->company_id; - if ($target_company_id && $roleObj && !$roleObj->is_system && $roleObj->company_id === null) { + if ($target_company_id && $roleObj && $roleObj->company_id === null && $roleObj->name !== 'super-admin') { // 檢查該公司是否已有名為「管理員」的角色 $existingRole = \App\Models\System\Role::where('company_id', $target_company_id) ->where('name', '管理員') ->first(); if (!$existingRole) { - $clonedRole = \App\Models\System\Role::query()->create([ + $newRole = \App\Models\System\Role::query()->create([ 'name' => '管理員', 'guard_name' => 'web', 'company_id' => $target_company_id, 'is_system' => false, ]); - $clonedRole->syncPermissions($roleObj->permissions); - $role_to_assign = '管理員'; + $newRole->syncPermissions($roleObj->getPermissionNames()); + $roleObj = $newRole; } else { - $role_to_assign = '管理員'; + $roleObj = $existingRole; } } @@ -390,7 +424,7 @@ class PermissionController extends Controller if ($user->id === auth()->id() && auth()->user()->isSystemAdmin()) { $user->syncRoles(['super-admin']); } else { - $user->syncRoles([$role_to_assign]); + $user->syncRoles([$roleObj]); } return redirect()->back()->with('success', __('Account updated successfully.')); diff --git a/app/Http/Controllers/Auth/PasswordController.php b/app/Http/Controllers/Auth/PasswordController.php index 6916409..182260d 100644 --- a/app/Http/Controllers/Auth/PasswordController.php +++ b/app/Http/Controllers/Auth/PasswordController.php @@ -24,6 +24,6 @@ class PasswordController extends Controller 'password' => Hash::make($validated['password']), ]); - return back()->with('status', 'password-updated'); + return back()->with('success', __('Password updated successfully.')); } } diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index c96932b..70795cf 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -39,7 +39,7 @@ class ProfileController extends Controller $user->save(); - return Redirect::route('profile.edit')->with('status', 'profile-updated'); + return Redirect::route('profile.edit')->with('success', __('Profile updated successfully.')); } /** diff --git a/app/Models/System/Role.php b/app/Models/System/Role.php index cc6dc32..4c539c0 100644 --- a/app/Models/System/Role.php +++ b/app/Models/System/Role.php @@ -13,6 +13,10 @@ class Role extends SpatieRole 'is_system', ]; + protected $casts = [ + 'is_system' => 'boolean', + ]; + /** * Get the company that owns the role. */ diff --git a/database/seeders/RoleSeeder.php b/database/seeders/RoleSeeder.php index ce960d7..b4e4846 100644 --- a/database/seeders/RoleSeeder.php +++ b/database/seeders/RoleSeeder.php @@ -3,7 +3,7 @@ namespace Database\Seeders; use Illuminate\Database\Seeder; -use Spatie\Permission\Models\Role; +use App\Models\System\Role; use Spatie\Permission\Models\Permission; use Illuminate\Support\Facades\Schema; @@ -41,14 +41,14 @@ class RoleSeeder extends Seeder // 建立角色 $superAdmin = Role::updateOrCreate( - ['name' => 'super-admin'], - ['is_system' => true] + ['name' => 'super-admin', 'company_id' => null], + ['is_system' => true, 'guard_name' => 'web'] ); $superAdmin->syncPermissions(Permission::all()); $tenantAdmin = Role::updateOrCreate( - ['name' => '客戶管理員'], - ['is_system' => false] + ['name' => '客戶管理員角色模板', 'company_id' => null], + ['is_system' => true, 'guard_name' => 'web'] ); $tenantAdmin->syncPermissions([ 'menu.members', diff --git a/lang/en.json b/lang/en.json index 2150932..a2cddaa 100644 --- a/lang/en.json +++ b/lang/en.json @@ -1,381 +1,483 @@ { - "Account Settings": "Account Settings", - "Manage your profile information, security settings, and login history": "Manage your profile information, security settings, and login history", - "Profile Information": "Profile Information", - "Update your account's profile information and email address.": "Update your account's profile information and email address.", - "Update Password": "Update Password", - "Ensure your account is using a long, random password to stay secure.": "Ensure your account is using a long, random password to stay secure.", - "Delete Account": "Delete Account", - "Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.": "Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.", - "Are you sure you want to delete your account?": "Are you sure you want to delete your account?", - "Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.", - "Login History": "Login History", - "Name": "Name", - "Phone": "Phone", - "Email": "Email", - "Current Password": "Current Password", - "New Password": "New Password", - "Confirm Password": "Confirm Password", - "Save": "Save", - "Saved.": "Saved.", - "Update": "Update", - "Cancel": "Cancel", - "Confirm": "Confirm", - "Danger Zone: Delete Account": "Danger Zone: Delete Account", - "Permanently Delete Account": "Permanently Delete Account", - "Password": "Password", - "Enter your password to confirm": "Enter your password to confirm", - "Dashboard": "Dashboard", - "Connectivity Status": "Connectivity Status", - "Real-time status monitoring": "Real-time status monitoring", - "LIVE": "LIVE", - "Online Machines": "Online Machines", - "Offline Machines": "Offline Machines", - "Alerts Pending": "Alerts Pending", - "Total Connected": "Total Connected", - "Monthly Transactions": "Monthly Transactions", - "Monthly cumulative revenue overview": "Monthly cumulative revenue overview", - "Today's Transactions": "Today's Transactions", - "vs Yesterday": "vs Yesterday", - "Yesterday": "Yesterday", - "Day Before": "Day Before", - "Machine Status List": "Machine Status List", - "Total items": "Total items: :count", - "Real-time monitoring across all machines": "Real-time monitoring across all machines", - "Quick search...": "Quick search...", - "Machine Info": "Machine Info", - "Running Status": "Running Status", - "Today Cumulative Sales": "Today Cumulative Sales", - "Current Stock": "Current Stock", - "Last Signal": "Last Signal", - "Alert Summary": "Alert Summary", - "No alert summary": "No alert summary", - "No data available": "No data available", - "Showing :from to :to of :total items": "Showing :from to :to of :total items", - "Previous": "Previous", - "Next": "Next", - "Profile Settings": "Profile Settings", - "Profile": "Profile", - "Member Management": "Member Management", - "Member List": "Member List", - "Membership Tiers": "Membership Tiers", - "Deposit Bonus": "Deposit Bonus", - "Point Rules": "Point Rules", - "Gift Definitions": "Gift Definitions", - "Machine Management": "Machine Management", - "Machine Logs": "Machine Logs", - "Machine List": "Machine List", - "Machine Permissions": "Machine Permissions", - "Utilization Rate": "Utilization Rate", - "Expiry Management": "Expiry Management", - "Maintenance Records": "Maintenance Records", - "APP Management": "APP Management", - "UI Elements": "UI Elements", - "Helper": "Helper", - "Questionnaire": "Questionnaire", - "Games": "Games", - "Timer": "Timer", - "Warehouse Management": "Warehouse Management", - "Warehouse List (All)": "Warehouse List (All)", - "Warehouse List (Individual)": "Warehouse List (Individual)", - "Stock Management": "Stock Management", - "Transfers": "Transfers", - "Purchases": "Purchases", - "Replenishments": "Replenishments", - "Replenishment Records": "Replenishment Records", - "Machine Stock": "Machine Stock", - "Staff Stock": "Staff Stock", - "Returns": "Returns", - "Sales Management": "Sales Management", - "Sales Records": "Sales Records", - "Pickup Codes": "Pickup Codes", - "Orders": "Orders", - "Promotions": "Promotions", - "Pass Codes": "Pass Codes", - "Store Gifts": "Store Gifts", - "Analysis Management": "Analysis Management", - "Change Stock": "Change Stock", - "Machine Reports": "Machine Reports", - "Product Reports": "Product Reports", - "Survey Analysis": "Survey Analysis", - "Audit Management": "Audit Management", - "Purchase Audit": "Purchase Audit", - "Transfer Audit": "Transfer Audit", - "Replenishment Audit": "Replenishment Audit", - "Data Configuration": "Data Configuration", - "Product Management": "Product Management", - "Advertisement Management": "Advertisement Management", - "Admin Sellable Products": "Admin Sellable Products", + "A new verification link has been sent to your email address.": "A new verification link has been sent to your email address.", + "Account created successfully.": "Account created successfully.", + "Account deleted successfully.": "Account deleted successfully.", "Account Management": "Account Management", - "Sub Accounts": "Sub Accounts", - "Sub Account Roles": "Sub Account Roles", - "Point Settings": "Point Settings", - "Badge Settings": "Badge Settings", - "Remote Management": "Remote Management", - "Machine Restart": "Machine Restart", - "Card Reader Restart": "Card Reader Restart", - "Remote Checkout": "Remote Checkout", - "Remote Lock": "Remote Lock", - "Remote Change": "Remote Change", - "Remote Dispense": "Remote Dispense", - "Line Management": "Line Management", - "Line Members": "Line Members", - "Line Machines": "Line Machines", - "Line Products": "Line Products", - "Line Official Account": "Line Official Account", - "Line Orders": "Line Orders", - "Line Coupons": "Line Coupons", - "Reservation System": "Reservation System", - "Reservation Members": "Reservation Members", - "Store Management": "Store Management", - "Time Slots": "Time Slots", - "Venue Management": "Venue Management", - "Coupons": "Coupons", - "Reservations": "Reservations", - "Order Management": "Order Management", - "Special Permission": "Special Permission", - "Clear Stock": "Clear Stock", - "APK Versions": "APK Versions", - "Discord Notifications": "Discord Notifications", - "Basic Settings": "Basic Settings", - "Machine Settings": "Machine Settings", - "Permission Settings": "Permission Settings", - "APP Features": "APP Features", - "Sales": "Sales", - "Others": "Others", - "AI Prediction": "AI Prediction", - "Roles": "Role Permissions", - "Role Management": "Role Permission Management", - "Define and manage security roles and permissions.": "Define and manage security roles and permissions.", - "Search roles...": "Search roles...", - "No permissions": "No permissions", - "No roles found.": "No roles found.", - "Create Role": "Create Role", - "Edit Role": "Edit Role", - "Update existing role and permissions.": "Update existing role and permissions.", - "Create a new role and assign permissions.": "Create a new role and assign permissions.", - "Enter role name": "Enter role name", - "Add Role": "Add Role", - "Role Name": "Role Name", - "Type": "Type", - "Permissions": "Permissions", - "Users": "Users", - "System role name cannot be modified.": "System role name cannot be modified.", - "The Super Admin role name cannot be modified.": "The Super Admin role name cannot be modified.", - "System Level": "System Level", - "Company Level": "Company Level", - "Global roles accessible by all administrators.": "Global roles accessible by all administrators.", - "Roles scoped to specific customer companies.": "Roles scoped to specific customer companies.", - "members": "Member Management", - "machines": "Machine Management", - "app": "APP Management", - "warehouses": "Warehouse Management", - "sales": "Sales Management", - "analysis": "Analysis Management", - "audit": "Audit Management", - "data-config": "Data Configuration", - "remote": "Remote Management", - "line": "Line Management", - "reservation": "Reservation System", - "special-permission": "Special Permission", - "companies": "Customer Management", - "accounts": "Account Management", - "roles": "Role Permissions", - "Role Permissions": "Role Permissions", - "Role Settings": "Role Permissions", - "No login history yet": "No login history yet", - "Signed in as": "Signed in as", - "Logout": "Logout", - "Joined": "Joined", - "Recent Login": "Recent Login", - "Total Logins": "Total Logins", + "Account Settings": "Account Settings", "Account Status": "Account Status", - "Active": "Active", - "Customer Management": "Customer Management", - "Manage all tenant accounts and validity": "Manage all tenant accounts and validity", - "Add Customer": "Add Customer", - "Total Customers": "Total Customers", - "Expired / Disabled": "Expired / Disabled", - "Search customers...": "Search customers...", - "All": "All", - "Disabled": "Disabled", - "Customer Info": "Customer Info", + "Account updated successfully.": "Account updated successfully.", + "accounts": "Account Management", "Accounts / Machines": "Accounts / Machines", - "Valid Until": "Valid Until", - "Actions": "Actions", - "Permanent": "Permanent", - "Are you sure to delete this customer?": "Are you sure to delete this customer?", - "No customers found": "No customers found", - "Edit Customer": "Edit Customer", - "Update Customer": "Update Customer", - "Create": "Create", - "Company Name": "Company Name", - "Company Code": "Company Code", - "Tax ID (Optional)": "Tax ID (Optional)", - "Status": "Status", - "Contact Name": "Contact Name", - "Contact Phone": "Contact Phone", - "Contact Email": "Contact Email", - "Notes": "Notes", - "Customer created successfully.": "Customer created successfully.", - "Customer updated successfully.": "Customer updated successfully.", - "Customer deleted successfully.": "Customer deleted successfully.", - "Cannot delete company with active accounts.": "Cannot delete company with active accounts.", - "Contract Until (Optional)": "Contract Until (Optional)", - "Company Information": "Company Information", - "Initial Admin Account": "Initial Admin Account", - "Optional": "Optional", - "Username": "Username", - "Enter login ID": "Enter login ID", - "Min 8 characters": "Min 8 characters", - "Admin display name": "Admin display name", - "Initial Role": "Initial Role", - "Contact & Details": "Contact & Details", - "e.g. Taiwan Star": "e.g. Taiwan Star", - "e.g. TWSTAR": "e.g. TWSTAR", - "Manage administrative and tenant accounts": "Manage administrative and tenant accounts", - "Add Account": "Add Account", - "All Companies": "All Companies", - "User Info": "User Info", - "Belongs To": "Belongs To", - "Role": "Role", - "SYSTEM": "SYSTEM", - "No users found": "No users found", - "Data Configuration Permissions": "Data Configuration Permissions", - "Sales Permissions": "Sales Permissions", - "Machine Management Permissions": "Machine Management Permissions", - "Warehouse Permissions": "Warehouse Permissions", - "Analysis Permissions": "Analysis Permissions", - "Audit Permissions": "Audit Permissions", - "Remote Permissions": "Remote Permissions", - "Line Permissions": "Line Permissions", - "Company": "Company", - "Save Changes": "Save Changes", - "User": "User", - "Admin": "Admin", - "Super Admin": "Super Admin", - "e.g. John Doe": "e.g. John Doe", - "e.g. johndoe": "e.g. johndoe", - "Search users...": "Search users...", - "Admin Name": "Admin Name", - "New Password (leave blank to keep current)": "New Password (leave blank to keep current)", - "Are you sure you want to delete this account?": "Are you sure you want to delete this account?", - "Show": "Show", - "to": "to", - "of": "of", - "items": "items", - "Showing": "Showing", - "Monitor events and system activity across your vending fleet.": "Monitor events and system activity across your vending fleet.", - "All Machines": "All Machines", - "All Levels": "All Levels", - "Timestamp": "Timestamp", - "Message Content": "Message Content", - "No matching logs found": "No matching logs found", - "Unknown": "Unknown", - "Info": "Info", - "Warning": "Warning", - "basic-settings": "Basic Settings", - "permissions": "Permission Settings", - "Error": "Error", - "Machine Model Settings": "Machine Model Settings", - "Machine Model": "Machine Model", - "Model Name": "Model Name", - "Machine Count": "Machine Count", - "Add Machine Model": "Add Machine Model", - "Edit Machine Model": "Edit Machine Model", - "Machine model created successfully.": "Machine model created successfully.", - "Machine model updated successfully.": "Machine model updated successfully.", - "Machine model deleted successfully.": "Machine model deleted successfully.", - "Cannot delete model that is currently in use by machines.": "Cannot delete model that is currently in use by machines.", - "Machine Details": "Machine Details", - "Create Machine": "Create Machine", - "Edit Machine": "Edit Machine", - "Basic Information": "Basic Information", - "Location": "Location", - "Temperature": "Temperature", - "Firmware Version": "Firmware Version", - "Last Heartbeat": "Last Heartbeat", - "Never Connected": "Never Connected", - "View Logs": "View Logs", - "Real-time Operation Logs (Last 50)": "Real-time Operation Logs (Last 50)", - "All Times System Timezone": "All times are in system timezone", - "Level": "Level", - "Logs": "Logs", - "Time": "Time", - "Message": "Message", - "Online": "Online", - "Offline": "Offline", - "Connecting...": "Connecting...", - "No logs found": "No logs found", - "Management of operational parameters and models": "Management of operational parameters and models", - "ECPay Invoice Settings Description": "ECPay Electronic Invoice Settings", - "E.SUN QR Scan Settings Description": "E.SUN Bank QR Scan Payment Settings", - "LINE Pay Direct Settings Description": "LINE Pay Official Direct Connection Settings", - "TapPay Integration Settings Description": "TapPay Payment Integration Settings", - "Merchant IDs": "Merchant IDs", - "Parameters": "Parameters", - "Hardware & Network": "Hardware & Network", - "Serial & Version": "Serial & Version", - "Heartbeat": "Heartbeat", - "Heating Range": "Heating Range", - "API Token": "API Token", - "No location set": "No location set", - "Close Panel": "Close Panel", - "Operations": "Operations", - "Operational Parameters": "Operational Parameters", - "Hardware & Slots": "Hardware & Slots", - "Slot Mechanism (default: Conveyor, check for Spring)": "Slot Mechanism (default: Conveyor, check for Spring)", - "Payment & Invoice": "Payment & Invoice", - "Payment Config": "Payment Config", - "Invoice Status": "Invoice Status", - "No Invoice": "No Invoice", - "Default Donate": "Default Donate", - "Default Not Donate": "Default Not Donate", - "Member & External": "Member & External", - "Welcome Gift": "Welcome Gift", - "Enabled/Disabled": "Enabled/Disabled", - "Member System": "Member System", - "Machine Images": "Machine Images", - "No images uploaded": "No images uploaded", - "Upload New Images": "Upload New Images", - "Max 3": "Max 3", - "Uploading new images will replace all existing images.": "Uploading new images will replace all existing images.", - "Search machines...": "Search machines...", - "Search models...": "Search models...", - "Card Reader": "Card Reader", - "Owner": "Owner", "Action": "Action", - "Items": "Items", - "View Details": "View Details", - "Edit Settings": "Edit Settings", - "Are you sure?": "Are you sure?", - "Serial No": "Serial No", - "Select Owner": "Select Owner", - "Select Model": "Select Model", - "Machines": "Machines", - "Models": "Models", - "Edit": "Edit", - "Delete": "Delete", - "None": "None", - "Select Company": "Select Company", - "e.g., Company Standard Pay": "e.g., Company Standard Pay", + "Actions": "Actions", + "Active": "Active", + "Add Account": "Add Account", + "Add Customer": "Add Customer", + "Add Machine": "Add Machine", + "Add Machine Model": "Add Machine Model", + "Add Role": "Add Role", + "Admin": "Admin", + "Admin display name": "Admin display name", + "Admin Name": "Admin Name", + "Admin Sellable Products": "Admin Sellable Products", + "Administrator": "Administrator", + "Advertisement Management": "Advertisement Management", + "Affiliation": "Affiliation", + "AI Prediction": "AI Prediction", + "Alert Summary": "Alert Summary", + "Alerts Pending": "Alerts Pending", + "All": "All", + "All Affiliations": "All Affiliations", + "All Companies": "All Companies", + "All Levels": "All Levels", + "All Machines": "All Machines", + "All Times System Timezone": "All times are in system timezone", + "analysis": "Analysis Management", + "Analysis Management": "Analysis Management", + "Analysis Permissions": "Analysis Permissions", + "API Token": "API Token", + "APK Versions": "APK Versions", + "app": "APP Management", + "APP Features": "APP Features", + "APP Management": "APP Management", "APP_ID": "APP_ID", "APP_KEY": "APP_KEY", + "Are you sure to delete this customer?": "Are you sure to delete this customer?", + "Are you sure you want to delete this account?": "Are you sure you want to delete this account?", + "Are you sure you want to delete this account? This action cannot be undone.": "Are you sure you want to delete this account? This action cannot be undone.", + "Are you sure you want to delete this configuration? This action cannot be undone.": "Are you sure you want to delete this configuration? This action cannot be undone.", + "Are you sure you want to delete this item? This action cannot be undone.": "Are you sure you want to delete this item? This action cannot be undone.", + "Are you sure you want to delete this role? This action cannot be undone.": "Are you sure you want to delete this role? This action cannot be undone.", + "Are you sure you want to delete your account?": "Are you sure you want to delete your account?", + "Are you sure?": "Are you sure?", + "audit": "Audit Management", + "Audit Management": "Audit Management", + "Audit Permissions": "Audit Permissions", + "Avatar updated successfully.": "Avatar updated successfully.", + "Badge Settings": "Badge Settings", + "Basic Information": "Basic Information", + "Basic Settings": "Basic Settings", + "basic-settings": "Basic Settings", + "Belongs To": "Belongs To", + "Belongs To Company": "Belongs To Company", + "Cancel": "Cancel", + "Cannot delete company with active accounts.": "Cannot delete company with active accounts.", + "Cannot delete model that is currently in use by machines.": "Cannot delete model that is currently in use by machines.", + "Cannot Delete Role": "Cannot Delete Role", + "Cannot delete role with active users.": "Cannot delete role with active users.", + "Card Reader": "Card Reader", + "Card Reader No": "Card Reader No", + "Card Reader Restart": "Card Reader Restart", + "Card Reader Seconds": "Card Reader Seconds", + "Change": "Change", + "Change Stock": "Change Stock", "ChannelId": "ChannelId", "ChannelSecret": "ChannelSecret", + "Checkout Time 1": "Checkout Time 1", + "Checkout Time 2": "Checkout Time 2", + "Clear Stock": "Clear Stock", + "Click here to re-send the verification email.": "Click here to re-send the verification email.", + "Click to upload": "Click to upload", + "Close Panel": "Close Panel", + "companies": "Customer Management", + "Company": "Company", + "Company Code": "Company Code", + "Company Information": "Company Information", + "Company Level": "Company Level", + "Company Name": "Company Name", + "Configuration Name": "Configuration Name", + "Confirm": "Confirm", + "Confirm Deletion": "Confirm Deletion", + "Confirm Password": "Confirm Password", + "Connecting...": "Connecting...", + "Connectivity Status": "Connectivity Status", + "Contact & Details": "Contact & Details", + "Contact Email": "Contact Email", + "Contact Name": "Contact Name", + "Contact Phone": "Contact Phone", + "Contract Until (Optional)": "Contract Until (Optional)", + "Coupons": "Coupons", + "Create": "Create", + "Create a new role and assign permissions.": "Create a new role and assign permissions.", + "Create Config": "Create Config", + "Create Machine": "Create Machine", + "Create Payment Config": "Create Payment Config", + "Create Role": "Create Role", + "Current Password": "Current Password", + "Current Stock": "Current Stock", + "Customer created successfully.": "Customer created successfully.", + "Customer deleted successfully.": "Customer deleted successfully.", + "Customer Info": "Customer Info", + "Customer Management": "Customer Management", + "Customer Payment Config": "Customer Payment Config", + "Customer updated successfully.": "Customer updated successfully.", + "Danger Zone: Delete Account": "Danger Zone: Delete Account", + "Dashboard": "Dashboard", + "Data Configuration": "Data Configuration", + "Data Configuration Permissions": "Data Configuration Permissions", + "data-config": "Data Configuration", + "Day Before": "Day Before", + "Default Donate": "Default Donate", + "Default Not Donate": "Default Not Donate", + "Define and manage security roles and permissions.": "Define and manage security roles and permissions.", + "Define new third-party payment parameters": "Define new third-party payment parameters", + "Delete": "Delete", + "Delete Account": "Delete Account", + "Delete Permanently": "Delete Permanently", + "Deposit Bonus": "Deposit Bonus", + "Detail": "Detail", + "Disabled": "Disabled", + "Discord Notifications": "Discord Notifications", + "e.g. John Doe": "e.g. John Doe", + "e.g. johndoe": "e.g. johndoe", + "e.g. Taiwan Star": "e.g. Taiwan Star", + "e.g. TWSTAR": "e.g. TWSTAR", + "e.g., Company Standard Pay": "e.g., Company Standard Pay", + "e.g., Taipei Station": "e.g., Taipei Station", + "E.SUN QR Scan": "E.SUN QR Scan", + "E.SUN QR Scan Settings Description": "E.SUN Bank QR Scan Payment Settings", "EASY_MERCHANT_ID": "EASY_MERCHANT_ID", + "ECPay Invoice": "ECPay Invoice", + "ECPay Invoice Settings Description": "ECPay Electronic Invoice Settings", + "Edit": "Edit", + "Edit Account": "Edit Account", + "Edit Customer": "Edit Customer", + "Edit Machine": "Edit Machine", + "Edit Machine Model": "Edit Machine Model", + "Edit Payment Config": "Edit Payment Config", + "Edit Role": "Edit Role", + "Edit Settings": "Edit Settings", + "Email": "Email", + "Enabled/Disabled": "Enabled/Disabled", + "Ensure your account is using a long, random password to stay secure.": "Ensure your account is using a long, random password to stay secure.", + "Enter login ID": "Enter login ID", + "Enter machine location": "Enter machine location", + "Enter machine name": "Enter machine name", + "Enter model name": "Enter model name", + "Enter role name": "Enter role name", + "Enter serial number": "Enter serial number", + "Enter your password to confirm": "Enter your password to confirm", + "Error": "Error", + "Expired / Disabled": "Expired / Disabled", + "Expiry Management": "Expiry Management", + "Failed to update machine images: ": "Failed to update machine images: ", + "files selected": "files selected", + "Firmware Version": "Firmware Version", + "Full Name": "Full Name", + "Games": "Games", + "Gift Definitions": "Gift Definitions", + "Global roles accessible by all administrators.": "Global roles accessible by all administrators.", + "Got it": "Got it", + "Hardware & Network": "Hardware & Network", + "Hardware & Slots": "Hardware & Slots", "HashIV": "HashIV", "HashKey": "HashKey", + "Heartbeat": "Heartbeat", + "Heating End Time": "Heating End Time", + "Heating Range": "Heating Range", + "Heating Start Time": "Heating Start Time", + "Helper": "Helper", + "Info": "Info", + "Initial Admin Account": "Initial Admin Account", + "Initial Role": "Initial Role", + "Invoice Status": "Invoice Status", + "items": "items", + "Items": "Items", "JKO_MERCHANT_ID": "JKO_MERCHANT_ID", + "john@example.com": "john@example.com", + "Joined": "Joined", "Key": "Key", + "Key No": "Key No", + "Last Heartbeat": "Last Heartbeat", + "Last Signal": "Last Signal", + "Last Updated": "Last Updated", + "Level": "Level", + "line": "Line Management", + "Line Coupons": "Line Coupons", + "Line Machines": "Line Machines", + "Line Management": "Line Management", + "Line Members": "Line Members", + "Line Official Account": "Line Official Account", + "Line Orders": "Line Orders", + "LINE Pay Direct": "LINE Pay Direct", + "LINE Pay Direct Settings Description": "LINE Pay Official Direct Connection Settings", + "Line Permissions": "Line Permissions", + "Line Products": "Line Products", "LINE_MERCHANT_ID": "LINE_MERCHANT_ID", - "PARTNER_KEY": "PARTNER_KEY", - "PI_MERCHANT_ID": "PI_MERCHANT_ID", - "PS_MERCHANT_ID": "PS_MERCHANT_ID", - "Save Config": "Save Config", - "StoreID": "StoreID", - "TermID": "TermID", - "Photo Slot": "Photo Slot", + "LIVE": "LIVE", + "Location": "Location", + "Login History": "Login History", + "Logout": "Logout", + "Logs": "Logs", + "Machine Count": "Machine Count", + "Machine created successfully.": "Machine created successfully.", + "Machine Details": "Machine Details", + "Machine Images": "Machine Images", + "Machine images updated successfully.": "Machine images updated successfully.", + "Machine Info": "Machine Info", + "Machine List": "Machine List", + "Machine Logs": "Machine Logs", + "Machine Management": "Machine Management", + "Machine Management Permissions": "Machine Management Permissions", + "Machine Model": "Machine Model", + "Machine model created successfully.": "Machine model created successfully.", + "Machine model deleted successfully.": "Machine model deleted successfully.", + "Machine Model Settings": "Machine Model Settings", + "Machine model updated successfully.": "Machine model updated successfully.", + "Machine Name": "Machine Name", + "Machine Permissions": "Machine Permissions", + "Machine Reports": "Machine Reports", + "Machine Restart": "Machine Restart", + "Machine Settings": "Machine Settings", + "Machine settings updated successfully.": "Machine settings updated successfully.", + "Machine Status List": "Machine Status List", + "Machine Stock": "Machine Stock", + "machines": "Machine Management", + "Machines": "Machines", + "Maintenance Records": "Maintenance Records", + "Manage administrative and tenant accounts": "Manage administrative and tenant accounts", + "Manage all tenant accounts and validity": "Manage all tenant accounts and validity", + "Manage your profile information, security settings, and login history": "Manage your profile information, security settings, and login history", + "Management of operational parameters and models": "Management of operational parameters and models", + "Max 3": "Max 3", + "Member & External": "Member & External", + "Member List": "Member List", + "Member Management": "Member Management", + "Member System": "Member System", + "members": "Member Management", + "Membership Tiers": "Membership Tiers", + "Menu Permissions": "Menu Permissions", + "Merchant IDs": "Merchant IDs", + "Merchant payment gateway settings management": "Merchant payment gateway settings management", + "Message": "Message", + "Message Content": "Message Content", + "Min 8 characters": "Min 8 characters", + "Model": "Model", + "Model Name": "Model Name", + "Models": "Models", + "Modifying your own administrative permissions may result in losing access to certain system functions.": "Modifying your own administrative permissions may result in losing access to certain system functions.", + "Monitor events and system activity across your vending fleet.": "Monitor events and system activity across your vending fleet.", + "Monthly cumulative revenue overview": "Monthly cumulative revenue overview", + "Monthly Transactions": "Monthly Transactions", + "Name": "Name", + "Never Connected": "Never Connected", + "New Password": "New Password", + "New Password (leave blank to keep current)": "New Password (leave blank to keep current)", + "Next": "Next", + "No accounts found": "No accounts found", + "No alert summary": "No alert summary", + "No configurations found": "No configurations found", + "No customers found": "No customers found", + "No data available": "No data available", + "No file uploaded.": "No file uploaded.", + "No images uploaded": "No images uploaded", + "No Invoice": "No Invoice", + "No location set": "No location set", + "No login history yet": "No login history yet", + "No logs found": "No logs found", + "No matching logs found": "No matching logs found", + "No permissions": "No permissions", + "No roles found.": "No roles found.", + "No users found": "No users found", + "None": "None", + "Not Used": "Not Used", + "Notes": "Notes", + "of": "of", + "Offline": "Offline", + "Offline Machines": "Offline Machines", + "Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.": "Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.", + "Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.", + "Online": "Online", + "Online Machines": "Online Machines", + "Only system roles can be assigned to platform administrative accounts.": "Only system roles can be assigned to platform administrative accounts.", + "Operational Parameters": "Operational Parameters", + "Operations": "Operations", "Optimized for display. Supported formats: JPG, PNG, WebP.": "Optimized for display. Supported formats: JPG, PNG, WebP.", - "Change": "Change" + "Optional": "Optional", + "Order Management": "Order Management", + "Orders": "Orders", + "Others": "Others", + "Owner": "Owner", + "Parameters": "Parameters", + "PARTNER_KEY": "PARTNER_KEY", + "Pass Codes": "Pass Codes", + "Password": "Password", + "Payment & Invoice": "Payment & Invoice", + "Payment Buffer Seconds": "Payment Buffer Seconds", + "Payment Config": "Payment Config", + "Payment Configuration": "Payment Configuration", + "Payment Configuration created successfully.": "Payment Configuration created successfully.", + "Payment Configuration deleted successfully.": "Payment Configuration deleted successfully.", + "Payment Configuration updated successfully.": "Payment Configuration updated successfully.", + "Permanent": "Permanent", + "Permanently Delete Account": "Permanently Delete Account", + "Permission Settings": "Permission Settings", + "Permissions": "Permissions", + "permissions": "Permission Settings", + "Phone": "Phone", + "Photo Slot": "Photo Slot", + "PI_MERCHANT_ID": "PI_MERCHANT_ID", + "Pickup Codes": "Pickup Codes", + "Please check the following errors:": "Please check the following errors:", + "Please check the form for errors.": "Please check the form for errors.", + "Point Rules": "Point Rules", + "Point Settings": "Point Settings", + "Previous": "Previous", + "Product Management": "Product Management", + "Product Reports": "Product Reports", + "Profile": "Profile", + "Profile Information": "Profile Information", + "Profile Settings": "Profile Settings", + "Profile updated successfully.": "Profile updated successfully.", + "Promotions": "Promotions", + "Protected": "Protected", + "PS_MERCHANT_ID": "PS_MERCHANT_ID", + "Purchase Audit": "Purchase Audit", + "Purchases": "Purchases", + "Questionnaire": "Questionnaire", + "Quick search...": "Quick search...", + "Real-time monitoring across all machines": "Real-time monitoring across all machines", + "Real-time Operation Logs (Last 50)": "Real-time Operation Logs (Last 50)", + "Real-time status monitoring": "Real-time status monitoring", + "Recent Login": "Recent Login", + "remote": "Remote Management", + "Remote Change": "Remote Change", + "Remote Checkout": "Remote Checkout", + "Remote Dispense": "Remote Dispense", + "Remote Lock": "Remote Lock", + "Remote Management": "Remote Management", + "Remote Permissions": "Remote Permissions", + "Replenishment Audit": "Replenishment Audit", + "Replenishment Records": "Replenishment Records", + "Replenishments": "Replenishments", + "reservation": "Reservation System", + "Reservation Members": "Reservation Members", + "Reservation System": "Reservation System", + "Reservations": "Reservations", + "Returns": "Returns", + "Role": "Role", + "Role created successfully.": "Role created successfully.", + "Role deleted successfully.": "Role deleted successfully.", + "Role Management": "Role Permission Management", + "Role Name": "Role Name", + "Role name already exists in this company.": "Role name already exists in this company.", + "Role not found.": "Role not found.", + "Role Permissions": "Role Permissions", + "Role Settings": "Role Permissions", + "Role Type": "Role Type", + "Role updated successfully.": "Role updated successfully.", + "Roles": "Role Permissions", + "roles": "Role Permissions", + "Roles scoped to specific customer companies.": "Roles scoped to specific customer companies.", + "Running Status": "Running Status", + "Sales": "Sales", + "sales": "Sales Management", + "Sales Management": "Sales Management", + "Sales Permissions": "Sales Permissions", + "Sales Records": "Sales Records", + "Save": "Save", + "Save Changes": "Save Changes", + "Save Config": "Save Config", + "Saved.": "Saved.", + "Search configurations...": "Search configurations...", + "Search customers...": "Search customers...", + "Search machines...": "Search machines...", + "Search models...": "Search models...", + "Search roles...": "Search roles...", + "Search users...": "Search users...", + "Select Company": "Select Company", + "Select Model": "Select Model", + "Select Owner": "Select Owner", + "Serial & Version": "Serial & Version", + "Serial No": "Serial No", + "Serial Number": "Serial Number", + "Show": "Show", + "Showing": "Showing", + "Showing :from to :to of :total items": "Showing :from to :to of :total items", + "Sign in to your account": "Sign in to your account", + "Signed in as": "Signed in as", + "Slot Mechanism (default: Conveyor, check for Spring)": "Slot Mechanism (default: Conveyor, check for Spring)", + "Some fields need attention": "Some fields need attention", + "Special Permission": "Special Permission", + "special-permission": "Special Permission", + "Staff Stock": "Staff Stock", + "Status": "Status", + "Stock Management": "Stock Management", + "Store Gifts": "Store Gifts", + "Store ID": "Store ID", + "Store Management": "Store Management", + "StoreID": "StoreID", + "Sub Account Management": "Sub Account Management", + "Sub Account Roles": "Sub Account Roles", + "Sub Accounts": "Sub Accounts", + "Success": "Success", + "Super Admin": "Super Admin", + "Super-admin role cannot be assigned to tenant accounts.": "Super-admin role cannot be assigned to tenant accounts.", + "Survey Analysis": "Survey Analysis", + "SYSTEM": "SYSTEM", + "System Level": "System Level", + "System Role": "System Role", + "System role name cannot be modified.": "System role name cannot be modified.", + "System roles cannot be deleted by tenant administrators.": "System roles cannot be deleted by tenant administrators.", + "System roles cannot be modified by tenant administrators.": "System roles cannot be modified by tenant administrators.", + "System super admin accounts cannot be deleted.": "System super admin accounts cannot be deleted.", + "System super admin accounts cannot be modified via this interface.": "System super admin accounts cannot be modified via this interface.", + "Systems Initializing": "Systems Initializing", + "TapPay Integration": "TapPay Integration", + "TapPay Integration Settings Description": "TapPay Payment Integration Settings", + "Tax ID (Optional)": "Tax ID (Optional)", + "Temperature": "Temperature", + "TermID": "TermID", + "The image is too large. Please upload an image smaller than 1MB.": "The image is too large. Please upload an image smaller than 1MB.", + "The Super Admin role cannot be deleted.": "The Super Admin role cannot be deleted.", + "The Super Admin role is immutable.": "The Super Admin role is immutable.", + "The Super Admin role name cannot be modified.": "The Super Admin role name cannot be modified.", + "This role belongs to another company and cannot be assigned.": "This role belongs to another company and cannot be assigned.", + "Time": "Time", + "Time Slots": "Time Slots", + "Timer": "Timer", + "Timestamp": "Timestamp", + "to": "to", + "Today Cumulative Sales": "Today Cumulative Sales", + "Today's Transactions": "Today's Transactions", + "Total Connected": "Total Connected", + "Total Customers": "Total Customers", + "Total items": "Total items: :count", + "Total Logins": "Total Logins", + "Transfer Audit": "Transfer Audit", + "Transfers": "Transfers", + "Type": "Type", + "UI Elements": "UI Elements", + "Unknown": "Unknown", + "Update": "Update", + "Update Customer": "Update Customer", + "Update existing role and permissions.": "Update existing role and permissions.", + "Update Password": "Update Password", + "Update your account's profile information and email address.": "Update your account's profile information and email address.", + "Upload New Images": "Upload New Images", + "Uploading new images will replace all existing images.": "Uploading new images will replace all existing images.", + "User": "User", + "User Info": "User Info", + "Username": "Username", + "Users": "Users", + "Utilization Rate": "Utilization Rate", + "Valid Until": "Valid Until", + "Venue Management": "Venue Management", + "View Details": "View Details", + "View Logs": "View Logs", + "vs Yesterday": "vs Yesterday", + "Warehouse List": "Warehouse List", + "Warehouse List (All)": "Warehouse List (All)", + "Warehouse List (Individual)": "Warehouse List (Individual)", + "Warehouse Management": "Warehouse Management", + "Warehouse Permissions": "Warehouse Permissions", + "warehouses": "Warehouse Management", + "Warning": "Warning", + "Warning: You are editing your own role!": "Warning: You are editing your own role!", + "Welcome Gift": "Welcome Gift", + "Yesterday": "Yesterday", + "You cannot assign permissions you do not possess.": "You cannot assign permissions you do not possess.", + "You cannot delete your own account.": "You cannot delete your own account.", + "Your email address is unverified.": "Your email address is unverified.", + "Your recent account activity": "Your recent account activity" } \ No newline at end of file diff --git a/lang/ja.json b/lang/ja.json index 5b09a52..6e95d62 100644 --- a/lang/ja.json +++ b/lang/ja.json @@ -1,388 +1,480 @@ { - "Account Settings": "アカウント設定", - "Manage your profile information, security settings, and login history": "プロフィール情報、セキュリティ設定、ログイン履歴の管理", - "Profile Information": "プロフィール情報", - "Update your account's profile information and email address.": "アカウントの氏名、電話番号、メールアドレスを更新します。", - "Update Password": "パスワードの更新", - "Ensure your account is using a long, random password to stay secure.": "セキュリティを維持するため、アカウントには長くランダムなパスワードを使用してください。", - "Delete Account": "アカウントの削除", - "Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.": "アカウントが削除されると、そのすべてのリソース和データが永久に削除されます。アカウントを削除する前に、保持したいデータや情報をダウンロードしてください。", - "Are you sure you want to delete your account?": "真的にアカウントを削除してもよろしいですか?", - "Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "アカウントが削除されると、すべての関連データが永久に削除されます。アカウントの永久削除を確定するため、パスワードを入力してください。", - "Login History": "ログイン履歴", - "Name": "氏名", - "Phone": "電話番号", - "Email": "メールアドレス", - "Current Password": "現在のパスワード", - "New Password": "新しいパスワード", - "Confirm Password": "新しいパスワード(確認)", - "Save": "変更を保存", - "Saved.": "保存されました", - "Update": "更新", - "Cancel": "キャンセル", - "Confirm": "確認", - "Danger Zone: Delete Account": "危険区域:アカウントの削除", - "Permanently Delete Account": "アカウントを永久に削除", - "Password": "パスワード", - "Enter your password to confirm": "確認のためパスワードを入力してください", - "Dashboard": "ダッシュボード", - "Connectivity Status": "接続ステータス概況", - "Real-time status monitoring": "リアルタイムステータス監視", - "LIVE": "ライブ", - "Online Machines": "オンライン機台", - "Offline Machines": "オフライン機台", - "Alerts Pending": "アラート待機中", - "Total Connected": "接続数合計", - "Monthly Transactions": "今月の取引統計", - "Monthly cumulative revenue overview": "今月の累計収益概要", - "Today's Transactions": "今日の取引額", - "vs Yesterday": "前日比", - "Yesterday": "昨日", - "Day Before": "一昨日", - "Machine Status List": "機台稼働状況リスト", - "Total items": "合計 :count 件", - "Real-time monitoring across all machines": "全機台のリアルタイム監視", - "Quick search...": "クイック検索...", - "Machine Info": "機台情報", - "Running Status": "稼働状況", - "Today Cumulative Sales": "本日累計販売", - "Current Stock": "現在の在庫", - "Last Signal": "最終信号時間", - "Alert Summary": "アラート概要", - "No alert summary": "アラートなし", - "No data available": "データなし", - "Showing :from to :to of :total items": ":total 件中 :from から :to 件を表示", - "Previous": "前へ", - "Next": "次へ", - "Profile Settings": "個人設定", - "Profile": "プロフィール", - "Member Management": "会員管理", - "Member List": "会員リスト", - "Membership Tiers": "会員ランク", - "Deposit Bonus": "入金ボーナス", - "Point Rules": "ポイントルール", - "Gift Definitions": "ギフト設定", - "Machine Management": "機台管理", - "Machine Logs": "機台ログ", - "Machine List": "機台リスト", - "Machine Permissions": "機台権限", - "Utilization Rate": "稼働率", - "Expiry Management": "有効期限管理", - "Maintenance Records": "メンテナンス記録", - "APP Management": "APP管理", - "UI Elements": "UI要素", - "Helper": "ヘルパー", - "Questionnaire": "アンケート", - "Games": "ゲーム", - "Timer": "タイマー", - "Warehouse Management": "倉庫管理", - "Warehouse List (All)": "倉庫リスト(全)", - "Warehouse List (Individual)": "倉庫リスト(個)", - "Stock Management": "在庫管理", - "Transfers": "転送", - "Purchases": "購入", - "Replenishments": "補充", - "Replenishment Records": "補充記録", - "Machine Stock": "機台在庫", - "Staff Stock": "スタッフ在庫", - "Returns": "返品", - "Sales Management": "販売管理", - "Sales Records": "販売記録", - "Pickup Codes": "受取コード", - "Orders": "注文", - "Promotions": "プロモーション", - "Pass Codes": "パスクード", - "Store Gifts": "来店特典", - "Analysis Management": "分析管理", - "Change Stock": "小銭在庫", - "Machine Reports": "機台レポート", - "Product Reports": "商品レポート", - "Survey Analysis": "アンケート分析", - "Audit Management": "監査管理", - "Purchase Audit": "購入監査", - "Transfer Audit": "転送監査", - "Replenishment Audit": "補充監査", - "Data Configuration": "データ設定", - "Product Management": "商品管理", - "Advertisement Management": "廣告管理", - "Admin Sellable Products": "管理者販売可能商品", + "A new verification link has been sent to your email address.": "新しい確認リンクがメールアドレスに送信されました。", + "Account created successfully.": "アカウントが正常に作成されました。", + "Account deleted successfully.": "アカウントが正常に削除されました。", "Account Management": "アカウント管理", - "Sub Accounts": "サブアカウント", - "Sub Account Roles": "サブアカウントロール", - "Point Settings": "ポイント設定", - "Badge Settings": "バッジ設定", - "Remote Management": "リモート管理", - "Machine Restart": "機台再起動", - "Card Reader Restart": "カードリーダー再起動", - "Remote Checkout": "リモート決済", - "Remote Lock": "リモートロック", - "Remote Change": "リモートお釣り", - "Remote Dispense": "リモート出庫", - "Line Management": "Line管理", - "Line Members": "Line会員", - "Line Machines": "Line機台", - "Line Products": "Line商品", - "Line Official Account": "Line公式アカウント", - "Line Orders": "Line注文", - "Line Coupons": "Lineクーポン", - "Reservation System": "予約システム", - "Reservation Members": "予約会員", - "Store Management": "店舗管理", - "Time Slots": "タイムスロット", - "Venue Management": "会場管理", - "Coupons": "クーポン", - "Reservations": "予約", - "Order Management": "注文管理", - "Special Permission": "特別権限", - "Clear Stock": "在庫クリア", - "APK Versions": "APKバージョン", - "Discord Notifications": "Discord通知", - "Basic Settings": "基本設定", - "Machine Settings": "機台設定", - "Permission Settings": "権限設定", - "APP Features": "APP機能", - "Others": "その他", - "AI Prediction": "AI予測", - "Roles": "ロール權限", - "Role Management": "ロール權限管理", - "Define and manage security roles and permissions.": "システムのセキュリティロールと権限を定義および管理します。", - "Search roles...": "ロールを検索...", - "No permissions": "権限項目なし", - "No roles found.": "ロールが見つかりませんでした。", - "Create Role": "ロール作成", - "Edit Role": "ロール編集", - "Update existing role and permissions.": "既存のロールと権限を更新します。", - "Create a new role and assign permissions.": "新しいロールを作成し、権限を割り当てます。", - "Enter role name": "ロール名を入力してください", - "Add Role": "ロールを追加", - "Role Name": "ロール名", - "Type": "タイプ", - "Permissions": "権限", - "Users": "ユーザー数", - "System role name cannot be modified.": "システムロール名は変更できません。", - "System Level": "システムレベル", - "Company Level": "顧客レベル", - "Menu Permissions": "メニュー権限", - "Save Changes": "変更を保存", - "members": "会員管理", - "machines": "機台管理", - "app": "APP管理", - "warehouses": "倉庫管理", - "sales": "販売管理", - "analysis": "分析管理", - "audit": "監査管理", - "data-config": "データ設定", - "remote": "リモート管理", - "line": "Line管理", - "reservation": "予約システム", - "special-permission": "特別権限", - "companies": "顧客管理", - "accounts": "アカウント管理", - "roles": "ロール權限", - "Role Permissions": "ロール權限", - "Role Settings": "ロール權限", - "No login history yet": "ログイン履歴はまだありません", - "Signed in as": "ログイン中", - "Logout": "ログアウト", - "Joined": "入会日", - "Recent Login": "最近のログイン", - "Total Logins": "總ログイン數", + "Account Settings": "アカウント設定", "Account Status": "アカウント狀態", - "Active": "アクティブ", - "Customer Management": "顧客管理", - "Manage all tenant accounts and validity": "すべてのテナントアカウントと有効期限を管理します", - "Add Customer": "顧客を追加", - "Total Customers": "顧客總數", - "Expired / Disabled": "期限切れ / 停止中", - "Search customers...": "顧客を検索...", - "All": "すべて", - "Disabled": "停止中", - "Customer Info": "顧客情報", + "Account updated successfully.": "アカウントが正常に更新されました。", + "accounts": "アカウント管理", "Accounts / Machines": "アカウント / 機台", - "Valid Until": "有効期限", - "Actions": "操作", - "Permanent": "永久認可", - "Are you sure to delete this customer?": "この顧客を削除してもよろしいですか?", - "No customers found": "顧客が見つかりません", - "Edit Customer": "顧客を編集", - "Update Customer": "顧客を更新", - "Create": "作成", - "Company Name": "会社名", - "Company Code": "会社コード", - "Tax ID (Optional)": "納税者番号 (任意)", - "Status": "ステータス", - "Contact Name": "連絡担当者名", - "Contact Phone": "連絡先電話番号", - "Contact Email": "連絡先メールアドレス", - "Notes": "備考", - "Customer created successfully.": "顧客が正常に作成されました。", - "Customer updated successfully.": "顧客が正常に更新されました。", - "Customer deleted successfully.": "顧客が正常に削除されました。", - "Cannot delete company with active accounts.": "アクティブなアカウントを持つ会社は削除できません。", - "Contract Until (Optional)": "契約期限 (任意)", - "Company Information": "会社情報", - "Initial Admin Account": "初期管理者アカウント", - "Optional": "任意", - "Username": "ユーザー名", - "Enter login ID": "ログインIDを入力してください", - "Min 8 characters": "最低8文字", - "Admin display name": "管理者表示名", - "Initial Role": "初期ロール", - "Contact & Details": "連絡先と詳細", - "e.g. Taiwan Star": "例:台湾スター", - "e.g. TWSTAR": "例:TWSTAR", - "Manage administrative and tenant accounts": "管理者およびテナントアカウントを管理します", - "Add Account": "アカウントを追加", - "All Companies": "すべての会社", - "User Info": "ユーザー情報", - "Belongs To": "所属", - "Role": "ロール", - "SYSTEM": "システムレベル", - "No users found": "ユーザーが見つかりません", - "Data Configuration Permissions": "データ設定権限", - "Sales Permissions": "販売管理権限", - "Machine Management Permissions": "機台管理權限", - "Warehouse Permissions": "倉庫管理權限", - "Analysis Permissions": "分析管理權限", - "Audit Permissions": "監査管理權限", - "Remote Permissions": "リモート管理權限", - "Line Permissions": "Line管理權限", - "Company": "所属顧客", - "User": "一般ユーザー", - "Admin": "管理者", - "Super Admin": "スーパー管理者", - "e.g. John Doe": "例:山田太郎", - "e.g. johndoe": "例:yamadataro", - "Search users...": "ユーザーを検索...", - "Admin Name": "管理者名", - "New Password (leave blank to keep current)": "新しいパスワード (変更しない場合は空欄)", - "Are you sure you want to delete this account?": "このアカウントを削除してもよろしいですか?", - "Show": "表示", - "to": "から", - "of": "件中", - "items": "個の項目", - "Showing": "表示中", - "Monitor events and system activity across your vending fleet.": "自販機フリート全体のイベントとシステムアクティビティを監視します。", - "All Machines": "すべての機体", - "All Levels": "すべてのレベル", - "Timestamp": "タイムスタンプ", - "Message Content": "ログ内容", - "No matching logs found": "一致するログが見つかりません", - "Unknown": "不明", - "Info": "情報", - "Warning": "警告", - "basic-settings": "基本設定", - "permissions": "權限設定", - "Error": "エラー", - "Machine Model Settings": "機台型號設定", - "Machine Model": "機台型號", - "Model Name": "型號名称", - "Machine Count": "機台数量", - "Add Machine Model": "機台型號を追加", - "Edit Machine Model": "機台型號を編輯", - "Machine model created successfully.": "機台型號が正常に作成されました。", - "Machine model updated successfully.": "機台型號が正常に更新されました。", - "Machine model deleted successfully.": "機台型號が正常に削除されました。", - "Cannot delete model that is currently in use by machines.": "機台で使用中の型號は削除できません。", - "Machine Details": "機台詳情", - "Create Machine": "機台新規作成", - "Edit Machine": "機台編集", - "Basic Information": "基本情報", - "Location": "場所", - "Temperature": "温度", - "Firmware Version": "ファームウェアバージョン", - "Last Heartbeat": "最終ハートビート時間", - "Never Connected": "未接続", - "View Logs": "ログを表示", - "Real-time Operation Logs (Last 50)": "リアルタイム操作ログ (直近 50 件)", - "All Times System Timezone": "時間はすべてシステムタイムゾーンです", - "Level": "レベル", - "Logs": "ログ", - "Time": "時間", - "Message": "メッセージ", - "Online": "オンライン", - "Offline": "オフライン", - "Connecting...": "接続中...", - "No logs found": "ログがありません", - "Management of operational parameters and models": "運用パラメータと型番の管理", - "ECPay Invoice Settings Description": "ECPay 電子発票設定", - "E.SUN QR Scan Settings Description": "玉山銀行 QR スキャン決済設定", - "LINE Pay Direct Settings Description": "LINE Pay 公式直結設定", - "TapPay Integration Settings Description": "TapPay 決済連携設定", - "Merchant IDs": "マーチャント ID", - "Parameters": "パラメータ設定", - "Hardware & Network": "ハードウェアとネットワーク", - "Serial & Version": "シリアルとバージョン", - "Heartbeat": "ハートビート状態", - "Heating Range": "加熱時間帯", - "API Token": "API キー", - "No location set": "場所が未設定です", - "Close Panel": "パネルを閉じる", - "Operations": "運用設定", - "Operational Parameters": "運用パラメータ", - "Hardware & Slots": "ハードウェアと貨道", - "Slot Mechanism (default: Conveyor, check for Spring)": "貨道メカニズム (デフォルト:コンベア、チェックでスプリング)", - "Payment & Invoice": "決済と発票", - "Payment Config": "決済設定", - "Invoice Status": "発票発行状態", - "No Invoice": "発票を発行しない", - "Default Donate": "デフォルト寄付", - "Default Not Donate": "デフォルト寄付しない", - "Member & External": "会員と外部システム", - "Welcome Gift": "会員登録特典", - "Enabled/Disabled": "有効/無効", - "Member System": "会員システム", - "Machine Images": "機台写真", - "No images uploaded": "写真がアップロードされていません", - "Upload New Images": "新しい写真をアップロード", - "Max 3": "最大3枚", - "Uploading new images will replace all existing images.": "新しい写真をアップロードすると、既存のすべての写真が置き換えられます。", - "Search machines...": "機台を検索...", - "Search models...": "型番を検索...", - "Card Reader": "カードリーダー", - "Owner": "所属会社", "Action": "操作", - "Items": "個の項目", - "View Details": "詳細表示", - "Edit Settings": "設定編集", - "Are you sure?": "よろしいですか?", - "Serial No": "機台シリアル番号", - "Select Owner": "所属会社を選択", - "Select Model": "型番を選択", - "Machines": "機台リスト", - "Models": "型番リスト", - "Edit": "編集", - "Delete": "削除", - "None": "なし", - "Create Payment Config": "決済設定を新規作成", - "Edit Payment Config": "決済設定を編集", - "Define new third-party payment parameters": "新しいサードパーティ決済パラメータを定義", - "Configuration Name": "設定名称", - "Belongs To Company": "所属会社", - "Select Company": "会社を選択", - "ECPay Invoice": "ECPay 電子発票", - "Store ID": "加盟店ID (MerchantID)", - "HashKey": "HashKey", - "HashIV": "HashIV", - "E.SUN QR Scan": "玉山銀行 QR スキャン", - "StoreID": "加盟店ID (StoreID)", - "TermID": "端末ID (TermID)", - "Key": "キー (Key)", - "LINE Pay Direct": "LINE Pay 直結決済", - "ChannelId": "チャンネルID", - "ChannelSecret": "チャンネルシークレット", - "TapPay Integration": "TapPay 統合決済", - "PARTNER_KEY": "パートナーキー", + "Actions": "操作", + "Active": "アクティブ", + "Add Account": "アカウントを追加", + "Add Customer": "顧客を追加", + "Add Machine": "機台を追加", + "Add Machine Model": "機台型號を追加", + "Add Role": "ロールを追加", + "Admin": "管理者", + "Admin display name": "管理者表示名", + "Admin Name": "管理者名", + "Admin Sellable Products": "管理者販売可能商品", + "Administrator": "管理者", + "Advertisement Management": "廣告管理", + "Affiliation": "所属", + "AI Prediction": "AI予測", + "Alert Summary": "アラート概要", + "Alerts Pending": "アラート待機中", + "All": "すべて", + "All Affiliations": "全ての所属", + "All Companies": "すべての会社", + "All Levels": "すべてのレベル", + "All Machines": "すべての機体", + "All Times System Timezone": "時間はすべてシステムタイムゾーンです", + "analysis": "分析管理", + "Analysis Management": "分析管理", + "Analysis Permissions": "分析管理權限", + "API Token": "API キー", + "APK Versions": "APKバージョン", + "app": "APP管理", + "APP Features": "APP機能", + "APP Management": "APP管理", "APP_ID": "APP_ID", "APP_KEY": "APP_KEY", - "LINE_MERCHANT_ID": "LINE Pay 加盟店ID", - "JKO_MERCHANT_ID": "街口支付 加盟店ID", - "PI_MERCHANT_ID": "Pi 拍錢包 加盟店ID", - "PS_MERCHANT_ID": "全盈+Pay 加盟店ID", - "EASY_MERCHANT_ID": "悠遊付 加盟店ID", - "Save Config": "設定を保存", + "Are you sure to delete this customer?": "この顧客を削除してもよろしいですか?", + "Are you sure you want to delete this account?": "このアカウントを削除してもよろしいですか?", + "Are you sure you want to delete this account? This action cannot be undone.": "このアカウントを削除してもよろしいですか?この操作は元に戻せません。", + "Are you sure you want to delete this configuration? This action cannot be undone.": "この設定を削除してもよろしいですか?この操作は元に戻せません。", + "Are you sure you want to delete this item? This action cannot be undone.": "この項目を削除してもよろしいですか?この操作は元に戻せません。", + "Are you sure you want to delete this role? This action cannot be undone.": "このロールを削除してもよろしいですか?この操作は元に戻せません。", + "Are you sure you want to delete your account?": "真的にアカウントを削除してもよろしいですか?", + "Are you sure?": "よろしいですか?", + "audit": "監査管理", + "Audit Management": "監査管理", + "Audit Permissions": "監査管理權限", + "Avatar updated successfully.": "アバターが正常に更新されました。", + "Badge Settings": "バッジ設定", + "Basic Information": "基本情報", + "Basic Settings": "基本設定", + "basic-settings": "基本設定", + "Belongs To": "所属", + "Belongs To Company": "所属会社", + "Cancel": "キャンセル", + "Cannot delete company with active accounts.": "アクティブなアカウントを持つ会社は削除できません。", + "Cannot delete model that is currently in use by machines.": "機台で使用中の型號は削除できません。", + "Cannot Delete Role": "ロールを削除できません", + "Cannot delete role with active users.": "アクティブなユーザーがいるロールは削除できません。", + "Card Reader": "カードリーダー", + "Card Reader No": "カードリーダー番号", + "Card Reader Restart": "カードリーダー再起動", + "Card Reader Seconds": "カードリーダー秒数", + "Change": "変更", + "Change Stock": "小銭在庫", + "ChannelId": "チャンネルID", + "ChannelSecret": "チャンネルシークレット", + "Checkout Time 1": "決済時間 1", + "Checkout Time 2": "決済時間 2", + "Clear Stock": "在庫クリア", + "Click here to re-send the verification email.": "確認メールを再送信するにはここをクリックしてください。", + "Click to upload": "クリックしてアップロード", + "Close Panel": "パネルを閉じる", + "companies": "顧客管理", + "Company": "所属顧客", + "Company Code": "会社コード", + "Company Information": "会社情報", + "Company Level": "顧客レベル", + "Company Name": "会社名", + "Configuration Name": "設定名称", + "Confirm": "確認", + "Confirm Deletion": "削除の確認", + "Confirm Password": "新しいパスワード(確認)", + "Connecting...": "接続中...", + "Connectivity Status": "接続ステータス概況", + "Contact & Details": "連絡先と詳細", + "Contact Email": "連絡先メールアドレス", + "Contact Name": "連絡担当者名", + "Contact Phone": "連絡先電話番号", + "Contract Until (Optional)": "契約期限 (任意)", + "Coupons": "クーポン", + "Create": "作成", + "Create a new role and assign permissions.": "新しいロールを作成し、権限を割り当てます。", + "Create Config": "設定を新規作成", + "Create Machine": "機台新規作成", + "Create Payment Config": "決済設定を新規作成", + "Create Role": "ロール作成", + "Current Password": "現在のパスワード", + "Current Stock": "現在の在庫", + "Customer created successfully.": "顧客が正常に作成されました。", + "Customer deleted successfully.": "顧客が正常に削除されました。", + "Customer Info": "顧客情報", + "Customer Management": "顧客管理", + "Customer Payment Config": "決済設定管理", + "Customer updated successfully.": "顧客が正常に更新されました。", + "Danger Zone: Delete Account": "危険区域:アカウントの削除", + "Dashboard": "ダッシュボード", + "Data Configuration": "データ設定", + "Data Configuration Permissions": "データ設定権限", + "data-config": "データ設定", + "Day Before": "一昨日", + "Default Donate": "デフォルト寄付", + "Default Not Donate": "デフォルト寄付しない", + "Define and manage security roles and permissions.": "システムのセキュリティロールと権限を定義および管理します。", + "Define new third-party payment parameters": "新しいサードパーティ決済パラメータを定義", + "Delete": "削除", + "Delete Account": "アカウントの削除", + "Delete Permanently": "完全に削除", + "Deposit Bonus": "入金ボーナス", + "Detail": "詳細", + "Disabled": "停止中", + "Discord Notifications": "Discord通知", + "e.g. John Doe": "例:山田太郎", + "e.g. johndoe": "例:yamadataro", + "e.g. Taiwan Star": "例:台湾スター", + "e.g. TWSTAR": "例:TWSTAR", "e.g., Company Standard Pay": "例:標準決済組合せ", - "Photo Slot": "写真スロット", + "e.g., Taipei Station": "例:台北駅", + "E.SUN QR Scan": "玉山銀行 QR スキャン", + "E.SUN QR Scan Settings Description": "玉山銀行 QR スキャン決済設定", + "EASY_MERCHANT_ID": "悠遊付 加盟店ID", + "ECPay Invoice": "ECPay 電子発票", + "ECPay Invoice Settings Description": "ECPay 電子発票設定", + "Edit": "編集", + "Edit Account": "アカウントを編集", + "Edit Customer": "顧客を編集", + "Edit Machine": "機台編集", + "Edit Machine Model": "機台型號を編輯", + "Edit Payment Config": "決済設定を編集", + "Edit Role": "ロール編集", + "Edit Settings": "設定編集", + "Email": "メールアドレス", + "Enabled/Disabled": "有効/無効", + "Ensure your account is using a long, random password to stay secure.": "セキュリティを維持するため、アカウントには長くランダムなパスワードを使用してください。", + "Enter login ID": "ログインIDを入力してください", + "Enter machine location": "機台の場所を入力してください", + "Enter machine name": "機台名を入力してください", + "Enter model name": "型番名を入力してください", + "Enter role name": "ロール名を入力してください", + "Enter serial number": "シリアル番号を入力してください", + "Enter your password to confirm": "確認のためパスワードを入力してください", + "Error": "エラー", + "Expired / Disabled": "期限切れ / 停止中", + "Expiry Management": "有効期限管理", + "Failed to update machine images: ": "機台画像の更新に失敗しました:", + "files selected": "ファイルを選択済み", + "Firmware Version": "ファームウェアバージョン", + "Full Name": "氏名", + "Games": "ゲーム", + "Gift Definitions": "ギフト設定", + "Got it": "了解", + "Hardware & Network": "ハードウェアとネットワーク", + "Hardware & Slots": "ハードウェアと貨道", + "HashIV": "HashIV", + "HashKey": "HashKey", + "Heartbeat": "ハートビート状態", + "Heating End Time": "加熱終了時間", + "Heating Range": "加熱時間帯", + "Heating Start Time": "加熱開始時間", + "Helper": "ヘルパー", + "Info": "情報", + "Initial Admin Account": "初期管理者アカウント", + "Initial Role": "初期ロール", + "Invoice Status": "発票発行状態", + "items": "個の項目", + "Items": "個の項目", + "JKO_MERCHANT_ID": "街口支付 加盟店ID", + "john@example.com": "john@example.com", + "Joined": "入会日", + "Key": "キー (Key)", + "Key No": "キー番号", + "Last Heartbeat": "最終ハートビート時間", + "Last Signal": "最終信号時間", + "Last Updated": "最終更新", + "Level": "レベル", + "line": "Line管理", + "Line Coupons": "Lineクーポン", + "Line Machines": "Line機台", + "Line Management": "Line管理", + "Line Members": "Line会員", + "Line Official Account": "Line公式アカウント", + "Line Orders": "Line注文", + "LINE Pay Direct": "LINE Pay 直結決済", + "LINE Pay Direct Settings Description": "LINE Pay 公式直結設定", + "Line Permissions": "Line管理權限", + "Line Products": "Line商品", + "LINE_MERCHANT_ID": "LINE Pay 加盟店ID", + "LIVE": "ライブ", + "Location": "場所", + "Login History": "ログイン履歴", + "Logout": "ログアウト", + "Logs": "ログ", + "Machine Count": "機台数量", + "Machine created successfully.": "機台が正常に作成されました。", + "Machine Details": "機台詳情", + "Machine Images": "機台写真", + "Machine images updated successfully.": "機台画像が正常に更新されました。", + "Machine Info": "機台情報", + "Machine List": "機台リスト", + "Machine Logs": "機台ログ", + "Machine Management": "機台管理", + "Machine Management Permissions": "機台管理權限", + "Machine Model": "機台型號", + "Machine model created successfully.": "機台型號が正常に作成されました。", + "Machine model deleted successfully.": "機台型號が正常に削除されました。", + "Machine Model Settings": "機台型號設定", + "Machine model updated successfully.": "機台型號が正常に更新されました。", + "Machine Name": "機台名", + "Machine Permissions": "機台権限", + "Machine Reports": "機台レポート", + "Machine Restart": "機台再起動", + "Machine Settings": "機台設定", + "Machine settings updated successfully.": "機台設定が正常に更新されました。", + "Machine Status List": "機台稼働状況リスト", + "Machine Stock": "機台在庫", + "machines": "機台管理", + "Machines": "機台リスト", + "Maintenance Records": "メンテナンス記録", + "Manage administrative and tenant accounts": "管理者およびテナントアカウントを管理します", + "Manage all tenant accounts and validity": "すべてのテナントアカウントと有効期限を管理します", + "Manage your profile information, security settings, and login history": "プロフィール情報、セキュリティ設定、ログイン履歴の管理", + "Management of operational parameters and models": "運用パラメータと型番の管理", + "Max 3": "最大3枚", + "Member & External": "会員と外部システム", + "Member List": "会員リスト", + "Member Management": "会員管理", + "Member System": "会員システム", + "members": "会員管理", + "Membership Tiers": "会員ランク", + "Menu Permissions": "メニュー権限", + "Merchant IDs": "マーチャント ID", + "Merchant payment gateway settings management": "マーチャント決済ゲートウェイ設定管理", + "Message": "メッセージ", + "Message Content": "ログ内容", + "Min 8 characters": "最低8文字", + "Model": "型番", + "Model Name": "型號名称", + "Models": "型番リスト", + "Modifying your own administrative permissions may result in losing access to certain system functions.": "自身の管理權限を変更すると、一部のシステム機能へのアクセス權を失う可能性があります。", + "Monitor events and system activity across your vending fleet.": "自販機フリート全体のイベントとシステムアクティビティを監視します。", + "Monthly cumulative revenue overview": "今月の累計収益概要", + "Monthly Transactions": "今月の取引統計", + "Name": "氏名", + "Never Connected": "未接続", + "New Password": "新しいパスワード", + "New Password (leave blank to keep current)": "新しいパスワード (変更しない場合は空欄)", + "Next": "次へ", + "No accounts found": "アカウントが見つかりません", + "No alert summary": "アラートなし", + "No configurations found": "設定が見つかりません", + "No customers found": "顧客が見つかりません", + "No data available": "データなし", + "No file uploaded.": "ファイルがアップロードされていません。", + "No images uploaded": "写真がアップロードされていません", + "No Invoice": "発票を発行しない", + "No location set": "場所が未設定です", + "No login history yet": "ログイン履歴はまだありません", + "No logs found": "ログがありません", + "No matching logs found": "一致するログが見つかりません", + "No permissions": "権限項目なし", + "No roles found.": "ロールが見つかりませんでした。", + "No users found": "ユーザーが見つかりません", + "None": "なし", + "Not Used": "未使用", + "Notes": "備考", + "of": "件中", + "Offline": "オフライン", + "Offline Machines": "オフライン機台", + "Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.": "アカウントが削除されると、そのすべてのリソース和データが永久に削除されます。アカウントを削除する前に、保持したいデータや情報をダウンロードしてください。", + "Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "アカウントが削除されると、すべての関連データが永久に削除されます。アカウントの永久削除を確定するため、パスワードを入力してください。", + "Online": "オンライン", + "Online Machines": "オンライン機台", + "Only system roles can be assigned to platform administrative accounts.": "プラットフォーム管理アカウントにはシステムロールのみ割り当て可能です。", + "Operational Parameters": "運用パラメータ", + "Operations": "運用設定", "Optimized for display. Supported formats: JPG, PNG, WebP.": "表示用に最適化されています。対応形式:JPG, PNG, WebP。", - "Change": "変更" + "Optional": "任意", + "Order Management": "注文管理", + "Orders": "注文", + "Others": "その他", + "Owner": "所属会社", + "Parameters": "パラメータ設定", + "PARTNER_KEY": "パートナーキー", + "Pass Codes": "パスクード", + "Password": "パスワード", + "Payment & Invoice": "決済と発票", + "Payment Buffer Seconds": "決済バッファ秒数", + "Payment Config": "決済設定", + "Payment Configuration": "決済設定", + "Payment Configuration created successfully.": "決済設定が正常に作成されました。", + "Payment Configuration deleted successfully.": "決済設定が正常に削除されました。", + "Payment Configuration updated successfully.": "決済設定が正常に更新されました。", + "Permanent": "永久認可", + "Permanently Delete Account": "アカウントを永久に削除", + "Permission Settings": "権限設定", + "Permissions": "権限", + "permissions": "權限設定", + "Phone": "電話番号", + "Photo Slot": "写真スロット", + "PI_MERCHANT_ID": "Pi 拍錢包 加盟店ID", + "Pickup Codes": "受取コード", + "Please check the following errors:": "以下のエラーを確認してください:", + "Please check the form for errors.": "フォームにエラーがないか確認してください。", + "Point Rules": "ポイントルール", + "Point Settings": "ポイント設定", + "Previous": "前へ", + "Product Management": "商品管理", + "Product Reports": "商品レポート", + "Profile": "プロフィール", + "Profile Information": "プロフィール情報", + "Profile Settings": "個人設定", + "Profile updated successfully.": "プロフィールが正常に更新されました。", + "Promotions": "プロモーション", + "Protected": "保護されています", + "PS_MERCHANT_ID": "全盈+Pay 加盟店ID", + "Purchase Audit": "購入監査", + "Purchases": "購入", + "Questionnaire": "アンケート", + "Quick search...": "クイック検索...", + "Real-time monitoring across all machines": "全機台のリアルタイム監視", + "Real-time Operation Logs (Last 50)": "リアルタイム操作ログ (直近 50 件)", + "Real-time status monitoring": "リアルタイムステータス監視", + "Recent Login": "最近のログイン", + "remote": "リモート管理", + "Remote Change": "リモートお釣り", + "Remote Checkout": "リモート決済", + "Remote Dispense": "リモート出庫", + "Remote Lock": "リモートロック", + "Remote Management": "リモート管理", + "Remote Permissions": "リモート管理權限", + "Replenishment Audit": "補充監査", + "Replenishment Records": "補充記録", + "Replenishments": "補充", + "reservation": "予約システム", + "Reservation Members": "予約会員", + "Reservation System": "予約システム", + "Reservations": "予約", + "Returns": "返品", + "Role": "ロール", + "Role created successfully.": "ロールが正常に作成されました。", + "Role deleted successfully.": "ロールが正常に削除されました。", + "Role Management": "ロール權限管理", + "Role Name": "ロール名", + "Role name already exists in this company.": "この会社には同じ名前のロールが既に存在します。", + "Role not found.": "ロールが見つかりませんでした。", + "Role Permissions": "ロール權限", + "Role Settings": "ロール權限", + "Role Type": "ロールタイプ", + "Role updated successfully.": "ロールが正常に更新されました。", + "Roles": "ロール權限", + "roles": "ロール權限", + "Running Status": "稼働状況", + "sales": "販売管理", + "Sales Management": "販売管理", + "Sales Permissions": "販売管理権限", + "Sales Records": "販売記録", + "Save": "変更を保存", + "Save Changes": "変更を保存", + "Save Config": "設定を保存", + "Saved.": "保存されました", + "Search configurations...": "設定を検索...", + "Search customers...": "顧客を検索...", + "Search machines...": "機台を検索...", + "Search models...": "型番を検索...", + "Search roles...": "ロールを検索...", + "Search users...": "ユーザーを検索...", + "Select Company": "会社を選択", + "Select Model": "型番を選択", + "Select Owner": "所属会社を選択", + "Serial & Version": "シリアルとバージョン", + "Serial No": "機台シリアル番号", + "Serial Number": "シリアル番号", + "Show": "表示", + "Showing": "表示中", + "Showing :from to :to of :total items": ":total 件中 :from から :to 件を表示", + "Sign in to your account": "アカウントにサインイン", + "Signed in as": "ログイン中", + "Slot Mechanism (default: Conveyor, check for Spring)": "貨道メカニズム (デフォルト:コンベア、チェックでスプリング)", + "Some fields need attention": "一部のフィールドに注意が必要です", + "Special Permission": "特別権限", + "special-permission": "特別権限", + "Staff Stock": "スタッフ在庫", + "Status": "ステータス", + "Stock Management": "在庫管理", + "Store Gifts": "来店特典", + "Store ID": "加盟店ID (MerchantID)", + "Store Management": "店舗管理", + "StoreID": "加盟店ID (StoreID)", + "Sub Account Management": "サブアカウント管理", + "Sub Account Roles": "サブアカウントロール", + "Sub Accounts": "サブアカウント", + "Success": "成功", + "Super Admin": "スーパー管理者", + "Super-admin role cannot be assigned to tenant accounts.": "スーパー管理者ロールはテナントアカウントに割り当てることはできません。", + "Survey Analysis": "アンケート分析", + "SYSTEM": "システムレベル", + "System Level": "システムレベル", + "System Role": "システムロール", + "System role name cannot be modified.": "システムロール名は変更できません。", + "System roles cannot be deleted by tenant administrators.": "テナント管理者はシステムロールを削除できません。", + "System roles cannot be modified by tenant administrators.": "テナント管理者はシステムロールを変更できません。", + "System super admin accounts cannot be deleted.": "システムスーパー管理者アカウントは削除できません。", + "System super admin accounts cannot be modified via this interface.": "システムスーパー管理者アカウントはこのインターフェースからは変更できません。", + "Systems Initializing": "システム初期化中", + "TapPay Integration": "TapPay 統合決済", + "TapPay Integration Settings Description": "TapPay 決済連携設定", + "Tax ID (Optional)": "納税者番号 (任意)", + "Temperature": "温度", + "TermID": "端末ID (TermID)", + "The image is too large. Please upload an image smaller than 1MB.": "画像が大きすぎます。1MB未満の画像をアップロードしてください。", + "The Super Admin role cannot be deleted.": "スーパー管理者ロールは削除できません。", + "The Super Admin role is immutable.": "スーパー管理者ロールは変更できません。", + "The Super Admin role name cannot be modified.": "スーパー管理者のロール名は変更できません。", + "This role belongs to another company and cannot be assigned.": "このロールは他の会社に属しており、割り当てることはできません。", + "Time": "時間", + "Time Slots": "タイムスロット", + "Timer": "タイマー", + "Timestamp": "タイムスタンプ", + "to": "から", + "Today Cumulative Sales": "本日累計販売", + "Today's Transactions": "今日の取引額", + "Total Connected": "接続数合計", + "Total Customers": "顧客總數", + "Total items": "合計 :count 件", + "Total Logins": "總ログイン數", + "Transfer Audit": "転送監査", + "Transfers": "転送", + "Type": "タイプ", + "UI Elements": "UI要素", + "Unknown": "不明", + "Update": "更新", + "Update Customer": "顧客を更新", + "Update existing role and permissions.": "既存のロールと権限を更新します。", + "Update Password": "パスワードの更新", + "Update your account's profile information and email address.": "アカウントの氏名、電話番号、メールアドレスを更新します。", + "Upload New Images": "新しい写真をアップロード", + "Uploading new images will replace all existing images.": "新しい写真をアップロードすると、既存のすべての写真が置き換えられます。", + "User": "一般ユーザー", + "User Info": "ユーザー情報", + "Username": "ユーザー名", + "Users": "ユーザー数", + "Utilization Rate": "稼働率", + "Valid Until": "有効期限", + "Venue Management": "会場管理", + "View Details": "詳細表示", + "View Logs": "ログを表示", + "vs Yesterday": "前日比", + "Warehouse List": "倉庫リスト", + "Warehouse List (All)": "倉庫リスト(全)", + "Warehouse List (Individual)": "倉庫リスト(個)", + "Warehouse Management": "倉庫管理", + "Warehouse Permissions": "倉庫管理權限", + "warehouses": "倉庫管理", + "Warning": "警告", + "Warning: You are editing your own role!": "警告:現在使用中のロールを編集しています!", + "Welcome Gift": "会員登録特典", + "Yesterday": "昨日", + "You cannot assign permissions you do not possess.": "ご自身が所有していない権限を割り當てることはできません。", + "You cannot delete your own account.": "ご自身のアカウントは削除できません。", + "Your email address is unverified.": "メールアドレスが未確認です。", + "Your recent account activity": "最近のアカウントアクティビティ" } \ No newline at end of file diff --git a/lang/zh_TW.json b/lang/zh_TW.json index c836a70..3c5951a 100644 --- a/lang/zh_TW.json +++ b/lang/zh_TW.json @@ -1,419 +1,494 @@ { - "Account Settings": "帳戶設定", - "Manage your profile information, security settings, and login history": "管理您的個人資訊、安全設定與登入紀錄", - "Profile Information": "個人基本資料", - "Update your account's profile information and email address.": "更新您的帳號姓名、手機號碼與電子郵件地址。", - "Update Password": "更改密碼", - "Ensure your account is using a long, random password to stay secure.": "確保您的帳號使用了足夠強度的隨機密碼以維持安全。", - "Delete Account": "刪除帳號", - "Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.": "一旦您的帳號被刪除,其所有資源和數據將被永久刪除。在刪除帳號之前,請下載您希望保留的任何數據或資訊。", - "Are you sure you want to delete your account?": "您確定要刪除您的帳號嗎?", - "Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "帳號一旦刪除,所有關連數據將被永久移除。請輸入您的密碼以確認您希望永久刪除此帳號。", - "Login History": "登入歷史", - "Name": "姓名", - "Phone": "手機號碼", - "Email": "電子郵件", - "Current Password": "當前密碼", - "New Password": "新密碼", - "Confirm Password": "確認新密碼", - "Save": "儲存變更", - "Saved.": "已儲存", - "Update": "更新", - "Cancel": "取消", - "Confirm": "確認", - "Danger Zone: Delete Account": "危險區域:刪除帳號", - "Permanently Delete Account": "永久刪除帳號", - "Password": "密碼", - "Enter your password to confirm": "請輸入您的密碼以確認", - "Dashboard": "儀表板", - "Connectivity Status": "連線狀態概況", - "Real-time status monitoring": "即時監控機台連線動態", - "LIVE": "實時", - "Online Machines": "在線機台", - "Offline Machines": "離線機台", - "Alerts Pending": "待處理告警", - "Total Connected": "總計連線數", - "Monthly Transactions": "本月交易統計", - "Monthly cumulative revenue overview": "本月累計營收概況", - "Today's Transactions": "今日交易額", - "vs Yesterday": "較昨日", - "Yesterday": "昨日", - "Day Before": "前日", - "Machine Status List": "機台運行狀態列表", - "Total items": "總計 :count 項", - "Real-time monitoring across all machines": "跨機台即時狀態監控", - "Quick search...": "快速搜尋...", - "Machine Info": "機台資訊", - "Running Status": "運行狀態", - "Today Cumulative Sales": "今日累積銷售", - "Current Stock": "當前庫存", - "Last Signal": "最後訊號時間", - "Alert Summary": "告警摘要", - "No alert summary": "暫無告警記錄", - "No data available": "暫無資料", - "Showing :from to :to of :total items": "顯示第 :from 到 :to 項,共 :total 項", - "Previous": "上一頁", - "Next": "下一頁", - "Profile Settings": "個人設定", - "Profile": "個人檔案", - "Member Management": "會員管理", - "Member List": "會員列表", - "Membership Tiers": "會員等級", - "Deposit Bonus": "儲值回饋", - "Point Rules": "點數規則", - "Gift Definitions": "禮品設定", - "Machine Management": "機台管理", - "Machine Logs": "機台日誌", - "Machine List": "機台列表", - "Machine Permissions": "機台權限", - "Utilization Rate": "機台稼動率", - "Expiry Management": "效期管理", - "Maintenance Records": "維修管理單", - "APP Management": "APP管理", - "UI Elements": "UI元素", - "Helper": "小幫手", - "Questionnaire": "問卷", - "Games": "互動遊戲", - "Timer": "計時器", - "Warehouse Management": "倉庫管理", - "Warehouse List (All)": "倉庫列表(全)", - "Warehouse List (Individual)": "倉庫列表(個)", - "Stock Management": "庫存管理單", - "Transfers": "調撥單", - "Purchases": "採購單", - "Replenishments": "機台補貨單", - "Replenishment Records": "機台補貨紀錄", - "Machine Stock": "機台庫存", - "Staff Stock": "人員庫存", - "Returns": "回庫單", - "Sales Management": "銷售管理", - "Sales Records": "銷售紀錄", - "Pickup Codes": "取貨碼", - "Orders": "購買單", - "Promotions": "促銷時段", - "Pass Codes": "通行碼", - "Store Gifts": "來店禮", - "Analysis Management": "分析管理", - "Change Stock": "零錢庫存", - "Machine Reports": "機台報表", - "Product Reports": "商品報表", - "Survey Analysis": "問卷分析", - "Audit Management": "稽核管理", - "Purchase Audit": "採購單", - "Transfer Audit": "調撥單", - "Replenishment Audit": "補貨單", - "Data Configuration": "資料設定", - "Product Management": "商品管理", - "Advertisement Management": "廣告管理", - "Admin Sellable Products": "管理者可賣", + "A new verification link has been sent to your email address.": "已將新的驗證連結發送至您的電子郵件地址。", + "Account created successfully.": "帳號已成功建立。", + "Account deleted successfully.": "帳號已成功刪除。", "Account Management": "帳號管理", - "Sub Accounts": "子帳號", - "Sub Account Roles": "子帳號角色", - "Point Settings": "點數設定", - "Badge Settings": "識別證", - "Remote Management": "遠端管理", - "Machine Restart": "機台重啟", - "Card Reader Restart": "卡機重啟", - "Remote Checkout": "遠端結帳", - "Remote Lock": "遠端鎖定", - "Remote Change": "遠端找零", - "Remote Dispense": "遠端出貨", - "Line Management": "Line管理", - "Line Members": "Line會員", - "Line Machines": "Line機台", - "Line Products": "Line商品", - "Line Official Account": "Line生活圈", - "Line Orders": "Line訂單", - "Line Coupons": "Line優惠券", - "Reservation System": "預約系統", - "Reservation Members": "預約會員", - "Store Management": "店家管理", - "Time Slots": "時段組合", - "Venue Management": "場地管理", - "Coupons": "優惠券", - "Reservations": "預約管理", - "Order Management": "訂單管理", - "Special Permission": "特殊權限", - "Clear Stock": "庫存清空", - "APK Versions": "APK版本", - "Discord Notifications": "Discord通知", - "Basic Settings": "基本設定", - "Machine Settings": "機台設定", - "Permission Settings": "權限設定", - "APP Features": "APP功能", - "Sales": "銷售管理", - "Others": "其他功能", - "AI Prediction": "AI智能預測", - "Roles": "角色權限", - "Role Management": "角色權限管理", - "Define and manage security roles and permissions.": "定義並管理系統安全角色與權限。", - "Search roles...": "搜尋角色...", - "No permissions": "無權限項目", - "No roles found.": "找不到角色資料。", - "Create Role": "建立角色", - "Edit Role": "編輯角色", - "Update existing role and permissions.": "更新現有角色與權限設定。", - "Create a new role and assign permissions.": "建立新角色並分配對應權限。", - "Enter role name": "請輸入角色名稱", - "Add Role": "新增角色", - "Role Name": "角色名稱", - "Type": "類型", - "Permissions": "權限", - "Users": "帳號數", - "System role name cannot be modified.": "內建系統角色的名稱無法修改。", - "The Super Admin role name cannot be modified.": "超級管理員角色的名稱無法修改。", - "System Level": "系統層級", - "Company Level": "客戶層級", - "Global roles accessible by all administrators.": "適用於所有管理者的全域角色。", - "Roles scoped to specific customer companies.": "適用於各個客戶單位的特定角色。", - "members": "會員管理", - "machines": "機台管理", - "app": "APP 管理", - "warehouses": "倉庫管理", - "sales": "銷售管理", - "analysis": "分析管理", - "audit": "稽核管理", - "data-config": "資料設定", - "remote": "遠端管理", - "line": "Line 管理", - "reservation": "預約系統", - "special-permission": "特殊權限", - "companies": "客戶管理", - "accounts": "帳號管理", - "roles": "角色權限", - "Role Permissions": "角色權限", - "Role Settings": "角色權限", - "No login history yet": "尚無登入紀錄", - "Signed in as": "登入身份", - "Logout": "登出", - "Joined": "加入日期", - "Recent Login": "最近登入", - "Total Logins": "總登入次數", + "Account Settings": "帳戶設定", "Account Status": "帳號狀態", - "Active": "使用中", - "Customer Management": "客戶管理", - "Manage all tenant accounts and validity": "管理所有租戶帳號與合約效期", - "Add Customer": "新增客戶", - "Total Customers": "客戶總數", - "Expired / Disabled": "已過期 / 停用", - "Search customers...": "搜尋客戶...", - "All": "全部", - "Disabled": "已停用", - "Customer Info": "客戶資訊", + "Account updated successfully.": "帳號已成功更新。", + "accounts": "帳號管理", "Accounts / Machines": "帳號 / 機台", - "Valid Until": "合約到期日", - "Actions": "操作", - "Permanent": "永久授權", - "Are you sure to delete this customer?": "您確定要刪除此客戶嗎?", - "No customers found": "找不到客戶資料", - "Edit Customer": "編輯客戶", - "Update Customer": "更新客戶", - "Create": "建立", - "Company Name": "公司名稱", - "Company Code": "公司代碼", - "Tax ID (Optional)": "統一編號 (選填)", - "Status": "狀態", - "Contact Name": "聯絡人姓名", - "Contact Phone": "聯絡人電話", - "Contact Email": "聯絡人信箱", - "Notes": "備註", - "Customer created successfully.": "客戶新增成功", - "Customer updated successfully.": "客戶更新成功", - "Customer deleted successfully.": "客戶刪除成功", - "Cannot delete company with active accounts.": "無法刪除仍有帳號的客戶", - "Contract Until (Optional)": "合約到期日 (選填)", - "Company Information": "公司資訊", - "Initial Admin Account": "初始管理帳號", - "Optional": "選填", - "Username": "使用者帳號", - "Enter login ID": "請輸入登入帳號", - "Min 8 characters": "至少 8 個字元", - "Admin display name": "管理員顯示名稱", - "Initial Role": "初始角色", - "Contact & Details": "聯絡資訊與詳情", - "e.g. Taiwan Star": "例如:台灣之星", - "e.g. TWSTAR": "例如:TWSTAR", - "Manage administrative and tenant accounts": "管理系統管理者與租戶帳號", - "Add Account": "新增帳號", - "All Companies": "所有公司", - "User Info": "用戶資訊", - "Company": "所屬客戶", - "Belongs To": "所屬單位", - "Role": "角色", - "SYSTEM": "系統層級", - "No users found": "找不到用戶資料", - "Data Configuration Permissions": "資料設定權限", - "Sales Permissions": "銷售管理權限", - "Machine Management Permissions": "機台管理權限", - "Warehouse Permissions": "倉庫管理權限", - "Analysis Permissions": "分析管理權限", - "Audit Permissions": "稽核管理權限", - "Remote Permissions": "遠端管理權限", - "Line Permissions": "Line 管理權限", - "Save Changes": "儲存變更", - "User": "一般用戶", - "Admin": "管理員", - "Super Admin": "超級管理員", - "e.g. John Doe": "例如:張曉明", - "e.g. johndoe": "例如:xiaoming", - "Search users...": "搜尋用戶...", - "Admin Name": "管理員姓名", - "New Password (leave blank to keep current)": "新密碼 (若不修改請留空)", - "Are you sure you want to delete this account?": "您確定要刪除此帳號嗎?", - "Show": "顯示", - "to": "至", - "of": "總計", - "items": "筆項目", - "Showing": "顯示第", - "Full Name": "全名", - "super-admin": "超級管理員", - "admin": "管理員", - "user": "一般用戶", - "Product Status": "商品狀態", - "Monitor events and system activity across your vending fleet.": "跨機台連線動態與系統日誌監控。", - "All Machines": "所有機台", - "All Levels": "所有層級", - "Timestamp": "時間戳記", - "Message Content": "日誌內容", - "No matching logs found": "找不到符合條件的日誌", - "Unknown": "未知", - "Info": "一般", - "Warning": "警告", - "Error": "異常", - "Management of operational parameters": "機台運作參數管理", - "Add Machine": "新增機台", - "Search machines...": "搜尋機台...", - "Items": "個項目", - "Machine Name": "機台名稱", - "Serial No": "機台序號", - "Owner": "所屬公司", - "Model": "機台型號", "Action": "操作", - "No location set": "尚未設定位置", - "Edit Settings": "編輯設定", - "Enter machine name": "請輸入機台名稱", - "Enter serial number": "請輸入機台序號", - "Select Owner": "選擇所屬公司", - "Select Model": "選擇型號", - "Customer Payment Config": "客戶金流設定", - "Not Used": "不使用", - "Edit Machine Settings": "編輯機台設定", - "Operational Parameters": "運作參數", - "Card Reader Seconds": "刷卡機秒數", - "Payment Buffer Seconds": "金流緩衝時間(s)", - "Checkout Time 1": "卡機結帳時間1", - "Checkout Time 2": "卡機結帳時間2", - "Heating Start Time": "開啟-加熱時間", - "Heating End Time": "關閉-加熱時間", - "Hardware & Slots": "硬體與貨道", - "Card Reader No": "刷卡機編號", - "Key No": "鑰匙編號", - "Slot Mechanism (default: Conveyor, check for Spring)": "貨道機制 (預設履帶,勾選為彈簧)", - "Payment & Invoice": "金流與發票", - "Invoice Status": "發票開立狀態", - "No Invoice": "不開立發票", - "Default Donate": "預設捐贈", - "Default Not Donate": "預設不捐贈", - "Member & External": "會員與外部系統", - "Welcome Gift": "註冊成效禮", - "Enabled/Disabled": "啟用/停用", - "Member System": "會員系統", - "Payment Configuration": "客戶金流設定", - "Merchant payment gateway settings management": "特約商店支付網關參數管理", - "Create Config": "建立配置", - "Config Name": "配置名稱", - "Last Updated": "最後更新日期", - "Are you sure you want to delete this configuration?": "您確定要刪除此金流配置嗎?", - "Create Payment Config": "建立金流配置", - "Define new third-party payment parameters": "定義新的第三方支付介接參數", - "Save Config": "儲存配置", - "Configuration Name": "金流組合名稱", - "Belongs To Company": "所屬客戶公司", - "ECPay Invoice": "綠界發票", - "Store ID": "特約商店代號 (MerchantID)", - "HashKey": "HashKey", - "HashIV": "HashIV", - "E.SUN QR Scan": "玉山掃碼", - "StoreID": "商店代號 (StoreID)", - "TermID": "終端代號 (TermID)", - "Key": "金鑰 (Key)", - "LINE Pay Direct": "Line官方支付", - "ChannelId": "ChannelId", - "ChannelSecret": "ChannelSecret", - "TapPay Integration": "TapPay 整合支付", - "PARTNER_KEY": "PARTNER_KEY", + "Actions": "操作", + "Active": "使用中", + "Add Account": "新增帳號", + "Add Customer": "新增客戶", + "Add Machine": "新增機台", + "Add Machine Model": "新增機台型號", + "Add Role": "新增角色", + "Admin": "管理員", + "admin": "管理員", + "Admin display name": "管理員顯示名稱", + "Admin Name": "管理員姓名", + "Admin Sellable Products": "管理者可賣", + "Administrator": "管理員", + "Advertisement Management": "廣告管理", + "Affiliation": "所屬單位", + "AI Prediction": "AI智能預測", + "Alert Summary": "告警摘要", + "Alerts Pending": "待處理告警", + "All": "全部", + "All Affiliations": "全部單位", + "All Companies": "所有公司", + "All Levels": "所有層級", + "All Machines": "所有機台", + "All Times System Timezone": "所有時間為系統時區", + "analysis": "分析管理", + "Analysis Management": "分析管理", + "Analysis Permissions": "分析管理權限", + "API Token": "API 金鑰", + "APK Versions": "APK版本", + "app": "APP 管理", + "APP Features": "APP功能", + "APP Management": "APP管理", "APP_ID": "APP_ID", "APP_KEY": "APP_KEY", - "Merchant IDs": "商店代號群", - "LINE_MERCHANT_ID": "LINE Pay 商店代號", - "JKO_MERCHANT_ID": "街口支付 商店代號", - "PI_MERCHANT_ID": "Pi 拍錢包 商店代號", - "PS_MERCHANT_ID": "全盈+Pay 商店代號", - "EASY_MERCHANT_ID": "悠遊付 商店代號", - "basic-settings": "基本設定", - "permissions": "權限設定", - "Edit Payment Config": "編輯金流配置", - "Machine Model Settings": "機台型號設定", - "Machine Model": "機台型號", - "Model Name": "型號名稱", - "Machine Count": "機台數量", - "Add Machine Model": "新增機台型號", - "Edit Machine Model": "編輯機台型號", - "Machine model created successfully.": "機台型號已成功建立。", - "Machine model updated successfully.": "機台型號已成功更新。", - "Machine model deleted successfully.": "機台型號已成功刪除。", - "Cannot delete model that is currently in use by machines.": "無法刪除目前正在被機台使用的型號。", - "Machine Details": "機台詳情", - "Create Machine": "新增機台", - "Edit Machine": "編輯機台", - "Basic Information": "基本資訊", - "Location": "位置", - "Temperature": "溫度", - "Firmware Version": "韌體版本", - "Last Heartbeat": "最後心跳時間", - "Never Connected": "從未連線", - "View Logs": "查看日誌", - "Real-time Operation Logs (Last 50)": "即時操作日誌 (最後 50 筆)", - "All Times System Timezone": "所有時間為系統時區", - "Level": "層級", - "Logs": "日誌", - "Time": "時間", - "Message": "訊息", - "Online": "線上", - "Offline": "離線", - "Connecting...": "連線中", - "No logs found": "暫無相關日誌", - "Management of operational parameters and models": "管理運作參數與型號", - "ECPay Invoice Settings Description": "綠界科技電子發票設定", - "E.SUN QR Scan Settings Description": "玉山銀行掃碼支付設定", - "LINE Pay Direct Settings Description": "LINE Pay 官方直連設定", - "TapPay Integration Settings Description": "喬睿科技支付串接設定", - "Parameters": "參數設定", - "Hardware & Network": "硬體與網路", - "Serial & Version": "序號與版本", - "Heartbeat": "心跳狀態", - "Heating Range": "加熱時段", - "API Token": "API 金鑰", - "Close Panel": "關閉面板", - "Operations": "運作設定", - "Payment Config": "金流配置", - "Machine Images": "機台照片", - "No images uploaded": "尚未上傳照片", - "Upload New Images": "上傳新照片", - "Max 3": "最多 3 張", - "Uploading new images will replace all existing images.": "上傳新照片將會取代所有現有照片。", - "Search models...": "搜尋型號...", - "Card Reader": "刷卡機", - "View Details": "查看詳情", + "Are you sure to delete this customer?": "您確定要刪除此客戶嗎?", + "Are you sure you want to delete this account?": "您確定要刪除此帳號嗎?", + "Are you sure you want to delete this account? This action cannot be undone.": "確定要刪除此帳號嗎?此操作無法復原。", + "Are you sure you want to delete this configuration?": "您確定要刪除此金流配置嗎?", + "Are you sure you want to delete this configuration? This action cannot be undone.": "您確定要刪除此金流配置嗎?此操作將無法復原。", + "Are you sure you want to delete this item? This action cannot be undone.": "確定要刪除此項目嗎?此操作無法復原。", + "Are you sure you want to delete this role? This action cannot be undone.": "您確定要刪除此角色嗎?此操作將無法復原。", + "Are you sure you want to delete your account?": "您確定要刪除您的帳號嗎?", + "Are you sure you want to proceed? This action cannot be undone.": "您確定要繼續嗎?此操作將無法復原。", "Are you sure?": "確定要執行此操作嗎?", - "Machines": "機台列表", - "Models": "型號列表", - "Edit": "編輯", + "audit": "稽核管理", + "Audit Management": "稽核管理", + "Audit Permissions": "稽核管理權限", + "Avatar updated successfully.": "頭像已成功更新。", + "Badge Settings": "識別證", + "Basic Information": "基本資訊", + "Basic Settings": "基本設定", + "basic-settings": "基本設定", + "Belongs To": "所屬公司", + "Belongs To Company": "所屬公司", + "Cancel": "取消", + "Cannot delete company with active accounts.": "無法刪除仍有帳號的客戶", + "Cannot delete model that is currently in use by machines.": "無法刪除目前正在被機台使用的型號。", + "Cannot Delete Role": "無法刪除該角色", + "Cannot delete role with active users.": "無法刪除已有綁定帳號的角色。", + "Card Reader": "刷卡機", + "Card Reader No": "刷卡機編號", + "Card Reader Restart": "卡機重啟", + "Card Reader Seconds": "刷卡機秒數", + "Change": "更換", + "Change Stock": "零錢庫存", + "ChannelId": "ChannelId", + "ChannelSecret": "ChannelSecret", + "Checkout Time 1": "卡機結帳時間1", + "Checkout Time 2": "卡機結帳時間2", + "Clear Stock": "庫存清空", + "Click here to re-send the verification email.": "點擊此處重新發送驗證郵件。", + "Click to upload": "點擊上傳", + "Close Panel": "關閉面板", + "companies": "客戶管理", + "Company": "所屬客戶", + "Company Code": "公司代碼", + "Company Information": "公司資訊", + "Company Level": "客戶層級", + "Company Name": "公司名稱", + "Config Name": "配置名稱", + "Configuration Name": "配置名稱", + "Confirm": "確認", + "Confirm Deletion": "確認刪除資料", + "Confirm Password": "確認新密碼", + "Connecting...": "連線中", + "Connectivity Status": "連線狀態概況", + "Contact & Details": "聯絡資訊與詳情", + "Contact Email": "聯絡人信箱", + "Contact Name": "聯絡人姓名", + "Contact Phone": "聯絡人電話", + "Contract Until (Optional)": "合約到期日 (選填)", + "Coupons": "優惠券", + "Create": "建立", + "Create a new role and assign permissions.": "建立新角色並分配對應權限。", + "Create Config": "建立配置", + "Create Machine": "新增機台", + "Create Payment Config": "新增金流配置", + "Create Role": "建立角色", + "Current Password": "當前密碼", + "Current Stock": "當前庫存", + "Customer created successfully.": "客戶新增成功", + "Customer deleted successfully.": "客戶刪除成功", + "Customer Info": "客戶資訊", + "Customer Management": "客戶管理", + "Customer Payment Config": "客戶金流設定", + "Customer updated successfully.": "客戶更新成功", + "Danger Zone: Delete Account": "危險區域:刪除帳號", + "Dashboard": "儀表板", + "Data Configuration": "資料設定", + "Data Configuration Permissions": "資料設定權限", + "data-config": "資料設定", + "Day Before": "前日", + "Default Donate": "預設捐贈", + "Default Not Donate": "預設不捐贈", + "Define and manage security roles and permissions.": "定義並管理系統安全角色與權限。", + "Define new third-party payment parameters": "定義新的第三方支付參數", "Delete": "刪除", - "None": "無", - "Select Company": "選擇所屬公司", + "Delete Account": "刪除帳號", + "Delete Permanently": "確認永久刪除資料", + "Deposit Bonus": "儲值回饋", + "Detail": "詳細", + "Disabled": "已停用", + "Discord Notifications": "Discord通知", + "e.g. John Doe": "例如:張曉明", + "e.g. johndoe": "例如:xiaoming", + "e.g. Taiwan Star": "例如:台灣之星", + "e.g. TWSTAR": "例如:TWSTAR", "e.g., Company Standard Pay": "例如:公司標準支付", - "Photo Slot": "照片欄位", + "e.g., Taipei Station": "例如:台北車站", + "E.SUN QR Scan": "玉山銀行標籤支付", + "E.SUN QR Scan Settings Description": "玉山銀行掃碼支付設定", + "EASY_MERCHANT_ID": "悠遊付 商店代號", + "ECPay Invoice": "綠界電子發票", + "ECPay Invoice Settings Description": "綠界科技電子發票設定", + "Edit": "編輯", + "Edit Account": "編輯帳號", + "Edit Customer": "編輯客戶", + "Edit Machine": "編輯機台", + "Edit Machine Model": "編輯機台型號", + "Edit Machine Settings": "編輯機台設定", + "Edit Payment Config": "編輯金流配置", + "Edit Role": "編輯角色", + "Edit Settings": "編輯設定", + "Email": "電子郵件", + "Enabled/Disabled": "啟用/停用", + "Ensure your account is using a long, random password to stay secure.": "確保您的帳號使用了足夠強度的隨機密碼以維持安全。", + "Enter login ID": "請輸入登入帳號", + "Enter machine location": "請輸入機台地點", + "Enter machine name": "請輸入機台名稱", + "Enter model name": "請輸入型號名稱", + "Enter role name": "請輸入角色名稱", + "Enter serial number": "請輸入機台序號", + "Enter your password to confirm": "請輸入您的密碼以確認", + "Error": "異常", + "Expired / Disabled": "已過期 / 停用", + "Expiry Management": "效期管理", + "Failed to update machine images: ": "更新機台圖片失敗:", + "files selected": "個檔案已選擇", + "Firmware Version": "韌體版本", + "Full Name": "全名", + "Games": "互動遊戲", + "Gift Definitions": "禮品設定", + "Global roles accessible by all administrators.": "適用於所有管理者的全域角色。", + "Got it": "知道了", + "Hardware & Network": "硬體與網路", + "Hardware & Slots": "硬體與貨道", + "HashIV": "HashIV", + "HashKey": "HashKey", + "Heartbeat": "心跳狀態", + "Heating End Time": "關閉-加熱時間", + "Heating Range": "加熱時段", + "Heating Start Time": "開啟-加熱時間", + "Helper": "小幫手", + "Info": "一般", + "Initial Admin Account": "初始管理帳號", + "Initial Role": "初始角色", + "Invoice Status": "發票開立狀態", + "items": "筆項目", + "Items": "個項目", + "JKO_MERCHANT_ID": "街口支付 商店代號", + "john@example.com": "john@example.com", + "Joined": "加入日期", + "Key": "金鑰 (Key)", + "Key No": "鑰匙編號", + "Last Heartbeat": "最後心跳時間", + "Last Signal": "最後訊號時間", + "Last Updated": "最後更新日期", + "Level": "層級", + "line": "Line 管理", + "Line Coupons": "Line優惠券", + "Line Machines": "Line機台", + "Line Management": "Line管理", + "Line Members": "Line會員", + "Line Official Account": "Line生活圈", + "Line Orders": "Line訂單", + "LINE Pay Direct": "LINE Pay 官方直連", + "LINE Pay Direct Settings Description": "LINE Pay 官方直連設定", + "Line Permissions": "Line 管理權限", + "Line Products": "Line商品", + "LINE_MERCHANT_ID": "LINE Pay 商店代號", + "LIVE": "實時", + "Location": "位置", + "Login History": "登入歷史", + "Logout": "登出", + "Logs": "日誌", + "Machine Count": "機台數量", + "Machine created successfully.": "機台已成功建立。", + "Machine Details": "機台詳情", + "Machine Images": "機台照片", + "Machine images updated successfully.": "機台圖片已成功更新。", + "Machine Info": "機台資訊", + "Machine List": "機台列表", + "Machine Logs": "機台日誌", + "Machine Management": "機台管理", + "Machine Management Permissions": "機台管理權限", + "Machine Model": "機台型號", + "Machine model created successfully.": "機台型號已成功建立。", + "Machine model deleted successfully.": "機台型號已成功刪除。", + "Machine Model Settings": "機台型號設定", + "Machine model updated successfully.": "機台型號已成功更新。", + "Machine Name": "機台名稱", + "Machine Permissions": "機台權限", + "Machine Reports": "機台報表", + "Machine Restart": "機台重啟", + "Machine Settings": "機台設定", + "Machine settings updated successfully.": "機台設定已成功更新。", + "Machine Status List": "機台運行狀態列表", + "Machine Stock": "機台庫存", + "machines": "機台管理", + "Machines": "機台列表", + "Maintenance Records": "維修管理單", + "Manage administrative and tenant accounts": "管理系統管理者與租戶帳號", + "Manage all tenant accounts and validity": "管理所有租戶帳號與合約效期", + "Manage your profile information, security settings, and login history": "管理您的個人資訊、安全設定與登入紀錄", + "Management of operational parameters": "機台運作參數管理", + "Management of operational parameters and models": "管理運作參數與型號", + "Max 3": "最多 3 張", + "Member & External": "會員與外部系統", + "Member List": "會員列表", + "Member Management": "會員管理", + "Member System": "會員系統", + "members": "會員管理", + "Membership Tiers": "會員等級", + "Menu Permissions": "選單權限", + "Merchant IDs": "特店代號清單", + "Merchant payment gateway settings management": "特約商店支付網關參數管理", + "Message": "訊息", + "Message Content": "日誌內容", + "Min 8 characters": "至少 8 個字元", + "Model": "機台型號", + "Model Name": "型號名稱", + "Models": "型號列表", + "Modifying your own administrative permissions may result in losing access to certain system functions.": "修改自身管理權限可能導致失去對部分系統功能的控制權。", + "Monitor events and system activity across your vending fleet.": "跨機台連線動態與系統日誌監控。", + "Monthly cumulative revenue overview": "本月累計營收概況", + "Monthly Transactions": "本月交易統計", + "Name": "姓名", + "Never Connected": "從未連線", + "New Password": "新密碼", + "New Password (leave blank to keep current)": "新密碼 (若不修改請留空)", + "Next": "下一頁", + "No accounts found": "找不到帳號資料", + "No alert summary": "暫無告警記錄", + "No configurations found": "暫無相關配置", + "No customers found": "找不到客戶資料", + "No data available": "暫無資料", + "No file uploaded.": "未上傳任何檔案。", + "No images uploaded": "尚未上傳照片", + "No Invoice": "不開立發票", + "No location set": "尚未設定位置", + "No login history yet": "尚無登入紀錄", + "No logs found": "暫無相關日誌", + "No matching logs found": "找不到符合條件的日誌", + "No permissions": "無權限項目", + "No roles found.": "找不到角色資料。", + "No users found": "找不到用戶資料", + "None": "無", + "Not Used": "不使用", + "Not Used Description": "不使用第三方支付介接", + "Notes": "備註", + "of": "總計", + "Offline": "離線", + "Offline Machines": "離線機台", + "Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.": "一旦您的帳號被刪除,其所有資源和數據將被永久刪除。在刪除帳號之前,請下載您希望保留的任何數據或資訊。", + "Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "帳號一旦刪除,所有關連數據將被永久移除。請輸入您的密碼以確認您希望永久刪除此帳號。", + "Online": "線上", + "Online Machines": "在線機台", + "Only system roles can be assigned to platform administrative accounts.": "僅系統角色可指派給平台管理帳號。", + "Operational Parameters": "運作參數", + "Operations": "運作設定", "Optimized for display. Supported formats: JPG, PNG, WebP.": "已針對顯示進行優化。支援格式:JPG, PNG, WebP。", - "Change": "更換" + "Optional": "選填", + "Order Management": "訂單管理", + "Orders": "購買單", + "Others": "其他功能", + "Owner": "所屬公司", + "Parameters": "參數設定", + "PARTNER_KEY": "PARTNER_KEY", + "Pass Codes": "通行碼", + "Password": "密碼", + "Password updated successfully.": "密碼已成功變更。", + "Payment & Invoice": "金流與發票", + "Payment Buffer Seconds": "金流緩衝時間(s)", + "Payment Config": "金流配置", + "Payment Configuration": "客戶金流設定", + "Payment Configuration created successfully.": "金流設定已成功建立。", + "Payment Configuration deleted successfully.": "金流設定已成功刪除。", + "Payment Configuration updated successfully.": "金流設定已成功更新。", + "Permanent": "永久授權", + "Permanently Delete Account": "永久刪除帳號", + "Permission Settings": "權限設定", + "Permissions": "權限", + "permissions": "權限設定", + "Phone": "手機號碼", + "Photo Slot": "照片欄位", + "PI_MERCHANT_ID": "Pi 拍錢包 商店代號", + "Pickup Codes": "取貨碼", + "Please check the following errors:": "請檢查以下錯誤:", + "Please check the form for errors.": "請檢查欄位內容是否正確。", + "Point Rules": "點數規則", + "Point Settings": "點數設定", + "Previous": "上一頁", + "Product Management": "商品管理", + "Product Reports": "商品報表", + "Product Status": "商品狀態", + "Profile": "個人檔案", + "Profile Information": "個人基本資料", + "Profile Settings": "個人設定", + "Profile updated successfully.": "個人資料已成功更新。", + "Promotions": "促銷時段", + "Protected": "受保護", + "PS_MERCHANT_ID": "全盈+Pay 商店代號", + "Purchase Audit": "採購單", + "Purchases": "採購單", + "Questionnaire": "問卷", + "Quick search...": "快速搜尋...", + "Real-time monitoring across all machines": "跨機台即時狀態監控", + "Real-time Operation Logs (Last 50)": "即時操作日誌 (最後 50 筆)", + "Real-time status monitoring": "即時監控機台連線動態", + "Recent Login": "最近登入", + "remote": "遠端管理", + "Remote Change": "遠端找零", + "Remote Checkout": "遠端結帳", + "Remote Dispense": "遠端出貨", + "Remote Lock": "遠端鎖定", + "Remote Management": "遠端管理", + "Remote Permissions": "遠端管理權限", + "Replenishment Audit": "補貨單", + "Replenishment Records": "機台補貨紀錄", + "Replenishments": "機台補貨單", + "reservation": "預約系統", + "Reservation Members": "預約會員", + "Reservation System": "預約系統", + "Reservations": "預約管理", + "Returns": "回庫單", + "Role": "角色", + "Role created successfully.": "角色已成功建立。", + "Role deleted successfully.": "角色已成功刪除。", + "Role Management": "角色權限管理", + "Role Name": "角色名稱", + "Role name already exists in this company.": "該公司已存在相同名稱的角色。", + "Role not found.": "角色不存在。", + "Role Permissions": "角色權限", + "Role Settings": "角色權限", + "Role Type": "角色類型", + "Role updated successfully.": "角色已成功更新。", + "Roles": "角色權限", + "roles": "角色權限", + "Roles scoped to specific customer companies.": "適用於各個客戶單位的特定角色。", + "Running Status": "運行狀態", + "Sales": "銷售管理", + "sales": "銷售管理", + "Sales Management": "銷售管理", + "Sales Permissions": "銷售管理權限", + "Sales Records": "銷售紀錄", + "Save": "儲存變更", + "Save Changes": "儲存變更", + "Save Config": "儲存配置", + "Saved.": "已儲存", + "Search configurations...": "搜尋設定...", + "Search customers...": "搜尋客戶...", + "Search machines...": "搜尋機台...", + "Search models...": "搜尋型號...", + "Search roles...": "搜尋角色...", + "Search users...": "搜尋用戶...", + "Select Company": "選擇所屬公司", + "Select Model": "選擇型號", + "Select Owner": "選擇所屬公司", + "Serial & Version": "序號與版本", + "Serial No": "機台序號", + "Serial Number": "機台序號", + "Show": "顯示", + "Showing": "顯示第", + "Showing :from to :to of :total items": "顯示第 :from 到 :to 項,共 :total 項", + "Sign in to your account": "隨時隨地掌控您的業務。", + "Signed in as": "登入身份", + "Slot Mechanism (default: Conveyor, check for Spring)": "貨道機制 (預設履帶,勾選為彈簧)", + "Some fields need attention": "部分欄位需要注意", + "Special Permission": "特殊權限", + "special-permission": "特殊權限", + "Staff Stock": "人員庫存", + "Status": "狀態", + "Stock Management": "庫存管理單", + "Store Gifts": "來店禮", + "Store ID": "商店代號", + "Store Management": "店家管理", + "StoreID": "商店代號 (StoreID)", + "Sub Account Management": "子帳號管理", + "Sub Account Roles": "子帳號角色", + "Sub Accounts": "子帳號", + "Success": "成功", + "Super Admin": "超級管理員", + "super-admin": "超級管理員", + "Super-admin role cannot be assigned to tenant accounts.": "超級管理員角色無法指派給租戶帳號。", + "Survey Analysis": "問卷分析", + "SYSTEM": "系統層級", + "System Level": "系統層級", + "System Role": "系統角色", + "System role name cannot be modified.": "內建系統角色的名稱無法修改。", + "System roles cannot be deleted by tenant administrators.": "租戶管理員無法刪除系統角色。", + "System roles cannot be modified by tenant administrators.": "租戶管理員無法修改系統角色。", + "System super admin accounts cannot be deleted.": "系統超級管理員帳號無法刪除。", + "System super admin accounts cannot be modified via this interface.": "系統超級管理員帳號無法透過此介面修改。", + "Systems Initializing": "系統初始化中", + "TapPay Integration": "TapPay 支付串接", + "TapPay Integration Settings Description": "喬睿科技支付串接設定", + "Tax ID (Optional)": "統一編號 (選填)", + "Temperature": "溫度", + "TermID": "終端代號 (TermID)", + "The image is too large. Please upload an image smaller than 1MB.": "圖片檔案太大,請上傳小於 1MB 的圖片。", + "The Super Admin role cannot be deleted.": "超級管理員角色不可刪除。", + "The Super Admin role is immutable.": "超級管理員角色不可修改。", + "The Super Admin role name cannot be modified.": "超級管理員角色的名稱無法修改。", + "This role belongs to another company and cannot be assigned.": "此角色屬於其他公司,無法指派。", + "Time": "時間", + "Time Slots": "時段組合", + "Timer": "計時器", + "Timestamp": "時間戳記", + "to": "至", + "Today Cumulative Sales": "今日累積銷售", + "Today's Transactions": "今日交易額", + "Total Connected": "總計連線數", + "Total Customers": "客戶總數", + "Total items": "總計 :count 項", + "Total Logins": "總登入次數", + "Transfer Audit": "調撥單", + "Transfers": "調撥單", + "Type": "類型", + "UI Elements": "UI元素", + "Unknown": "未知", + "Update": "更新", + "Update Customer": "更新客戶", + "Update existing role and permissions.": "更新現有角色與權限設定。", + "Update Password": "更改密碼", + "Update your account's profile information and email address.": "更新您的帳號姓名、手機號碼與電子郵件地址。", + "Upload New Images": "上傳新照片", + "Uploading new images will replace all existing images.": "上傳新照片將會取代所有現有照片。", + "User": "一般用戶", + "user": "一般用戶", + "User Info": "用戶資訊", + "Username": "使用者帳號", + "Users": "帳號數", + "Utilization Rate": "機台稼動率", + "Valid Until": "合約到期日", + "Venue Management": "場地管理", + "View Details": "查看詳情", + "View Logs": "查看日誌", + "vs Yesterday": "較昨日", + "Warehouse List": "倉庫清單", + "Warehouse List (All)": "倉庫列表(全)", + "Warehouse List (Individual)": "倉庫列表(個)", + "Warehouse Management": "倉庫管理", + "Warehouse Permissions": "倉庫管理權限", + "warehouses": "倉庫管理", + "Warning": "警告", + "Warning: You are editing your own role!": "警告:您正在編輯目前使用的角色!", + "Welcome Gift": "註冊成效禮", + "Yesterday": "昨日", + "You cannot assign permissions you do not possess.": "您無法指派您自身不具備的權限。", + "You cannot delete your own account.": "您無法刪除自己的帳號。", + "Your email address is unverified.": "您的電子郵件地址尚未驗證。", + "Your recent account activity": "最近的帳號活動" } \ No newline at end of file diff --git a/lang/zh_TW/validation.php b/lang/zh_TW/validation.php index 63ec29a..8d30243 100644 --- a/lang/zh_TW/validation.php +++ b/lang/zh_TW/validation.php @@ -13,159 +13,159 @@ return [ | */ - 'accepted' => 'The :attribute field must be accepted.', - 'accepted_if' => 'The :attribute field must be accepted when :other is :value.', - 'active_url' => 'The :attribute field must be a valid URL.', - 'after' => 'The :attribute field must be a date after :date.', - 'after_or_equal' => 'The :attribute field must be a date after or equal to :date.', - 'alpha' => 'The :attribute field must only contain letters.', - 'alpha_dash' => 'The :attribute field must only contain letters, numbers, dashes, and underscores.', - 'alpha_num' => 'The :attribute field must only contain letters and numbers.', - 'any_of' => 'The :attribute field is invalid.', - 'array' => 'The :attribute field must be an array.', - 'ascii' => 'The :attribute field must only contain single-byte alphanumeric characters and symbols.', - 'before' => 'The :attribute field must be a date before :date.', - 'before_or_equal' => 'The :attribute field must be a date before or equal to :date.', + 'accepted' => '必須接受 :attribute。', + 'accepted_if' => '當 :other 為 :value 時,必須接受 :attribute。', + 'active_url' => ':attribute 並非有效的 URL。', + 'after' => ':attribute 必須在 :date 之後。', + 'after_or_equal' => ':attribute 必須在 :date 之後或相等。', + 'alpha' => ':attribute 只能包含字母。', + 'alpha_dash' => ':attribute 只能包含字母、數字、破折號與底線。', + 'alpha_num' => ':attribute 只能包含字母與數字。', + 'any_of' => ':attribute 無效。', + 'array' => ':attribute 必須是一個陣列。', + 'ascii' => ':attribute 只能包含單字節的字母、數字與符號。', + 'before' => ':attribute 必須在 :date 之前。', + 'before_or_equal' => ':attribute 必須在 :date 之前或相等。', 'between' => [ - 'array' => 'The :attribute field must have between :min and :max items.', - 'file' => 'The :attribute field must be between :min and :max kilobytes.', - 'numeric' => 'The :attribute field must be between :min and :max.', - 'string' => 'The :attribute field must be between :min and :max characters.', + 'array' => ':attribute 必須包含 :min 至 :max 個項目。', + 'file' => ':attribute 必須介於 :min 至 :max KB 之間。', + 'numeric' => ':attribute 必須介於 :min 至 :max 之間。', + 'string' => ':attribute 必須介於 :min 至 :max 個字元之間。', ], - 'boolean' => 'The :attribute field must be true or false.', - 'can' => 'The :attribute field contains an unauthorized value.', - 'confirmed' => 'The :attribute field confirmation does not match.', - 'contains' => 'The :attribute field is missing a required value.', - 'current_password' => 'The password is incorrect.', - 'date' => 'The :attribute field must be a valid date.', - 'date_equals' => 'The :attribute field must be a date equal to :date.', - 'date_format' => 'The :attribute field must match the format :format.', - 'decimal' => 'The :attribute field must have :decimal decimal places.', - 'declined' => 'The :attribute field must be declined.', - 'declined_if' => 'The :attribute field must be declined when :other is :value.', - 'different' => 'The :attribute field and :other must be different.', - 'digits' => 'The :attribute field must be :digits digits.', - 'digits_between' => 'The :attribute field must be between :min and :max digits.', - 'dimensions' => 'The :attribute field has invalid image dimensions.', - 'distinct' => 'The :attribute field has a duplicate value.', - 'doesnt_contain' => 'The :attribute field must not contain any of the following: :values.', - 'doesnt_end_with' => 'The :attribute field must not end with one of the following: :values.', - 'doesnt_start_with' => 'The :attribute field must not start with one of the following: :values.', - 'email' => 'The :attribute field must be a valid email address.', - 'encoding' => 'The :attribute field must be encoded in :encoding.', - 'ends_with' => 'The :attribute field must end with one of the following: :values.', - 'enum' => 'The selected :attribute is invalid.', - 'exists' => 'The selected :attribute is invalid.', - 'extensions' => 'The :attribute field must have one of the following extensions: :values.', - 'file' => 'The :attribute field must be a file.', - 'filled' => 'The :attribute field must have a value.', + 'boolean' => ':attribute 必須為布林值。', + 'can' => ':attribute 包含未授權的值。', + 'confirmed' => ':attribute 確認欄位不符。', + 'contains' => ':attribute 缺少必要的值。', + 'current_password' => '目前的密碼不正確。', + 'date' => ':attribute 並非有效的日期。', + 'date_equals' => ':attribute 必須等於 :date。', + 'date_format' => ':attribute 不符合格式 :format。', + 'decimal' => ':attribute 必須有 :decimal 位小數。', + 'declined' => ':attribute 必須拒絕。', + 'declined_if' => '當 :other 為 :value 時,:attribute 必須拒絕。', + 'different' => ':attribute 與 :other 必須不同。', + 'digits' => ':attribute 必須是 :digits 位數。', + 'digits_between' => ':attribute 必須介於 :min 至 :max 位數之間。', + 'dimensions' => ':attribute 圖片尺寸無效。', + 'distinct' => ':attribute 欄位含有重複的值。', + 'doesnt_contain' => ':attribute 不得包含以下任何值::values。', + 'doesnt_end_with' => ':attribute 不得以以下任何值結尾::values。', + 'doesnt_start_with' => ':attribute 不得以以下任何值開頭::values。', + 'email' => ':attribute 必須是有效的電子郵件地址。', + 'encoding' => ':attribute 必須以 :encoding 編碼。', + 'ends_with' => ':attribute 必須以以下任一值結尾::values。', + 'enum' => '所選的 :attribute 無效。', + 'exists' => '所選的 :attribute 無效。', + 'extensions' => ':attribute 必須是以下副檔名之一::values。', + 'file' => ':attribute 必須是一個檔案。', + 'filled' => ':attribute 不能為空。', 'gt' => [ - 'array' => 'The :attribute field must have more than :value items.', - 'file' => 'The :attribute field must be greater than :value kilobytes.', - 'numeric' => 'The :attribute field must be greater than :value.', - 'string' => 'The :attribute field must be greater than :value characters.', + 'array' => ':attribute 必須包含超過 :value 個項目。', + 'file' => ':attribute 必須大於 :value KB。', + 'numeric' => ':attribute 必須大於 :value。', + 'string' => ':attribute 必須超過 :value 個字元。', ], 'gte' => [ - 'array' => 'The :attribute field must have :value items or more.', - 'file' => 'The :attribute field must be greater than or equal to :value kilobytes.', - 'numeric' => 'The :attribute field must be greater than or equal to :value.', - 'string' => 'The :attribute field must be greater than or equal to :value characters.', + 'array' => ':attribute 必須包含 :value 個以上項目。', + 'file' => ':attribute 必須大於或等於 :value KB。', + 'numeric' => ':attribute 必須大於或等於 :value。', + 'string' => ':attribute 必須大於或等於 :value 個字元。', ], - 'hex_color' => 'The :attribute field must be a valid hexadecimal color.', - 'image' => 'The :attribute field must be an image.', - 'in' => 'The selected :attribute is invalid.', - 'in_array' => 'The :attribute field must exist in :other.', - 'in_array_keys' => 'The :attribute field must contain at least one of the following keys: :values.', - 'integer' => 'The :attribute field must be an integer.', - 'ip' => 'The :attribute field must be a valid IP address.', - 'ipv4' => 'The :attribute field must be a valid IPv4 address.', - 'ipv6' => 'The :attribute field must be a valid IPv6 address.', - 'json' => 'The :attribute field must be a valid JSON string.', - 'list' => 'The :attribute field must be a list.', - 'lowercase' => 'The :attribute field must be lowercase.', + 'hex_color' => ':attribute 必須是有效的十六進位色碼。', + 'image' => ':attribute 必須是一張圖片。', + 'in' => '所選的 :attribute 無效。', + 'in_array' => ':attribute 必須存在於 :other 之中。', + 'in_array_keys' => ':attribute 必須包含以下至少一個鍵::values。', + 'integer' => ':attribute 必須是整數。', + 'ip' => ':attribute 必須是有效的 IP 位址。', + 'ipv4' => ':attribute 必須是有效的 IPv4 位址。', + 'ipv6' => ':attribute 必須是有效的 IPv6 位址。', + 'json' => ':attribute 必須是有效的 JSON 字串。', + 'list' => ':attribute 必須是一個列表。', + 'lowercase' => ':attribute 必須是小寫。', 'lt' => [ - 'array' => 'The :attribute field must have less than :value items.', - 'file' => 'The :attribute field must be less than :value kilobytes.', - 'numeric' => 'The :attribute field must be less than :value.', - 'string' => 'The :attribute field must be less than :value characters.', + 'array' => ':attribute 必須包含少於 :value 個項目。', + 'file' => ':attribute 必須小於 :value KB。', + 'numeric' => ':attribute 必須小於 :value。', + 'string' => ':attribute 必須少於 :value 個字元。', ], 'lte' => [ - 'array' => 'The :attribute field must not have more than :value items.', - 'file' => 'The :attribute field must be less than or equal to :value kilobytes.', - 'numeric' => 'The :attribute field must be less than or equal to :value.', - 'string' => 'The :attribute field must be less than or equal to :value characters.', + 'array' => ':attribute 不得包含超過 :value 個項目。', + 'file' => ':attribute 必須小於或等於 :value KB。', + 'numeric' => ':attribute 必須小於或等於 :value。', + 'string' => ':attribute 必須小於或等於 :value 個字元。', ], - 'mac_address' => 'The :attribute field must be a valid MAC address.', + 'mac_address' => ':attribute 必須是有效的 MAC 位址。', 'max' => [ - 'array' => 'The :attribute field must not have more than :max items.', - 'file' => 'The :attribute field must not be greater than :max kilobytes.', - 'numeric' => 'The :attribute field must not be greater than :max.', - 'string' => 'The :attribute field must not be greater than :max characters.', + 'array' => ':attribute 不得超過 :max 個項目。', + 'file' => ':attribute 不得大於 :max KB。', + 'numeric' => ':attribute 不得大於 :max。', + 'string' => ':attribute 不得超過 :max 個字元。', ], - 'max_digits' => 'The :attribute field must not have more than :max digits.', - 'mimes' => 'The :attribute field must be a file of type: :values.', - 'mimetypes' => 'The :attribute field must be a file of type: :values.', + 'max_digits' => ':attribute 不得超過 :max 位數。', + 'mimes' => ':attribute 必須是以下檔案類型::values。', + 'mimetypes' => ':attribute 必須是以下檔案類型::values。', 'min' => [ - 'array' => 'The :attribute field must have at least :min items.', - 'file' => 'The :attribute field must be at least :min kilobytes.', - 'numeric' => 'The :attribute field must be at least :min.', - 'string' => 'The :attribute field must be at least :min characters.', + 'array' => ':attribute 至少需要 :min 個項目。', + 'file' => ':attribute 至少需要 :min KB。', + 'numeric' => ':attribute 不得小於 :min。', + 'string' => ':attribute 至少需要 :min 個字元。', ], - 'min_digits' => 'The :attribute field must have at least :min digits.', - 'missing' => 'The :attribute field must be missing.', - 'missing_if' => 'The :attribute field must be missing when :other is :value.', - 'missing_unless' => 'The :attribute field must be missing unless :other is :value.', - 'missing_with' => 'The :attribute field must be missing when :values is present.', - 'missing_with_all' => 'The :attribute field must be missing when :values are present.', - 'multiple_of' => 'The :attribute field must be a multiple of :value.', - 'not_in' => 'The selected :attribute is invalid.', - 'not_regex' => 'The :attribute field format is invalid.', - 'numeric' => 'The :attribute field must be a number.', + 'min_digits' => ':attribute 至少需要 :min 位數。', + 'missing' => ':attribute 必須不存在。', + 'missing_if' => '當 :other 為 :value 時,:attribute 必須不存在。', + 'missing_unless' => '除非 :other 為 :value,否則 :attribute 必須不存在。', + 'missing_with' => '當 :values 存在時,:attribute 必須不存在。', + 'missing_with_all' => '當 :values 都存在時,:attribute 必須不存在。', + 'multiple_of' => ':attribute 必須是 :value 的倍數。', + 'not_in' => '所選的 :attribute 無效。', + 'not_regex' => ':attribute 格式無效。', + 'numeric' => ':attribute 必須是數字。', 'password' => [ - 'letters' => 'The :attribute field must contain at least one letter.', - 'mixed' => 'The :attribute field must contain at least one uppercase and one lowercase letter.', - 'numbers' => 'The :attribute field must contain at least one number.', - 'symbols' => 'The :attribute field must contain at least one symbol.', - 'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.', + 'letters' => ':attribute 必須包含至少一個字母。', + 'mixed' => ':attribute 必須包含至少一個大寫與一個小寫字母。', + 'numbers' => ':attribute 必須包含至少一個數字。', + 'symbols' => ':attribute 必須包含至少一個符號。', + 'uncompromised' => ':attribute 已出現在外洩資料中,請選擇其他 :attribute。', ], - 'present' => 'The :attribute field must be present.', - 'present_if' => 'The :attribute field must be present when :other is :value.', - 'present_unless' => 'The :attribute field must be present unless :other is :value.', - 'present_with' => 'The :attribute field must be present when :values is present.', - 'present_with_all' => 'The :attribute field must be present when :values are present.', - 'prohibited' => 'The :attribute field is prohibited.', - 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.', - 'prohibited_if_accepted' => 'The :attribute field is prohibited when :other is accepted.', - 'prohibited_if_declined' => 'The :attribute field is prohibited when :other is declined.', - 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.', - 'prohibits' => 'The :attribute field prohibits :other from being present.', - 'regex' => 'The :attribute field format is invalid.', - 'required' => 'The :attribute field is required.', - 'required_array_keys' => 'The :attribute field must contain entries for: :values.', - 'required_if' => 'The :attribute field is required when :other is :value.', - 'required_if_accepted' => 'The :attribute field is required when :other is accepted.', - 'required_if_declined' => 'The :attribute field is required when :other is declined.', - 'required_unless' => 'The :attribute field is required unless :other is in :values.', - 'required_with' => 'The :attribute field is required when :values is present.', - 'required_with_all' => 'The :attribute field is required when :values are present.', - 'required_without' => 'The :attribute field is required when :values is not present.', - 'required_without_all' => 'The :attribute field is required when none of :values are present.', - 'same' => 'The :attribute field must match :other.', + 'present' => ':attribute 必須存在。', + 'present_if' => '當 :other 為 :value 時,:attribute 必須存在。', + 'present_unless' => '除非 :other 為 :value,否則 :attribute 必須存在。', + 'present_with' => '當 :values 存在時,:attribute 必須存在。', + 'present_with_all' => '當 :values 都存在時,:attribute 必須存在。', + 'prohibited' => ':attribute 被禁止使用。', + 'prohibited_if' => '當 :other 為 :value 時,:attribute 被禁止使用。', + 'prohibited_if_accepted' => '當 :other 被接受時,:attribute 被禁止使用。', + 'prohibited_if_declined' => '當 :other 被拒絕時,:attribute 被禁止使用。', + 'prohibited_unless' => '除非 :other 在 :values 之中,否則 :attribute 被禁止使用。', + 'prohibits' => ':attribute 禁止 :other 存在。', + 'regex' => ':attribute 格式無效。', + 'required' => ':attribute 為必填欄位。', + 'required_array_keys' => ':attribute 必須包含以下項目::values。', + 'required_if' => '當 :other 為 :value 時,:attribute 為必填。', + 'required_if_accepted' => '當 :other 被接受時,:attribute 為必填。', + 'required_if_declined' => '當 :other 被拒絕時,:attribute 為必填。', + 'required_unless' => '除非 :other 在 :values 之中,否則 :attribute 為必填。', + 'required_with' => '當 :values 存在時,:attribute 為必填。', + 'required_with_all' => '當 :values 都存在時,:attribute 為必填。', + 'required_without' => '當 :values 不存在時,:attribute 為必填。', + 'required_without_all' => '當 :values 都不存在時,:attribute 為必填。', + 'same' => ':attribute 必須與 :other 相符。', 'size' => [ - 'array' => 'The :attribute field must contain :size items.', - 'file' => 'The :attribute field must be :size kilobytes.', - 'numeric' => 'The :attribute field must be :size.', - 'string' => 'The :attribute field must be :size characters.', + 'array' => ':attribute 必須包含 :size 個項目。', + 'file' => ':attribute 必須是 :size KB。', + 'numeric' => ':attribute 必須是 :size。', + 'string' => ':attribute 必須是 :size 個字元。', ], - 'starts_with' => 'The :attribute field must start with one of the following: :values.', - 'string' => 'The :attribute field must be a string.', - 'timezone' => 'The :attribute field must be a valid timezone.', - 'unique' => 'The :attribute has already been taken.', - 'uploaded' => 'The :attribute failed to upload.', - 'uppercase' => 'The :attribute field must be uppercase.', - 'url' => 'The :attribute field must be a valid URL.', - 'ulid' => 'The :attribute field must be a valid ULID.', - 'uuid' => 'The :attribute field must be a valid UUID.', + 'starts_with' => ':attribute 必須以以下任一值開頭::values。', + 'string' => ':attribute 必須是字串。', + 'timezone' => ':attribute 必須是有效的時區。', + 'unique' => ':attribute 已被使用。', + 'uploaded' => ':attribute 上傳失敗。', + 'uppercase' => ':attribute 必須是大寫。', + 'url' => ':attribute 必須是有效的 URL。', + 'ulid' => ':attribute 必須是有效的 ULID。', + 'uuid' => ':attribute 必須是有效的 UUID。', /* |-------------------------------------------------------------------------- @@ -195,6 +195,13 @@ return [ | */ - 'attributes' => [], + 'attributes' => [ + 'name' => '姓名', + 'email' => '電子郵件', + 'password' => '密碼', + 'current_password' => '目前密碼', + 'password_confirmation' => '確認密碼', + 'phone' => '電話', + ], ]; diff --git a/resources/views/admin/basic-settings/machines/edit.blade.php b/resources/views/admin/basic-settings/machines/edit.blade.php index 8c77cc4..02e7b10 100644 --- a/resources/views/admin/basic-settings/machines/edit.blade.php +++ b/resources/views/admin/basic-settings/machines/edit.blade.php @@ -1,72 +1,92 @@ @extends('layouts.admin') @section('content') -
- -
+
+ + + +
- - + + + +
-

{{ __('Edit Machine Settings') }}

-

{{ $machine->name }} / {{ $machine->serial_no }}

+

+ {{ __('Edit Machine') }} +

+

+ + {{ $machine->name }} / {{ $machine->serial_no }} + +

-
-
+ @csrf @method('PUT') @if ($errors->any()) -
-
- -

{{ __('Some fields need attention') }}

+
+
+ + + +

{{ __('Some fields need attention') }}

-
    +
      @foreach ($errors->all() as $error) -
    • {{ $error }}
    • +
    • + + {{ $error }} +
    • @endforeach
@endif -
+
-
+
-
+
- + + +

{{ __('Basic Information') }}

- +
- +
- +
- +
- +
- +
- +
- +
- +
@@ -115,9 +137,11 @@
-
-
- +
+
+ + +

{{ __('Hardware & Slots') }}

@@ -125,23 +149,23 @@
- +
- +
- +
@foreach([['1-10', 'is_spring_slot_1_10'], ['11-20', 'is_spring_slot_11_20'], ['21-30', 'is_spring_slot_21_30'], ['31-40', 'is_spring_slot_31_40'], ['41-50', 'is_spring_slot_41_50'], ['51-60', 'is_spring_slot_51_60']] as $slot) -
@@ -155,14 +179,16 @@
- + + +

{{ __('Payment & Invoice') }}

- + @@ -184,34 +210,36 @@
-
- +
+ + +

{{ __('Member & External') }}

-
diff --git a/resources/views/admin/basic-settings/machines/index.blade.php b/resources/views/admin/basic-settings/machines/index.blade.php index 8f20e5b..f9c7494 100644 --- a/resources/views/admin/basic-settings/machines/index.blade.php +++ b/resources/views/admin/basic-settings/machines/index.blade.php @@ -46,12 +46,19 @@ const input = document.getElementsByName('machine_image_' + index)[0]; if (input) input.value = ''; }, + isDeleteConfirmOpen: false, + deleteFormAction: '', + confirmDelete(action) { + this.deleteFormAction = action; + this.isDeleteConfirmOpen = true; + } }">

{{ __('Machine Settings') }}

-

{{ __('Management of operational parameters and models') }}

+

{{ + __('Management of operational parameters and models') }}

@if($tab === 'machines') @@ -111,19 +118,19 @@ + class="px-6 py-4 text-xs font-bold text-slate-500 dark:text-slate-400 uppercase tracking-[0.15em] border-b border-slate-100 dark:border-slate-800"> {{ __('Machine Info') }} + class="px-6 py-4 text-xs font-bold text-slate-500 dark:text-slate-400 uppercase tracking-[0.15em] border-b border-slate-100 dark:border-slate-800"> {{ __('Machine Model') }} + class="px-6 py-4 text-xs font-bold text-slate-500 dark:text-slate-400 uppercase tracking-[0.15em] border-b border-slate-100 dark:border-slate-800"> {{ __('Status') }} + class="px-6 py-4 text-xs font-bold text-slate-500 dark:text-slate-400 uppercase tracking-[0.15em] border-b border-slate-100 dark:border-slate-800"> {{ __('Card Reader') }} + class="px-6 py-4 text-xs font-bold text-slate-500 dark:text-slate-400 uppercase tracking-[0.15em] border-b border-slate-100 dark:border-slate-800"> {{ __('Owner') }} @@ -138,13 +145,13 @@
@if(isset($machine->image_urls[0])) - + @else - - - + + + @endif
@@ -199,29 +206,28 @@ {{ $machine->company->name ?? __('None') }} - - - +
- - - @csrf - @method('DELETE') - - + +
+ @csrf + @method('DELETE') + +
+
@empty + class="px-6 py-20 text-center text-slate-500 dark:text-slate-400 font-bold tracking-widest uppercase"> {{ __('No data available') }} @@ -357,7 +363,8 @@ class="inline-block align-bottom bg-white dark:bg-slate-900 rounded-3xl text-left overflow-hidden shadow-2xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full animate-luxury-in border border-slate-100 dark:border-slate-800">
-

{{ __('Add Machine') }}

+

{{ __('Add + Machine') }}

@@ -467,7 +483,8 @@ class="inline-block align-bottom bg-white dark:bg-slate-900 rounded-3xl text-left overflow-hidden shadow-2xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full animate-luxury-in border border-slate-100 dark:border-slate-800">
-

{{ __('Add Machine Model') }}

+

{{ __('Add + Machine Model') }}

-
+
-
@csrf @method('PATCH') @@ -588,22 +607,24 @@