@oxiaom/adoremix 1.0.16 → 1.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/config/webui.js +38 -18
- package/webui/high/assets/AdminLayout-BeGqmJmh.js +1 -0
- package/webui/high/assets/AdminLayout-Dg0cblhW.css +1 -0
- package/webui/high/assets/Announce-2364DXIw.css +1 -0
- package/webui/high/assets/Announce-BxOu3PDa.js +1 -0
- package/webui/high/assets/Billing-9pkW40cw.css +1 -0
- package/webui/high/assets/Billing-DkKexnBS.js +1 -0
- package/webui/high/assets/Gallery-BUO8AayT.js +1 -0
- package/webui/high/assets/Gallery-CvDy0BG_.css +1 -0
- package/webui/high/assets/Info-BRpM9vrH.css +1 -0
- package/webui/high/assets/Info-jgxOyI48.js +1 -0
- package/webui/high/assets/LanguageSwitcher-wcRpxcC2.css +1 -0
- package/webui/high/assets/LanguageSwitcher.vue_vue_type_style_index_0_lang-7lwszLYh.js +1 -0
- package/webui/high/assets/MainLayout-Cg9w3D6H.js +1 -0
- package/webui/high/assets/MainLayout-CtxzU51m.css +1 -0
- package/webui/high/assets/Upload-BUllX3F9.css +1 -0
- package/webui/high/assets/Upload-BhZe08V8.js +1 -0
- package/webui/high/assets/Users-BajKphJ2.css +1 -0
- package/webui/high/assets/Users-C-uvafHe.js +1 -0
- package/webui/high/assets/_plugin-vue_export-helper-BCo6x5W8.js +1 -0
- package/webui/high/assets/api-C3Fyph-A.js +1 -0
- package/webui/high/assets/index-6wTg37PL.js +1 -0
- package/webui/high/assets/index-BU_CDG5n.js +1 -0
- package/webui/high/assets/index-B_eXN_Ka.css +1 -0
- package/webui/high/assets/index-BeMdB8li.css +1 -0
- package/webui/high/assets/index-BeyjdvRw.css +1 -0
- package/webui/high/assets/index-Bqlp4X7Z.css +1 -0
- package/webui/high/assets/index-BwGOSVLU.css +1 -0
- package/webui/high/assets/index-C0plBGGv.js +1 -0
- package/webui/high/assets/index-CG0Cxnu7.js +1 -0
- package/webui/high/assets/index-CGTbAKLR.css +1 -0
- package/webui/high/assets/index-CTbFCtHG.js +1 -0
- package/webui/high/assets/index-CTtQ-PJh.css +1 -0
- package/webui/high/assets/index-Ci-5piG7.css +1 -0
- package/webui/high/assets/index-DPlPWsqM.js +1 -0
- package/webui/high/assets/index-DbeENJC3.css +1 -0
- package/webui/high/assets/index-DdwHcYZD.js +1 -0
- package/webui/high/assets/index-KMJ_Zaix.js +1 -0
- package/webui/high/assets/index-LP7k5pkh.js +1 -0
- package/webui/high/assets/index-MthettIa.css +1 -0
- package/webui/high/assets/index-_3H0q9yh.css +1 -0
- package/webui/high/assets/index-npdYRXyk.js +18 -0
- package/webui/high/assets/index-ptOpmqku.js +1 -0
- package/webui/high/assets/index-r_gAV5lM.css +1 -0
- package/webui/high/assets/index-u4IuHZw8.js +1 -0
- package/webui/high/assets/test-BQUWlKVf.css +1 -0
- package/webui/high/assets/test-Bt3E-Okh.js +1 -0
- package/webui/high/assets/useDeviceScan-CM8xsf7h.js +1 -0
- package/webui/high/assets/vue-vendor-BaBirIg_.js +38 -0
- package/webui/high/index.html +23 -0
- package/webui/high/js/lame.min.js +308 -0
- package/webui/high/js/worker-realtime.js +81 -0
- package/webui/low/assets/AdminLayout-Dg0cblhW.css +1 -0
- package/webui/low/assets/AdminLayout-Dio6Q0f_.js +1 -0
- package/webui/low/assets/Announce-2364DXIw.css +1 -0
- package/webui/low/assets/Announce-DiogX_-D.js +1 -0
- package/webui/low/assets/Billing-9pkW40cw.css +1 -0
- package/webui/low/assets/Billing-C42F8wIt.js +1 -0
- package/webui/low/assets/Gallery-CvDy0BG_.css +1 -0
- package/webui/low/assets/Gallery-DGUAhDtI.js +1 -0
- package/webui/low/assets/Info-BRpM9vrH.css +1 -0
- package/webui/low/assets/Info-BolVapGU.js +1 -0
- package/webui/low/assets/LanguageSwitcher-wcRpxcC2.css +1 -0
- package/webui/low/assets/LanguageSwitcher.vue_vue_type_style_index_0_lang-BUO99DZc.js +1 -0
- package/webui/low/assets/MainLayout-BmBcNVVu.js +1 -0
- package/webui/low/assets/MainLayout-CtxzU51m.css +1 -0
- package/webui/low/assets/Upload-BUllX3F9.css +1 -0
- package/webui/low/assets/Upload-B_Cx6QMR.js +1 -0
- package/webui/low/assets/Users-BajKphJ2.css +1 -0
- package/webui/low/assets/Users-an7uFkx4.js +1 -0
- package/webui/low/assets/_plugin-vue_export-helper-BCo6x5W8.js +1 -0
- package/webui/low/assets/api-C3Fyph-A.js +1 -0
- package/webui/low/assets/index-2JKvpOh3.js +1 -0
- package/webui/low/assets/index-B_eXN_Ka.css +1 -0
- package/webui/low/assets/index-BeMdB8li.css +1 -0
- package/webui/low/assets/index-BeyjdvRw.css +1 -0
- package/webui/low/assets/index-BoV0S81L.js +1 -0
- package/webui/low/assets/index-Bqlp4X7Z.css +1 -0
- package/webui/low/assets/index-BuEwLgbU.js +18 -0
- package/webui/low/assets/index-BwGOSVLU.css +1 -0
- package/webui/low/assets/index-CGTbAKLR.css +1 -0
- package/webui/low/assets/index-CSahVaR0.js +1 -0
- package/webui/low/assets/index-CTtQ-PJh.css +1 -0
- package/webui/low/assets/index-CgyUlqk5.js +1 -0
- package/webui/low/assets/index-Ci-5piG7.css +1 -0
- package/webui/low/assets/index-Cjg2XVty.js +1 -0
- package/webui/low/assets/index-D-BJ_vlf.js +1 -0
- package/webui/low/assets/index-D0uan-_I.js +1 -0
- package/webui/low/assets/index-DWP2gbuh.js +1 -0
- package/webui/low/assets/index-DbeENJC3.css +1 -0
- package/webui/low/assets/index-DdPisNCE.js +1 -0
- package/webui/low/assets/index-F-Qi4toA.js +1 -0
- package/webui/low/assets/index-FUUYrqc8.js +1 -0
- package/webui/low/assets/index-MthettIa.css +1 -0
- package/webui/low/assets/index-_3H0q9yh.css +1 -0
- package/webui/low/assets/index-r_gAV5lM.css +1 -0
- package/webui/low/assets/test-BQUWlKVf.css +1 -0
- package/webui/low/assets/test-DI2hJTQF.js +1 -0
- package/webui/low/assets/useDeviceScan-CM8xsf7h.js +1 -0
- package/webui/low/assets/vue-vendor-BaBirIg_.js +38 -0
- package/webui/low/index.html +23 -0
- package/webui/low/js/lame.min.js +308 -0
- package/webui/low/js/worker-realtime.js +81 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/test-Bt3E-Okh.js","assets/vue-vendor-BaBirIg_.js","assets/_plugin-vue_export-helper-BCo6x5W8.js","assets/api-C3Fyph-A.js","assets/test-BQUWlKVf.css","assets/index-LP7k5pkh.js","assets/LanguageSwitcher.vue_vue_type_style_index_0_lang-7lwszLYh.js","assets/LanguageSwitcher-wcRpxcC2.css","assets/index-r_gAV5lM.css","assets/index-BU_CDG5n.js","assets/useDeviceScan-CM8xsf7h.js","assets/index-BeMdB8li.css","assets/MainLayout-Cg9w3D6H.js","assets/MainLayout-CtxzU51m.css","assets/index-C0plBGGv.js","assets/index-DbeENJC3.css","assets/index-KMJ_Zaix.js","assets/index-B_eXN_Ka.css","assets/index-CG0Cxnu7.js","assets/index-Bqlp4X7Z.css","assets/index-ptOpmqku.js","assets/index-CGTbAKLR.css","assets/index-u4IuHZw8.js","assets/index-MthettIa.css","assets/index-DPlPWsqM.js","assets/index-BwGOSVLU.css","assets/index-DdwHcYZD.js","assets/index-Ci-5piG7.css","assets/index-6wTg37PL.js","assets/index-CTtQ-PJh.css","assets/index-CTbFCtHG.js","assets/index-BeyjdvRw.css","assets/AdminLayout-BeGqmJmh.js","assets/AdminLayout-Dg0cblhW.css","assets/Users-C-uvafHe.js","assets/Users-BajKphJ2.css","assets/Info-jgxOyI48.js","assets/Info-BRpM9vrH.css","assets/Upload-BhZe08V8.js","assets/Upload-BUllX3F9.css","assets/Announce-BxOu3PDa.js","assets/Announce-2364DXIw.css","assets/Billing-DkKexnBS.js","assets/Billing-9pkW40cw.css","assets/Gallery-BUO8AayT.js","assets/Gallery-CvDy0BG_.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
var e,a,i,t;import{d as n,r as l,c as r,a as s,b as o,e as d,w as c,i as u,s as m,f as p,h as g,F as h,g as v,j as S,o as f,k as y,l as k,m as D,T as b,n as P,p as C,u as T,q as A,t as F,v as w,x as L}from"./vue-vendor-BaBirIg_.js";import{g as E,l as N,a as R}from"./api-C3Fyph-A.js";!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))a(e);new MutationObserver(e=>{for(const i of e)if("childList"===i.type)for(const e of i.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&a(e)}).observe(document,{childList:!0,subtree:!0})}function a(e){if(e.ep)return;e.ep=!0;const a=function(e){const a={};return e.integrity&&(a.integrity=e.integrity),e.referrerPolicy&&(a.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?a.credentials="include":"anonymous"===e.crossOrigin?a.credentials="omit":a.credentials="same-origin",a}(e);fetch(e.href,a)}}();const M={},G=function(e,a,i){let t=Promise.resolve();if(a&&a.length>0){document.getElementsByTagName("link");const e=document.querySelector("meta[property=csp-nonce]"),i=(null==e?void 0:e.nonce)||(null==e?void 0:e.getAttribute("nonce"));t=Promise.allSettled(a.map(e=>{if((e=function(e){return"/"+e}(e))in M)return;M[e]=!0;const a=e.endsWith(".css"),t=a?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${t}`))return;const n=document.createElement("link");return n.rel=a?"stylesheet":"modulepreload",a||(n.as="script"),n.crossOrigin="",n.href=e,i&&n.setAttribute("nonce",i),document.head.appendChild(n),a?new Promise((a,i)=>{n.addEventListener("load",a),n.addEventListener("error",()=>i(new Error(`Unable to preload CSS for ${e}`)))}):void 0}))}function n(e){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=e,window.dispatchEvent(a),!a.defaultPrevented)throw e}return t.then(a=>{for(const e of a||[])"rejected"===e.status&&n(e.reason);return e().catch(n)})},x=n("device",()=>{const e=l([]),a=l(!1);return{deviceList:e,loading:a,fetchDeviceList:async function(){a.value=!0;try{const a=await E();!0===a.res&&Array.isArray(a.results)?e.value=a.results:!0===a.res&&Array.isArray(a.list)?e.value=a.list:!0===a.res&&Array.isArray(a.filelist)?e.value=a.filelist:Array.isArray(a)?e.value=a:e.value=[]}catch(i){console.error("获取设备列表失败:",i),e.value=[]}finally{a.value=!1}},getStats:function(){return{totalDevices:e.value.length,onlineDevices:e.value.filter(e=>1===e.status).length,offlineDevices:e.value.filter(e=>1!==e.status).length}},clearDeviceList:function(){e.value=[]}}}),I=n("user",()=>{const e=l(localStorage.getItem("token")||""),a=l(localStorage.getItem("userInfo")?JSON.parse(localStorage.getItem("userInfo")):null),i=l(!1),t=r(()=>!!e.value),n=r(()=>{var e;return-99===(null==(e=a.value)?void 0:e.master_id)}),s=r(()=>{var e;return-1===(null==(e=a.value)?void 0:e.master_id)}),o=r(()=>{var e;return(null==(e=a.value)?void 0:e.user_name)||""}),d=r(()=>{var e;return(null==(e=a.value)?void 0:e.nickname)||""}),c=r(()=>{var e;return(null==(e=a.value)?void 0:e.user_level)||0}),u=r(()=>{var e;return(null==(e=a.value)?void 0:e.mask)||""});function m(e){if(n.value)return!0;const a=u.value;return!(!a||e>=a.length)&&"1"===a[e]}const p=r(()=>m(0)),g=r(()=>m(1)),h=r(()=>m(2));return{token:e,userInfo:a,loading:i,isLoggedIn:t,isAdmin:n,isMaster:s,username:o,nickname:d,userLevel:c,mask:u,canCreateSub:p,canManageDevice:g,canUploadFile:h,hasPerm:m,loginUser:async function(t){i.value=!0;try{console.log("开始登录,参数:",t);const i=await N(t);return console.log("登录响应:",i),i.res&&i.data?(console.log("登录成功,保存用户信息"),e.value=i.data.token,a.value=i.data,localStorage.setItem("token",i.data.token),localStorage.setItem("userInfo",JSON.stringify(i.data)),localStorage.setItem("userId",String(i.data.id)),console.log("Token 已保存:",i.data.token),!0):(console.error("登录响应格式不正确:",i),!1)}catch(n){return console.error("登录失败:",n),!1}finally{i.value=!1}},logoutUser:async function(){try{await R()}catch(i){console.error("登出失败:",i)}finally{e.value="",a.value=null,localStorage.removeItem("token"),localStorage.removeItem("userInfo"),localStorage.removeItem("userId");try{x().clearDeviceList()}catch{}}},updateUserInfo:function(e){a.value&&(a.value={...a.value,...e},localStorage.setItem("userInfo",JSON.stringify(a.value)))}}}),U=[{path:"/test",name:"Test",component:()=>G(()=>import("./test-Bt3E-Okh.js"),__vite__mapDeps([0,1,2,3,4]))},{path:"/login",name:"Login",component:()=>G(()=>import("./index-LP7k5pkh.js"),__vite__mapDeps([5,1,3,6,7,2,8])),meta:{title:"登录 - ST广播系统",requiresAuth:!1}},{path:"/client-login",name:"ClientLogin",component:()=>G(()=>import("./index-BU_CDG5n.js"),__vite__mapDeps([9,1,3,6,7,10,2,11])),meta:{title:"客户端登录 - ST广播系统",requiresAuth:!1}},{path:"/",component:()=>G(()=>import("./MainLayout-Cg9w3D6H.js"),__vite__mapDeps([12,1,3,6,7,2,13])),redirect:"/dashboard",meta:{requiresAuth:!1},children:[{path:"dashboard",name:"Dashboard",component:()=>G(()=>import("./index-C0plBGGv.js"),__vite__mapDeps([14,1,3,2,15])),meta:{title:"仪表盘",icon:"dashboard",requiresAuth:!0}},{path:"devices",name:"Devices",component:()=>G(()=>import("./index-KMJ_Zaix.js"),__vite__mapDeps([16,1,3,10,2,17])),meta:{title:"设备管理",icon:"device",requiresAuth:!0}},{path:"groups",name:"Groups",component:()=>G(()=>import("./index-CG0Cxnu7.js"),__vite__mapDeps([18,1,3,2,19])),meta:{title:"分组管理",icon:"group",requiresAuth:!0}},{path:"tasks",name:"Tasks",component:()=>G(()=>import("./index-ptOpmqku.js"),__vite__mapDeps([20,1,3,2,21])),meta:{title:"定时任务",icon:"task",requiresAuth:!0}},{path:"media",name:"Media",component:()=>G(()=>import("./index-u4IuHZw8.js"),__vite__mapDeps([22,1,3,2,23])),meta:{title:"媒体管理",icon:"media",requiresAuth:!0}},{path:"broadcast",name:"Broadcast",component:()=>G(()=>import("./index-DPlPWsqM.js"),__vite__mapDeps([24,1,3,2,25])),meta:{title:"广播控制",icon:"broadcast",requiresAuth:!0}},{path:"alarm",name:"Alarm",component:()=>G(()=>import("./index-DdwHcYZD.js"),__vite__mapDeps([26,1,3,2,27])),meta:{title:"报警系统",icon:"alarm",requiresAuth:!0}},{path:"account",name:"Account",component:()=>G(()=>import("./index-6wTg37PL.js"),__vite__mapDeps([28,1,3,2,29])),meta:{title:"账户管理",icon:"account",requiresAuth:!0}},{path:"logs",name:"Logs",component:()=>G(()=>import("./index-CTbFCtHG.js"),__vite__mapDeps([30,1,3,2,31])),meta:{title:"播放日志",icon:"logs",requiresAuth:!0}}]},{path:"/admin",component:()=>G(()=>import("./AdminLayout-BeGqmJmh.js"),__vite__mapDeps([32,1,6,7,2,3,33])),redirect:"/admin/users",meta:{requiresAuth:!1},children:[{path:"users",name:"AdminUsers",component:()=>G(()=>import("./Users-C-uvafHe.js"),__vite__mapDeps([34,1,3,2,35])),meta:{title:"用户&权限",icon:"users",requiresAuth:!0}},{path:"info",name:"AdminInfo",component:()=>G(()=>import("./Info-jgxOyI48.js"),__vite__mapDeps([36,1,3,2,37])),meta:{title:"信息操作",icon:"info",requiresAuth:!0}},{path:"upload",name:"AdminUpload",component:()=>G(()=>import("./Upload-BhZe08V8.js"),__vite__mapDeps([38,1,2,3,39])),meta:{title:"其他",icon:"upload",requiresAuth:!0}},{path:"announce",name:"AdminAnnounce",component:()=>G(()=>import("./Announce-BxOu3PDa.js"),__vite__mapDeps([40,1,3,2,41])),meta:{title:"公布信息管理",icon:"announce",requiresAuth:!0}},{path:"billing",name:"AdminBilling",component:()=>G(()=>import("./Billing-DkKexnBS.js"),__vite__mapDeps([42,1,3,2,43])),meta:{title:"计费资料设置",icon:"billing",requiresAuth:!0}},{path:"gallery",name:"AdminGallery",component:()=>G(()=>import("./Gallery-BUO8AayT.js"),__vite__mapDeps([44,1,3,2,45])),meta:{title:"展报概览",icon:"gallery",requiresAuth:!0}}]}],z=s({history:o(),routes:U,scrollBehavior:(e,a,i)=>i||{top:0}}),B="undefined"!=typeof window&&!!window.electronAPI,O="undefined"!=typeof window&&!!(null==(a=null==(e=window.Capacitor)?void 0:e.isNativePlatform)?void 0:a.call(e)),V=B||O?"/client-login":"/login";
|
|
3
|
+
/*!
|
|
4
|
+
* shared v9.14.5
|
|
5
|
+
* (c) 2025 kazuya kawaguchi
|
|
6
|
+
* Released under the MIT License.
|
|
7
|
+
*/
|
|
8
|
+
function H(e,a){"undefined"!=typeof console&&(console.warn("[intlify] "+e),a&&console.warn(a.stack))}z.beforeEach((e,a,i)=>{const t=I();document.title=e.meta.title||"ST广播系统",t.isLoggedIn&&t.isAdmin&&!e.path.startsWith("/admin")?i({path:"/admin"}):t.isLoggedIn&&!t.isAdmin&&e.path.startsWith("/admin")?i({path:"/"}):!1!==e.meta.requiresAuth?t.isLoggedIn?i():i({path:V,query:{redirect:e.fullPath}}):"/login"!==e.path&&"/client-login"!==e.path||!t.isLoggedIn?i():i({path:I().isAdmin?"/admin":"/"})}),z.onError(e=>{console.error("路由错误:",e)});const _="undefined"!=typeof window,q=(e,a=!1)=>a?Symbol.for(e):Symbol(e),j=e=>JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029").replace(/\u0027/g,"\\u0027"),K=e=>"number"==typeof e&&isFinite(e),W=e=>"[object RegExp]"===ce(e),Q=e=>ue(e)&&0===Object.keys(e).length,J=Object.assign,$=Object.create,Y=(e=null)=>$(e);let X;const Z=()=>X||(X="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:Y());function ee(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/").replace(/=/g,"=")}function ae(e){return e.replace(/&(?![a-zA-Z0-9#]{2,6};)/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")}const ie=Object.prototype.hasOwnProperty;function te(e,a){return ie.call(e,a)}const ne=Array.isArray,le=e=>"function"==typeof e,re=e=>"string"==typeof e,se=e=>"boolean"==typeof e,oe=e=>null!==e&&"object"==typeof e,de=Object.prototype.toString,ce=e=>de.call(e),ue=e=>{if(!oe(e))return!1;const a=Object.getPrototypeOf(e);return null===a||a.constructor===Object};function me(e){let a=e;return()=>++a}const pe=e=>!oe(e)||ne(e);function ge(e,a){if(pe(e)||pe(a))throw new Error("Invalid value");const i=[{src:e,des:a}];for(;i.length;){const{src:e,des:a}=i.pop();Object.keys(e).forEach(t=>{"__proto__"!==t&&(oe(e[t])&&!oe(a[t])&&(a[t]=Array.isArray(e[t])?[]:Y()),pe(a[t])||pe(e[t])?a[t]=e[t]:i.push({src:e[t],des:a[t]}))})}}
|
|
9
|
+
/*!
|
|
10
|
+
* message-compiler v9.14.5
|
|
11
|
+
* (c) 2025 kazuya kawaguchi
|
|
12
|
+
* Released under the MIT License.
|
|
13
|
+
*/function he(e,a,i){return{start:e,end:a}}const ve=/\{([0-9a-zA-Z]+)\}/g;function Se(e,...a){return 1===a.length&&ke(a[0])&&(a=a[0]),a&&a.hasOwnProperty||(a={}),e.replace(ve,(e,i)=>a.hasOwnProperty(i)?a[i]:"")}const fe=Object.assign,ye=e=>"string"==typeof e,ke=e=>null!==e&&"object"==typeof e;function De(e,a=""){return e.reduce((e,i,t)=>0===t?e+i:e+a+i,"")}const be=1,Pe=2,Ce={[be]:"Use modulo before '{{0}}'."};const Te=1,Ae=2,Fe=3,we=4,Le=5,Ee=6,Ne=7,Re=8,Me=9,Ge=10,xe=11,Ie=12,Ue=13,ze=14,Be=15,Oe=16,Ve=17,He={[Te]:"Expected token: '{0}'",[Ae]:"Invalid token in placeholder: '{0}'",[Fe]:"Unterminated single quote in placeholder",[we]:"Unknown escape sequence: \\{0}",[Le]:"Invalid unicode escape sequence: {0}",[Ee]:"Unbalanced closing brace",[Ne]:"Unterminated closing brace",[Re]:"Empty placeholder",[Me]:"Not allowed nest placeholder",[Ge]:"Invalid linked format",[xe]:"Plural must have messages",[Ie]:"Unexpected empty linked modifier",[Ue]:"Unexpected empty linked key",[ze]:"Unexpected lexical analysis in token: '{0}'",[Be]:"unhandled codegen node type: '{0}'",[Oe]:"unhandled mimifier node type: '{0}'"};function _e(e,a,i={}){const{domain:t,messages:n,args:l}=i,r=Se((n||He)[e]||"",...l||[]),s=new SyntaxError(String(r));return s.code=e,a&&(s.location=a),s.domain=t,s}function qe(e){throw e}const je=" ",Ke="\n",We=String.fromCharCode(8232),Qe=String.fromCharCode(8233);function Je(e){const a=e;let i=0,t=1,n=1,l=0;const r=e=>"\r"===a[e]&&a[e+1]===Ke,s=e=>a[e]===Qe,o=e=>a[e]===We,d=e=>r(e)||(e=>a[e]===Ke)(e)||s(e)||o(e),c=e=>r(e)||s(e)||o(e)?Ke:a[e];function u(){return l=0,d(i)&&(t++,n=0),r(i)&&i++,i++,n++,a[i]}return{index:()=>i,line:()=>t,column:()=>n,peekOffset:()=>l,charAt:c,currentChar:()=>c(i),currentPeek:()=>c(i+l),next:u,peek:function(){return r(i+l)&&l++,l++,a[i+l]},reset:function(){i=0,t=1,n=1,l=0},resetPeek:function(e=0){l=e},skipToPeek:function(){const e=i+l;for(;e!==i;)u();l=0}}}const $e=void 0;function Ye(e,a={}){const i=!1!==a.location,t=Je(e),n=()=>t.index(),l=()=>{return e=t.line(),a=t.column(),i=t.index(),{line:e,column:a,offset:i};var e,a,i},r=l(),s=n(),o={currentType:14,offset:s,startLoc:r,endLoc:r,lastType:14,lastOffset:s,lastStartLoc:r,lastEndLoc:r,braceNest:0,inLinked:!1,text:""},d=()=>o,{onError:c}=a;function u(e,a,t,...n){const l=d();if(a.column+=t,a.offset+=t,c){const t=_e(e,i?he(l.startLoc,a):null,{domain:"tokenizer",args:n});c(t)}}function m(e,a,t){e.endLoc=l(),e.currentType=a;const n={type:a};return i&&(n.loc=he(e.startLoc,e.endLoc)),null!=t&&(n.value=t),n}const p=e=>m(e,14);function g(e,a){return e.currentChar()===a?(e.next(),a):(u(Te,l(),0,a),"")}function h(e){let a="";for(;e.currentPeek()===je||e.currentPeek()===Ke;)a+=e.currentPeek(),e.peek();return a}function v(e){const a=h(e);return e.skipToPeek(),a}function S(e){if(e===$e)return!1;const a=e.charCodeAt(0);return a>=97&&a<=122||a>=65&&a<=90||95===a}function f(e,a){const{currentType:i}=a;if(2!==i)return!1;h(e);const t=function(e){if(e===$e)return!1;const a=e.charCodeAt(0);return a>=48&&a<=57}("-"===e.currentPeek()?e.peek():e.currentPeek());return e.resetPeek(),t}function y(e){h(e);const a="|"===e.currentPeek();return e.resetPeek(),a}function k(e,a=!0){const i=(a=!1,t="",n=!1)=>{const l=e.currentPeek();return"{"===l?"%"!==t&&a:"@"!==l&&l?"%"===l?(e.peek(),i(a,"%",!0)):"|"===l?!("%"!==t&&!n)||!(t===je||t===Ke):l===je?(e.peek(),i(!0,je,n)):l!==Ke||(e.peek(),i(!0,Ke,n)):"%"===t||a},t=i();return a&&e.resetPeek(),t}function D(e,a){const i=e.currentChar();return i===$e?$e:a(i)?(e.next(),i):null}function b(e){const a=e.charCodeAt(0);return a>=97&&a<=122||a>=65&&a<=90||a>=48&&a<=57||95===a||36===a}function P(e){return D(e,b)}function C(e){const a=e.charCodeAt(0);return a>=97&&a<=122||a>=65&&a<=90||a>=48&&a<=57||95===a||36===a||45===a}function T(e){return D(e,C)}function A(e){const a=e.charCodeAt(0);return a>=48&&a<=57}function F(e){return D(e,A)}function w(e){const a=e.charCodeAt(0);return a>=48&&a<=57||a>=65&&a<=70||a>=97&&a<=102}function L(e){return D(e,w)}function E(e){let a="",i="";for(;a=F(e);)i+=a;return i}function N(e){let a="";for(;;){const i=e.currentChar();if("{"===i||"}"===i||"@"===i||"|"===i||!i)break;if("%"===i){if(!k(e))break;a+=i,e.next()}else if(i===je||i===Ke)if(k(e))a+=i,e.next();else{if(y(e))break;a+=i,e.next()}else a+=i,e.next()}return a}function R(e){return"'"!==e&&e!==Ke}function M(e){const a=e.currentChar();switch(a){case"\\":case"'":return e.next(),`\\${a}`;case"u":return G(e,a,4);case"U":return G(e,a,6);default:return u(we,l(),0,a),""}}function G(e,a,i){g(e,a);let t="";for(let n=0;n<i;n++){const i=L(e);if(!i){u(Le,l(),0,`\\${a}${t}${e.currentChar()}`);break}t+=i}return`\\${a}${t}`}function x(e){return"{"!==e&&"}"!==e&&e!==je&&e!==Ke}function I(e){v(e);const a=g(e,"|");return v(e),a}function U(e,a){let i=null;switch(e.currentChar()){case"{":return a.braceNest>=1&&u(Me,l(),0),e.next(),i=m(a,2,"{"),v(e),a.braceNest++,i;case"}":return a.braceNest>0&&2===a.currentType&&u(Re,l(),0),e.next(),i=m(a,3,"}"),a.braceNest--,a.braceNest>0&&v(e),a.inLinked&&0===a.braceNest&&(a.inLinked=!1),i;case"@":return a.braceNest>0&&u(Ne,l(),0),i=z(e,a)||p(a),a.braceNest=0,i;default:{let t=!0,n=!0,r=!0;if(y(e))return a.braceNest>0&&u(Ne,l(),0),i=m(a,1,I(e)),a.braceNest=0,a.inLinked=!1,i;if(a.braceNest>0&&(5===a.currentType||6===a.currentType||7===a.currentType))return u(Ne,l(),0),a.braceNest=0,B(e,a);if(t=function(e,a){const{currentType:i}=a;if(2!==i)return!1;h(e);const t=S(e.currentPeek());return e.resetPeek(),t}(e,a))return i=m(a,5,function(e){v(e);let a="",i="";for(;a=T(e);)i+=a;return e.currentChar()===$e&&u(Ne,l(),0),i}(e)),v(e),i;if(n=f(e,a))return i=m(a,6,function(e){v(e);let a="";return"-"===e.currentChar()?(e.next(),a+=`-${E(e)}`):a+=E(e),e.currentChar()===$e&&u(Ne,l(),0),a}(e)),v(e),i;if(r=function(e,a){const{currentType:i}=a;if(2!==i)return!1;h(e);const t="'"===e.currentPeek();return e.resetPeek(),t}(e,a))return i=m(a,7,function(e){v(e),g(e,"'");let a="",i="";for(;a=D(e,R);)i+="\\"===a?M(e):a;const t=e.currentChar();return t===Ke||t===$e?(u(Fe,l(),0),t===Ke&&(e.next(),g(e,"'")),i):(g(e,"'"),i)}(e)),v(e),i;if(!t&&!n&&!r)return i=m(a,13,function(e){v(e);let a="",i="";for(;a=D(e,x);)i+=a;return i}(e)),u(Ae,l(),0,i.value),v(e),i;break}}return i}function z(e,a){const{currentType:i}=a;let t=null;const n=e.currentChar();switch(8!==i&&9!==i&&12!==i&&10!==i||n!==Ke&&n!==je||u(Ge,l(),0),n){case"@":return e.next(),t=m(a,8,"@"),a.inLinked=!0,t;case".":return v(e),e.next(),m(a,9,".");case":":return v(e),e.next(),m(a,10,":");default:return y(e)?(t=m(a,1,I(e)),a.braceNest=0,a.inLinked=!1,t):function(e,a){const{currentType:i}=a;if(8!==i)return!1;h(e);const t="."===e.currentPeek();return e.resetPeek(),t}(e,a)||function(e,a){const{currentType:i}=a;if(8!==i&&12!==i)return!1;h(e);const t=":"===e.currentPeek();return e.resetPeek(),t}(e,a)?(v(e),z(e,a)):function(e,a){const{currentType:i}=a;if(9!==i)return!1;h(e);const t=S(e.currentPeek());return e.resetPeek(),t}(e,a)?(v(e),m(a,12,function(e){let a="",i="";for(;a=P(e);)i+=a;return i}(e))):function(e,a){const{currentType:i}=a;if(10!==i)return!1;const t=()=>{const a=e.currentPeek();return"{"===a?S(e.peek()):!("@"===a||"%"===a||"|"===a||":"===a||"."===a||a===je||!a)&&(a===Ke?(e.peek(),t()):k(e,!1))},n=t();return e.resetPeek(),n}(e,a)?(v(e),"{"===n?U(e,a)||t:m(a,11,function(e){const a=i=>{const t=e.currentChar();return"{"!==t&&"%"!==t&&"@"!==t&&"|"!==t&&"("!==t&&")"!==t&&t?t===je?i:(i+=t,e.next(),a(i)):i};return a("")}(e))):(8===i&&u(Ge,l(),0),a.braceNest=0,a.inLinked=!1,B(e,a))}}function B(e,a){let i={type:14};if(a.braceNest>0)return U(e,a)||p(a);if(a.inLinked)return z(e,a)||p(a);switch(e.currentChar()){case"{":return U(e,a)||p(a);case"}":return u(Ee,l(),0),e.next(),m(a,3,"}");case"@":return z(e,a)||p(a);default:{if(y(e))return i=m(a,1,I(e)),a.braceNest=0,a.inLinked=!1,i;const{isModulo:t,hasSpace:n}=function(e){const a=h(e),i="%"===e.currentPeek()&&"{"===e.peek();return e.resetPeek(),{isModulo:i,hasSpace:a.length>0}}(e);if(t)return n?m(a,0,N(e)):m(a,4,function(e){v(e);const a=e.currentChar();return"%"!==a&&u(Te,l(),0,a),e.next(),"%"}(e));if(k(e))return m(a,0,N(e));break}}return i}return{nextToken:function(){const{currentType:e,offset:a,startLoc:i,endLoc:r}=o;return o.lastType=e,o.lastOffset=a,o.lastStartLoc=i,o.lastEndLoc=r,o.offset=n(),o.startLoc=l(),t.currentChar()===$e?m(o,14):B(t,o)},currentOffset:n,currentPosition:l,context:d}}const Xe=/(?:\\\\|\\'|\\u([0-9a-fA-F]{4})|\\U([0-9a-fA-F]{6}))/g;function Ze(e,a,i){switch(e){case"\\\\":return"\\";case"\\'":return"'";default:{const e=parseInt(a||i,16);return e<=55295||e>=57344?String.fromCodePoint(e):"�"}}}function ea(e={}){const a=!1!==e.location,{onError:i,onWarn:t}=e;function n(e,t,n,l,...r){const s=e.currentPosition();if(s.offset+=l,s.column+=l,i){const e=_e(t,a?he(n,s):null,{domain:"parser",args:r});i(e)}}function l(e,i,n,l,...r){const s=e.currentPosition();if(s.offset+=l,s.column+=l,t){const e=a?he(n,s):null;t(function(e,a,...i){const t=Se(Ce[e],...i||[]),n={message:String(t),code:e};return a&&(n.location=a),n}(i,e,r))}}function r(e,i,t){const n={type:e};return a&&(n.start=i,n.end=i,n.loc={start:t,end:t}),n}function s(e,i,t,n){a&&(e.end=i,e.loc&&(e.loc.end=t))}function o(e,a){const i=e.context(),t=r(3,i.offset,i.startLoc);return t.value=a,s(t,e.currentOffset(),e.currentPosition()),t}function d(e,a){const i=e.context(),{lastOffset:t,lastStartLoc:n}=i,l=r(5,t,n);return l.index=parseInt(a,10),e.nextToken(),s(l,e.currentOffset(),e.currentPosition()),l}function c(e,a,i){const t=e.context(),{lastOffset:n,lastStartLoc:l}=t,o=r(4,n,l);return o.key=a,!0===i&&(o.modulo=!0),e.nextToken(),s(o,e.currentOffset(),e.currentPosition()),o}function u(e,a){const i=e.context(),{lastOffset:t,lastStartLoc:n}=i,l=r(9,t,n);return l.value=a.replace(Xe,Ze),e.nextToken(),s(l,e.currentOffset(),e.currentPosition()),l}function m(e){const a=e.context(),i=r(6,a.offset,a.startLoc);let t=e.nextToken();if(9===t.type){const a=function(e){const a=e.nextToken(),i=e.context(),{lastOffset:t,lastStartLoc:l}=i,o=r(8,t,l);return 12!==a.type?(n(e,Ie,i.lastStartLoc,0),o.value="",s(o,t,l),{nextConsumeToken:a,node:o}):(null==a.value&&n(e,ze,i.lastStartLoc,0,aa(a)),o.value=a.value||"",s(o,e.currentOffset(),e.currentPosition()),{node:o})}(e);i.modifier=a.node,t=a.nextConsumeToken||e.nextToken()}switch(10!==t.type&&n(e,ze,a.lastStartLoc,0,aa(t)),t=e.nextToken(),2===t.type&&(t=e.nextToken()),t.type){case 11:null==t.value&&n(e,ze,a.lastStartLoc,0,aa(t)),i.key=function(e,a){const i=e.context(),t=r(7,i.offset,i.startLoc);return t.value=a,s(t,e.currentOffset(),e.currentPosition()),t}(e,t.value||"");break;case 5:null==t.value&&n(e,ze,a.lastStartLoc,0,aa(t)),i.key=c(e,t.value||"");break;case 6:null==t.value&&n(e,ze,a.lastStartLoc,0,aa(t)),i.key=d(e,t.value||"");break;case 7:null==t.value&&n(e,ze,a.lastStartLoc,0,aa(t)),i.key=u(e,t.value||"");break;default:{n(e,Ue,a.lastStartLoc,0);const l=e.context(),o=r(7,l.offset,l.startLoc);return o.value="",s(o,l.offset,l.startLoc),i.key=o,s(i,l.offset,l.startLoc),{nextConsumeToken:t,node:i}}}return s(i,e.currentOffset(),e.currentPosition()),{node:i}}function p(e){const a=e.context(),i=r(2,1===a.currentType?e.currentOffset():a.offset,1===a.currentType?a.endLoc:a.startLoc);i.items=[];let t=null,p=null;do{const r=t||e.nextToken();switch(t=null,r.type){case 0:null==r.value&&n(e,ze,a.lastStartLoc,0,aa(r)),i.items.push(o(e,r.value||""));break;case 6:null==r.value&&n(e,ze,a.lastStartLoc,0,aa(r)),i.items.push(d(e,r.value||""));break;case 4:p=!0;break;case 5:null==r.value&&n(e,ze,a.lastStartLoc,0,aa(r)),i.items.push(c(e,r.value||"",!!p)),p&&(l(e,be,a.lastStartLoc,0,aa(r)),p=null);break;case 7:null==r.value&&n(e,ze,a.lastStartLoc,0,aa(r)),i.items.push(u(e,r.value||""));break;case 8:{const a=m(e);i.items.push(a.node),t=a.nextConsumeToken||null;break}}}while(14!==a.currentType&&1!==a.currentType);return s(i,1===a.currentType?a.lastOffset:e.currentOffset(),1===a.currentType?a.lastEndLoc:e.currentPosition()),i}function g(e){const a=e.context(),{offset:i,startLoc:t}=a,l=p(e);return 14===a.currentType?l:function(e,a,i,t){const l=e.context();let o=0===t.items.length;const d=r(1,a,i);d.cases=[],d.cases.push(t);do{const a=p(e);o||(o=0===a.items.length),d.cases.push(a)}while(14!==l.currentType);return o&&n(e,xe,i,0),s(d,e.currentOffset(),e.currentPosition()),d}(e,i,t,l)}return{parse:function(i){const t=Ye(i,fe({},e)),l=t.context(),o=r(0,l.offset,l.startLoc);return a&&o.loc&&(o.loc.source=i),o.body=g(t),e.onCacheKey&&(o.cacheKey=e.onCacheKey(i)),14!==l.currentType&&n(t,ze,l.lastStartLoc,0,i[l.offset]||""),s(o,t.currentOffset(),t.currentPosition()),o}}}function aa(e){if(14===e.type)return"EOF";const a=(e.value||"").replace(/\r?\n/gu,"\\n");return a.length>10?a.slice(0,9)+"…":a}function ia(e,a){for(let i=0;i<e.length;i++)ta(e[i],a)}function ta(e,a){switch(e.type){case 1:ia(e.cases,a),a.helper("plural");break;case 2:ia(e.items,a);break;case 6:ta(e.key,a),a.helper("linked"),a.helper("type");break;case 5:a.helper("interpolate"),a.helper("list");break;case 4:a.helper("interpolate"),a.helper("named")}}function na(e,a={}){const i=function(e){const a={ast:e,helpers:new Set};return{context:()=>a,helper:e=>(a.helpers.add(e),e)}}(e);i.helper("normalize"),e.body&&ta(e.body,i);const t=i.context();e.helpers=Array.from(t.helpers)}function la(e){if(1===e.items.length){const a=e.items[0];3!==a.type&&9!==a.type||(e.static=a.value,delete a.value)}else{const a=[];for(let i=0;i<e.items.length;i++){const t=e.items[i];if(3!==t.type&&9!==t.type)break;if(null==t.value)break;a.push(t.value)}if(a.length===e.items.length){e.static=De(a);for(let a=0;a<e.items.length;a++){const i=e.items[a];3!==i.type&&9!==i.type||delete i.value}}}}function ra(e){switch(e.t=e.type,e.type){case 0:{const a=e;ra(a.body),a.b=a.body,delete a.body;break}case 1:{const a=e,i=a.cases;for(let e=0;e<i.length;e++)ra(i[e]);a.c=i,delete a.cases;break}case 2:{const a=e,i=a.items;for(let e=0;e<i.length;e++)ra(i[e]);a.i=i,delete a.items,a.static&&(a.s=a.static,delete a.static);break}case 3:case 9:case 8:case 7:{const a=e;a.value&&(a.v=a.value,delete a.value);break}case 6:{const a=e;ra(a.key),a.k=a.key,delete a.key,a.modifier&&(ra(a.modifier),a.m=a.modifier,delete a.modifier);break}case 5:{const a=e;a.i=a.index,delete a.index;break}case 4:{const a=e;a.k=a.key,delete a.key;break}default:throw _e(Oe,null,{domain:"minifier",args:[e.type]})}delete e.type}function sa(e,a){const{helper:i}=e;switch(a.type){case 0:!function(e,a){a.body?sa(e,a.body):e.push("null")}(e,a);break;case 1:!function(e,a){const{helper:i,needIndent:t}=e;if(a.cases.length>1){e.push(`${i("plural")}([`),e.indent(t());const n=a.cases.length;for(let i=0;i<n&&(sa(e,a.cases[i]),i!==n-1);i++)e.push(", ");e.deindent(t()),e.push("])")}}(e,a);break;case 2:!function(e,a){const{helper:i,needIndent:t}=e;e.push(`${i("normalize")}([`),e.indent(t());const n=a.items.length;for(let l=0;l<n&&(sa(e,a.items[l]),l!==n-1);l++)e.push(", ");e.deindent(t()),e.push("])")}(e,a);break;case 6:!function(e,a){const{helper:i}=e;e.push(`${i("linked")}(`),sa(e,a.key),a.modifier?(e.push(", "),sa(e,a.modifier),e.push(", _type")):e.push(", undefined, _type"),e.push(")")}(e,a);break;case 8:case 7:case 9:case 3:e.push(JSON.stringify(a.value),a);break;case 5:e.push(`${i("interpolate")}(${i("list")}(${a.index}))`,a);break;case 4:e.push(`${i("interpolate")}(${i("named")}(${JSON.stringify(a.key)}))`,a);break;default:throw _e(Be,null,{domain:"parser",args:[a.type]})}}function oa(e,a={}){const i=fe({},a),t=!!i.jit,n=!!i.minify,l=null==i.optimize||i.optimize,r=ea(i).parse(e);return t?(l&&function(e){const a=e.body;2===a.type?la(a):a.cases.forEach(e=>la(e))}(r),n&&ra(r),{ast:r,code:""}):(na(r,i),((e,a={})=>{const i=ye(a.mode)?a.mode:"normal",t=ye(a.filename)?a.filename:"message.intl";a.sourceMap;const n=null!=a.breakLineCode?a.breakLineCode:"arrow"===i?";":"\n",l=a.needIndent?a.needIndent:"arrow"!==i,r=e.helpers||[],s=function(e,a){const{filename:i,breakLineCode:t,needIndent:n}=a,l=!1!==a.location,r={filename:i,code:"",column:1,line:1,offset:0,map:void 0,breakLineCode:t,needIndent:n,indentLevel:0};function s(e,a){r.code+=e}function o(e,a=!0){const i=a?t:"";s(n?i+" ".repeat(e):i)}return l&&e.loc&&(r.source=e.loc.source),{context:()=>r,push:s,indent:function(e=!0){const a=++r.indentLevel;e&&o(a)},deindent:function(e=!0){const a=--r.indentLevel;e&&o(a)},newline:function(){o(r.indentLevel)},helper:e=>`_${e}`,needIndent:()=>r.needIndent}}(e,{filename:t,breakLineCode:n,needIndent:l});s.push("normal"===i?"function __msg__ (ctx) {":"(ctx) => {"),s.indent(l),r.length>0&&(s.push(`const { ${De(r.map(e=>`${e}: _${e}`),", ")} } = ctx`),s.newline()),s.push("return "),sa(s,e),s.deindent(l),s.push("}"),delete e.helpers;const{code:o,map:d}=s.context();return{ast:e,code:o,map:d?d.toJSON():void 0}})(r,i))}
|
|
14
|
+
/*!
|
|
15
|
+
* core-base v9.14.5
|
|
16
|
+
* (c) 2025 kazuya kawaguchi
|
|
17
|
+
* Released under the MIT License.
|
|
18
|
+
*/function da(e){return oe(e)&&0===ha(e)&&(te(e,"b")||te(e,"body"))}const ca=["b","body"];const ua=["c","cases"];const ma=["s","static"];const pa=["i","items"];const ga=["t","type"];function ha(e){return ka(e,ga)}const va=["v","value"];function Sa(e,a){const i=ka(e,va);if(null!=i)return i;throw ba(a)}const fa=["m","modifier"];const ya=["k","key"];function ka(e,a,i){for(let t=0;t<a.length;t++){const i=a[t];if(te(e,i)&&null!=e[i])return e[i]}return i}const Da=[...ca,...ua,...ma,...pa,...ya,...fa,...va,...ga];function ba(e){return new Error(`unhandled node type: ${e}`)}const Pa=[];Pa[0]={w:[0],i:[3,0],"[":[4],o:[7]},Pa[1]={w:[1],".":[2],"[":[4],o:[7]},Pa[2]={w:[2],i:[3,0],0:[3,0]},Pa[3]={i:[3,0],0:[3,0],w:[1,1],".":[2,1],"[":[4,1],o:[7,1]},Pa[4]={"'":[5,0],'"':[6,0],"[":[4,2],"]":[1,3],o:8,l:[4,0]},Pa[5]={"'":[4,0],o:8,l:[5,0]},Pa[6]={'"':[4,0],o:8,l:[6,0]};const Ca=/^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;function Ta(e){if(null==e)return"o";switch(e.charCodeAt(0)){case 91:case 93:case 46:case 34:case 39:return e;case 95:case 36:case 45:return"i";case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"w"}return"i"}function Aa(e){const a=e.trim();return("0"!==e.charAt(0)||!isNaN(parseInt(e)))&&(i=a,Ca.test(i)?function(e){const a=e.charCodeAt(0);return a!==e.charCodeAt(e.length-1)||34!==a&&39!==a?e:e.slice(1,-1)}(a):"*"+a);var i}const Fa=new Map;function wa(e,a){return oe(e)?e[a]:null}const La=e=>e,Ea=e=>"",Na=e=>0===e.length?"":function(e,a=""){return e.reduce((e,i,t)=>0===t?e+i:e+a+i,"")}(e),Ra=e=>null==e?"":ne(e)||ue(e)&&e.toString===de?JSON.stringify(e,null,2):String(e);function Ma(e,a){return e=Math.abs(e),2===a?e?e>1?1:0:1:e?Math.min(e,2):0}function Ga(e={}){const a=e.locale,i=function(e){const a=K(e.pluralIndex)?e.pluralIndex:-1;return e.named&&(K(e.named.count)||K(e.named.n))?K(e.named.count)?e.named.count:K(e.named.n)?e.named.n:a:a}(e),t=oe(e.pluralRules)&&re(a)&&le(e.pluralRules[a])?e.pluralRules[a]:Ma,n=oe(e.pluralRules)&&re(a)&&le(e.pluralRules[a])?Ma:void 0,l=e.list||[],r=e.named||Y();K(e.pluralIndex)&&function(e,a){a.count||(a.count=e),a.n||(a.n=e)}(i,r);function s(a){const i=le(e.messages)?e.messages(a):!!oe(e.messages)&&e.messages[a];return i||(e.parent?e.parent.message(a):Ea)}const o=ue(e.processor)&&le(e.processor.normalize)?e.processor.normalize:Na,d=ue(e.processor)&&le(e.processor.interpolate)?e.processor.interpolate:Ra,c={list:e=>l[e],named:e=>r[e],plural:e=>e[t(i,e.length,n)],linked:(a,...i)=>{const[t,n]=i;let l="text",r="";1===i.length?oe(t)?(r=t.modifier||r,l=t.type||l):re(t)&&(r=t||r):2===i.length&&(re(t)&&(r=t||r),re(n)&&(l=n||l));const o=s(a)(c),d="vnode"===l&&ne(o)&&r?o[0]:o;return r?(u=r,e.modifiers?e.modifiers[u]:La)(d,l):d;var u},message:s,type:ue(e.processor)&&re(e.processor.type)?e.processor.type:"text",interpolate:d,normalize:o,values:J(Y(),l,r)};return c}let xa=null;const Ia=Ua("function:translate");function Ua(e){return a=>xa&&xa.emit(e,a)}const za=me(Pe),Ba={FALLBACK_TO_TRANSLATE:za(),CANNOT_FORMAT_NUMBER:za(),FALLBACK_TO_NUMBER_FORMAT:za(),CANNOT_FORMAT_DATE:za(),FALLBACK_TO_DATE_FORMAT:za(),EXPERIMENTAL_CUSTOM_MESSAGE_COMPILER:za(),__EXTEND_POINT__:za()},Oa=Ve,Va=me(Oa),Ha={INVALID_ARGUMENT:Oa,INVALID_DATE_ARGUMENT:Va(),INVALID_ISO_DATE_ARGUMENT:Va(),NOT_SUPPORT_NON_STRING_MESSAGE:Va(),NOT_SUPPORT_LOCALE_PROMISE_VALUE:Va(),NOT_SUPPORT_LOCALE_ASYNC_FUNCTION:Va(),NOT_SUPPORT_LOCALE_TYPE:Va(),__EXTEND_POINT__:Va()};function _a(e){return _e(e,null,void 0)}function qa(e,a){return null!=a.locale?Ka(a.locale):Ka(e.locale)}let ja;function Ka(e){if(re(e))return e;if(le(e)){if(e.resolvedOnce&&null!=ja)return ja;if("Function"===e.constructor.name){const i=e();if(oe(a=i)&&le(a.then)&&le(a.catch))throw _a(Ha.NOT_SUPPORT_LOCALE_PROMISE_VALUE);return ja=i}throw _a(Ha.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION)}throw _a(Ha.NOT_SUPPORT_LOCALE_TYPE);var a}function Wa(e,a,i){return[...new Set([i,...ne(a)?a:oe(a)?Object.keys(a):re(a)?[a]:[i]])]}function Qa(e,a,i){const t=re(i)?i:Xa,n=e;n.__localeChainCache||(n.__localeChainCache=new Map);let l=n.__localeChainCache.get(t);if(!l){l=[];let e=[i];for(;ne(e);)e=Ja(l,e,a);const r=ne(a)||!ue(a)?a:a.default?a.default:null;e=re(r)?[r]:r,ne(e)&&Ja(l,e,!1),n.__localeChainCache.set(t,l)}return l}function Ja(e,a,i){let t=!0;for(let n=0;n<a.length&&se(t);n++){const l=a[n];re(l)&&(t=$a(e,a[n],i))}return t}function $a(e,a,i){let t;const n=a.split("-");do{t=Ya(e,n.join("-"),i),n.splice(-1,1)}while(n.length&&!0===t);return t}function Ya(e,a,i){let t=!1;if(!e.includes(a)&&(t=!0,a)){t="!"!==a[a.length-1];const n=a.replace(/!/g,"");e.push(n),(ne(i)||ue(i))&&i[n]&&(t=i[n])}return t}const Xa="en-US",Za=e=>`${e.charAt(0).toLocaleUpperCase()}${e.substr(1)}`;let ei,ai,ii;function ti(e){ei=e}let ni=null;const li=()=>ni;let ri=null;const si=e=>{ri=e};let oi=0;function di(e={}){const a=le(e.onWarn)?e.onWarn:H,i=re(e.version)?e.version:"9.14.5",t=re(e.locale)||le(e.locale)?e.locale:Xa,n=le(t)?Xa:t,l=ne(e.fallbackLocale)||ue(e.fallbackLocale)||re(e.fallbackLocale)||!1===e.fallbackLocale?e.fallbackLocale:n,r=ue(e.messages)?e.messages:ci(n),s=ue(e.datetimeFormats)?e.datetimeFormats:ci(n),o=ue(e.numberFormats)?e.numberFormats:ci(n),d=J(Y(),e.modifiers,{upper:(e,a)=>"text"===a&&re(e)?e.toUpperCase():"vnode"===a&&oe(e)&&"__v_isVNode"in e?e.children.toUpperCase():e,lower:(e,a)=>"text"===a&&re(e)?e.toLowerCase():"vnode"===a&&oe(e)&&"__v_isVNode"in e?e.children.toLowerCase():e,capitalize:(e,a)=>"text"===a&&re(e)?Za(e):"vnode"===a&&oe(e)&&"__v_isVNode"in e?Za(e.children):e}),c=e.pluralRules||Y(),u=le(e.missing)?e.missing:null,m=!se(e.missingWarn)&&!W(e.missingWarn)||e.missingWarn,p=!se(e.fallbackWarn)&&!W(e.fallbackWarn)||e.fallbackWarn,g=!!e.fallbackFormat,h=!!e.unresolving,v=le(e.postTranslation)?e.postTranslation:null,S=ue(e.processor)?e.processor:null,f=!se(e.warnHtmlMessage)||e.warnHtmlMessage,y=!!e.escapeParameter,k=le(e.messageCompiler)?e.messageCompiler:ei,D=le(e.messageResolver)?e.messageResolver:ai||wa,b=le(e.localeFallbacker)?e.localeFallbacker:ii||Wa,P=oe(e.fallbackContext)?e.fallbackContext:void 0,C=e,T=oe(C.__datetimeFormatters)?C.__datetimeFormatters:new Map,A=oe(C.__numberFormatters)?C.__numberFormatters:new Map,F=oe(C.__meta)?C.__meta:{};oi++;const w={version:i,cid:oi,locale:t,fallbackLocale:l,messages:r,modifiers:d,pluralRules:c,missing:u,missingWarn:m,fallbackWarn:p,fallbackFormat:g,unresolving:h,postTranslation:v,processor:S,warnHtmlMessage:f,escapeParameter:y,messageCompiler:k,messageResolver:D,localeFallbacker:b,fallbackContext:P,onWarn:a,__meta:F};return w.datetimeFormats=s,w.numberFormats=o,w.__datetimeFormatters=T,w.__numberFormatters=A,__INTLIFY_PROD_DEVTOOLS__&&function(e,a,i){xa&&xa.emit("i18n:init",{timestamp:Date.now(),i18n:e,version:a,meta:i})}(w,i,F),w}const ci=e=>({[e]:Y()});function ui(e,a,i,t,n){const{missing:l,onWarn:r}=e;if(null!==l){const t=l(e,i,a,n);return re(t)?t:a}return a}function mi(e,a,i){e.__localeChainCache=new Map,e.localeFallbacker(e,i,a)}function pi(e,a){return e!==a&&e.split("-")[0]===a.split("-")[0]}function gi(e,a){const i=a.indexOf(e);if(-1===i)return!1;for(let t=i+1;t<a.length;t++)if(pi(e,a[t]))return!0;return!1}function hi(e){return a=>function(e,a){const i=(t=a,ka(t,ca));var t;if(null==i)throw ba(0);if(1===ha(i)){const a=function(e){return ka(e,ua,[])}(i);return e.plural(a.reduce((a,i)=>[...a,vi(e,i)],[]))}return vi(e,i)}(a,e)}function vi(e,a){const i=function(e){return ka(e,ma)}(a);if(null!=i)return"text"===e.type?i:e.normalize([i]);{const i=function(e){return ka(e,pa,[])}(a).reduce((a,i)=>[...a,Si(e,i)],[]);return e.normalize(i)}}function Si(e,a){const i=ha(a);switch(i){case 3:case 9:case 7:case 8:return Sa(a,i);case 4:{const t=a;if(te(t,"k")&&t.k)return e.interpolate(e.named(t.k));if(te(t,"key")&&t.key)return e.interpolate(e.named(t.key));throw ba(i)}case 5:{const t=a;if(te(t,"i")&&K(t.i))return e.interpolate(e.list(t.i));if(te(t,"index")&&K(t.index))return e.interpolate(e.list(t.index));throw ba(i)}case 6:{const i=a,t=function(e){return ka(e,fa)}(i),n=function(e){const a=ka(e,ya);if(a)return a;throw ba(6)}(i);return e.linked(Si(e,n),t?Si(e,t):void 0,e.type)}default:throw new Error(`unhandled node on format message part: ${i}`)}}const fi=e=>e;let yi=Y();function ki(e,a={}){let i=!1;const t=a.onError||qe;return a.onError=e=>{i=!0,t(e)},{...oa(e,a),detectError:i}}const Di=(e,a)=>{if(!re(e))throw _a(Ha.NOT_SUPPORT_NON_STRING_MESSAGE);{!se(a.warnHtmlMessage)||a.warnHtmlMessage;const i=(a.onCacheKey||fi)(e),t=yi[i];if(t)return t;const{code:n,detectError:l}=ki(e,a),r=new Function(`return ${n}`)();return l?r:yi[i]=r}};const bi=()=>"",Pi=e=>le(e);function Ci(e,...a){const{fallbackFormat:i,postTranslation:t,unresolving:n,messageCompiler:l,fallbackLocale:r,messages:s}=e,[o,d]=Fi(...a),c=se(d.missingWarn)?d.missingWarn:e.missingWarn,u=se(d.fallbackWarn)?d.fallbackWarn:e.fallbackWarn,m=se(d.escapeParameter)?d.escapeParameter:e.escapeParameter,p=!!d.resolvedMessage,g=re(d.default)||se(d.default)?se(d.default)?l?o:()=>o:d.default:i?l?o:()=>o:"",h=i||""!==g,v=qa(e,d);m&&function(e){ne(e.list)?e.list=e.list.map(e=>re(e)?ee(e):e):oe(e.named)&&Object.keys(e.named).forEach(a=>{re(e.named[a])&&(e.named[a]=ee(e.named[a]))})}(d);let[S,f,y]=p?[o,v,s[v]||Y()]:Ti(e,o,v,r,u,c),k=S,D=o;if(p||re(k)||da(k)||Pi(k)||h&&(k=g,D=k),!(p||(re(k)||da(k)||Pi(k))&&re(f)))return n?-1:o;let b=!1;const P=Pi(k)?k:Ai(e,o,f,k,D,()=>{b=!0});if(b)return k;const C=function(e,a,i,t){const{modifiers:n,pluralRules:l,messageResolver:r,fallbackLocale:s,fallbackWarn:o,missingWarn:d,fallbackContext:c}=e,u=t=>{let n=r(i,t);if(null==n&&c){const[,,e]=Ti(c,t,a,s,o,d);n=r(e,t)}if(re(n)||da(n)){let i=!1;const l=Ai(e,t,a,n,t,()=>{i=!0});return i?bi:l}return Pi(n)?n:bi},m={locale:a,modifiers:n,pluralRules:l,messages:u};e.processor&&(m.processor=e.processor);t.list&&(m.list=t.list);t.named&&(m.named=t.named);K(t.plural)&&(m.pluralIndex=t.plural);return m}(e,f,y,d),T=function(e,a,i){const t=a(i);return t}(0,P,Ga(C));let A=t?t(T,o):T;var F;if(m&&re(A)&&(F=(F=(F=A).replace(/(\w+)\s*=\s*"([^"]*)"/g,(e,a,i)=>`${a}="${ae(i)}"`)).replace(/(\w+)\s*=\s*'([^']*)'/g,(e,a,i)=>`${a}='${ae(i)}'`),/\s*on\w+\s*=\s*["']?[^"'>]+["']?/gi.test(F)&&(F=F.replace(/(\s+)(on)(\w+\s*=)/gi,"$1on$3")),[/(\s+(?:href|src|action|formaction)\s*=\s*["']?)\s*javascript:/gi,/(style\s*=\s*["'][^"']*url\s*\(\s*)javascript:/gi].forEach(e=>{F=F.replace(e,"$1javascript:")}),A=F),__INTLIFY_PROD_DEVTOOLS__){const a={timestamp:Date.now(),key:re(o)?o:Pi(k)?k.key:"",locale:f||(Pi(k)?k.locale:""),format:re(k)?k:Pi(k)?k.source:"",message:A};a.meta=J({},e.__meta,li()||{}),Ia(a)}return A}function Ti(e,a,i,t,n,l){const{messages:r,onWarn:s,messageResolver:o,localeFallbacker:d}=e,c=d(e,t,i);let u,m=Y(),p=null;for(let g=0;g<c.length&&(u=c[g],m=r[u]||Y(),null===(p=o(m,a))&&(p=m[a]),!(re(p)||da(p)||Pi(p)));g++)if(!gi(u,c)){const i=ui(e,a,u,0,"translate");i!==a&&(p=i)}return[p,u,m]}function Ai(e,a,i,t,n,l){const{messageCompiler:r,warnHtmlMessage:s}=e;if(Pi(t)){const e=t;return e.locale=e.locale||i,e.key=e.key||a,e}if(null==r){const e=()=>t;return e.locale=i,e.key=a,e}const o=r(t,function(e,a,i,t,n,l){return{locale:a,key:i,warnHtmlMessage:n,onError:e=>{throw l&&l(e),e},onCacheKey:e=>((e,a,i)=>j({l:e,k:a,s:i}))(a,i,e)}}(0,i,n,0,s,l));return o.locale=i,o.key=a,o.source=t,o}function Fi(...e){const[a,i,t]=e,n=Y();if(!(re(a)||K(a)||Pi(a)||da(a)))throw _a(Ha.INVALID_ARGUMENT);const l=K(a)?String(a):(Pi(a),a);return K(i)?n.plural=i:re(i)?n.default=i:ue(i)&&!Q(i)?n.named=i:ne(i)&&(n.list=i),K(t)?n.plural=t:re(t)?n.default=t:ue(t)&&J(n,t),[l,n]}function wi(e,...a){const{datetimeFormats:i,unresolving:t,fallbackLocale:n,onWarn:l,localeFallbacker:r}=e,{__datetimeFormatters:s}=e,[o,d,c,u]=Ei(...a);se(c.missingWarn)?c.missingWarn:e.missingWarn;se(c.fallbackWarn)?c.fallbackWarn:e.fallbackWarn;const m=!!c.part,p=qa(e,c),g=r(e,n,p);if(!re(o)||""===o)return new Intl.DateTimeFormat(p,u).format(d);let h,v={},S=null;for(let k=0;k<g.length&&(h=g[k],v=i[h]||{},S=v[o],!ue(S));k++)ui(e,o,h,0,"datetime format");if(!ue(S)||!re(h))return t?-1:o;let f=`${h}__${o}`;Q(u)||(f=`${f}__${JSON.stringify(u)}`);let y=s.get(f);return y||(y=new Intl.DateTimeFormat(h,J({},S,u)),s.set(f,y)),m?y.formatToParts(d):y.format(d)}const Li=["localeMatcher","weekday","era","year","month","day","hour","minute","second","timeZoneName","formatMatcher","hour12","timeZone","dateStyle","timeStyle","calendar","dayPeriod","numberingSystem","hourCycle","fractionalSecondDigits"];function Ei(...e){const[a,i,t,n]=e,l=Y();let r,s=Y();if(re(a)){const e=a.match(/(\d{4}-\d{2}-\d{2})(T|\s)?(.*)/);if(!e)throw _a(Ha.INVALID_ISO_DATE_ARGUMENT);const i=e[3]?e[3].trim().startsWith("T")?`${e[1].trim()}${e[3].trim()}`:`${e[1].trim()}T${e[3].trim()}`:e[1].trim();r=new Date(i);try{r.toISOString()}catch(o){throw _a(Ha.INVALID_ISO_DATE_ARGUMENT)}}else if("[object Date]"===ce(a)){if(isNaN(a.getTime()))throw _a(Ha.INVALID_DATE_ARGUMENT);r=a}else{if(!K(a))throw _a(Ha.INVALID_ARGUMENT);r=a}return re(i)?l.key=i:ue(i)&&Object.keys(i).forEach(e=>{Li.includes(e)?s[e]=i[e]:l[e]=i[e]}),re(t)?l.locale=t:ue(t)&&(s=t),ue(n)&&(s=n),[l.key||"",r,l,s]}function Ni(e,a,i){const t=e;for(const n in i){const e=`${a}__${n}`;t.__datetimeFormatters.has(e)&&t.__datetimeFormatters.delete(e)}}function Ri(e,...a){const{numberFormats:i,unresolving:t,fallbackLocale:n,onWarn:l,localeFallbacker:r}=e,{__numberFormatters:s}=e,[o,d,c,u]=Gi(...a);se(c.missingWarn)?c.missingWarn:e.missingWarn;se(c.fallbackWarn)?c.fallbackWarn:e.fallbackWarn;const m=!!c.part,p=qa(e,c),g=r(e,n,p);if(!re(o)||""===o)return new Intl.NumberFormat(p,u).format(d);let h,v={},S=null;for(let k=0;k<g.length&&(h=g[k],v=i[h]||{},S=v[o],!ue(S));k++)ui(e,o,h,0,"number format");if(!ue(S)||!re(h))return t?-1:o;let f=`${h}__${o}`;Q(u)||(f=`${f}__${JSON.stringify(u)}`);let y=s.get(f);return y||(y=new Intl.NumberFormat(h,J({},S,u)),s.set(f,y)),m?y.formatToParts(d):y.format(d)}const Mi=["localeMatcher","style","currency","currencyDisplay","currencySign","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","compactDisplay","notation","signDisplay","unit","unitDisplay","roundingMode","roundingPriority","roundingIncrement","trailingZeroDisplay"];function Gi(...e){const[a,i,t,n]=e,l=Y();let r=Y();if(!K(a))throw _a(Ha.INVALID_ARGUMENT);const s=a;return re(i)?l.key=i:ue(i)&&Object.keys(i).forEach(e=>{Mi.includes(e)?r[e]=i[e]:l[e]=i[e]}),re(t)?l.locale=t:ue(t)&&(r=t),ue(n)&&(r=n),[l.key||"",s,l,r]}function xi(e,a,i){const t=e;for(const n in i){const e=`${a}__${n}`;t.__numberFormatters.has(e)&&t.__numberFormatters.delete(e)}}"boolean"!=typeof __INTLIFY_PROD_DEVTOOLS__&&(Z().__INTLIFY_PROD_DEVTOOLS__=!1),"boolean"!=typeof __INTLIFY_JIT_COMPILATION__&&(Z().__INTLIFY_JIT_COMPILATION__=!1),"boolean"!=typeof __INTLIFY_DROP_MESSAGE_COMPILER__&&(Z().__INTLIFY_DROP_MESSAGE_COMPILER__=!1);const Ii=me(Ba.__EXTEND_POINT__);Ii(),Ii(),Ii(),Ii(),Ii(),Ii(),Ii(),Ii(),Ii();const Ui=Ha.__EXTEND_POINT__,zi=me(Ui),Bi={UNEXPECTED_RETURN_TYPE:Ui,INVALID_ARGUMENT:zi(),MUST_BE_CALL_SETUP_TOP:zi(),NOT_INSTALLED:zi(),NOT_AVAILABLE_IN_LEGACY_MODE:zi(),REQUIRED_VALUE:zi(),INVALID_VALUE:zi(),CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN:zi(),NOT_INSTALLED_WITH_PROVIDE:zi(),UNEXPECTED_ERROR:zi(),NOT_COMPATIBLE_LEGACY_VUE_I18N:zi(),BRIDGE_SUPPORT_VUE_2_ONLY:zi(),MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION:zi(),NOT_AVAILABLE_COMPOSITION_IN_LEGACY:zi(),__EXTEND_POINT__:zi()};function Oi(e,...a){return _e(e,null,void 0)}const Vi=q("__translateVNode"),Hi=q("__datetimeParts"),_i=q("__numberParts"),qi=q("__setPluralRules"),ji=q("__injectWithOption"),Ki=q("__dispose");function Wi(e){if(!oe(e))return e;if(da(e))return e;for(const a in e)if(te(e,a))if(a.includes(".")){const i=a.split("."),t=i.length-1;let n=e,l=!1;for(let e=0;e<t;e++){if("__proto__"===i[e])throw new Error(`unsafe key: ${i[e]}`);if(i[e]in n||(n[i[e]]=Y()),!oe(n[i[e]])){l=!0;break}n=n[i[e]]}if(l||(da(n)?Da.includes(i[t])||delete e[a]:(n[i[t]]=e[a],delete e[a])),!da(n)){const e=n[i[t]];oe(e)&&Wi(e)}}else oe(e[a])&&Wi(e[a]);return e}function Qi(e,a){const{messages:i,__i18n:t,messageResolver:n,flatJson:l}=a,r=ue(i)?i:ne(t)?Y():{[e]:Y()};if(ne(t)&&t.forEach(e=>{if("locale"in e&&"resource"in e){const{locale:a,resource:i}=e;a?(r[a]=r[a]||Y(),ge(i,r[a])):ge(i,r)}else re(e)&&ge(JSON.parse(e),r)}),null==n&&l)for(const s in r)te(r,s)&&Wi(r[s]);return r}function Ji(e){return e.type}function $i(e,a,i){let t=oe(a.messages)?a.messages:Y();"__i18nGlobal"in i&&(t=Qi(e.locale.value,{messages:t,__i18n:i.__i18nGlobal}));const n=Object.keys(t);if(n.length&&n.forEach(a=>{e.mergeLocaleMessage(a,t[a])}),oe(a.datetimeFormats)){const i=Object.keys(a.datetimeFormats);i.length&&i.forEach(i=>{e.mergeDateTimeFormat(i,a.datetimeFormats[i])})}if(oe(a.numberFormats)){const i=Object.keys(a.numberFormats);i.length&&i.forEach(i=>{e.mergeNumberFormat(i,a.numberFormats[i])})}}function Yi(e){return D(b,null,e,0)}const Xi=()=>[],Zi=()=>!1;let et=0;function at(e){return(a,i,t,n)=>e(i,t,v()||void 0,n)}function it(e={},a){const{__root:i,__injectWithOption:t}=e,n=void 0===i,s=e.flatJson,o=_?l:m,d=!!e.translateExistCompatible;let u=!se(e.inheritLocale)||e.inheritLocale;const p=o(i&&u?i.locale.value:re(e.locale)?e.locale:Xa),g=o(i&&u?i.fallbackLocale.value:re(e.fallbackLocale)||ne(e.fallbackLocale)||ue(e.fallbackLocale)||!1===e.fallbackLocale?e.fallbackLocale:p.value),h=o(Qi(p.value,e)),v=o(ue(e.datetimeFormats)?e.datetimeFormats:{[p.value]:{}}),S=o(ue(e.numberFormats)?e.numberFormats:{[p.value]:{}});let f=i?i.missingWarn:!se(e.missingWarn)&&!W(e.missingWarn)||e.missingWarn,y=i?i.fallbackWarn:!se(e.fallbackWarn)&&!W(e.fallbackWarn)||e.fallbackWarn,k=i?i.fallbackRoot:!se(e.fallbackRoot)||e.fallbackRoot,D=!!e.fallbackFormat,b=le(e.missing)?e.missing:null,P=le(e.missing)?at(e.missing):null,C=le(e.postTranslation)?e.postTranslation:null,T=i?i.warnHtmlMessage:!se(e.warnHtmlMessage)||e.warnHtmlMessage,A=!!e.escapeParameter;const F=i?i.modifiers:ue(e.modifiers)?e.modifiers:{};let w,L=e.pluralRules||i&&i.pluralRules;w=(()=>{n&&si(null);const a={version:"9.14.5",locale:p.value,fallbackLocale:g.value,messages:h.value,modifiers:F,pluralRules:L,missing:null===P?void 0:P,missingWarn:f,fallbackWarn:y,fallbackFormat:D,unresolving:!0,postTranslation:null===C?void 0:C,warnHtmlMessage:T,escapeParameter:A,messageResolver:e.messageResolver,messageCompiler:e.messageCompiler,__meta:{framework:"vue"}};a.datetimeFormats=v.value,a.numberFormats=S.value,a.__datetimeFormatters=ue(w)?w.__datetimeFormatters:void 0,a.__numberFormatters=ue(w)?w.__numberFormatters:void 0;const i=di(a);return n&&si(i),i})(),mi(w,p.value,g.value);const E=r({get:()=>p.value,set:e=>{p.value=e,w.locale=p.value}}),N=r({get:()=>g.value,set:e=>{g.value=e,w.fallbackLocale=g.value,mi(w,p.value,e)}}),R=r(()=>h.value),M=r(()=>v.value),G=r(()=>S.value);const x=(e,a,t,l,r,s)=>{let o;p.value,g.value,h.value,v.value,S.value;try{__INTLIFY_PROD_DEVTOOLS__,n||(w.fallbackContext=i?ri:void 0),o=e(w)}finally{__INTLIFY_PROD_DEVTOOLS__,n||(w.fallbackContext=void 0)}if("translate exists"!==t&&K(o)&&-1===o||"translate exists"===t&&!o){const[e,t]=a();return i&&k?l(i):r(e)}if(s(o))return o;throw Oi(Bi.UNEXPECTED_RETURN_TYPE)};function I(...e){return x(a=>Reflect.apply(Ci,null,[a,...e]),()=>Fi(...e),"translate",a=>Reflect.apply(a.t,a,[...e]),e=>e,e=>re(e))}const U={normalize:function(e){return e.map(e=>re(e)||K(e)||se(e)?Yi(String(e)):e)},interpolate:e=>e,type:"vnode"};function z(e){return h.value[e]||{}}et++,i&&_&&(c(i.locale,e=>{u&&(p.value=e,w.locale=e,mi(w,p.value,g.value))}),c(i.fallbackLocale,e=>{u&&(g.value=e,w.fallbackLocale=e,mi(w,p.value,g.value))}));const B={id:et,locale:E,fallbackLocale:N,get inheritLocale(){return u},set inheritLocale(e){u=e,e&&i&&(p.value=i.locale.value,g.value=i.fallbackLocale.value,mi(w,p.value,g.value))},get availableLocales(){return Object.keys(h.value).sort()},messages:R,get modifiers(){return F},get pluralRules(){return L||{}},get isGlobal(){return n},get missingWarn(){return f},set missingWarn(e){f=e,w.missingWarn=f},get fallbackWarn(){return y},set fallbackWarn(e){y=e,w.fallbackWarn=y},get fallbackRoot(){return k},set fallbackRoot(e){k=e},get fallbackFormat(){return D},set fallbackFormat(e){D=e,w.fallbackFormat=D},get warnHtmlMessage(){return T},set warnHtmlMessage(e){T=e,w.warnHtmlMessage=e},get escapeParameter(){return A},set escapeParameter(e){A=e,w.escapeParameter=e},t:I,getLocaleMessage:z,setLocaleMessage:function(e,a){if(s){const i={[e]:a};for(const e in i)te(i,e)&&Wi(i[e]);a=i[e]}h.value[e]=a,w.messages=h.value},mergeLocaleMessage:function(e,a){h.value[e]=h.value[e]||{};const i={[e]:a};if(s)for(const t in i)te(i,t)&&Wi(i[t]);ge(a=i[e],h.value[e]),w.messages=h.value},getPostTranslationHandler:function(){return le(C)?C:null},setPostTranslationHandler:function(e){C=e,w.postTranslation=e},getMissingHandler:function(){return b},setMissingHandler:function(e){null!==e&&(P=at(e)),b=e,w.missing=P},[qi]:function(e){L=e,w.pluralRules=L}};return B.datetimeFormats=M,B.numberFormats=G,B.rt=function(...e){const[a,i,t]=e;if(t&&!oe(t))throw Oi(Bi.INVALID_ARGUMENT);return I(a,i,J({resolvedMessage:!0},t||{}))},B.te=function(e,a){return x(()=>{if(!e)return!1;const i=z(re(a)?a:p.value),t=w.messageResolver(i,e);return d?null!=t:da(t)||Pi(t)||re(t)},()=>[e],"translate exists",i=>Reflect.apply(i.te,i,[e,a]),Zi,e=>se(e))},B.tm=function(e){const a=function(e){let a=null;const i=Qa(w,g.value,p.value);for(let t=0;t<i.length;t++){const n=h.value[i[t]]||{},l=w.messageResolver(n,e);if(null!=l){a=l;break}}return a}(e);return null!=a?a:i&&i.tm(e)||{}},B.d=function(...e){return x(a=>Reflect.apply(wi,null,[a,...e]),()=>Ei(...e),"datetime format",a=>Reflect.apply(a.d,a,[...e]),()=>"",e=>re(e))},B.n=function(...e){return x(a=>Reflect.apply(Ri,null,[a,...e]),()=>Gi(...e),"number format",a=>Reflect.apply(a.n,a,[...e]),()=>"",e=>re(e))},B.getDateTimeFormat=function(e){return v.value[e]||{}},B.setDateTimeFormat=function(e,a){v.value[e]=a,w.datetimeFormats=v.value,Ni(w,e,a)},B.mergeDateTimeFormat=function(e,a){v.value[e]=J(v.value[e]||{},a),w.datetimeFormats=v.value,Ni(w,e,a)},B.getNumberFormat=function(e){return S.value[e]||{}},B.setNumberFormat=function(e,a){S.value[e]=a,w.numberFormats=S.value,xi(w,e,a)},B.mergeNumberFormat=function(e,a){S.value[e]=J(S.value[e]||{},a),w.numberFormats=S.value,xi(w,e,a)},B[ji]=t,B[Vi]=function(...e){return x(a=>{let i;const t=a;try{t.processor=U,i=Reflect.apply(Ci,null,[t,...e])}finally{t.processor=null}return i},()=>Fi(...e),"translate",a=>a[Vi](...e),e=>[Yi(e)],e=>ne(e))},B[Hi]=function(...e){return x(a=>Reflect.apply(wi,null,[a,...e]),()=>Ei(...e),"datetime format",a=>a[Hi](...e),Xi,e=>re(e)||ne(e))},B[_i]=function(...e){return x(a=>Reflect.apply(Ri,null,[a,...e]),()=>Gi(...e),"number format",a=>a[_i](...e),Xi,e=>re(e)||ne(e))},B}function tt(e={},a){{const a=it(function(e){const a=re(e.locale)?e.locale:Xa,i=re(e.fallbackLocale)||ne(e.fallbackLocale)||ue(e.fallbackLocale)||!1===e.fallbackLocale?e.fallbackLocale:a,t=le(e.missing)?e.missing:void 0,n=!se(e.silentTranslationWarn)&&!W(e.silentTranslationWarn)||!e.silentTranslationWarn,l=!se(e.silentFallbackWarn)&&!W(e.silentFallbackWarn)||!e.silentFallbackWarn,r=!se(e.fallbackRoot)||e.fallbackRoot,s=!!e.formatFallbackMessages,o=ue(e.modifiers)?e.modifiers:{},d=e.pluralizationRules,c=le(e.postTranslation)?e.postTranslation:void 0,u=!re(e.warnHtmlInMessage)||"off"!==e.warnHtmlInMessage,m=!!e.escapeParameterHtml,p=!se(e.sync)||e.sync;let g=e.messages;if(ue(e.sharedMessages)){const a=e.sharedMessages;g=Object.keys(a).reduce((e,i)=>{const t=e[i]||(e[i]={});return J(t,a[i]),e},g||{})}const{__i18n:h,__root:v,__injectWithOption:S}=e,f=e.datetimeFormats,y=e.numberFormats,k=e.flatJson,D=e.translateExistCompatible;return{locale:a,fallbackLocale:i,messages:g,flatJson:k,datetimeFormats:f,numberFormats:y,missing:t,missingWarn:n,fallbackWarn:l,fallbackRoot:r,fallbackFormat:s,modifiers:o,pluralRules:d,postTranslation:c,warnHtmlMessage:u,escapeParameter:m,messageResolver:e.messageResolver,inheritLocale:p,translateExistCompatible:D,__i18n:h,__root:v,__injectWithOption:S}}(e)),{__extender:i}=e,t={id:a.id,get locale(){return a.locale.value},set locale(e){a.locale.value=e},get fallbackLocale(){return a.fallbackLocale.value},set fallbackLocale(e){a.fallbackLocale.value=e},get messages(){return a.messages.value},get datetimeFormats(){return a.datetimeFormats.value},get numberFormats(){return a.numberFormats.value},get availableLocales(){return a.availableLocales},get formatter(){return{interpolate:()=>[]}},set formatter(e){},get missing(){return a.getMissingHandler()},set missing(e){a.setMissingHandler(e)},get silentTranslationWarn(){return se(a.missingWarn)?!a.missingWarn:a.missingWarn},set silentTranslationWarn(e){a.missingWarn=se(e)?!e:e},get silentFallbackWarn(){return se(a.fallbackWarn)?!a.fallbackWarn:a.fallbackWarn},set silentFallbackWarn(e){a.fallbackWarn=se(e)?!e:e},get modifiers(){return a.modifiers},get formatFallbackMessages(){return a.fallbackFormat},set formatFallbackMessages(e){a.fallbackFormat=e},get postTranslation(){return a.getPostTranslationHandler()},set postTranslation(e){a.setPostTranslationHandler(e)},get sync(){return a.inheritLocale},set sync(e){a.inheritLocale=e},get warnHtmlInMessage(){return a.warnHtmlMessage?"warn":"off"},set warnHtmlInMessage(e){a.warnHtmlMessage="off"!==e},get escapeParameterHtml(){return a.escapeParameter},set escapeParameterHtml(e){a.escapeParameter=e},get preserveDirectiveContent(){return!0},set preserveDirectiveContent(e){},get pluralizationRules(){return a.pluralRules||{}},__composer:a,t(...e){const[i,t,n]=e,l={};let r=null,s=null;if(!re(i))throw Oi(Bi.INVALID_ARGUMENT);const o=i;return re(t)?l.locale=t:ne(t)?r=t:ue(t)&&(s=t),ne(n)?r=n:ue(n)&&(s=n),Reflect.apply(a.t,a,[o,r||s||{},l])},rt:(...e)=>Reflect.apply(a.rt,a,[...e]),tc(...e){const[i,t,n]=e,l={plural:1};let r=null,s=null;if(!re(i))throw Oi(Bi.INVALID_ARGUMENT);const o=i;return re(t)?l.locale=t:K(t)?l.plural=t:ne(t)?r=t:ue(t)&&(s=t),re(n)?l.locale=n:ne(n)?r=n:ue(n)&&(s=n),Reflect.apply(a.t,a,[o,r||s||{},l])},te:(e,i)=>a.te(e,i),tm:e=>a.tm(e),getLocaleMessage:e=>a.getLocaleMessage(e),setLocaleMessage(e,i){a.setLocaleMessage(e,i)},mergeLocaleMessage(e,i){a.mergeLocaleMessage(e,i)},d:(...e)=>Reflect.apply(a.d,a,[...e]),getDateTimeFormat:e=>a.getDateTimeFormat(e),setDateTimeFormat(e,i){a.setDateTimeFormat(e,i)},mergeDateTimeFormat(e,i){a.mergeDateTimeFormat(e,i)},n:(...e)=>Reflect.apply(a.n,a,[...e]),getNumberFormat:e=>a.getNumberFormat(e),setNumberFormat(e,i){a.setNumberFormat(e,i)},mergeNumberFormat(e,i){a.mergeNumberFormat(e,i)},getChoiceIndex:(e,a)=>-1};return t.__extender=i,t}}const nt={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:e=>"parent"===e||"global"===e,default:"parent"},i18n:{type:Object}};function lt(e){return h}const rt=p({name:"i18n-t",props:J({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:e=>K(e)||!isNaN(e)}},nt),setup(e,a){const{slots:i,attrs:t}=a,n=e.i18n||ht({useScope:e.scope,__useComponent:!0});return()=>{const l=Object.keys(i).filter(e=>"_"!==e),r=Y();e.locale&&(r.locale=e.locale),void 0!==e.plural&&(r.plural=re(e.plural)?+e.plural:e.plural);const s=function({slots:e},a){if(1===a.length&&"default"===a[0])return(e.default?e.default():[]).reduce((e,a)=>[...e,...a.type===h?a.children:[a]],[]);return a.reduce((a,i)=>{const t=e[i];return t&&(a[i]=t()),a},Y())}(a,l),o=n[Vi](e.keypath,s,r),d=J(Y(),t),c=re(e.tag)||oe(e.tag)?e.tag:lt();return g(c,d,o)}}});function st(e,a,i,t){const{slots:n,attrs:l}=a;return()=>{const a={part:!0};let r=Y();e.locale&&(a.locale=e.locale),re(e.format)?a.key=e.format:oe(e.format)&&(re(e.format.key)&&(a.key=e.format.key),r=Object.keys(e.format).reduce((a,t)=>i.includes(t)?J(Y(),a,{[t]:e.format[t]}):a,Y()));const s=t(e.value,a,r);let o=[a.key];ne(s)?o=s.map((e,a)=>{const i=n[e.type],t=i?i({[e.type]:e.value,index:a,parts:s}):[e.value];var l;return ne(l=t)&&!re(l[0])&&(t[0].key=`${e.type}-${a}`),t}):re(s)&&(o=[s]);const d=J(Y(),l),c=re(e.tag)||oe(e.tag)?e.tag:lt();return g(c,d,o)}}const ot=p({name:"i18n-n",props:J({value:{type:Number,required:!0},format:{type:[String,Object]}},nt),setup(e,a){const i=e.i18n||ht({useScope:e.scope,__useComponent:!0});return st(e,a,Mi,(...e)=>i[_i](...e))}}),dt=p({name:"i18n-d",props:J({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},nt),setup(e,a){const i=e.i18n||ht({useScope:e.scope,__useComponent:!0});return st(e,a,Li,(...e)=>i[Hi](...e))}});function ct(e){if(re(e))return{path:e};if(ue(e)){if(!("path"in e))throw Oi(Bi.REQUIRED_VALUE);return e}throw Oi(Bi.INVALID_VALUE)}function ut(e){const{path:a,locale:i,args:t,choice:n,plural:l}=e,r={},s=t||{};return re(i)&&(r.locale=i),K(n)&&(r.plural=n),K(l)&&(r.plural=l),[a,s,r]}function mt(e,a,...i){const t=ue(i[0])?i[0]:{},n=!!t.useI18nComponentName;(!se(t.globalInstall)||t.globalInstall)&&([n?"i18n":rt.name,"I18nT"].forEach(a=>e.component(a,rt)),[ot.name,"I18nN"].forEach(a=>e.component(a,ot)),[dt.name,"I18nD"].forEach(a=>e.component(a,dt))),e.directive("t",function(e){const a=a=>{const{instance:i,modifiers:t,value:n}=a;if(!i||!i.$)throw Oi(Bi.UNEXPECTED_ERROR);const l=function(e,a){const i=e;if("composition"===e.mode)return i.__getInstance(a)||e.global;{const t=i.__getInstance(a);return null!=t?t.__composer:e.global.__composer}}(e,i.$),r=ct(n);return[Reflect.apply(l.t,l,[...ut(r)]),l]};return{created:(i,t)=>{const[n,l]=a(t);_&&e.global===l&&(i.__i18nWatcher=c(l.locale,()=>{t.instance&&t.instance.$forceUpdate()})),i.__composer=l,i.textContent=n},unmounted:e=>{_&&e.__i18nWatcher&&(e.__i18nWatcher(),e.__i18nWatcher=void 0,delete e.__i18nWatcher),e.__composer&&(e.__composer=void 0,delete e.__composer)},beforeUpdate:(e,{value:a})=>{if(e.__composer){const i=e.__composer,t=ct(a);e.textContent=Reflect.apply(i.t,i,[...ut(t)])}},getSSRProps:e=>{const[i]=a(e);return{textContent:i}}}}(a))}function pt(e,a){e.locale=a.locale||e.locale,e.fallbackLocale=a.fallbackLocale||e.fallbackLocale,e.missing=a.missing||e.missing,e.silentTranslationWarn=a.silentTranslationWarn||e.silentFallbackWarn,e.silentFallbackWarn=a.silentFallbackWarn||e.silentFallbackWarn,e.formatFallbackMessages=a.formatFallbackMessages||e.formatFallbackMessages,e.postTranslation=a.postTranslation||e.postTranslation,e.warnHtmlInMessage=a.warnHtmlInMessage||e.warnHtmlInMessage,e.escapeParameterHtml=a.escapeParameterHtml||e.escapeParameterHtml,e.sync=a.sync||e.sync,e.__composer[qi](a.pluralizationRules||e.pluralizationRules);const i=Qi(e.locale,{messages:a.messages,__i18n:a.__i18n});return Object.keys(i).forEach(a=>e.mergeLocaleMessage(a,i[a])),a.datetimeFormats&&Object.keys(a.datetimeFormats).forEach(i=>e.mergeDateTimeFormat(i,a.datetimeFormats[i])),a.numberFormats&&Object.keys(a.numberFormats).forEach(i=>e.mergeNumberFormat(i,a.numberFormats[i])),e}const gt=q("global-vue-i18n");function ht(e={}){const a=v();if(null==a)throw Oi(Bi.MUST_BE_CALL_SETUP_TOP);if(!a.isCE&&null!=a.appContext.app&&!a.appContext.app.__VUE_I18N_SYMBOL__)throw Oi(Bi.NOT_INSTALLED);const i=function(e){{const a=S(e.isCE?gt:e.appContext.app.__VUE_I18N_SYMBOL__);if(!a)throw Oi(e.isCE?Bi.NOT_INSTALLED_WITH_PROVIDE:Bi.UNEXPECTED_ERROR);return a}}(a),t=function(e){return"composition"===e.mode?e.global:e.global.__composer}(i),n=Ji(a),s=function(e,a){return Q(e)?"__i18n"in a?"local":"global":e.useScope?e.useScope:"local"}(e,n);if(__VUE_I18N_LEGACY_API__&&"legacy"===i.mode&&!e.__useComponent){if(!i.allowComposition)throw Oi(Bi.NOT_AVAILABLE_IN_LEGACY_MODE);return function(e,a,i,t={}){const n="local"===a,s=m(null);if(n&&e.proxy&&!e.proxy.$options.i18n&&!e.proxy.$options.__i18n)throw Oi(Bi.MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION);const o=se(t.inheritLocale)?t.inheritLocale:!re(t.locale),d=l(!n||o?i.locale.value:re(t.locale)?t.locale:Xa),c=l(!n||o?i.fallbackLocale.value:re(t.fallbackLocale)||ne(t.fallbackLocale)||ue(t.fallbackLocale)||!1===t.fallbackLocale?t.fallbackLocale:d.value),u=l(Qi(d.value,t)),p=l(ue(t.datetimeFormats)?t.datetimeFormats:{[d.value]:{}}),g=l(ue(t.numberFormats)?t.numberFormats:{[d.value]:{}}),h=n?i.missingWarn:!se(t.missingWarn)&&!W(t.missingWarn)||t.missingWarn,v=n?i.fallbackWarn:!se(t.fallbackWarn)&&!W(t.fallbackWarn)||t.fallbackWarn,S=n?i.fallbackRoot:!se(t.fallbackRoot)||t.fallbackRoot,f=!!t.fallbackFormat,y=le(t.missing)?t.missing:null,D=le(t.postTranslation)?t.postTranslation:null,b=n?i.warnHtmlMessage:!se(t.warnHtmlMessage)||t.warnHtmlMessage,P=!!t.escapeParameter,C=n?i.modifiers:ue(t.modifiers)?t.modifiers:{},T=t.pluralRules||n&&i.pluralRules;function A(){return[d.value,c.value,u.value,p.value,g.value]}const F=r({get:()=>s.value?s.value.locale.value:d.value,set:e=>{s.value&&(s.value.locale.value=e),d.value=e}}),w=r({get:()=>s.value?s.value.fallbackLocale.value:c.value,set:e=>{s.value&&(s.value.fallbackLocale.value=e),c.value=e}}),L=r(()=>s.value?s.value.messages.value:u.value),E=r(()=>p.value),N=r(()=>g.value);function R(){return s.value?s.value.getPostTranslationHandler():D}function M(e){s.value&&s.value.setPostTranslationHandler(e)}function G(){return s.value?s.value.getMissingHandler():y}function x(e){s.value&&s.value.setMissingHandler(e)}function I(e){return A(),e()}function U(...e){return s.value?I(()=>Reflect.apply(s.value.t,null,[...e])):I(()=>"")}function z(...e){return s.value?Reflect.apply(s.value.rt,null,[...e]):""}function B(...e){return s.value?I(()=>Reflect.apply(s.value.d,null,[...e])):I(()=>"")}function O(...e){return s.value?I(()=>Reflect.apply(s.value.n,null,[...e])):I(()=>"")}function V(e){return s.value?s.value.tm(e):{}}function H(e,a){return!!s.value&&s.value.te(e,a)}function _(e){return s.value?s.value.getLocaleMessage(e):{}}function q(e,a){s.value&&(s.value.setLocaleMessage(e,a),u.value[e]=a)}function j(e,a){s.value&&s.value.mergeLocaleMessage(e,a)}function K(e){return s.value?s.value.getDateTimeFormat(e):{}}function Q(e,a){s.value&&(s.value.setDateTimeFormat(e,a),p.value[e]=a)}function J(e,a){s.value&&s.value.mergeDateTimeFormat(e,a)}function $(e){return s.value?s.value.getNumberFormat(e):{}}function Y(e,a){s.value&&(s.value.setNumberFormat(e,a),g.value[e]=a)}function X(e,a){s.value&&s.value.mergeNumberFormat(e,a)}const Z={get id(){return s.value?s.value.id:-1},locale:F,fallbackLocale:w,messages:L,datetimeFormats:E,numberFormats:N,get inheritLocale(){return s.value?s.value.inheritLocale:o},set inheritLocale(e){s.value&&(s.value.inheritLocale=e)},get availableLocales(){return s.value?s.value.availableLocales:Object.keys(u.value)},get modifiers(){return s.value?s.value.modifiers:C},get pluralRules(){return s.value?s.value.pluralRules:T},get isGlobal(){return!!s.value&&s.value.isGlobal},get missingWarn(){return s.value?s.value.missingWarn:h},set missingWarn(e){s.value&&(s.value.missingWarn=e)},get fallbackWarn(){return s.value?s.value.fallbackWarn:v},set fallbackWarn(e){s.value&&(s.value.missingWarn=e)},get fallbackRoot(){return s.value?s.value.fallbackRoot:S},set fallbackRoot(e){s.value&&(s.value.fallbackRoot=e)},get fallbackFormat(){return s.value?s.value.fallbackFormat:f},set fallbackFormat(e){s.value&&(s.value.fallbackFormat=e)},get warnHtmlMessage(){return s.value?s.value.warnHtmlMessage:b},set warnHtmlMessage(e){s.value&&(s.value.warnHtmlMessage=e)},get escapeParameter(){return s.value?s.value.escapeParameter:P},set escapeParameter(e){s.value&&(s.value.escapeParameter=e)},t:U,getPostTranslationHandler:R,setPostTranslationHandler:M,getMissingHandler:G,setMissingHandler:x,rt:z,d:B,n:O,tm:V,te:H,getLocaleMessage:_,setLocaleMessage:q,mergeLocaleMessage:j,getDateTimeFormat:K,setDateTimeFormat:Q,mergeDateTimeFormat:J,getNumberFormat:$,setNumberFormat:Y,mergeNumberFormat:X};function ee(e){e.locale.value=d.value,e.fallbackLocale.value=c.value,Object.keys(u.value).forEach(a=>{e.mergeLocaleMessage(a,u.value[a])}),Object.keys(p.value).forEach(a=>{e.mergeDateTimeFormat(a,p.value[a])}),Object.keys(g.value).forEach(a=>{e.mergeNumberFormat(a,g.value[a])}),e.escapeParameter=P,e.fallbackFormat=f,e.fallbackRoot=S,e.fallbackWarn=v,e.missingWarn=h,e.warnHtmlMessage=b}return k(()=>{if(null==e.proxy||null==e.proxy.$i18n)throw Oi(Bi.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);const i=s.value=e.proxy.$i18n.__composer;"global"===a?(d.value=i.locale.value,c.value=i.fallbackLocale.value,u.value=i.messages.value,p.value=i.datetimeFormats.value,g.value=i.numberFormats.value):n&&ee(i)}),Z}(a,s,t,e)}if("global"===s)return $i(t,e,n),t;if("parent"===s){let n=function(e,a,i=!1){let t=null;const n=a.root;let l=function(e,a=!1){if(null==e)return null;return a&&e.vnode.ctx||e.parent}(a,i);for(;null!=l;){const a=e;if("composition"===e.mode)t=a.__getInstance(l);else if(__VUE_I18N_LEGACY_API__){const e=a.__getInstance(l);null!=e&&(t=e.__composer,i&&t&&!t[ji]&&(t=null))}if(null!=t)break;if(n===l)break;l=l.parent}return t}(i,a,e.__useComponent);return null==n&&(n=t),n}const o=i;let d=o.__getInstance(a);if(null==d){const i=J({},e);"__i18n"in n&&(i.__i18n=n.__i18n),t&&(i.__root=t),d=it(i),o.__composerExtend&&(d[Ki]=o.__composerExtend(d)),function(e,a,i){f(()=>{},a),y(()=>{const t=i;e.__deleteInstance(a);const n=t[Ki];n&&(n(),delete t[Ki])},a)}(o,a,d),o.__setInstance(a,d)}return d}const vt=["locale","fallbackLocale","availableLocales"],St=["t","rt","d","n","tm","te"];var ft;if("boolean"!=typeof __VUE_I18N_FULL_INSTALL__&&(Z().__VUE_I18N_FULL_INSTALL__=!0),"boolean"!=typeof __VUE_I18N_LEGACY_API__&&(Z().__VUE_I18N_LEGACY_API__=!0),"boolean"!=typeof __INTLIFY_JIT_COMPILATION__&&(Z().__INTLIFY_JIT_COMPILATION__=!1),"boolean"!=typeof __INTLIFY_DROP_MESSAGE_COMPILER__&&(Z().__INTLIFY_DROP_MESSAGE_COMPILER__=!1),"boolean"!=typeof __INTLIFY_PROD_DEVTOOLS__&&(Z().__INTLIFY_PROD_DEVTOOLS__=!1),__INTLIFY_JIT_COMPILATION__?ti(function(e,a){if(__INTLIFY_JIT_COMPILATION__&&!__INTLIFY_DROP_MESSAGE_COMPILER__&&re(e)){!se(a.warnHtmlMessage)||a.warnHtmlMessage;const i=(a.onCacheKey||fi)(e),t=yi[i];if(t)return t;const{ast:n,detectError:l}=ki(e,{...a,location:!1,jit:!0}),r=hi(n);return l?r:yi[i]=r}{const a=e.cacheKey;if(a){return yi[a]||(yi[a]=hi(e))}return hi(e)}}):ti(Di),ai=function(e,a){if(!oe(e))return null;let i=Fa.get(a);if(i||(i=function(e){const a=[];let i,t,n,l,r,s,o,d=-1,c=0,u=0;const m=[];function p(){const a=e[d+1];if(5===c&&"'"===a||6===c&&'"'===a)return d++,n="\\"+a,m[0](),!0}for(m[0]=()=>{void 0===t?t=n:t+=n},m[1]=()=>{void 0!==t&&(a.push(t),t=void 0)},m[2]=()=>{m[0](),u++},m[3]=()=>{if(u>0)u--,c=4,m[0]();else{if(u=0,void 0===t)return!1;if(t=Aa(t),!1===t)return!1;m[1]()}};null!==c;)if(d++,i=e[d],"\\"!==i||!p()){if(l=Ta(i),o=Pa[c],r=o[l]||o.l||8,8===r)return;if(c=r[0],void 0!==r[1]&&(s=m[r[1]],s&&(n=i,!1===s())))return;if(7===c)return a}}(a),i&&Fa.set(a,i)),!i)return null;const t=i.length;let n=e,l=0;for(;l<t;){const e=i[l];if(Da.includes(e)&&da(n))return null;const a=n[e];if(void 0===a)return null;if(le(n))return null;n=a,l++}return n},ii=Qa,__INTLIFY_PROD_DEVTOOLS__){const e=Z();e.__INTLIFY__=!0,ft=e.__INTLIFY_DEVTOOLS_GLOBAL_HOOK__,xa=ft}const yt=[{code:"zh-CN",name:"简体中文",flag:"🇨🇳",rtl:!1},{code:"en-US",name:"English",flag:"🇺🇸",rtl:!1},{code:"ja-JP",name:"日本語",flag:"🇯🇵",rtl:!1},{code:"ko-KR",name:"한국어",flag:"🇰🇷",rtl:!1},{code:"ru-RU",name:"Русский",flag:"🇷🇺",rtl:!1},{code:"fr-FR",name:"Français",flag:"🇫🇷",rtl:!1},{code:"es-ES",name:"Español",flag:"🇪🇸",rtl:!1},{code:"pt-BR",name:"Português",flag:"🇧🇷",rtl:!1},{code:"de-DE",name:"Deutsch",flag:"🇩🇪",rtl:!1},{code:"it-IT",name:"Italiano",flag:"🇮🇹",rtl:!1},{code:"th-TH",name:"ไทย",flag:"🇹🇭",rtl:!1},{code:"vi-VN",name:"Tiếng Việt",flag:"🇻🇳",rtl:!1},{code:"id-ID",name:"Bahasa Indonesia",flag:"🇮🇩",rtl:!1},{code:"my-MS",name:"Bahasa Melayu",flag:"🇲🇾",rtl:!1},{code:"hi-IN",name:"हिन्दी",flag:"🇮🇳",rtl:!1},{code:"tr-TR",name:"Türkçe",flag:"🇹🇷",rtl:!1},{code:"ar-SA",name:"العربية",flag:"🇸🇦",rtl:!0},{code:"pl-PL",name:"Polski",flag:"🇵🇱",rtl:!1},{code:"sw-KE",name:"Kiswahili",flag:"🇰🇪",rtl:!1}],kt=localStorage.getItem("language"),Dt=kt||"zh-CN";kt?console.log("使用已保存的语言:",kt):(localStorage.setItem("language","zh-CN"),console.log("设置默认语言为中文 (zh-CN)"));const bt=function(e={}){const a=__VUE_I18N_LEGACY_API__&&se(e.legacy)?e.legacy:__VUE_I18N_LEGACY_API__,i=!se(e.globalInjection)||e.globalInjection,t=!__VUE_I18N_LEGACY_API__||!a||!!e.allowComposition,n=new Map,[l,r]=function(e,a){const i=d();{const t=__VUE_I18N_LEGACY_API__&&a?i.run(()=>tt(e)):i.run(()=>it(e));if(null==t)throw Oi(Bi.UNEXPECTED_ERROR);return[i,t]}}(e,a),s=q("");{const e={get mode(){return __VUE_I18N_LEGACY_API__&&a?"legacy":"composition"},get allowComposition(){return t},async install(t,...n){if(t.__VUE_I18N_SYMBOL__=s,t.provide(t.__VUE_I18N_SYMBOL__,e),ue(n[0])){const a=n[0];e.__composerExtend=a.__composerExtend,e.__vueI18nExtend=a.__vueI18nExtend}let l=null;!a&&i&&(l=function(e,a){const i=Object.create(null);vt.forEach(e=>{const t=Object.getOwnPropertyDescriptor(a,e);if(!t)throw Oi(Bi.UNEXPECTED_ERROR);const n=u(t.value)?{get:()=>t.value.value,set(e){t.value.value=e}}:{get:()=>t.get&&t.get()};Object.defineProperty(i,e,n)}),e.config.globalProperties.$i18n=i,St.forEach(i=>{const t=Object.getOwnPropertyDescriptor(a,i);if(!t||!t.value)throw Oi(Bi.UNEXPECTED_ERROR);Object.defineProperty(e.config.globalProperties,`$${i}`,t)});const t=()=>{delete e.config.globalProperties.$i18n,St.forEach(a=>{delete e.config.globalProperties[`$${a}`]})};return t}(t,e.global)),__VUE_I18N_FULL_INSTALL__&&mt(t,e,...n),__VUE_I18N_LEGACY_API__&&a&&t.mixin(function(e,a,i){return{beforeCreate(){const t=v();if(!t)throw Oi(Bi.UNEXPECTED_ERROR);const n=this.$options;if(n.i18n){const t=n.i18n;if(n.__i18n&&(t.__i18n=n.__i18n),t.__root=a,this===this.$root)this.$i18n=pt(e,t);else{t.__injectWithOption=!0,t.__extender=i.__vueI18nExtend,this.$i18n=tt(t);const e=this.$i18n;e.__extender&&(e.__disposer=e.__extender(this.$i18n))}}else if(n.__i18n)if(this===this.$root)this.$i18n=pt(e,n);else{this.$i18n=tt({__i18n:n.__i18n,__injectWithOption:!0,__extender:i.__vueI18nExtend,__root:a});const e=this.$i18n;e.__extender&&(e.__disposer=e.__extender(this.$i18n))}else this.$i18n=e;n.__i18nGlobal&&$i(a,n,n),this.$t=(...e)=>this.$i18n.t(...e),this.$rt=(...e)=>this.$i18n.rt(...e),this.$tc=(...e)=>this.$i18n.tc(...e),this.$te=(e,a)=>this.$i18n.te(e,a),this.$d=(...e)=>this.$i18n.d(...e),this.$n=(...e)=>this.$i18n.n(...e),this.$tm=e=>this.$i18n.tm(e),i.__setInstance(t,this.$i18n)},mounted(){},unmounted(){const e=v();if(!e)throw Oi(Bi.UNEXPECTED_ERROR);const a=this.$i18n;delete this.$t,delete this.$rt,delete this.$tc,delete this.$te,delete this.$d,delete this.$n,delete this.$tm,a.__disposer&&(a.__disposer(),delete a.__disposer,delete a.__extender),i.__deleteInstance(e),delete this.$i18n}}}(r,r.__composer,e));const o=t.unmount;t.unmount=()=>{l&&l(),e.dispose(),o()}},get global(){return r},dispose(){l.stop()},__instances:n,__getInstance:function(e){return n.get(e)||null},__setInstance:function(e,a){n.set(e,a)},__deleteInstance:function(e){n.delete(e)}};return e}}({legacy:!1,locale:Dt,fallbackLocale:"zh-CN",globalInjection:!0,messages:{"zh-CN":{common:{appName:"ST广播系统",loading:"加载中...",confirm:"确认",cancel:"取消",save:"保存",delete:"删除",edit:"编辑",add:"添加",search:"搜索",refresh:"刷新",submit:"提交",reset:"重置",logout:"退出登录",logoutConfirm:"确定要退出登录吗?",logoutTitle:"退出确认",back:"返回",success:"成功",error:"错误",warning:"警告",info:"提示",yes:"是",no:"否",operation:"操作",status:"状态",index:"序号",name:"名称",description:"描述",createTime:"创建时间",updateTime:"更新时间",close:"关闭",query:"查询",stop:"停止",toggle:"启用/禁用",actions:"操作",seconds:"秒",minutes:"分钟",hours:"小时",moveUp:"上移",moveDown:"下移",quick:"快速",unknown:"未知",months:"月",years:"年",copy:"复制"},login:{title:"登录",subtitle:"广播系统",username:"用户名",password:"密码",usernamePlaceholder:"请输入用户名",passwordPlaceholder:"请输入密码",rememberMe:"记住我",forgotPassword:"忘记密码?",loginButton:"登录",logging:"登录中...",loginSuccess:"登录成功",loginFailed:"登录失败",usernameRequired:"请输入用户名",passwordRequired:"请输入密码",invalidCredentials:"用户名或密码错误"},clientLogin:{subtitle:"客户端版",hostPlaceholder:"服务器地址,如 192.168.1.100:12080",hostHint:"输入服务器 IP:端口,不带 http:// 也可",hostRequired:"请输入服务器地址"},dashboard:{title:"仪表盘",welcome:"欢迎回来",systemStatus:"系统运行正常",quickActions:"快捷操作",addDevice:"添加设备",createGroup:"创建分组",scheduleTask:"定时任务",broadcastNow:"立即广播"},log:{cacheSize:"缓存",clear30Days:"清除30日前",clearAll:"清除所有",index:"序号",time:"时间",description:"播放描述",duration:"播放时长(s)",filename:"文件名",preview:"试听",play:"播放",noLogs:"暂无播放日志",prevPage:"上一页",nextPage:"下一页",currentPage:"当前第",records:"条",clickQuery:"请选择用户后点击查询"},menu:{dashboard:"仪表盘",devices:"设备管理",groups:"分组管理",tasks:"定时任务",media:"媒体管理",broadcast:"广播控制",alarm:"报警系统",account:"账户管理",home:"首页",mine:"我的",settings:"系统设置",apiTest:"API测试",logs:"播放日志"},devices:{title:"设备管理",list:"设备列表",online:"在线",offline:"离线",playing:"播放中",volume:"音量",adjustVolume:"调节音量",addDevice:"添加设备",editDevice:"编辑设备",deleteDevice:"删除设备",deviceName:"设备名称",serialNumber:"序列号",lastUpdate:"最后更新",refreshList:"刷新设备列表",searchPlaceholder:"搜索设备名称或序列号...",batchVolume:"批量调节音量",noDevices:"暂无设备,点击右上角添加设备",unnamedDevice:"未命名设备",debugSound:"调试音",changeVolume:"修改音量",changeName:"修改名称",changeSerial:"修改序列号",id:"ID",volumeNotSet:"未设置",neverOnline:"从未上线",expiredDisabled:"已过期禁用",unknown:"未知",openDebugSound:"开启调试音",closeDebugSound:"关闭调试音",unknownStatus:"未知状态",addDeviceTitle:"添加设备",deviceNameRequired:"设备名称",deviceSerialRequired:"设备序列号",deviceKeyRequired:"设备密钥",deviceNamePlaceholder:"请输入设备名称",deviceSerialPlaceholder:"请输入设备序列号",deviceKeyPlaceholder:"请输入设备注册密钥",deviceKeyHint:"注册密钥用于将设备注册到系统,相当于设备的密码",fillTestData:"填充测试数据",renameTitle:"重命名设备",newDeviceNamePlaceholder:"请输入新的设备名称",debugSoundTitle:"调试音",selectDebugSoundStatus:"请选择调试音状态",editSerialTitle:"编辑设备序列号",currentSerial:"当前序列号",currentSerialPlaceholder:"当前设备序列号",newSerial:"新序列号",newSerialPlaceholder:"请输入32位新序列号",serialLengthHint:"序列号长度必须为32位",editDeviceTitle:"编辑设备",macAddress:"MAC地址",macAddressPlaceholder:"请输入MAC地址",ipAddress:"IP地址",ipAddressPlaceholder:"请输入IP地址",port:"端口",portPlaceholder:"请输入端口号",adjustVolumeTitle:"调节音量",volumeRange:"范围:1-63",preciseSetting:"精确设置:",batchAdjustVolumeTitle:"批量调节音量",selectedDevices:"已选设备:",devicesCount:"个设备",confirmAdjust:"确认调节",adding:"添加中...",saving:"保存中...",adjusting:"调节中...",confirmButton:"确认",cancelButton:"取消",deviceNameValidationError:"请输入设备名称",deviceSerialValidationError:"请输入设备序列号",deviceKeyValidationError:"请输入设备密钥",newDeviceNameValidationError:"请输入设备名称",deviceSerialLengthError:"请输入设备序列号",newSerialLengthError:"序列号长度必须为32位",debugSoundSelectError:"请选择开启或关闭调试音",confirmOperation:"确认操作",confirmDelete:"确定要删除设备",deleteCannotUndo:"吗?此操作不可撤销!",addDeviceSuccess:"设备添加成功",addDeviceFailed:"设备添加失败",deviceRenameSuccess:"设备重命名成功",deviceRenameFailed:"设备重命名失败",deviceEditSuccess:"设备编辑成功",deviceEditFailed:"设备编辑失败",deviceSerialEditSuccess:"设备序列号修改成功",deviceSerialEditFailed:"设备序列号修改失败",debugSoundSuccess:"调试音设置成功",debugSoundFailed:"调试音设置失败",deleteDeviceSuccess:"设备删除成功",deleteDeviceFailed:"设备删除失败",adjustVolumeSuccess:"音量已设置为",adjustVolumeFailed:"音量调节失败",batchAdjustSuccess:"批量调节音量成功,共",batchAdjustFailed:"批量调节音量失败",volumeValidationError:"音量必须在1-63之间",selectDevicesFirst:"请先选择需要调节音量的设备",successfullyFetched:"成功获取",devicesUnit:"个设备",deviceListFormatError:"设备列表数据格式错误",fetchDeviceListFailed:"获取设备列表失败",unknownError:"未知错误",deleteDevice:"删除设备",listView:"列表视图",cardView:"卡片视图",scanDevices:"扫描设备",deviceScan:"设备扫描",seed:"设备SEED",seedPlaceholder:"请输入32位十六进制SEED",scanButton:"扫描",scanning:"扫描中...",noDeviceFound:"未发现设备",scanNotSupported:"设备扫描仅支持桌面客户端",autoIP:"自动获取IP",warmMode:"语音提示",mediaServer:"媒体服务器",mediaPort:"媒体端口",gateway:"网关",subnetMask:"子网掩码",dns:"DNS",deviceIP:"设备IP",applyConfig:"应用配置",clearDevice:"清除设备",deviceConfigured:"设备配置已发送",deviceConfigureFailed:"设备配置失败",deviceCleared:"清除命令已发送",scanConfigTitle:"设备网络配置",scannedDevices:"已发现设备",scanHint:"点击扫描按钮,将广播查找局域网内的所有设备",testComm:"测试通信",testCommBtn:"测试",console:"控制台",clearConsole:"清空",consoleEmpty:"等待通信...",invalidIP:"IP 格式不正确",invalidMask:"子网掩码格式不正确",invalidGateway:"网关格式不正确",invalidMediaIP:"媒体服务器 IP 格式不正确",invalidPort:"端口范围 1-65535",invalidDNS:"DNS 格式不正确",dnsPlaceholder:"0.0.0.0 = 系统默认",advanced:"高级",soundCard:"声卡控制",getAmixerStatus:"获取状态",amixerApply:"应用",amixerGetting:"获取中...",amixerOn:"开",amixerOff:"关",amixerDAC:"DAC 播放音量",amixerHeadphoneVol:"耳机音量",amixerHeadphoneSwitch:"耳机开关",amixerHeadphoneRoute:"耳机音源",amixerLineIn:"线路输入音量",amixerFMIn:"FM 输入音量",amixerMicIn:"麦克风输入音量",amixerMicBoost:"麦克风增益",amixerADCCapture:"ADC 采集音量",amixerADCLeftFM:"左声道 FM 采集",amixerADCRightFM:"右声道 FM 采集",amixerADCLeftOut:"左输出 采集",amixerADCRightOut:"右输出 采集",amixerADCLineIn:"线路输入 采集",amixerADCMic:"麦克风 采集",amixerLeftFM:"左声道 FM",amixerLeftLeftDAC:"左声道 左DAC",amixerLeftRightDAC:"左声道 右DAC",amixerLeftLineIn:"左声道 线路输入",amixerLeftMicIn:"左声道 麦克风",amixerRightFM:"右声道 FM",amixerRightLeftDAC:"右声道 左DAC",amixerRightRightDAC:"右声道 右DAC",amixerRightLineIn:"右声道 线路输入",amixerRightMicIn:"右声道 麦克风",amixerGroupDecode:"解码输出",amixerGroupCapture:"采集混音输入",amixerGroupLeft:"左声道输出混音",amixerGroupRight:"右声道输出混音",amixerGroupGain:"增益配置",amixerRouteDAC:"DAC",amixerRouteMixer:"Mixer",amixerGetSuccess:"声卡状态已获取",amixerGetFailed:"获取声卡状态失败",amixerSetSuccess:"设置已发送",amixerSetFailed:"设置失败"},groups:{title:"分组管理",list:"分组列表",deviceCount:"设备数量",addGroup:"添加分组",editGroup:"编辑分组",deleteGroup:"删除分组",groupName:"分组名称",manage:"分组管理",inputName:"输入分组名称",add:"添加分组",playMenu:"播放菜单",id:"ID",name:"名称",actions:"操作",noGroups:"暂无分组",untitled:"未命名分组",editDevices:"编辑设备",editVideo:"编辑视频",previewVideo:"预览视频",groupPlay:"分组播放",allDevices:"所有设备",selectedDevices:"已选设备",selectAtLeastOneDevice:"请至少选择一个设备",videoUrl:"视频地址",inputVideoUrl:"请输入视频地址",noVideoUrl:"未设置视频地址",noVideoUrlSet:"未设置mu38u直播流地址",playSequence:"播放顺序",fileInterval:"文件间隔",playCount:"播放次数",noPlayingItems:"当前没有播放中的序列",playList:"播放列表",nameRequired:"分组名称不能为空",loadSuccess:"成功加载 {count} 个分组",loadFailed:"加载分组列表失败",addSuccess:"分组添加成功",addFailed:"分组添加失败",deleteConfirm:"此操作将永久删除该分组,是否继续?",deleteSuccess:"删除成功",deleteFailed:"删除失败",saveSuccess:"保存成功",saveFailed:"保存失败",loadDevicesFailed:"加载设备列表失败",invalidGroupId:"无效的分组ID",unknownDevice:"未知设备",playFeatureComingSoon:"分组播放功能即将推出",stopPlayFeatureComingSoon:"停止播放功能即将推出",playListFeatureComingSoon:"播放列表功能即将推出",searchDevicePlaceholder:"输入设备名称或ID搜索...",searchResult:"找到 {filtered} 个设备(共 {total} 个)",totalDevices:"共 {count} 个设备",noSearchResult:"未找到匹配的设备",noSelectedDevices:"尚未选择设备",searchFilePlaceholder:"输入文件名称或ID搜索...",availableFiles:"可选文件",selectedFiles:"已选文件",noSelectedFiles:"尚未选择文件",doubleClickHint:"双击添加重复文件",unknownFile:"未知文件",playMode:"播放模式",playMode1:"顺序播放1次",playMode2:"顺序播放2次",playMode3:"顺序播放3次",totalDuration:"预计总时长",durationFormula:"计算:(总时长 + 间隔)× 循环次数",playModeHint:"循环次数,1-99",intervalMaxHint:"最大间隔3小时(10800秒)",estimatedDuration:"预计时长",forceStopDuration:"强制停止时长(可选)",forceStopHint:"到此时长自动停止。必须小于预计时长。0表示不强制停止",selectAtLeastOneFile:"请至少选择一个文件",loadFilesFailed:"加载文件列表失败",groupHasNoDevices:"该分组没有设备",playStarted:"播放已成功开始",playFailed:"播放开始失败",invalidPlayId:"无效的播放ID",stopPlayConfirm:"确定要停止播放吗?",stopPlayInProgress:"正在停止播放,请稍候...",stopPlaySuccess:"播放已成功停止",stopPlaySuccessAndClosed:"播放已成功停止,播放列表已关闭",stopPlayFailed:"停止播放失败",selectGroupForPlay:"选择要播放的分组",devices:"个设备",devicesCount:"个设备",startPlay:"开始播放"},tasks:{title:"定时任务",titleDescription:"管理定时播放任务,支持批量操作和任务分组",list:"任务列表",addTask:"添加任务",editTask:"编辑任务",deleteTask:"删除任务",taskName:"任务名称",executeTime:"执行时间",playMode:"播放模式",repeat:"重复",files:"文件",devices:"设备",allGroups:"所有任务分组",addTaskGroup:"添加任务分组",deleteTaskGroup:"删除任务分组",disableTaskGroup:"禁用任务分组",enableTaskGroup:"启用任务分组",taskGroup:"任务分组",taskGroupName:"分组名称",enterGroupName:"输入任务分组名称",applyTaskGroup:"应用任务分组",task:"任务",selectGroup:"选择任务分组",startTime:"开始时间",duration:"播放时长",loopCount:"循环次数",startDate:"开始日期",endDate:"结束日期",endTime:"结束时间",changeGroup:"更换分组",noGroup:"无分组",tryPlay:"试播",batchDisable:"批量禁用",batchEnable:"批量启用",batchEditDevices:"批量编辑设备",batchEditFiles:"批量编辑文件",batchApplyGroup:"批量应用分组",batchEditTime:"批量编辑时间",batchEditLoopCount:"批量编辑循环次数",batchEditDuration:"批量编辑时长",batchDelete:"批量删除",batchCopy:"批量复制",noTasks:"暂无任务",selectedCount:"已选择 {count} 个任务",randomPlay:"随机播放",loopPlay:"循环 {count} 次",selectDevices:"选择播放设备",selectFiles:"选择音频文件",allDevices:"所有设备",selectedDevices:"已选设备",allFiles:"所有文件",selectedFiles:"已选文件",editTaskDevices:"编辑任务设备",editTaskFiles:"编辑任务文件",taskDuration:"任务时长",intervalDuration:"间隔时长",timeRange:"时间范围",to:"至",playCount:"播放次数",sequentialPlay:"顺序播放",randomPlayMode:"随机播放",playModeChange:"播放模式切换",enableOtherLimit:"其他限制不需要",enableStartDate:"启用开始日期",enableEndDate:"启用结束日期",enterTaskName:"输入任务名称",noTasksSelected:"未选择任务",devicesRequired:"未选择设备",filesRequired:"未选择音频文件",saveSuccess:"保存成功",saveFailed:"保存失败",deleteSuccess:"删除成功",deleteFailed:"删除失败",deleteConfirm:"此操作将永久删除该任务,是否继续?",enableSuccess:"任务已启用",disableSuccess:"任务已禁用",startPlaySuccess:"播放已开始",startPlayFailed:"播放启动失败",stopPlaySuccess:"播放已停止",stopPlayFailed:"播放停止失败",groupNameRequired:"任务分组名称不能为空",addGroupSuccess:"任务分组添加成功",addGroupFailed:"任务分组添加失败",deleteGroupSuccess:"任务分组删除成功",deleteGroupFailed:"任务分组删除失败",deleteGroupConfirm:"确定要删除该任务分组吗?分组内的任务不会被删除。",noTasksInGroup:"该任务分组暂无任务",batchPartialFailed:"{failed} 个任务操作失败",disableGroupSuccess:"任务分组禁用成功",disableGroupFailed:"任务分组禁用失败",enableGroupSuccess:"任务分组启用成功",enableGroupFailed:"任务分组启用失败",applyGroupSuccess:"任务分组应用成功",applyGroupFailed:"任务分组应用失败",selectGroupFirst:"请先选择任务分组",batchDisableSuccess:"批量禁用成功",batchEnableSuccess:"批量启用成功",unknownDevice:"未知设备",unknownFile:"未知文件",calculate:"计算",monday:"星期一",tuesday:"星期二",wednesday:"星期三",thursday:"星期四",friday:"星期五",saturday:"星期六",sunday:"星期日",index:"序号",weekdays:"播放日",noLimit:"无限制",autoCalc:"自动计算",taskNameRequired:"任务名称不能为空",startTimeRequired:"开始时间不能为空",cannotDeletePlaying:"任务正在播放中,请先停止",cannotDeleteEnabled:"任务已启用,请先禁用",cannotEditPlaying:"任务正在播放中,请先停止",disabled:"已禁用",enabled:"已启用",enableTask:"启用",disableTask:"禁用",noSelectedFiles:"尚未选择文件",clickToAddHint:"点击左侧文件添加",estimatedDuration:"预计时长",advancedSettings:"高级设置",playSettings:"播放设置",forceStopDuration:"强制停止时长",forceStopHint:"设置后播放到此时长会自动停止。必须小于预计时长。0或空表示不强制停止",durationRequired:"随机播放需要设置播放时长",durationFormula:"计算:(总时长 + 间隔 × 文件数)× 循环次数",dateHint:"注意:开始日期和结束日期当天都会播放。如果开始日期和结束日期相同则只在当天播放。开始日期不能晚于结束日期。",dateRangeError:"开始日期不能晚于结束日期",batchDurationHint:"顺序播放时,如果节目单循环总时长 > 播放时长,则时长到了就结束;如果节目单循环总时长 < 播放时长,则循环完就自动结束",copyConfirm:"确定要批量复制选中的任务吗?此操作不可撤销!",copySuccess:"任务复制成功",copyFailed:"任务复制失败",copyCount:"复制个数",copyNewName:"默认新名字",copyNewNamePlaceholder:"默认新名字",copyInterval:"时间间隔",copyIntervalUnit:"分钟",copyPreview:"预览列表",timeConflict:"时间冲突",dateRange:"日期范围"},media:{title:"媒体管理",list:"文件列表",upload:"上传文件",delete:"删除",play:"试听",download:"下载",fileName:"文件名",fileSize:"文件大小",fileType:"文件类型",uploadTime:"上传时间",duration:"时长",noFiles:"暂无文件",dropHint:"拖拽 MP3 文件到此处上传",dropSub:"支持 MP3 格式,单个文件不超过 40MB",selectFiles:"选择文件",selectFolder:"选择文件夹",onlyMp3:"只支持 MP3 格式文件",fileTooLarge:"文件大小超过 40MB 限制",uploadFailed:"上传失败",uploadSuccess:"成功上传 {count} 个文件",uploading:"上传中...",uploadDone:"上传完成",deleteSingleConfirm:"确定要删除文件",deleteConfirm:"确认删除选中的文件?此操作不可撤销",deleteSuccess:"删除成功",deleteFailed:"删除失败",batchDelete:"批量删除",batchDeleteSuccess:"成功删除 {count} 个文件",selectedCount:"已选择 {count} 个文件",tts:"文字转语音",ttsFileName:"文件名",ttsFileNamePlaceholder:"请输入保存的资源名称",ttsVoice:"语音选择",ttsSpeed:"语速",ttsSpeedSlow:"慢",ttsSpeedMedium:"中",ttsSpeedFast:"快",ttsText:"输入文字",ttsTextPlaceholder:"请输入要转换为语音的文字内容",ttsTextTooShort:"文字内容至少需要3个字符",ttsSuccess:"文字转语音生成成功",ttsFailed:"文字转语音生成失败",radio:"电台",addRadio:"添加电台",radioName:"电台名称",radioNamePlaceholder:"输入电台名称",radioUrl:"电台地址",radioDuration:"播放时长(秒)",radioDurationPlaceholder:"手动输入秒数",radio10min:"10分",radio20min:"20分",radio30min:"30分",radio1hour:"1小时",radioNameRequired:"请输入电台名称",radioUrlRequired:"请输入电台地址",radioUrlInvalid:"地址需以http开头、mp3结尾",radioDurationRequired:"请输入播放时长",radioAddSuccess:"添加成功",radioAddFailed:"添加失败"},broadcast:{title:"广播控制",serverConfig:"服务器配置",selectDevices:"选择设备",quickSelectGroup:"快速选择分组",selectAllOnline:"全选在线设备",clearSelection:"清除选择",selectedDevices:"已选择 {count} 台设备",noDevices:"暂无设备",noMatch:"没有匹配的设备",broadcastControl:"喊话控制",playLevel:"播放优先级",userLevel:"用户等级",holdToTalk:"按住喊话",releaseToStop:"松开停止",broadcasting:"正在喊话...",connected:"已连接",notConnected:"未连接",selectFiles:"选择文件",startBroadcast:"开始广播",stopBroadcast:"停止喊话",playbackMode:"播放模式",interval:"间隔",loop:"循环次数",audioSource:"音源选择",microphone:"麦克风",noAudioDevice:"未检测到音频输入设备",audioReady:"音源就绪",inputVolume:"采集音量",enableMicrophone:"连接麦克风",startPreview:"开始预览"},alarm:{title:"报警系统",settings:"报警设置",history:"报警历史",enable:"启用",disable:"禁用",triggerCondition:"触发条件",alarmFile:"报警文件",linkage:"联动设备",selectDevices:"选择设备",searchDevice:"搜索设备名称或序列号",selectAllOnline:"全选在线",clearSelection:"清除选择",selectedCount:"已选择 {count} 台设备",noDevices:"暂无设备",noMatch:"没有匹配的设备",alarmConfig:"报警配置",alarmName:"报警名称",alarmNamePlaceholder:"请输入报警名称",audioSource:"音频来源",selectFile:"选择已上传文件",inputUrl:"手动输入URL",selectFilePlaceholder:"请选择音频文件",urlPlaceholder:"请输入音频文件URL",registerAlarm:"注册报警",registering:"注册中...",registerResult:"注册结果",registerSuccess:"注册成功",registerFailed:"注册失败",noDevicesSelected:"请至少选择一台设备",noAudioConfigured:"请配置音频文件",online:"在线",offline:"离线",deviceSn:"设备序列号",registeredList:"已注册报警",noRegistered:"暂无已注册的报警",loadListFailed:"获取报警列表失败",deviceName:"设备名称",fileName:"文件名",refreshList:"刷新列表",unregisterAlarm:"注销",unregisterConfirm:"确定要注销此报警吗?",unregisterSuccess:"注销成功",unregisterFailed:"注销失败",linkageTitle:"报警联动",linkageDesc:"A 设备触发时,联动设备(包括自身)播放指定音频",linkagePlanName:"方案名称",linkagePlanNamePlaceholder:"请输入方案名称",linkageDevices:"联动设备",linkageDevicesHint:"选择触发和播放的设备(可包含触发设备自身)",linkageAudio:"音频文件",addLinkagePlan:"添加联动方案",adding:"添加中...",linkageList:"联动方案列表",noLinkagePlans:"暂无联动方案",linkageDeviceCount:"设备数",addLinkageSuccess:"联动方案添加成功",addLinkageFailed:"联动方案添加失败",linkagePlanNameRequired:"请输入方案名称",linkageNoDevices:"请至少选择一台设备",linkageNoAudio:"请配置音频文件",linkageTriggerDevice:"触发设备",linkageTriggerDeviceHint:"当此设备触发报警时,联动设备将播放音频",linkageTriggerDevicePlaceholder:"请选择触发报警的设备",linkageNoTriggerDevice:"请选择触发设备",registerTrigger:"注册",registerTriggerTitle:"注册触发设备",registerTriggerSuccess:"触发设备注册成功",registerTriggerFailed:"触发设备注册失败",linkageNoTriggerDevice:"请选择触发设备",registering:"注册中...",noDevices:"暂无设备",loadLinkageFailed:"获取联动方案失败",deleteLinkageConfirm:"确定要删除联动方案",deleteLinkageFailed:"删除联动方案失败",forceUnregTitle:"强制解除报警",forceUnregHint:"无论设备注册了单机报警还是联动报警,强制解除后设备将不再触发报警",forceUnregButton:"强制解除报警注册",forceUnregModalHint:"选择一台设备,强制解除其所有报警注册(单机报警+联动报警)",forceUnregConfirm:"确认解除",forceUnregSuccess:"强制解除报警成功",forceUnregFailed:"强制解除报警失败"},account:{title:"账户管理",profile:"个人资料",changePassword:"修改密码",subAccounts:"子账户",logs:"操作日志",username:"用户名",nickname:"昵称",email:"邮箱",phone:"手机号",role:"角色",level:"等级",addSubUser:"添加子账户",usernamePlaceholder:"请输入用户名",passwordPlaceholder:"请输入密码",nicknamePlaceholder:"请输入昵称",beizhu:"备注",beizhuPlaceholder:"请输入备注",password:"密码",levelLabel:"等级",levelPlaceholder:"请选择等级",mask:"权限掩码",maskPlaceholder:"40位权限掩码(0/1)",maskDefault:"00000000000000000000000000000000000000000000",permissions:"权限设置",permCreateSub:"可创建子账户",permManageDevice:"可添加/删除设备",permUploadFile:"可上传文件",addSuccess:"子账户添加成功",addFailed:"子账户添加失败",listFailed:"获取子账户列表失败",noSubUsers:"暂无子账户",createTime:"创建时间",status:"状态",statusNormal:"正常",statusDisabled:"禁用",userLevel:"用户等级",playLevel:"播放等级",passwordShow:"密码",refreshList:"刷新列表",usernameRequired:"请输入用户名",passwordRequired:"请输入密码",permChangeFailed:"权限修改失败",adding:"添加中...",deleteConfirm:"确定要删除子账户 {name} 吗?此操作不可撤销!",deleteSuccess:"子账户删除成功",deleteFailed:"子账户删除失败",editDevices:"编辑设备",editDevicesSuccess:"设备修改成功",editDevicesFailed:"设备修改失败",loadDevicesFailed:"获取设备列表失败",searchDevice:"搜索设备名称或ID",noDevices:"暂无设备",resetToken:"重置Token",resetTokenConfirm:"确定要重置 {name} 的 Token 吗?",resetTokenSuccess:"Token 重置成功",resetTokenFailed:"Token 重置失败",newToken:"新 Token",newPasswordPlaceholder:"请输入新密码(至少6位)",confirmPasswordPlaceholder:"请再次输入新密码",pwdNotMatch:"两次密码输入不一致",changePwdSuccess:"密码修改成功",changePwdFailed:"密码修改失败",pwdLengthError:"密码至少6位"},admin:{title:"后台管理",adminRole:"管理员",navGroupUser:"用户资料",navGroupSystem:"系统设置",navGroupGallery:"展报信息",navUsers:"用户&权限",navInfo:"信息操作",navUpload:"其他",navAnnounce:"公布信息管理",navBilling:"计费资料设置",navGallery:"展报概览",copied:"已复制",users:{title:"用户&权限管理",addUser:"添加新用户",toolRename:"修改账号名",toolRenameOld:"原账号号码",toolRenameNew:"新账号名字",toolRenameBtn:"确认修改",toolQueryPwd:"查询密码",toolQueryAccount:"需要查询的账号",toolQueryBtn:"查询",toolSearchSn:"查询设备归属",toolSnPlaceholder:"设备序列号(32位)",thId:"ID",thUsername:"用户名",thNickname:"昵称",thUserType:"用户类型",thLevel:"账户层级",thActions:"操作",tagGm:"管理员",tagUser:"用户",tagSub:"子账户",btnManage:"管理",noData:"暂无数据",addUserTitle:"添加新用户",usernamePlaceholder:"用户名(至少6位)",passwordPlaceholder:"密码(至少6位)",detailTitle:"{name} - 权限&设备",permCanCreateSub:"可创建子账户",permCannotCreateSub:"不可创建子账户",permCanAddDevice:"可添加设备",permCannotAddDevice:"不可添加设备",permCanUpload:"可上传文件",permCannotUpload:"不可上传文件",btnEnable:"开启",btnDisable:"关闭",registeredDevices:"已注册设备",devName:"设备名",devSeed:"序列号",devStatus:"状态",devType:"类型",devIswarning:"B类",devKind:"K类",devSave:"保存",statusOnline:"在线",statusOffline:"离线",statusPlaying:"播放中",statusDisabled:"禁用",searchResultTitle:"查询结果",searchResultUser:"用户名",searchResultPwd:"密码",addUserLengthError:"用户名和密码至少6位",addFailed:"添加失败",renameLengthError:"输入不合法",renameSuccess:"修改成功",renameFailed:"修改失败",queryLengthError:"输入不合法",queryFailed:"查询失败",snLengthError:"序列号必须是32位",maskSaveSuccess:"保存成功",saveSuccess:"保存成功",toolChangePwd:"修改密码",selectUser:"选择用户",newPasswordPlaceholder:"请输入新密码(至少6位)",toolChangePwdBtn:"确认修改",pwdLengthError:"密码至少6位",changePwdSuccess:"密码修改成功",changePwdFailed:"密码修改失败"},info:{title:"用户APP隐私协议",placeholder:"请输入隐私协议内容(至少3000字)",charCount:"{count} 字",saveBtn:"保存用户隐私协议",tooShort:"内容太短,至少3000字",saveSuccess:"保存成功",saveFailed:"保存失败"},upload:{title:"头像&Logo上传",wxAvatar:"WX头像上传",wxAvatarHint:"推荐尺寸:260x260 方形,JPG格式,最大500KB",logo:"Logo上传",logoHint:"推荐尺寸:透明底 680x360,PNG格式,最大500KB",clickUpload:"点击上传",sizeError:"图片大小不能超过500KB",uploadSuccess:"上传成功",uploadFailed:"上传失败"},announce:{title:"公布信息管理",scrollTitle:"滚动信息公告条",scrollPlaceholder:"请输入公告内容",getCurrent:"获取当前",saveAnnounce:"保存公告",galleryTitle:"轮播信息",addGallery:"添加轮播信息",deleteGallery:"删除",noticeLabel:"滚动公告:",noData:"暂无数据",addTitle:"添加轮播信息",titlePlaceholder:"输入轮播描述(最多50字)",fileHint:"选择JPG图片(最大2MB)",fillTitle:"请填写描述",selectFile:"请选择图片",tooShort:"公告太短",saved:"公告已更新",saveFailed:"更新失败",uploadFailed:"上传失败",deleteConfirm:"确定删除该信息?"},billing:{title:"计费资料设置",addDevice:"添加受控设备",refreshStatus:"刷新状态",thId:"ID",thSn:"设备序列号",thExpiry:"到期日期",thStatus:"状态",thEnable:"启用",thDisable:"禁用",thRenew:"续费",thDelete:"删除",thPay:"月费",thIccid:"ICCID",tagNormal:"正常",tagExpired:"过期",btn99y:"99年",btnDisable:"禁用",btnDelete:"删除",btnSave:"保存",noDevices:"暂无设备",addTitle:"添加受控设备",snLabel:"设备序列号(32位)",snPlaceholder:"设备序列号",expiryLabel:"到期日期",snLengthError:"序列号必须是32位",expiryRequired:"请选择到期日期",addFailed:"添加失败",editSuccess:"修改成功",editFailed:"修改失败",deleteConfirm:"确定删除?"},gallery:{title:"展报概览",addGallery:"添加轮播信息",deleteBtn:"删除",noticeLabel:"滚动公告",noData:"暂无展报信息",addTitle:"添加轮播信息",titlePlaceholder:"输入轮播描述(最多50字)",fileHint:"选择JPG图片(最大2MB)",fillTitle:"请填写描述",selectFile:"请选择图片",uploadFailed:"上传失败",deleteConfirm:"确定删除该信息?"}},settings:{title:"系统设置",language:"语言",theme:"主题",darkMode:"深色模式",lightMode:"浅色模式",diabloMode:"暗黑模式",notification:"通知",sound:"声音设置",about:"关于",version:"版本"},language:{title:"选择语言",chinese:"简体中文",english:"English",korean:"한국어",thai:"ไทย",vietnamese:"Tiếng Việt",arabic:"العربية",malay:"Bahasa Melayu",japanese:"日本語",russian:"Русский",french:"Français",spanish:"Español",portuguese:"Português",german:"Deutsch",indonesian:"Bahasa Indonesia",hindi:"हिन्दी",turkish:"Türkçe",italian:"Italiano",polish:"Polski",swahili:"Kiswahili"},messages:{deleteConfirm:"确定要删除吗?此操作不可撤销!",saveSuccess:"保存成功",deleteSuccess:"删除成功",operationSuccess:"操作成功",operationFailed:"操作失败,请重试",networkError:"网络错误,请检查网络连接",serverError:"服务器错误,请稍后重试",noData:"暂无数据",loading:"加载中...",noPermission:"无权限访问",tokenExpired:"登录已过期,请重新登录",operationTimeout:"操作超时"}},"en-US":{common:{appName:"ST Broadcast System",loading:"Loading...",confirm:"Confirm",cancel:"Cancel",save:"Save",delete:"Delete",edit:"Edit",add:"Add",search:"Search",refresh:"Refresh",submit:"Submit",reset:"Reset",logout:"Logout",logoutConfirm:"Are you sure you want to logout?",logoutTitle:"Confirm Logout",back:"Back",success:"Success",error:"Error",warning:"Warning",info:"Info",yes:"Yes",no:"No",operation:"Operation",status:"Status",index:"Index",name:"Name",description:"Description",createTime:"Create Time",updateTime:"Update Time",close:"Close",query:"Query",stop:"Stop",toggle:"Enable/Disable",actions:"Actions",seconds:"seconds",minutes:"minutes",hours:"hours",moveUp:"Move Up",moveDown:"Move Down",quick:"Quick",unknown:"Unknown",months:"mo",years:"yr",copy:"Copy"},login:{title:"Login",subtitle:"BROADCAST SYSTEM",username:"Username",password:"Password",usernamePlaceholder:"Enter username",passwordPlaceholder:"Enter password",rememberMe:"Remember me",forgotPassword:"Forgot password?",loginButton:"Login",logging:"Logging in...",loginSuccess:"Login successful",loginFailed:"Login failed",usernameRequired:"Please enter username",passwordRequired:"Please enter password",invalidCredentials:"Invalid username or password"},clientLogin:{subtitle:"Client Edition",hostPlaceholder:"Server address, e.g. 192.168.1.100:12080",hostHint:"Enter server IP:port, http:// is optional",hostRequired:"Please enter server address"},dashboard:{title:"Dashboard",welcome:"Welcome back",systemStatus:"System is running normally",quickActions:"Quick Actions",addDevice:"Add Device",createGroup:"Create Group",scheduleTask:"Schedule Task",broadcastNow:"Broadcast Now"},log:{cacheSize:"Cache",clear30Days:"Clear 30d Ago",clearAll:"Clear All",index:"#",time:"Time",description:"Description",duration:"Duration(s)",filename:"Filename",preview:"Preview",play:"Play",noLogs:"No play logs",prevPage:"Prev",nextPage:"Next",currentPage:"Page",records:"records",clickQuery:"Select user and click Query"},menu:{dashboard:"Dashboard",devices:"Devices",groups:"Groups",tasks:"Tasks",media:"Media",broadcast:"Broadcast",alarm:"Alarm",account:"Account",home:"Home",mine:"Me",settings:"Settings",apiTest:"API Test",logs:"Play Logs"},devices:{title:"Device Management",list:"Device List",online:"Online",offline:"Offline",playing:"Playing",volume:"Volume",adjustVolume:"Adjust Volume",addDevice:"Add Device",editDevice:"Edit Device",deleteDevice:"Delete Device",deviceName:"Device Name",serialNumber:"Serial Number",lastUpdate:"Last Update",refreshList:"Refresh Device List",searchPlaceholder:"Search device name or serial...",batchVolume:"Batch Adjust Volume",noDevices:"No devices available, click Add Device in top right",unnamedDevice:"Unnamed Device",debugSound:"Debug Sound",changeVolume:"Change Volume",changeName:"Change Name",changeSerial:"Change Serial",id:"ID",volumeNotSet:"Not Set",neverOnline:"Never Online",expiredDisabled:"Expired Disabled",unknown:"Unknown",openDebugSound:"Open Debug Sound",closeDebugSound:"Close Debug Sound",unknownStatus:"Unknown Status",addDeviceTitle:"Add Device",deviceNameRequired:"Device Name",deviceSerialRequired:"Device Serial",deviceKeyRequired:"Device Key",deviceNamePlaceholder:"Enter device name",deviceSerialPlaceholder:"Enter device serial",deviceKeyPlaceholder:"Enter device registration key",deviceKeyHint:"Registration key is used to register device to system, equivalent to device password",fillTestData:"Fill Test Data",renameTitle:"Rename Device",newDeviceNamePlaceholder:"Enter new device name",debugSoundTitle:"Debug Sound",selectDebugSoundStatus:"Select debug sound status",editSerialTitle:"Edit Device Serial",currentSerial:"Current Serial",currentSerialPlaceholder:"Current device serial",newSerial:"New Serial",newSerialPlaceholder:"Enter 32-digit new serial",serialLengthHint:"Serial number length must be 32 digits",editDeviceTitle:"Edit Device",macAddress:"MAC Address",macAddressPlaceholder:"Enter MAC address",ipAddress:"IP Address",ipAddressPlaceholder:"Enter IP address",port:"Port",portPlaceholder:"Enter port number",adjustVolumeTitle:"Adjust Volume",volumeRange:"Range: 1-63",preciseSetting:"Precise Setting:",batchAdjustVolumeTitle:"Batch Adjust Volume",selectedDevices:"Selected Devices:",devicesCount:"devices",confirmAdjust:"Confirm Adjust",adding:"Adding...",saving:"Saving...",adjusting:"Adjusting...",confirmButton:"Confirm",cancelButton:"Cancel",deviceNameValidationError:"Please enter device name",deviceSerialValidationError:"Please enter device serial",deviceKeyValidationError:"Please enter device key",newDeviceNameValidationError:"Please enter device name",deviceSerialLengthError:"Please enter device serial",newSerialLengthError:"Serial number length must be 32 digits",debugSoundSelectError:"Please select open or close debug sound",confirmOperation:"Confirm Operation",confirmDelete:"Are you sure to delete device",deleteCannotUndo:"? This action cannot be undone!",addDeviceSuccess:"Device added successfully",addDeviceFailed:"Failed to add device",deviceRenameSuccess:"Device renamed successfully",deviceRenameFailed:"Failed to rename device",deviceEditSuccess:"Device edited successfully",deviceEditFailed:"Failed to edit device",deviceSerialEditSuccess:"Device serial edited successfully",deviceSerialEditFailed:"Failed to edit device serial",debugSoundSuccess:"Debug sound set successfully",debugSoundFailed:"Failed to set debug sound",deleteDeviceSuccess:"Device deleted successfully",deleteDeviceFailed:"Failed to delete device",adjustVolumeSuccess:"Volume set to",adjustVolumeFailed:"Failed to adjust volume",batchAdjustSuccess:"Batch adjust volume successful, total",batchAdjustFailed:"Failed to batch adjust volume",volumeValidationError:"Volume must be between 1-63",selectDevicesFirst:"Please select devices to adjust volume first",successfullyFetched:"Successfully fetched",devicesUnit:"devices",deviceListFormatError:"Device list data format error",fetchDeviceListFailed:"Failed to fetch device list",unknownError:"Unknown error",deleteDevice:"Delete Device",listView:"List View",cardView:"Card View",scanDevices:"Scan Devices",deviceScan:"Device Scan",seed:"Device SEED",seedPlaceholder:"Enter 32-char hex SEED",scanButton:"Scan",scanning:"Scanning...",noDeviceFound:"No devices found",scanNotSupported:"Device scan only available in desktop client",autoIP:"Auto IP",warmMode:"Voice Prompt",mediaServer:"Media Server",mediaPort:"Media Port",gateway:"Gateway",subnetMask:"Subnet Mask",dns:"DNS",deviceIP:"Device IP",applyConfig:"Apply Config",clearDevice:"Clear Device",deviceConfigured:"Device config sent",deviceConfigureFailed:"Device config failed",deviceCleared:"Clear command sent",scanConfigTitle:"Device Network Config",scannedDevices:"Discovered Devices",scanHint:"Click scan to discover all devices on the local network",testComm:"Test Communication",testCommBtn:"Test",console:"Console",clearConsole:"Clear",consoleEmpty:"Waiting for communication...",invalidIP:"Invalid IP format",invalidMask:"Invalid subnet mask",invalidGateway:"Invalid gateway",invalidMediaIP:"Invalid media server IP",invalidPort:"Port range 1-65535",invalidDNS:"Invalid DNS format",dnsPlaceholder:"0.0.0.0 = System default",advanced:"Advanced",soundCard:"Sound Card",getAmixerStatus:"Get Status",amixerApply:"Apply",amixerGetting:"Getting...",amixerOn:"On",amixerOff:"Off",amixerDAC:"DAC Playback Volume",amixerHeadphoneVol:"Headphone Volume",amixerHeadphoneSwitch:"Headphone Switch",amixerHeadphoneRoute:"Headphone Source",amixerLineIn:"Line In Volume",amixerFMIn:"FM In Volume",amixerMicIn:"Mic In Volume",amixerMicBoost:"Mic Boost",amixerADCCapture:"ADC Capture Volume",amixerADCLeftFM:"Left FM Capture",amixerADCRightFM:"Right FM Capture",amixerADCLeftOut:"Left Out Capture",amixerADCRightOut:"Right Out Capture",amixerADCLineIn:"Line In Capture",amixerADCMic:"Mic Capture",amixerLeftFM:"Left FM",amixerLeftLeftDAC:"Left Left DAC",amixerLeftRightDAC:"Left Right DAC",amixerLeftLineIn:"Left Line In",amixerLeftMicIn:"Left Mic In",amixerRightFM:"Right FM",amixerRightLeftDAC:"Right Left DAC",amixerRightRightDAC:"Right Right DAC",amixerRightLineIn:"Right Line In",amixerRightMicIn:"Right Mic In",amixerGroupDecode:"Decode Output",amixerGroupCapture:"Capture Mixer Input",amixerGroupLeft:"Left Output Mixer",amixerGroupRight:"Right Output Mixer",amixerGroupGain:"Gain Config",amixerRouteDAC:"DAC",amixerRouteMixer:"Mixer",amixerGetSuccess:"Sound card status retrieved",amixerGetFailed:"Failed to get sound card status",amixerSetSuccess:"Setting sent",amixerSetFailed:"Setting failed"},groups:{title:"Group Management",list:"Group List",deviceCount:"Device Count",addGroup:"Add Group",editGroup:"Edit Group",deleteGroup:"Delete Group",groupName:"Group Name",manage:"Group Management",inputName:"Input group name",add:"Add Group",playMenu:"Play Menu",id:"ID",name:"Name",actions:"Actions",noGroups:"No groups available",untitled:"Untitled Group",editDevices:"Edit Devices",editVideo:"Edit Video",previewVideo:"Preview Video",groupPlay:"Group Play",allDevices:"All Devices",selectedDevices:"Selected Devices",selectAtLeastOneDevice:"Please select at least one device",videoUrl:"Video URL",inputVideoUrl:"Please enter video URL",noVideoUrl:"No video URL set",noVideoUrlSet:"Mu38 live stream URL not set yet",playSequence:"Play Sequence",fileInterval:"File Interval",playCount:"Play Count",noPlayingItems:"No currently playing sequences",playList:"Play List",nameRequired:"Group name cannot be empty",loadSuccess:"Successfully loaded {count} groups",loadFailed:"Failed to load group list",addSuccess:"Group added successfully",addFailed:"Failed to add group",deleteConfirm:"This operation will permanently delete this group. Continue?",deleteSuccess:"Deleted successfully",deleteFailed:"Failed to delete",saveSuccess:"Saved successfully",saveFailed:"Failed to save",loadDevicesFailed:"Failed to load device list",invalidGroupId:"Invalid group ID",unknownDevice:"Unknown device",playFeatureComingSoon:"Group play feature coming soon",stopPlayFeatureComingSoon:"Stop play feature coming soon",playListFeatureComingSoon:"Play list feature coming soon",searchDevicePlaceholder:"Enter device name or ID to search...",searchResult:"Found {filtered} devices (total {total})",totalDevices:"Total {count} devices",noSearchResult:"No matching devices found",noSelectedDevices:"No devices selected yet",searchFilePlaceholder:"Enter file name or ID to search...",availableFiles:"Available Files",selectedFiles:"Selected Files",noSelectedFiles:"No files selected yet",doubleClickHint:"Double-click to add duplicate files",unknownFile:"Unknown file",playMode:"Play Mode",playMode1:"Sequential Play 1x",playMode2:"Sequential Play 2x",playMode3:"Sequential Play 3x",totalDuration:"Estimated Duration",durationFormula:"Calculation: (Total Duration + Interval) × Loop Count",playModeHint:"Loop count, 1-99",intervalMaxHint:"Maximum interval 3 hours (10800 seconds)",estimatedDuration:"Estimated Duration",forceStopDuration:"Force Stop Duration (Optional)",forceStopHint:"Auto-stop at this duration. Must be less than estimated duration. 0 means no force stop",selectAtLeastOneFile:"Please select at least one file",loadFilesFailed:"Failed to load file list",groupHasNoDevices:"This group has no devices",playStarted:"Play started successfully",playFailed:"Failed to start play",invalidPlayId:"Invalid play ID",stopPlayConfirm:"Are you sure you want to stop play?",stopPlayInProgress:"Stopping play, please wait...",stopPlaySuccess:"Play stopped successfully",stopPlaySuccessAndClosed:"Play stopped successfully, play list closed",stopPlayFailed:"Failed to stop play",selectGroupForPlay:"Select a group to play",devices:"devices",devicesCount:"devices",startPlay:"Start Play"},tasks:{title:"Scheduled Tasks",titleDescription:"Manage scheduled playback tasks with batch operations and task groups",list:"Task List",addTask:"Add Task",editTask:"Edit Task",deleteTask:"Delete Task",taskName:"Task Name",executeTime:"Execute Time",playMode:"Play Mode",repeat:"Repeat",files:"Files",devices:"Devices",allGroups:"All Task Groups",addTaskGroup:"Add Task Group",deleteTaskGroup:"Delete Task Group",disableTaskGroup:"Disable Task Group",enableTaskGroup:"Enable Task Group",taskGroup:"Task Group",taskGroupName:"Task Group Name",enterGroupName:"Enter task group name",applyTaskGroup:"Apply Task Group",task:"Task",selectGroup:"Select Task Group",startTime:"Start Time",duration:"Duration",loopCount:"Loop Count",startDate:"Start Date",endDate:"End Date",changeGroup:"Change Group",noGroup:"No Group",tryPlay:"Try Play",batchDisable:"Batch Disable",batchEnable:"Batch Enable",batchEditDevices:"Batch Edit Devices",batchEditFiles:"Batch Edit Files",batchApplyGroup:"Batch Apply Group",batchEditTime:"Batch Edit Time",batchEditLoopCount:"Batch Edit Loop Count",batchEditDuration:"Batch Edit Duration",batchDelete:"Batch Delete",batchCopy:"Batch Copy",noTasks:"No Tasks",selectedCount:"Selected {count} tasks",randomPlay:"Random Play",loopPlay:"Loop {count} times",selectDevices:"Select Devices to Play",selectFiles:"Select Audio Files",allDevices:"All Devices",selectedDevices:"Selected Devices",allFiles:"All Files",selectedFiles:"Selected Files",editTaskDevices:"Edit Task Devices",editTaskFiles:"Edit Task Files",taskDuration:"Task Duration",intervalDuration:"Interval Duration",timeRange:"Time Range",to:"to",playCount:"Play Count",sequentialPlay:"Sequential Play",randomPlayMode:"Random Play",playModeChange:"Play Mode Change",enableOtherLimit:"Other limits not required",enableStartDate:"Enable Start Date",enableEndDate:"Enable End Date",enterTaskName:"Enter task name",noTasksSelected:"No tasks selected",devicesRequired:"No devices selected",filesRequired:"No audio files selected",saveSuccess:"Save successful",saveFailed:"Save failed",deleteSuccess:"Delete successful",deleteFailed:"Delete failed",deleteConfirm:"This operation will permanently delete the task. Continue?",enableSuccess:"Task enabled",disableSuccess:"Task disabled",startPlaySuccess:"Play started",startPlayFailed:"Play start failed",stopPlaySuccess:"Play stopped",stopPlayFailed:"Play stop failed",groupNameRequired:"Task group name cannot be empty",addGroupSuccess:"Task group added successfully",addGroupFailed:"Failed to add task group",deleteGroupSuccess:"Task group deleted successfully",deleteGroupFailed:"Failed to delete task group",disableGroupSuccess:"Task group disabled successfully",disableGroupFailed:"Failed to disable task group",enableGroupSuccess:"Task group enabled successfully",enableGroupFailed:"Failed to enable task group",applyGroupSuccess:"Task group applied successfully",applyGroupFailed:"Failed to apply task group",selectGroupFirst:"Please select a task group first",batchDisableSuccess:"Batch disable successful",batchEnableSuccess:"Batch enable successful",unknownDevice:"Unknown Device",unknownFile:"Unknown File",calculate:"Calculate",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",sunday:"Sunday",index:"Index",weekdays:"Play Days",noLimit:"Unlimited",autoCalc:"Auto-calculated",taskNameRequired:"Task name is required",startTimeRequired:"Start time is required",cannotDeletePlaying:"Task is playing, please stop first",cannotDeleteEnabled:"Task is enabled, please disable first",cannotEditPlaying:"Task is playing, please stop first",disabled:"Disabled",enabled:"Enabled",enableTask:"Enable",disableTask:"Disable",noSelectedFiles:"No files selected yet",clickToAddHint:"Click files on the left to add",estimatedDuration:"Estimated Duration",advancedSettings:"Advanced Settings",playSettings:"Play Settings",forceStopDuration:"Force Stop Duration",forceStopHint:"If set, playback auto-stops at this time. Must be less than estimated duration. 0 or empty means no force stop",durationRequired:"Random play requires a duration",durationFormula:"Calculation: (Total Duration + Interval × File Count) × Loop Count",dateHint:"Note: Plays on the start date and also on the end date. If both dates are the same, plays only on that day. Start date cannot be later than end date.",dateRangeError:"Start date cannot be later than end date",batchDurationHint:"For sequential play: if playlist total duration > max duration, it stops when duration is reached; if playlist total duration < max duration, it stops when playlist finishes",copyConfirm:"Are you sure you want to copy the selected tasks? This action cannot be undone.",copySuccess:"Tasks copied successfully",copyFailed:"Failed to copy tasks",timeConflict:"Time Conflict",dateRange:"Date Range",endTime:"End Time",copyCount:"Copy Count",copyNewName:"Default New Name",copyNewNamePlaceholder:"Default new task name",copyInterval:"Time Interval",copyIntervalUnit:"minutes",copyPreview:"Preview List",deleteGroupConfirm:"Are you sure you want to delete this task group? Tasks in the group will not be deleted.",noTasksInGroup:"No tasks in this task group",batchPartialFailed:"{failed} task(s) operation failed"},media:{title:"Media Management",list:"File List",upload:"Upload",delete:"Delete",play:"Play",download:"Download",fileName:"File Name",fileSize:"File Size",fileType:"File Type",uploadTime:"Upload Time",duration:"Duration",noFiles:"No files yet",dropHint:"Drag & drop MP3 files here to upload",dropSub:"Supports MP3 format, max 40MB per file",selectFiles:"Select Files",selectFolder:"Select Folder",onlyMp3:"Only MP3 files are supported",fileTooLarge:"File exceeds 40MB limit",uploadFailed:"Upload failed",uploadSuccess:"Successfully uploaded {count} file(s)",uploadDone:"Upload complete",uploading:"Uploading...",deleteSingleConfirm:"Are you sure you want to delete",deleteConfirm:"Delete selected files? This cannot be undone",deleteSuccess:"Deleted successfully",deleteFailed:"Delete failed",batchDelete:"Batch Delete",batchDeleteSuccess:"Successfully deleted {count} file(s)",selectedCount:"{count} file(s) selected",tts:"Text to Speech",ttsFileName:"File Name",ttsFileNamePlaceholder:"Enter file name to save",ttsVoice:"Voice",ttsSpeed:"Speed",ttsSpeedSlow:"Slow",ttsSpeedMedium:"Medium",ttsSpeedFast:"Fast",ttsText:"Text Input",ttsTextPlaceholder:"Enter text to convert to speech",ttsTextTooShort:"Text must be at least 3 characters",ttsSuccess:"TTS file created successfully",ttsFailed:"TTS generation failed",radio:"Radio",addRadio:"Add Radio",radioName:"Radio Name",radioNamePlaceholder:"Enter radio name",radioUrl:"Radio URL",radioDuration:"Duration (seconds)",radioDurationPlaceholder:"Enter duration in seconds",radio10min:"10min",radio20min:"20min",radio30min:"30min",radio1hour:"1hour",radioNameRequired:"Please enter radio name",radioUrlRequired:"Please enter radio URL",radioUrlInvalid:"URL must start with http and end with .mp3",radioDurationRequired:"Please enter duration",radioAddSuccess:"Radio added successfully",radioAddFailed:"Failed to add radio"},broadcast:{title:"Broadcast Control",serverConfig:"Server Configuration",selectDevices:"Select Devices",quickSelectGroup:"Quick Select Group",selectAllOnline:"Select All Online",clearSelection:"Clear Selection",selectedDevices:"{count} device(s) selected",noDevices:"No devices available",noMatch:"No matching devices",broadcastControl:"Broadcast Control",playLevel:"Play Priority",userLevel:"User Level",holdToTalk:"Hold to Talk",releaseToStop:"Release to Stop",broadcasting:"Broadcasting...",connected:"Connected",notConnected:"Not Connected",selectFiles:"Select Files",startBroadcast:"Start Broadcast",stopBroadcast:"Stop Broadcast",playbackMode:"Playback Mode",interval:"Interval",loop:"Loop Count",audioSource:"Audio Source",microphone:"Microphone",noAudioDevice:"No audio input device detected",audioReady:"Audio Ready",inputVolume:"Input Volume",enableMicrophone:"Connect Microphone",startPreview:"Start Preview"},alarm:{title:"Alarm System",settings:"Alarm Settings",history:"Alarm History",enable:"Enable",disable:"Disable",triggerCondition:"Trigger Condition",alarmFile:"Alarm File",linkage:"Linkage Device",selectDevices:"Select Devices",searchDevice:"Search device name or serial number",selectAllOnline:"Select All Online",clearSelection:"Clear Selection",selectedCount:"{count} devices selected",noDevices:"No devices",noMatch:"No matching devices",alarmConfig:"Alarm Configuration",alarmName:"Alarm Name",alarmNamePlaceholder:"Enter alarm name",audioSource:"Audio Source",selectFile:"Select uploaded file",inputUrl:"Enter URL manually",selectFilePlaceholder:"Select audio file",urlPlaceholder:"Enter audio file URL",registerAlarm:"Register Alarm",registering:"Registering...",registerResult:"Registration Result",registerSuccess:"Registration successful",registerFailed:"Registration failed",noDevicesSelected:"Please select at least one device",noAudioConfigured:"Please configure audio file",online:"Online",offline:"Offline",deviceSn:"Device Serial Number",registeredList:"Registered Alarms",noRegistered:"No registered alarms",loadListFailed:"Failed to load alarm list",deviceName:"Device Name",fileName:"File Name",refreshList:"Refresh List",unregisterAlarm:"Unregister",unregisterConfirm:"Are you sure you want to unregister this alarm?",unregisterSuccess:"Unregistration successful",unregisterFailed:"Unregistration failed",linkageTitle:"Alarm Linkage",linkageDesc:"When device A triggers, linked devices (including itself) play the specified audio",linkagePlanName:"Plan Name",linkagePlanNamePlaceholder:"Enter plan name",linkageDevices:"Linkage Devices",linkageDevicesHint:"Select trigger and playback devices (can include the trigger device itself)",linkageAudio:"Audio File",addLinkagePlan:"Add Linkage Plan",adding:"Adding...",linkageList:"Linkage Plan List",noLinkagePlans:"No linkage plans",linkageDeviceCount:"Device Count",addLinkageSuccess:"Linkage plan added successfully",addLinkageFailed:"Failed to add linkage plan",linkagePlanNameRequired:"Please enter plan name",linkageNoDevices:"Please select at least one device",linkageNoAudio:"Please configure audio file",linkageTriggerDevice:"Trigger Device",linkageTriggerDeviceHint:"When this device triggers an alarm, linked devices will play audio",linkageTriggerDevicePlaceholder:"Select the alarm trigger device",linkageNoTriggerDevice:"Please select a trigger device",registerTrigger:"Register",registerTriggerTitle:"Register Trigger Device",registerTriggerSuccess:"Trigger device registered successfully",registerTriggerFailed:"Failed to register trigger device",registering:"Registering...",noDevices:"No devices",loadLinkageFailed:"Failed to load linkage plans",deleteLinkageConfirm:"Are you sure you want to delete the linkage plan",deleteLinkageFailed:"Failed to delete linkage plan",forceUnregTitle:"Force Unregister Alarm",forceUnregHint:"Force unregister all alarm registrations for a device regardless of type",forceUnregButton:"Force Unregister Alarm",forceUnregModalHint:"Select a device to force unregister all alarms (standalone + linkage)",forceUnregConfirm:"Confirm Unregister",forceUnregSuccess:"Force unregister alarm successful",forceUnregFailed:"Force unregister alarm failed"},account:{title:"Account Management",profile:"Profile",changePassword:"Change Password",subAccounts:"Sub Accounts",logs:"Operation Logs",username:"Username",nickname:"Nickname",email:"Email",phone:"Phone",role:"Role",level:"Level",addSubUser:"Add Sub Account",usernamePlaceholder:"Enter username",passwordPlaceholder:"Enter password",nicknamePlaceholder:"Enter nickname",beizhu:"Remark",beizhuPlaceholder:"Enter remark",password:"Password",levelLabel:"Level",levelPlaceholder:"Select level",mask:"Permission Mask",maskPlaceholder:"40-bit permission mask (0/1)",maskDefault:"00000000000000000000000000000000000000000000",permissions:"Permission Settings",permCreateSub:"Can create sub accounts",permManageDevice:"Can add/delete devices",permUploadFile:"Can upload files",addSuccess:"Sub account added successfully",addFailed:"Failed to add sub account",listFailed:"Failed to get sub account list",noSubUsers:"No sub accounts",createTime:"Create Time",status:"Status",statusNormal:"Normal",statusDisabled:"Disabled",userLevel:"User Level",playLevel:"Play Level",passwordShow:"Password",refreshList:"Refresh List",usernameRequired:"Please enter username",passwordRequired:"Please enter password",permChangeFailed:"Permission change failed",adding:"Adding...",deleteConfirm:"Are you sure to delete sub account {name}? This cannot be undone!",deleteSuccess:"Sub account deleted successfully",deleteFailed:"Failed to delete sub account",editDevices:"Edit Devices",editDevicesSuccess:"Devices updated successfully",editDevicesFailed:"Failed to update devices",loadDevicesFailed:"Failed to load device list",searchDevice:"Search device name or ID",noDevices:"No devices",resetToken:"Reset Token",resetTokenConfirm:"Are you sure to reset token for {name}?",resetTokenSuccess:"Token reset successfully",resetTokenFailed:"Token reset failed",newToken:"New Token",newPasswordPlaceholder:"Enter new password (min 6 chars)",confirmPasswordPlaceholder:"Confirm new password",pwdNotMatch:"Passwords do not match",changePwdSuccess:"Password changed successfully",changePwdFailed:"Failed to change password",pwdLengthError:"Password must be at least 6 characters",noSubUsers:"No sub accounts yet"},admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"User & Permission Management",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",btnEnable:"Enable",btnDisable:"Disable",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully",toolChangePwd:"Change Password",selectUser:"Select user",newPasswordPlaceholder:"Enter new password (min 6 chars)",toolChangePwdBtn:"Confirm",pwdLengthError:"Password must be at least 6 characters",changePwdSuccess:"Password changed successfully",changePwdFailed:"Failed to change password"},info:{title:"App Privacy Agreement",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Content too short, at least 3000 characters",saveSuccess:"Saved successfully",saveFailed:"Save failed"},upload:{title:"Avatar & Logo Upload",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Announcement Management",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scroll notice: ",noData:"No data",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"},billing:{title:"Billing Settings",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Device",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure to delete?"},gallery:{title:"Gallery Overview",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No gallery items",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"}},settings:{title:"Settings",language:"Language",theme:"Theme",darkMode:"Dark Mode",lightMode:"Light Mode",diabloMode:"Diablo Mode",notification:"Notifications",sound:"Sound Settings",about:"About",version:"Version"},language:{title:"Select Language",chinese:"简体中文",english:"English",korean:"한국어",thai:"ไทย",vietnamese:"Tiếng Việt",arabic:"العربية",malay:"Bahasa Melayu",japanese:"日本語",russian:"Русский",french:"Français",spanish:"Español",portuguese:"Português",german:"Deutsch",indonesian:"Bahasa Indonesia",hindi:"हिन्दी",turkish:"Türkçe",italian:"Italiano",polish:"Polski",swahili:"Kiswahili"},messages:{deleteConfirm:"Are you sure you want to delete? This action cannot be undone!",saveSuccess:"Saved successfully",deleteSuccess:"Deleted successfully",operationSuccess:"Operation successful",operationFailed:"Operation failed, please try again",networkError:"Network error, please check your connection",serverError:"Server error, please try again later",noData:"No data available",loading:"Loading...",noPermission:"No permission to access",tokenExpired:"Session expired, please login again",operationTimeout:"Operation timeout"}},"ja-JP":{common:{appName:"ST Broadcast System",loading:"Loading...",confirm:"Confirm",cancel:"キャンセル",save:"Save",delete:"Delete",edit:"Edit",add:"Add",search:"Search",refresh:"Refresh",submit:"Submit",reset:"リセット",logout:"ログアウト",logoutConfirm:"ログアウトしますか?",logoutTitle:"Confirm Logout",back:"Back",success:"Success",error:"エラー",warning:"Warning",info:"Info",yes:"はい",no:"いいえ",operation:"Operation",status:"ステータス",index:"インデックス",name:"Name",description:"Description",createTime:"Create Time",updateTime:"Update Time",close:"Close",stop:"Stop",toggle:"Enable/Disable",actions:"Actions",seconds:"seconds",minutes:"minutes",hours:"hours",moveUp:"Move Up",moveDown:"Move Down",quick:"クイック",unknown:"Unknown",months:"mo",years:"yr",copy:"Copy"},login:{title:"ログイン",subtitle:"BROADCAST SYSTEM",username:"Username",password:"パスワード",usernamePlaceholder:"Enter username",passwordPlaceholder:"Enter password",rememberMe:"Remember me",forgotPassword:"Forgot password?",loginButton:"ログイン",logging:"Logging in...",loginSuccess:"Login successful",loginFailed:"Login failed",usernameRequired:"Please enter username",passwordRequired:"Please enter password",invalidCredentials:"Invalid username or password"},clientLogin:{subtitle:"Client Edition",hostPlaceholder:"Server address, e.g. 192.168.1.100:12080",hostHint:"Enter server IP:port, http:// is optional",hostRequired:"Please enter server address"},dashboard:{title:"ダッシュボード",welcome:"おかえりなさい",systemStatus:"System is running normally",quickActions:"クイックアクション",addDevice:"Add Device",createGroup:"Create Group",scheduleTask:"タスクをスケジュール",broadcastNow:"Broadcast Now"},menu:{dashboard:"ダッシュボード",devices:"デバイス",groups:"グループ",tasks:"タスク",media:"メディア",broadcast:"Broadcast",alarm:"アラーム",account:"アカウント",settings:"Settings",apiTest:"API テスト",home:"ホーム",mine:"マイページ",admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"User & Permission Management",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully"},info:{title:"App Privacy Agreement",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Content too short, at least 3000 characters",saveSuccess:"Saved successfully",saveFailed:"Save failed"},upload:{title:"Avatar & Logo Upload",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Announcement Management",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scroll notice: ",noData:"No data",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"},billing:{title:"Billing Settings",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Device",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure to delete?"},gallery:{title:"Gallery Overview",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No gallery items",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"}}},devices:{title:"Device Management",list:"Device List",online:"オンライン",offline:"オフライン",playing:"Playing",volume:"Volume",adjustVolume:"Adjust Volume",addDevice:"Add Device",editDevice:"Edit Device",deleteDevice:"Delete Device",deviceName:"Device Name",serialNumber:"Serial Number",lastUpdate:"Last Update",refreshList:"Refresh Device List",batchVolume:"Batch Adjust Volume",noDevices:"No devices available, click Add Device in top right",unnamedDevice:"Unnamed Device",debugSound:"デバッグサウンド",changeVolume:"Change Volume",changeName:"Change Name",changeSerial:"Change Serial",id:"ID",volumeNotSet:"Not Set",neverOnline:"Never Online",expiredDisabled:"Expired Disabled",unknown:"Unknown",openDebugSound:"デバッグサウンドをオン",closeDebugSound:"デバッグサウンドをオフ",unknownStatus:"Unknown Status",addDeviceTitle:"Add Device",deviceNameRequired:"Device Name",deviceSerialRequired:"デバイスシリアル",deviceKeyRequired:"デバイスキー",deviceNamePlaceholder:"Enter device name",deviceSerialPlaceholder:"Enter device serial",deviceKeyPlaceholder:"Enter device registration key",deviceKeyHint:"Registration key is used to register device to system, equivalent to device password",fillTestData:"Fill Test Data",renameTitle:"Rename Device",newDeviceNamePlaceholder:"Enter new device name",debugSoundTitle:"デバッグサウンド",selectDebugSoundStatus:"Select debug sound status",editSerialTitle:"Edit Device Serial",currentSerial:"Current Serial",currentSerialPlaceholder:"Current device serial",newSerial:"New Serial",newSerialPlaceholder:"Enter 32-digit new serial",serialLengthHint:"Serial number length must be 32 digits",editDeviceTitle:"Edit Device",macAddress:"MAC アドレス",macAddressPlaceholder:"Enter MAC address",ipAddress:"IP アドレス",ipAddressPlaceholder:"Enter IP address",port:"ポート",portPlaceholder:"Enter port number",adjustVolumeTitle:"Adjust Volume",volumeRange:"Range: 1-63",preciseSetting:"Precise Setting:",batchAdjustVolumeTitle:"Batch Adjust Volume",selectedDevices:"Selected Devices:",devicesCount:"devices",confirmAdjust:"Confirm Adjust",adding:"Adding...",saving:"Saving...",adjusting:"Adjusting...",confirmButton:"Confirm",cancelButton:"キャンセル",deviceNameValidationError:"Please enter device name",deviceSerialValidationError:"Please enter device serial",deviceKeyValidationError:"Please enter device key",newDeviceNameValidationError:"Please enter device name",deviceSerialLengthError:"Please enter device serial",newSerialLengthError:"Serial number length must be 32 digits",debugSoundSelectError:"Please select open or close debug sound",confirmOperation:"Confirm Operation",confirmDelete:"Are you sure to delete device",deleteCannotUndo:"? This action cannot be undone!",addDeviceSuccess:"Device added successfully",addDeviceFailed:"Failed to add device",deviceRenameSuccess:"Device renamed successfully",deviceRenameFailed:"Failed to rename device",deviceEditSuccess:"Device edited successfully",deviceEditFailed:"Failed to edit device",deviceSerialEditSuccess:"Device serial edited successfully",deviceSerialEditFailed:"Failed to edit device serial",debugSoundSuccess:"Debug sound set successfully",debugSoundFailed:"Failed to set debug sound",deleteDeviceSuccess:"Device deleted successfully",deleteDeviceFailed:"Failed to delete device",adjustVolumeSuccess:"Volume set to",adjustVolumeFailed:"Failed to adjust volume",batchAdjustSuccess:"Batch adjust volume successful, total",batchAdjustFailed:"Failed to batch adjust volume",volumeValidationError:"Volume must be between 1-63",selectDevicesFirst:"Please select devices to adjust volume first",successfullyFetched:"Successfully fetched",devicesUnit:"devices",deviceListFormatError:"Device list data format error",fetchDeviceListFailed:"Failed to fetch device list",searchPlaceholder:"Search device name or serial...",unknownError:"Unknown error",listView:"List View",cardView:"Card View",scanDevices:"Scan Devices",deviceScan:"Device Scan",seed:"Device SEED",seedPlaceholder:"Enter 32-char hex SEED",scanButton:"Scan",scanning:"Scanning...",noDeviceFound:"No devices found",scanNotSupported:"Device scan only available in desktop client",autoIP:"Auto IP",warmMode:"Voice Prompt",mediaServer:"Media Server",mediaPort:"Media Port",gateway:"Gateway",subnetMask:"Subnet Mask",dns:"DNS",deviceIP:"Device IP",applyConfig:"Apply Config",clearDevice:"Clear Device",deviceConfigured:"Device config sent",deviceConfigureFailed:"Device config failed",deviceCleared:"Clear command sent",scanConfigTitle:"Device Network Config",scannedDevices:"Discovered Devices",scanHint:"Click scan to discover all devices on the local network",testComm:"Test Communication",testCommBtn:"Test",console:"Console",clearConsole:"Clear",consoleEmpty:"Waiting for communication...",invalidIP:"Invalid IP format",invalidMask:"Invalid subnet mask",invalidGateway:"Invalid gateway",invalidMediaIP:"Invalid media server IP",invalidPort:"Port range 1-65535",invalidDNS:"Invalid DNS format",dnsPlaceholder:"0.0.0.0 = System default",advanced:"Advanced",soundCard:"Sound Card",getAmixerStatus:"Get Status",amixerApply:"Apply",amixerGetting:"Getting...",amixerOn:"On",amixerOff:"Off",amixerDAC:"DAC Playback Volume",amixerHeadphoneVol:"Headphone Volume",amixerHeadphoneSwitch:"Headphone Switch",amixerHeadphoneRoute:"Headphone Source",amixerLineIn:"Line In Volume",amixerFMIn:"FM In Volume",amixerMicIn:"Mic In Volume",amixerMicBoost:"Mic Boost",amixerADCCapture:"ADC Capture Volume",amixerADCLeftFM:"Left FM Capture",amixerADCRightFM:"Right FM Capture",amixerADCLeftOut:"Left Out Capture",amixerADCRightOut:"Right Out Capture",amixerADCLineIn:"Line In Capture",amixerADCMic:"Mic Capture",amixerLeftFM:"Left FM",amixerLeftLeftDAC:"Left Left DAC",amixerLeftRightDAC:"Left Right DAC",amixerLeftLineIn:"Left Line In",amixerLeftMicIn:"Left Mic In",amixerRightFM:"Right FM",amixerRightLeftDAC:"Right Left DAC",amixerRightRightDAC:"Right Right DAC",amixerRightLineIn:"Right Line In",amixerRightMicIn:"Right Mic In",amixerGroupDecode:"Decode Output",amixerGroupCapture:"Capture Mixer Input",amixerGroupLeft:"Left Output Mixer",amixerGroupRight:"Right Output Mixer",amixerGroupGain:"Gain Config",amixerRouteDAC:"DAC",amixerRouteMixer:"Mixer",amixerGetSuccess:"Sound card status retrieved",amixerGetFailed:"Failed to get sound card status",amixerSetSuccess:"Setting sent",amixerSetFailed:"Setting failed"},groups:{title:"Group Management",list:"Group List",deviceCount:"Device Count",addGroup:"Add Group",editGroup:"Edit Group",deleteGroup:"Delete Group",groupName:"Group Name",manage:"Group Management",inputName:"Input group name",add:"Add Group",playMenu:"Play Menu",id:"ID",name:"Name",actions:"Actions",noGroups:"グループがありません",untitled:"Untitled Group",editDevices:"Edit Devices",editVideo:"Edit Video",previewVideo:"Preview Video",groupPlay:"Group Play",allDevices:"すべてのデバイス",selectedDevices:"Selected Devices",selectAtLeastOneDevice:"Please select at least one device",videoUrl:"Video URL",inputVideoUrl:"Please enter video URL",noVideoUrl:"No video URL set",noVideoUrlSet:"Mu38 live stream URL not set yet",playSequence:"Play Sequence",fileInterval:"File Interval",playCount:"Play Count",noPlayingItems:"No currently playing sequences",playList:"Play List",nameRequired:"Group name cannot be empty",loadSuccess:"Successfully loaded {count} groups",loadFailed:"Failed to load group list",addSuccess:"Group added successfully",addFailed:"Failed to add group",deleteConfirm:"This operation will permanently delete this group. Continue?",deleteSuccess:"Deleted successfully",deleteFailed:"Failed to delete",saveSuccess:"Saved successfully",saveFailed:"Failed to save",loadDevicesFailed:"Failed to load device list",invalidGroupId:"Invalid group ID",unknownDevice:"Unknown device",playFeatureComingSoon:"Group play feature coming soon",stopPlayFeatureComingSoon:"Stop play feature coming soon",playListFeatureComingSoon:"Play list feature coming soon",searchDevicePlaceholder:"Enter device name or ID to search...",searchResult:"Found {filtered} devices (total {total})",totalDevices:"Total {count} devices",noSearchResult:"No matching devices found",noSelectedDevices:"No devices selected yet",searchFilePlaceholder:"Enter file name or ID to search...",availableFiles:"Available Files",selectedFiles:"Selected Files",noSelectedFiles:"No files selected yet",doubleClickHint:"Double-click to add duplicate files",unknownFile:"Unknown file",playMode:"Play Mode",playMode1:"Sequential Play 1x",playMode2:"Sequential Play 2x",playMode3:"Sequential Play 3x",totalDuration:"Estimated Duration",durationFormula:"Calculation: (Total Duration + Interval) × Loop Count",playModeHint:"Loop count, 1-99",intervalMaxHint:"Maximum interval 3 hours (10800 seconds)",estimatedDuration:"Estimated Duration",forceStopDuration:"Force Stop Duration (Optional)",forceStopHint:"Auto-stop at this duration. Must be less than estimated duration. 0 means no force stop",selectAtLeastOneFile:"Please select at least one file",loadFilesFailed:"Failed to load file list",groupHasNoDevices:"このグループにはデバイスがありません",playStarted:"Play started successfully",playFailed:"Failed to start play",invalidPlayId:"Invalid play ID",stopPlayConfirm:"Are you sure you want to stop play?",stopPlayInProgress:"Stopping play, please wait...",stopPlaySuccess:"Play stopped successfully",stopPlaySuccessAndClosed:"Play stopped successfully, play list closed",stopPlayFailed:"Failed to stop play",selectGroupForPlay:"Select a group to play",devices:"devices",devicesCount:"devices",startPlay:"Start Play"},tasks:{title:"スケジュールタスク",titleDescription:"Manage scheduled playback tasks with batch operations and task groups",list:"Task List",addTask:"Add Task",editTask:"Edit Task",deleteTask:"Delete Task",taskName:"Task Name",executeTime:"Execute Time",playMode:"Play Mode",repeat:"Repeat",files:"ファイル",devices:"デバイス",allGroups:"すべてのタスクグループ",addTaskGroup:"Add Task Group",deleteTaskGroup:"Delete Task Group",disableTaskGroup:"Disable Task Group",enableTaskGroup:"Enable Task Group",taskGroup:"タスクグループ",taskGroupName:"Task Group Name",enterGroupName:"Enter task group name",applyTaskGroup:"Apply Task Group",task:"タスク",selectGroup:"Select Task Group",startTime:"Start Time",duration:"Duration",loopCount:"Loop Count",startDate:"Start Date",endDate:"End Date",changeGroup:"Change Group",noGroup:"グループなし",tryPlay:"Try Play",batchDisable:"Batch Disable",batchEnable:"Batch Enable",batchEditDevices:"Batch Edit Devices",batchEditFiles:"Batch Edit Files",batchApplyGroup:"Batch Apply Group",batchEditTime:"Batch Edit Time",batchEditLoopCount:"Batch Edit Loop Count",batchEditDuration:"Batch Edit Duration",batchDelete:"Batch Delete",batchCopy:"Batch Copy",noTasks:"タスクがありません",selectedCount:"Selected {count} tasks",randomPlay:"Random Play",loopPlay:"Loop {count} times",selectDevices:"Select Devices to Play",selectFiles:"Select Audio Files",allDevices:"すべてのデバイス",selectedDevices:"Selected Devices",allFiles:"すべてのファイル",selectedFiles:"Selected Files",editTaskDevices:"Edit Task Devices",editTaskFiles:"Edit Task Files",taskDuration:"Task Duration",intervalDuration:"Interval Duration",timeRange:"Time Range",to:"〜",playCount:"Play Count",sequentialPlay:"Sequential Play",randomPlayMode:"Random Play",playModeChange:"Play Mode Change",enableOtherLimit:"Other limits not required",enableStartDate:"Enable Start Date",enableEndDate:"Enable End Date",enterTaskName:"Enter task name",noTasksSelected:"No tasks selected",devicesRequired:"No devices selected",filesRequired:"No audio files selected",saveSuccess:"Save successful",saveFailed:"Save failed",deleteSuccess:"Delete successful",deleteFailed:"Delete failed",deleteConfirm:"This operation will permanently delete the task. Continue?",enableSuccess:"Task enabled",disableSuccess:"Task disabled",startPlaySuccess:"Play started",startPlayFailed:"Play start failed",stopPlaySuccess:"Play stopped",stopPlayFailed:"Play stop failed",groupNameRequired:"Task group name cannot be empty",addGroupSuccess:"Task group added successfully",addGroupFailed:"Failed to add task group",deleteGroupSuccess:"Task group deleted successfully",deleteGroupFailed:"Failed to delete task group",disableGroupSuccess:"Task group disabled successfully",disableGroupFailed:"Failed to disable task group",enableGroupSuccess:"Task group enabled successfully",enableGroupFailed:"Failed to enable task group",applyGroupSuccess:"Task group applied successfully",applyGroupFailed:"Failed to apply task group",selectGroupFirst:"Please select a task group first",batchDisableSuccess:"Batch disable successful",batchEnableSuccess:"Batch enable successful",unknownDevice:"Unknown Device",unknownFile:"Unknown File",calculate:"Calculate",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",sunday:"Sunday",index:"インデックス",weekdays:"Play Days",noLimit:"Unlimited",autoCalc:"Auto-calculated",taskNameRequired:"Task name is required",startTimeRequired:"Start time is required",cannotDeletePlaying:"Task is playing, please stop first",cannotDeleteEnabled:"Task is enabled, please disable first",cannotEditPlaying:"Task is playing, please stop first",disabled:"Disabled",enabled:"Enabled",enableTask:"Enable",disableTask:"Disable",noSelectedFiles:"No files selected yet",clickToAddHint:"Click files on the left to add",estimatedDuration:"Estimated Duration",advancedSettings:"Advanced Settings",playSettings:"Play Settings",forceStopDuration:"Force Stop Duration",forceStopHint:"If set, playback auto-stops at this time. Must be less than estimated duration. 0 or empty means no force stop",durationRequired:"Random play requires a duration",durationFormula:"Calculation: (Total Duration + Interval × File Count) × Loop Count",dateHint:"Note: Plays on the start date and also on the end date. If both dates are the same, plays only on that day. Start date cannot be later than end date.",dateRangeError:"Start date cannot be later than end date",batchDurationHint:"For sequential play: if playlist total duration > max duration, it stops when duration is reached; if playlist total duration < max duration, it stops when playlist finishes",copyConfirm:"Are you sure you want to copy the selected tasks? This action cannot be undone.",copySuccess:"タスクがコピーされました",copyFailed:"Failed to copy tasks",timeConflict:"Time Conflict",dateRange:"Date Range",endTime:"End Time",copyCount:"Copy Count",copyNewName:"Default New Name",copyNewNamePlaceholder:"Default new task name",copyInterval:"Time Interval",copyIntervalUnit:"minutes",copyPreview:"プレビューリスト",deleteGroupConfirm:"Are you sure you want to delete this task group? Tasks in the group will not be deleted.",noTasksInGroup:"このタスクグループにはタスクがありません",batchPartialFailed:"{failed} task(s) operation failed"},media:{title:"Media Management",list:"File List",upload:"アップロード",delete:"Delete",play:"Play",download:"ダウンロード",fileName:"File Name",fileSize:"ファイルサイズ",fileType:"File Type",uploadTime:"Upload Time",duration:"Duration",noFiles:"ファイルがありません",dropHint:"MP3 ファイルをここにドラッグ&ドロップしてアップロード",dropSub:"Supports MP3 format, max 40MB per file",selectFiles:"Select Files",selectFolder:"Select Folder",onlyMp3:"Only MP3 files are supported",fileTooLarge:"File exceeds 40MB limit",uploadFailed:"Upload failed",uploadSuccess:"Successfully uploaded {count} file(s)",uploading:"Uploading...",deleteSingleConfirm:"Are you sure you want to delete",deleteConfirm:"Delete selected files? This cannot be undone",deleteSuccess:"Deleted successfully",deleteFailed:"Delete failed",batchDelete:"Batch Delete",batchDeleteSuccess:"Successfully deleted {count} file(s)",selectedCount:"{count} file(s) selected",tts:"Text to Speech",ttsFileName:"File Name",ttsFileNamePlaceholder:"Enter file name",ttsVoice:"Voice",ttsSpeed:"Speed",ttsSpeedSlow:"Slow",ttsSpeedMedium:"Medium",ttsSpeedFast:"Fast",ttsText:"Text Input",ttsTextPlaceholder:"Enter text to convert",ttsTextTooShort:"Text must be at least 3 characters",ttsSuccess:"TTS file created",ttsFailed:"TTS generation failed",uploadDone:"Upload complete"},broadcast:{title:"Broadcast Control",serverConfig:"Server Configuration",selectDevices:"Select Devices",quickSelectGroup:"Quick Select Group",selectAllOnline:"Select All Online",clearSelection:"Clear Selection",selectedDevices:"{count} device(s) selected",noDevices:"デバイスがありません",noMatch:"No matching devices",broadcastControl:"Broadcast Control",playLevel:"Play Priority",userLevel:"ユーザーレベル",holdToTalk:"Hold to Talk",releaseToStop:"Release to Stop",broadcasting:"Broadcasting...",connected:"Connected",notConnected:"Not Connected",selectFiles:"Select Files",startBroadcast:"Start Broadcast",stopBroadcast:"Stop Broadcast",playbackMode:"Playback Mode",interval:"Interval",loop:"Loop Count",audioSource:"オーディオソース",microphone:"マイク",noAudioDevice:"No audio input device detected",audioReady:"Audio Ready",inputVolume:"Input Volume",enableMicrophone:"Connect Microphone",startPreview:"Start Preview"},alarm:{title:"アラームシステム",settings:"Alarm Settings",history:"Alarm History",enable:"Enable",disable:"Disable",triggerCondition:"Trigger Condition",alarmFile:"アラームファイル",linkage:"Linkage Device",selectDevices:"Select Devices",searchDevice:"Search device name or serial number",selectAllOnline:"Select All Online",clearSelection:"Clear Selection",selectedCount:"{count} devices selected",noDevices:"デバイスなし",noMatch:"No matching devices",alarmConfig:"Alarm Configuration",alarmName:"Alarm Name",alarmNamePlaceholder:"Enter alarm name",audioSource:"Audio Source",selectFile:"Select uploaded file",inputUrl:"Enter URL manually",selectFilePlaceholder:"Select audio file",urlPlaceholder:"Enter audio file URL",registerAlarm:"Register Alarm",registering:"Registering...",registerResult:"Registration Result",registerSuccess:"Registration successful",registerFailed:"Registration failed",noDevicesSelected:"Please select at least one device",noAudioConfigured:"Please configure audio file",online:"オンライン",offline:"オフライン",deviceSn:"Device Serial Number",registeredList:"Registered Alarms",noRegistered:"No registered alarms",loadListFailed:"Failed to load alarm list",deviceName:"Device Name",fileName:"File Name",refreshList:"Refresh List",unregisterAlarm:"Unregister",unregisterConfirm:"Are you sure you want to unregister this alarm?",unregisterSuccess:"Unregistration successful",unregisterFailed:"Unregistration failed",linkageTitle:"Alarm Linkage",linkageDesc:"When device A triggers, linked devices (including itself) play the specified audio",linkagePlanName:"Plan Name",linkagePlanNamePlaceholder:"Enter plan name",linkageDevices:"Linkage Devices",linkageDevicesHint:"Select trigger and playback devices (can include the trigger device itself)",linkageAudio:"Audio File",addLinkagePlan:"Add Linkage Plan",adding:"Adding...",linkageList:"Linkage Plan List",noLinkagePlans:"No linkage plans",linkageDeviceCount:"Device Count",addLinkageSuccess:"Linkage plan added successfully",addLinkageFailed:"Failed to add linkage plan",linkagePlanNameRequired:"Please enter plan name",linkageNoDevices:"Please select at least one device",linkageNoAudio:"Please configure audio file",linkageTriggerDevice:"トリガーデバイス",linkageTriggerDeviceHint:"When this device triggers an alarm, linked devices will play audio",linkageTriggerDevicePlaceholder:"Select the alarm trigger device",linkageNoTriggerDevice:"Please select a trigger device",registerTrigger:"Register",registerTriggerTitle:"Register Trigger Device",registerTriggerSuccess:"Trigger device registered successfully",registerTriggerFailed:"Failed to register trigger device",loadLinkageFailed:"Failed to load linkage plans",deleteLinkageConfirm:"Are you sure you want to delete the linkage plan",deleteLinkageFailed:"Failed to delete linkage plan",forceUnregTitle:"Force Unregister Alarm",forceUnregHint:"Force unregister all alarm registrations for a device regardless of type",forceUnregButton:"Force Unregister Alarm",forceUnregModalHint:"Select a device to force unregister all alarms (standalone + linkage)",forceUnregConfirm:"Confirm Unregister",forceUnregSuccess:"Force unregister alarm successful",forceUnregFailed:"Force unregister alarm failed"},account:{title:"Account Management",profile:"プロフィール",changePassword:"Change Password",subAccounts:"サブアカウント",logs:"Operation Logs",username:"Username",nickname:"ニックネーム",email:"メールアドレス",phone:"Phone",role:"Role",level:"レベル",addSubUser:"Add Sub Account",usernamePlaceholder:"Enter username",passwordPlaceholder:"Enter password",nicknamePlaceholder:"Enter nickname",beizhu:"Remark",beizhuPlaceholder:"Enter remark",password:"パスワード",levelLabel:"レベル",levelPlaceholder:"Select level",mask:"Permission Mask",maskPlaceholder:"40-bit permission mask (0/1)",maskDefault:"00000000000000000000000000000000000000000000",permissions:"Permission Settings",permCreateSub:"Can create sub accounts",permManageDevice:"Can add/delete devices",permUploadFile:"Can upload files",addSuccess:"Sub account added successfully",addFailed:"Failed to add sub account",listFailed:"Failed to get sub account list",noSubUsers:"サブアカウントがまだありません",createTime:"Create Time",status:"ステータス",statusNormal:"Normal",statusDisabled:"Disabled",userLevel:"ユーザーレベル",playLevel:"Play Level",passwordShow:"パスワード",refreshList:"Refresh List",usernameRequired:"Please enter username",passwordRequired:"Please enter password",permChangeFailed:"Permission change failed",adding:"Adding...",deleteConfirm:"Are you sure to delete sub account {name}? This cannot be undone!",deleteSuccess:"Sub account deleted successfully",deleteFailed:"Failed to delete sub account",editDevices:"Edit Devices",editDevicesSuccess:"Devices updated successfully",editDevicesFailed:"Failed to update devices",loadDevicesFailed:"Failed to load device list",searchDevice:"Search device name or ID",noDevices:"デバイスがありません",resetToken:"トークンをリセット",resetTokenConfirm:"{name} のトークンをリセットしてもよろしいですか?",resetTokenSuccess:"トークンがリセットされました",resetTokenFailed:"Token reset failed",newToken:"New Token"},settings:{title:"Settings",language:"Language",theme:"テーマ",darkMode:"ダークモード",lightMode:"ライトモード",diabloMode:"ディアブロモード",notification:"Notifications",sound:"Sound Settings",about:"About",version:"バージョン"},language:{title:"Select Language",chinese:"简体中文",english:"English",korean:"한국어",thai:"ไทย",vietnamese:"Tiếng Việt",arabic:"العربية",malay:"Bahasa Melayu",japanese:"日本語",russian:"Русский",french:"Français",spanish:"Español",portuguese:"Português",german:"Deutsch",indonesian:"Bahasa Indonesia",hindi:"हिन्दी",turkish:"Türkçe",italian:"Italiano",polish:"Polski",swahili:"Kiswahili"},messages:{deleteConfirm:"Are you sure you want to delete? This action cannot be undone!",saveSuccess:"Saved successfully",deleteSuccess:"Deleted successfully",operationSuccess:"Operation successful",operationFailed:"Operation failed, please try again",networkError:"Network error, please check your connection",serverError:"Server error, please try again later",noData:"データがありません",loading:"Loading...",noPermission:"No permission to access",tokenExpired:"Session expired, please login again",operationTimeout:"Operation timeout"},admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"Select Language",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data available",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",btnEnable:"Enable",btnDisable:"Disable",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully"},info:{title:"Select Language",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Announcement too short",saveSuccess:"Saved successfully",saveFailed:"Update failed"},upload:{title:"Select Language",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Select Language",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scrolling Notice",noData:"No data available",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"},billing:{title:"Select Language",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Slideshow",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"},gallery:{title:"Select Language",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No data available",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"}}},"ko-KR":{common:{appName:"ST 방송 시스템",loading:"로딩 중...",confirm:"확인",cancel:"취소",save:"저장",delete:"삭제",edit:"편집",add:"추가",search:"검색",refresh:"새로고침",submit:"제출",reset:"재설정",logout:"로그아웃",logoutConfirm:"로그아웃하시겠습니까?",logoutTitle:"로그아웃 확인",back:"뒤로",success:"성공",error:"오류",warning:"경고",info:"정보",yes:"예",no:"아니오",operation:"작업",status:"상태",name:"이름",description:"설명",createTime:"생성 시간",updateTime:"업데이트 시간",close:"닫기",stop:"중지",actions:"작업",seconds:"초",minutes:"분",hours:"시간",moveUp:"위로 이동",moveDown:"아래로 이동",quick:"빠른",unknown:"알 수 없음",months:"mo",years:"yr",copy:"Copy",index:"Index",toggle:"Enable/Disable"},login:{title:"로그인",subtitle:"BROADCAST SYSTEM",username:"사용자명",password:"비밀번호",usernamePlaceholder:"사용자명을 입력하세요",passwordPlaceholder:"비밀번호를 입력하세요",rememberMe:"로그인 유지",forgotPassword:"비밀번호를 잊으셨나요?",loginButton:"로그인 Login",logging:"로그인 중...",loginSuccess:"로그인 성공",loginFailed:"로그인 실패",usernameRequired:"사용자명을 입력하세요",passwordRequired:"비밀번호를 입력하세요",invalidCredentials:"사용자명 또는 비밀번호가 올바르지 않습니다"},dashboard:{title:"대시보드",welcome:"환영합니다",systemStatus:"시스템이 정상적으로 작동 중입니다",quickActions:"빠른 작업",addDevice:"장치 추가",createGroup:"그룹 생성",scheduleTask:"예약 작업",broadcastNow:"즉시 방송"},menu:{dashboard:"대시보드",devices:"장치 관리",groups:"그룹 관리",tasks:"예약 작업",media:"미디어 관리",broadcast:"방송 제어",alarm:"알림 시스템",account:"계정 관리",settings:"설정",apiTest:"API 테스트",home:"홈",mine:"내 계정",admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"User & Permission Management",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully"},info:{title:"App Privacy Agreement",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Content too short, at least 3000 characters",saveSuccess:"Saved successfully",saveFailed:"Save failed"},upload:{title:"Avatar & Logo Upload",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Announcement Management",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scroll notice: ",noData:"No data",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"},billing:{title:"Billing Settings",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Device",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure to delete?"},gallery:{title:"Gallery Overview",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No gallery items",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"}}},devices:{title:"장치 관리",list:"장치 목록",online:"온라인",offline:"오프라인",playing:"재생 중",volume:"볼륨",adjustVolume:"볼륨 조절",addDevice:"장치 추가",editDevice:"장치 편집",deleteDevice:"장치 삭제",deviceName:"장치 이름",serialNumber:"시리얼 번호",lastUpdate:"마지막 업데이트",refreshList:"장치 목록 새로고침",batchVolume:"일괄 볼륨 조절",noDevices:"장치가 없습니다. 오른쪽 상단의 장치 추가 버튼을 클릭하세요",unnamedDevice:"이름 없는 장치",debugSound:"디버그 사운드",changeVolume:"볼륨 변경",changeName:"이름 변경",changeSerial:"시리얼 번호 변경",id:"ID",volumeNotSet:"설정되지 않음",neverOnline:"한 번도 온라인 없음",expiredDisabled:"만료 비활성화",unknown:"알 수 없음",openDebugSound:"디버그 사운드 열기",closeDebugSound:"디버그 사운드 닫기",unknownStatus:"알 수 없는 상태",addDeviceTitle:"장치 추가",deviceNameRequired:"장치 이름",deviceSerialRequired:"장치 시리얼",deviceKeyRequired:"장치 키",deviceNamePlaceholder:"장치 이름을 입력하세요",deviceSerialPlaceholder:"장치 시리얼 번호를 입력하세요",deviceKeyPlaceholder:"장치 등록 키를 입력하세요",deviceKeyHint:"등록 키는 장치를 시스템에 등록하는 데 사용되며, 장치 비밀번호와 동일합니다",fillTestData:"테스트 데이터 채우기",renameTitle:"장치 이름 변경",newDeviceNamePlaceholder:"새 장치 이름을 입력하세요",debugSoundTitle:"디버그 사운드",selectDebugSoundStatus:"디버그 사운드 상태를 선택하세요",editSerialTitle:"장치 시리얼 편집",currentSerial:"현재 시리얼",currentSerialPlaceholder:"현재 장치 시리얼",newSerial:"새 시리얼",newSerialPlaceholder:"32자리 새 시리얼 번호를 입력하세요",serialLengthHint:"시리얼 번호 길이는 32자여야 합니다",editDeviceTitle:"장치 편집",macAddress:"MAC 주소",macAddressPlaceholder:"MAC 주소를 입력하세요",ipAddress:"IP 주소",ipAddressPlaceholder:"IP 주소를 입력하세요",port:"포트",portPlaceholder:"포트 번호를 입력하세요",adjustVolumeTitle:"볼륨 조절",volumeRange:"범위: 1-63",preciseSetting:"정확한 설정:",batchAdjustVolumeTitle:"일괄 볼륨 조절",selectedDevices:"선택된 장치:",devicesCount:"개",confirmAdjust:"조절 확인",adding:"추가 중...",saving:"저장 중...",adjusting:"조절 중...",confirmButton:"확인",cancelButton:"취소",deviceNameValidationError:"장치 이름을 입력하세요",deviceSerialValidationError:"장치 시리얼 번호를 입력하세요",deviceKeyValidationError:"장치 키를 입력하세요",newDeviceNameValidationError:"장치 이름을 입력하세요",deviceSerialLengthError:"장치 시리얼 번호를 입력하세요",newSerialLengthError:"시리얼 번호 길이는 32자여야 합니다",debugSoundSelectError:"디버그 사운드 열기 또는 닫기를 선택하세요",confirmOperation:"작업 확인",confirmDelete:"장치를 삭제하시겠습니까",deleteCannotUndo:"? 이 작업은 되돌릴 수 없습니다!",addDeviceSuccess:"장치가 성공적으로 추가되었습니다",addDeviceFailed:"장치 추가 실패",deviceRenameSuccess:"장치 이름이 성공적으로 변경되었습니다",deviceRenameFailed:"장치 이름 변경 실패",deviceEditSuccess:"장치가 성공적으로 편집되었습니다",deviceEditFailed:"장치 편집 실패",deviceSerialEditSuccess:"장치 시리얼이 성공적으로 수정되었습니다",deviceSerialEditFailed:"장치 시리얼 수정 실패",debugSoundSuccess:"디버그 사운드가 성공적으로 설정되었습니다",debugSoundFailed:"디버그 사운드 설정 실패",deleteDeviceSuccess:"장치가 성공적으로 삭제되었습니다",deleteDeviceFailed:"장치 삭제 실패",adjustVolumeSuccess:"볼륨이",adjustVolumeFailed:"볼륨 조절 실패",batchAdjustSuccess:"일괄 볼륨 조절 성공, 총",batchAdjustFailed:"일괄 볼륨 조절 실패",volumeValidationError:"볼륨은 1-63 사이여야 합니다",selectDevicesFirst:"먼저 볼륨을 조절할 장치를 선택하세요",successfullyFetched:"성공적으로 가져옴",devicesUnit:"개 장치",deviceListFormatError:"장치 목록 데이터 형식 오류",fetchDeviceListFailed:"장치 목록 가져오기 실패",searchPlaceholder:"장치 이름 또는 시리얼 번호 검색...",unknownError:"알 수 없는 오류",listView:"리스트 뷰",cardView:"카드 뷰",scanDevices:"Scan Devices",deviceScan:"Device Scan",seed:"Device SEED",seedPlaceholder:"Enter 32-char hex SEED",scanButton:"Scan",scanning:"Scanning...",noDeviceFound:"No devices found",scanNotSupported:"Device scan only available in desktop client",autoIP:"Auto IP",warmMode:"Voice Prompt",mediaServer:"Media Server",mediaPort:"Media Port",gateway:"Gateway",subnetMask:"Subnet Mask",dns:"DNS",deviceIP:"Device IP",applyConfig:"Apply Config",clearDevice:"Clear Device",deviceConfigured:"Device config sent",deviceConfigureFailed:"Device config failed",deviceCleared:"Clear command sent",scanConfigTitle:"Device Network Config",scannedDevices:"Discovered Devices",scanHint:"Click scan to discover all devices on the local network",testComm:"Test Communication",testCommBtn:"Test",console:"Console",clearConsole:"Clear",consoleEmpty:"Waiting for communication...",invalidIP:"Invalid IP format",invalidMask:"Invalid subnet mask",invalidGateway:"Invalid gateway",invalidMediaIP:"Invalid media server IP",invalidPort:"Port range 1-65535",invalidDNS:"Invalid DNS format",dnsPlaceholder:"0.0.0.0 = System default",advanced:"Advanced",soundCard:"Sound Card",getAmixerStatus:"Get Status",amixerApply:"Apply",amixerGetting:"Getting...",amixerOn:"On",amixerOff:"Off",amixerDAC:"DAC Playback Volume",amixerHeadphoneVol:"Headphone Volume",amixerHeadphoneSwitch:"Headphone Switch",amixerHeadphoneRoute:"Headphone Source",amixerLineIn:"Line In Volume",amixerFMIn:"FM In Volume",amixerMicIn:"Mic In Volume",amixerMicBoost:"Mic Boost",amixerADCCapture:"ADC Capture Volume",amixerADCLeftFM:"Left FM Capture",amixerADCRightFM:"Right FM Capture",amixerADCLeftOut:"Left Out Capture",amixerADCRightOut:"Right Out Capture",amixerADCLineIn:"Line In Capture",amixerADCMic:"Mic Capture",amixerLeftFM:"Left FM",amixerLeftLeftDAC:"Left Left DAC",amixerLeftRightDAC:"Left Right DAC",amixerLeftLineIn:"Left Line In",amixerLeftMicIn:"Left Mic In",amixerRightFM:"Right FM",amixerRightLeftDAC:"Right Left DAC",amixerRightRightDAC:"Right Right DAC",amixerRightLineIn:"Right Line In",amixerRightMicIn:"Right Mic In",amixerGroupDecode:"Decode Output",amixerGroupCapture:"Capture Mixer Input",amixerGroupLeft:"Left Output Mixer",amixerGroupRight:"Right Output Mixer",amixerGroupGain:"Gain Config",amixerRouteDAC:"DAC",amixerRouteMixer:"Mixer",amixerGetSuccess:"Sound card status retrieved",amixerGetFailed:"Failed to get sound card status",amixerSetSuccess:"Setting sent",amixerSetFailed:"Setting failed"},groups:{title:"그룹 관리",manage:"그룹 관리",list:"그룹 목록",deviceCount:"장치 수",addGroup:"그룹 추가",editGroup:"그룹 편집",deleteGroup:"그룹 삭제",groupName:"그룹 이름",inputName:"그룹 이름 입력",add:"그룹 추가",playMenu:"재생 메뉴",id:"ID",name:"이름",actions:"작업",noGroups:"사용 가능한 그룹이 없습니다",untitled:"제목 없는 그룹",editDevices:"장치 편집",editVideo:"동영상 편집",previewVideo:"동영상 미리보기",groupPlay:"그룹 재생",allDevices:"모든 장치",selectedDevices:"선택된 장치",selectAtLeastOneDevice:"최소 하나의 장치를 선택하세요",videoUrl:"동영상 URL",inputVideoUrl:"동영상 URL을 입력하세요",noVideoUrl:"동영상 URL이 설정되지 않음",noVideoUrlSet:"아직 mu38u 라이브 스트림 URL이 설정되지 않았습니다",playSequence:"재생 순서",fileInterval:"파일 간격",playCount:"재생 횟수",noPlayingItems:"현재 재생 중인 항목이 없습니다",playList:"재생 목록",nameRequired:"그룹 이름은 비워둘 수 없습니다",loadSuccess:"{count}개 그룹을 성공적으로 로드했습니다",loadFailed:"그룹 목록 로드 실패",addSuccess:"그룹을 성공적으로 추가했습니다",addFailed:"그룹 추가 실패",deleteConfirm:"이 작업은 이 그룹을 영구적으로 삭제합니다. 계속하시겠습니까?",deleteSuccess:"삭제 성공",deleteFailed:"삭제 실패",saveSuccess:"저장 성공",saveFailed:"저장 실패",loadDevicesFailed:"장치 목록 로드 실패",invalidGroupId:"유효하지 않은 그룹 ID",unknownDevice:"알 수 없는 장치",playFeatureComingSoon:"그룹 재생 기능이 곧 출시됩니다",stopPlayFeatureComingSoon:"재생 중지 기능이 곧 출시됩니다",playListFeatureComingSoon:"재생 목록 기능이 곧 출시됩니다",searchDevicePlaceholder:"장치 이름 또는 ID를 입력하여 검색...",searchResult:"{filtered}개 장치 찾음 (총 {total}개)",totalDevices:"총 {count}개 장치",noSearchResult:"일치하는 장치를 찾을 수 없습니다",noSelectedDevices:"아직 장치를 선택하지 않았습니다",searchFilePlaceholder:"파일 이름 또는 ID를 입력하여 검색...",availableFiles:"사용 가능한 파일",selectedFiles:"선택된 파일",noSelectedFiles:"아직 파일을 선택하지 않았습니다",doubleClickHint:"더블 클릭하여 파일을 복제 추가",unknownFile:"알 수 없는 파일",playMode:"재생 모드",playMode1:"순차 재생 1회",playMode2:"순차 재생 2회",playMode3:"순차 재생 3회",totalDuration:"예상 총 시간",durationFormula:"계산: (총 시간 + 간격) × 반복 횟수",playModeHint:"반복 횟수, 1-99",intervalMaxHint:"최대 간격 3시간 (10800초)",estimatedDuration:"예상 시간",forceStopDuration:"강제 중지 시간 (선택 사항)",forceStopHint:"이 시간에 자동 중지됩니다. 예상 시간보다 짧아야 합니다. 0은 강제 중지 없음",selectAtLeastOneFile:"최소 하나의 파일을 선택하세요",loadFilesFailed:"파일 목록 로드 실패",groupHasNoDevices:"이 그룹에는 장치가 없습니다",playStarted:"재생이 성공적으로 시작되었습니다",playFailed:"재생 시작 실패",invalidPlayId:"유효하지 않은 재생 ID",stopPlayConfirm:"재생을 중지하시겠습니까?",stopPlayInProgress:"재생을 중지하는 중입니다. 잠시 기다려주세요...",stopPlaySuccess:"재생이 성공적으로 중지되었습니다",stopPlaySuccessAndClosed:"재생이 성공적으로 중지되었으며, 재생 목록이 닫혔습니다",stopPlayFailed:"재생 중지 실패",selectGroupForPlay:"재생할 그룹을 선택하세요",devices:"장치",devicesCount:"개 장치",startPlay:"재생 시작"},tasks:{title:"예약 작업",list:"작업 목록",addTask:"작업 추가",editTask:"작업 편집",deleteTask:"작업 삭제",taskName:"작업 이름",executeTime:"실행 시간",playMode:"재생 모드",repeat:"반복",files:"파일",devices:"장치",advancedSettings:"고급 설정",playSettings:"재생 설정",forceStopDuration:"강제 정지 시간 (초)",forceStopHint:"이 시간에 자동 정지. 0 또는 비워두면 강제 정지 안 함",durationRequired:"랜덤 재생은 시간 설정이 필요합니다",durationFormula:"계산: (총 시간 + 간격 × 파일수) × 반복수",dateHint:"참고: 시작일과 종료일 모두 재생됩니다. 시작일과 종료일이 같으면 해당 일에만 재생됩니다. 시작일은 종료일보다 늦을 수 없습니다.",dateRangeError:"시작일은 종료일보다 늦을 수 없습니다",batchDurationHint:"순차 재생 시: 재생목록 총 시간 > 최대 재생 시간이면 시간이 되면 종료되고, 재생목록 총 시간 < 최대 재생 시간이면 재생 완료 후 자동 종료됩니다",copyConfirm:"선택한 작업을 복사하시겠습니까? 이 작업은 되돌릴 수 없습니다.",copySuccess:"태스크가 복사되었습니다",copyFailed:"태스크 복사에 실패했습니다",timeConflict:"시간 충돌",dateRange:"날짜 범위",titleDescription:"Manage scheduled playback tasks with batch operations and task groups",allGroups:"All Task Groups",addTaskGroup:"Add Task Group",deleteTaskGroup:"Delete Task Group",disableTaskGroup:"Disable Task Group",enableTaskGroup:"Enable Task Group",taskGroup:"Task Group",taskGroupName:"Task Group Name",enterGroupName:"Enter task group name",applyTaskGroup:"Apply Task Group",task:"Task",selectGroup:"Select Task Group",startTime:"Start Time",duration:"Duration",loopCount:"Loop Count",startDate:"Start Date",endDate:"End Date",changeGroup:"Change Group",noGroup:"No Group",tryPlay:"Try Play",batchDisable:"Batch Disable",batchEnable:"Batch Enable",batchEditDevices:"Batch Edit Devices",batchEditFiles:"Batch Edit Files",batchApplyGroup:"Batch Apply Group",batchEditTime:"Batch Edit Time",batchEditLoopCount:"Batch Edit Loop Count",batchEditDuration:"Batch Edit Duration",batchDelete:"Batch Delete",batchCopy:"Batch Copy",noTasks:"No Tasks",selectedCount:"Selected {count} tasks",randomPlay:"Random Play",loopPlay:"Loop {count} times",selectDevices:"Select Devices to Play",selectFiles:"Select Audio Files",allDevices:"All Devices",selectedDevices:"Selected Devices",allFiles:"All Files",selectedFiles:"Selected Files",editTaskDevices:"Edit Task Devices",editTaskFiles:"Edit Task Files",taskDuration:"Task Duration",intervalDuration:"Interval Duration",timeRange:"Time Range",to:"to",playCount:"Play Count",sequentialPlay:"Sequential Play",randomPlayMode:"Random Play",playModeChange:"Play Mode Change",enableOtherLimit:"Other limits not required",enableStartDate:"Enable Start Date",enableEndDate:"Enable End Date",enterTaskName:"Enter task name",noTasksSelected:"No tasks selected",devicesRequired:"No devices selected",filesRequired:"No audio files selected",saveSuccess:"Save successful",saveFailed:"Save failed",deleteSuccess:"Delete successful",deleteFailed:"Delete failed",deleteConfirm:"This operation will permanently delete the task. Continue?",enableSuccess:"Task enabled",disableSuccess:"Task disabled",startPlaySuccess:"Play started",startPlayFailed:"Play start failed",stopPlaySuccess:"Play stopped",stopPlayFailed:"Play stop failed",groupNameRequired:"Task group name cannot be empty",addGroupSuccess:"Task group added successfully",addGroupFailed:"Failed to add task group",deleteGroupSuccess:"Task group deleted successfully",deleteGroupFailed:"Failed to delete task group",disableGroupSuccess:"Task group disabled successfully",disableGroupFailed:"Failed to disable task group",enableGroupSuccess:"Task group enabled successfully",enableGroupFailed:"Failed to enable task group",applyGroupSuccess:"Task group applied successfully",applyGroupFailed:"Failed to apply task group",selectGroupFirst:"Please select a task group first",batchDisableSuccess:"Batch disable successful",batchEnableSuccess:"Batch enable successful",unknownDevice:"Unknown Device",unknownFile:"Unknown File",calculate:"Calculate",monday:"월요일",tuesday:"화요일",wednesday:"수요일",thursday:"목요일",friday:"금요일",saturday:"토요일",sunday:"일요일",index:"Index",weekdays:"Play Days",noLimit:"무제한",autoCalc:"Auto-calculated",taskNameRequired:"Task name is required",startTimeRequired:"Start time is required",cannotDeletePlaying:"Task is playing, please stop first",cannotDeleteEnabled:"Task is enabled, please disable first",cannotEditPlaying:"Task is playing, please stop first",disabled:"Disabled",enabled:"Enabled",enableTask:"Enable",disableTask:"Disable",noSelectedFiles:"No files selected yet",clickToAddHint:"Click files on the left to add",estimatedDuration:"Estimated Duration",endTime:"End Time",copyCount:"Copy Count",copyNewName:"Default New Name",copyNewNamePlaceholder:"Default new task name",copyInterval:"Time Interval",copyIntervalUnit:"minutes",copyPreview:"Preview List",deleteGroupConfirm:"Are you sure you want to delete this task group? Tasks in the group will not be deleted.",noTasksInGroup:"No tasks in this task group",batchPartialFailed:"{failed} task(s) operation failed"},media:{title:"미디어 관리",list:"파일 목록",upload:"업로드",delete:"삭제",play:"재생",download:"다운로드",fileName:"파일명",fileSize:"파일 크기",fileType:"파일 유형",uploadTime:"업로드 시간",duration:"재생 시간",noFiles:"파일이 없습니다",dropHint:"MP3 파일을 여기로 드래그하여 업로드",dropSub:"MP3 형식 지원, 파일당 최대 40MB",selectFiles:"파일 선택",selectFolder:"폴더 선택",onlyMp3:"MP3 파일만 지원됩니다",fileTooLarge:"파일이 40MB 제한을 초과합니다",uploadFailed:"업로드 실패",uploadSuccess:"{count}개 파일 업로드 성공",uploading:"업로드 중...",deleteSingleConfirm:"이 파일을 삭제하시겠습니까",deleteConfirm:"선택한 파일을 삭제하시겠습니까? 복구할 수 없습니다",deleteSuccess:"삭제 성공",deleteFailed:"삭제 실패",batchDelete:"일괄 삭제",batchDeleteSuccess:"{count}개 파일 삭제 성공",selectedCount:"{count}개 파일 선택됨",tts:"Text to Speech",ttsFileName:"File Name",ttsFileNamePlaceholder:"Enter file name",ttsVoice:"Voice",ttsSpeed:"Speed",ttsSpeedSlow:"Slow",ttsSpeedMedium:"Medium",ttsSpeedFast:"Fast",ttsText:"Text Input",ttsTextPlaceholder:"Enter text to convert",ttsTextTooShort:"Text must be at least 3 characters",ttsSuccess:"TTS file created",ttsFailed:"TTS generation failed",uploadDone:"Upload complete"},broadcast:{title:"방송 제어",serverConfig:"서버 설정",selectDevices:"장치 선택",quickSelectGroup:"빠른 그룹 선택",selectAllOnline:"온라인 전체 선택",clearSelection:"선택 해제",selectedDevices:"{count}대 선택됨",noDevices:"사용 가능한 장치 없음",noMatch:"일치하는 장치 없음",broadcastControl:"방송 제어",playLevel:"재생 우선순위",userLevel:"사용자 등급",holdToTalk:"눌러서 말하기",releaseToStop:"놓으면 중지",broadcasting:"방송 중...",connected:"연결됨",notConnected:"연결 안됨",selectFiles:"파일 선택",startBroadcast:"방송 시작",stopBroadcast:"방송 중지",playbackMode:"재생 모드",interval:"간격",loop:"반복 횟수",audioSource:"오디오 소스",microphone:"마이크",noAudioDevice:"오디오 입력 장치가 감지되지 않았습니다",audioReady:"오디오 준비 완료",inputVolume:"Input Volume",enableMicrophone:"Connect Microphone",startPreview:"Start Preview"},alarm:{title:"알림 시스템",settings:"알림 설정",history:"알림 기록",enable:"활성화",disable:"비활성화",triggerCondition:"트리거 조건",alarmFile:"알림 파일",linkage:"연동 장치",selectDevices:"장치 선택",searchDevice:"장치 이름 또는 시리얼 번호 검색",selectAllOnline:"온라인 전체 선택",clearSelection:"선택 해제",selectedCount:"{count}개 장치 선택됨",noDevices:"장치 없음",noMatch:"일치하는 장치 없음",alarmConfig:"알림 구성",alarmName:"알림 이름",alarmNamePlaceholder:"알림 이름을 입력하세요",audioSource:"오디오 소스",selectFile:"업로드된 파일 선택",inputUrl:"URL 수동 입력",selectFilePlaceholder:"오디오 파일 선택",urlPlaceholder:"오디오 파일 URL 입력",registerAlarm:"알림 등록",registering:"등록 중...",registerResult:"등록 결과",registerSuccess:"등록 성공",registerFailed:"등록 실패",noDevicesSelected:"최소 하나의 장치를 선택하세요",noAudioConfigured:"오디오 파일을 구성하세요",online:"온라인",offline:"오프라인",deviceSn:"장치 시리얼 번호",registeredList:"등록된 알림",noRegistered:"등록된 알림 없음",loadListFailed:"알림 목록 로드 실패",deviceName:"장치 이름",fileName:"파일 이름",refreshList:"목록 새로고침",unregisterAlarm:"등록 해제",unregisterConfirm:"이 알림의 등록을 해제하시겠습니까?",unregisterSuccess:"등록 해제 성공",unregisterFailed:"등록 해제 실패",linkageTitle:"알림 연동",linkageDesc:"장치 A가 트리거되면 연동 장치(자신 포함)가 지정된 오디오를 재생",linkagePlanName:"플랜 이름",linkagePlanNamePlaceholder:"플랜 이름을 입력하세요",linkageDevices:"연동 장치",linkageDevicesHint:"트리거 및 재생 장치를 선택 (트리거 장치 자체 포함 가능)",linkageAudio:"오디오 파일",addLinkagePlan:"연동 플랜 추가",adding:"추가 중...",linkageList:"연동 플랜 목록",noLinkagePlans:"연동 플랜 없음",linkageDeviceCount:"장치 수",addLinkageSuccess:"연동 플랜 추가 성공",addLinkageFailed:"연동 플랜 추가 실패",linkagePlanNameRequired:"플랜 이름을 입력하세요",linkageNoDevices:"최소 하나의 장치를 선택하세요",linkageNoAudio:"오디오 파일을 구성하세요",linkageTriggerDevice:"트리거 장치",linkageTriggerDeviceHint:"이 장치가 알림을 트리거하면 연동 장치가 오디오를 재생합니다",linkageTriggerDevicePlaceholder:"알림 트리거 장치를 선택하세요",linkageNoTriggerDevice:"트리거 장치를 선택하세요",registerTrigger:"등록",registerTriggerTitle:"트리거 장치 등록",registerTriggerSuccess:"트리거 장치 등록 성공",registerTriggerFailed:"트리거 장치 등록 실패",loadLinkageFailed:"연동 플랜 로드 실패",deleteLinkageConfirm:"연동 플랜을 삭제하시겠습니까",deleteLinkageFailed:"연동 플랜 삭제 실패",forceUnregTitle:"알림 강제 해제",forceUnregHint:"장치의 모든 알림 등록을 강제 해제",forceUnregButton:"알림 강제 해제",forceUnregModalHint:"장치를 선택하여 모든 알림을 강제 해제 (단독 + 연동)",forceUnregConfirm:"해제 확인",forceUnregSuccess:"알림 강제 해제 성공",forceUnregFailed:"알림 강제 해제 실패"},account:{title:"계정 관리",profile:"프로필",changePassword:"비밀번호 변경",subAccounts:"하위 계정",logs:"작업 로그",username:"사용자명",nickname:"닉네임",email:"이메일",phone:"전화번호",role:"역할",level:"레벨",addSubUser:"Add Sub Account",usernamePlaceholder:"Enter username",passwordPlaceholder:"Enter password",nicknamePlaceholder:"Enter nickname",beizhu:"Remark",beizhuPlaceholder:"Enter remark",password:"Password",levelLabel:"Level",levelPlaceholder:"Select level",mask:"Permission Mask",maskPlaceholder:"40-bit permission mask (0/1)",maskDefault:"00000000000000000000000000000000000000000000",permissions:"Permission Settings",permCreateSub:"Can create sub accounts",permManageDevice:"Can add/delete devices",permUploadFile:"Can upload files",addSuccess:"Sub account added successfully",addFailed:"Failed to add sub account",listFailed:"Failed to get sub account list",noSubUsers:"No sub accounts yet",createTime:"Create Time",status:"Status",statusNormal:"Normal",statusDisabled:"Disabled",userLevel:"User Level",playLevel:"Play Level",passwordShow:"Password",refreshList:"Refresh List",usernameRequired:"Please enter username",passwordRequired:"Please enter password",permChangeFailed:"Permission change failed",adding:"Adding...",deleteConfirm:"Are you sure to delete sub account {name}? This cannot be undone!",deleteSuccess:"Sub account deleted successfully",deleteFailed:"Failed to delete sub account",editDevices:"Edit Devices",editDevicesSuccess:"Devices updated successfully",editDevicesFailed:"Failed to update devices",loadDevicesFailed:"Failed to load device list",searchDevice:"Search device name or ID",noDevices:"No devices",resetToken:"Reset Token",resetTokenConfirm:"Are you sure to reset token for {name}?",resetTokenSuccess:"Token reset successfully",resetTokenFailed:"Token reset failed",newToken:"New Token"},settings:{title:"설정",language:"언어",theme:"테마",darkMode:"다크 모드",lightMode:"라이트 모드",diabloMode:"다이블로 모드",notification:"알림",sound:"사운드 설정",about:"정보",version:"버전"},language:{title:"언어 선택",chinese:"简体中文",english:"English",korean:"한국어",thai:"ไทย",vietnamese:"Tiếng Việt",arabic:"العربية",malay:"Bahasa Melayu",shiite:"시아파",sunni:"수니파",japanese:"日本語",russian:"Русский",french:"Français",spanish:"Español",portuguese:"Português",german:"Deutsch",indonesian:"Bahasa Indonesia",hindi:"हिन्दी",turkish:"Türkçe",italian:"Italiano",polish:"Polski",swahili:"Kiswahili"},messages:{deleteConfirm:"삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다!",saveSuccess:"저장되었습니다",deleteSuccess:"삭제되었습니다",operationSuccess:"작업 성공",operationFailed:"작업 실패, 다시 시도하세요",networkError:"네트워크 오류, 연결을 확인하세요",serverError:"서버 오류, 나중에 다시 시도하세요",noData:"데이터가 없습니다",loading:"로딩 중...",noPermission:"접근 권한이 없습니다",tokenExpired:"세션이 만료되었습니다. 다시 로그인하세요",operationTimeout:"작업 시간 초과"},clientLogin:{subtitle:"Client Edition",hostPlaceholder:"Server address, e.g. 192.168.1.100:12080",hostHint:"Enter server IP:port, http:// is optional",hostRequired:"Please enter server address"},admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"Select Language",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data available",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",btnEnable:"Enable",btnDisable:"Disable",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully"},info:{title:"Select Language",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Announcement too short",saveSuccess:"Saved successfully",saveFailed:"Update failed"},upload:{title:"Select Language",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Select Language",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scrolling Notice",noData:"No data available",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"},billing:{title:"Select Language",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Slideshow",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"},gallery:{title:"Select Language",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No data available",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"}}},"ru-RU":{common:{appName:"Система Вещания ST",loading:"Загрузка...",confirm:"Подтвердить",cancel:"Отмена",save:"Сохранить",delete:"Удалить",edit:"Редактировать",add:"Добавить",search:"Поиск",refresh:"Обновить",submit:"Отправить",reset:"Сбросить",logout:"Выйти",logoutConfirm:"Вы уверены, что хотите выйти?",logoutTitle:"Подтверждение выхода",back:"Назад",success:"Успешно",error:"Ошибка",warning:"Предупреждение",info:"Информация",yes:"Да",no:"Нет",operation:"Операция",status:"Статус",index:"Индекс",name:"Имя",description:"Описание",createTime:"Время создания",updateTime:"Время обновления",close:"Закрыть",stop:"Остановить",toggle:"Включить/Выключить",actions:"Действия",seconds:"секунд",minutes:"минут",hours:"часов",moveUp:"Вверх",moveDown:"Вниз",quick:"Быстро",unknown:"Неизвестно",months:"mo",years:"yr",copy:"Copy"},login:{title:"Вход",subtitle:"СИСТЕМА ТРАНСЛЯЦИЙ",username:"Имя пользователя",password:"Пароль",usernamePlaceholder:"Введите имя пользователя",passwordPlaceholder:"Введите пароль",rememberMe:"Запомнить меня",forgotPassword:"Забыли пароль?",loginButton:"Войти",logging:"Вход в систему...",loginSuccess:"Вход выполнен успешно",loginFailed:"Ошибка входа",usernameRequired:"Введите имя пользователя",passwordRequired:"Введите пароль",invalidCredentials:"Неверное имя пользователя или пароль"},clientLogin:{subtitle:"Клиентская версия",hostPlaceholder:"Адрес сервера, например 192.168.1.100:12080",hostHint:"Введите IP:порт сервера, http:// можно опустить",hostRequired:"Введите адрес сервера"},dashboard:{title:"Панель управления",welcome:"С возвращением",systemStatus:"Система работает нормально",quickActions:"Быстрые действия",addDevice:"Добавить устройство",createGroup:"Создать группу",scheduleTask:"Запланировать задачу",broadcastNow:"Начать трансляцию"},menu:{dashboard:"Панель управления",devices:"Устройства",groups:"Группы",tasks:"Задачи",media:"Медиа",broadcast:"Трансляция",alarm:"Тревога",account:"Аккаунт",settings:"Настройки",apiTest:"Тест API",home:"Главная",mine:"Мой аккаунт",admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"User & Permission Management",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully"},info:{title:"App Privacy Agreement",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Content too short, at least 3000 characters",saveSuccess:"Saved successfully",saveFailed:"Save failed"},upload:{title:"Avatar & Logo Upload",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Announcement Management",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scroll notice: ",noData:"No data",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"},billing:{title:"Billing Settings",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Device",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure to delete?"},gallery:{title:"Gallery Overview",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No gallery items",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"}}},devices:{title:"Управление устройствами",list:"Список устройств",online:"В сети",offline:"Не в сети",playing:"Воспроизведение",volume:"Громкость",adjustVolume:"Настроить громкость",addDevice:"Добавить устройство",editDevice:"Редактировать устройство",deleteDevice:"Удалить устройство",deviceName:"Имя устройства",serialNumber:"Серийный номер",lastUpdate:"Последнее обновление",refreshList:"Обновить список устройств",batchVolume:"Массовая настройка громкости",noDevices:"Нет устройств, нажмите «Добавить устройство» в правом верхнем углу",unnamedDevice:"Безымянное устройство",debugSound:"Отладочный звук",changeVolume:"Изменить громкость",changeName:"Изменить имя",changeSerial:"Изменить серийный номер",id:"ID",volumeNotSet:"Не задано",neverOnline:"Никогда не было в сети",expiredDisabled:"Истёк, отключено",unknown:"Неизвестно",openDebugSound:"Включить отладочный звук",closeDebugSound:"Выключить отладочный звук",unknownStatus:"Неизвестный статус",addDeviceTitle:"Добавить устройство",deviceNameRequired:"Имя устройства",deviceSerialRequired:"Серийный номер устройства",deviceKeyRequired:"Ключ устройства",deviceNamePlaceholder:"Введите имя устройства",deviceSerialPlaceholder:"Введите серийный номер устройства",deviceKeyPlaceholder:"Введите ключ регистрации устройства",deviceKeyHint:"Ключ регистрации используется для регистрации устройства в системе, эквивалент пароля устройства",fillTestData:"Заполнить тестовыми данными",renameTitle:"Переименовать устройство",newDeviceNamePlaceholder:"Введите новое имя устройства",debugSoundTitle:"Отладочный звук",selectDebugSoundStatus:"Выберите статус отладочного звука",editSerialTitle:"Изменить серийный номер устройства",currentSerial:"Текущий серийный номер",currentSerialPlaceholder:"Текущий серийный номер устройства",newSerial:"Новый серийный номер",newSerialPlaceholder:"Введите новый 32-значный серийный номер",serialLengthHint:"Серийный номер должен содержать 32 символа",editDeviceTitle:"Редактировать устройство",macAddress:"MAC-адрес",macAddressPlaceholder:"Введите MAC-адрес",ipAddress:"IP-адрес",ipAddressPlaceholder:"Введите IP-адрес",port:"Порт",portPlaceholder:"Введите номер порта",adjustVolumeTitle:"Настроить громкость",volumeRange:"Диапазон: 1-63",preciseSetting:"Точная настройка:",batchAdjustVolumeTitle:"Массовая настройка громкости",selectedDevices:"Выбранные устройства:",devicesCount:"устройств",confirmAdjust:"Подтвердить настройку",adding:"Добавление...",saving:"Сохранение...",adjusting:"Настройка...",confirmButton:"Подтвердить",cancelButton:"Отмена",deviceNameValidationError:"Введите имя устройства",deviceSerialValidationError:"Введите серийный номер устройства",deviceKeyValidationError:"Введите ключ устройства",newDeviceNameValidationError:"Введите имя устройства",deviceSerialLengthError:"Введите серийный номер устройства",newSerialLengthError:"Серийный номер должен содержать 32 символа",debugSoundSelectError:"Выберите включение или выключение отладочного звука",confirmOperation:"Подтвердить операцию",confirmDelete:"Вы уверены, что хотите удалить устройство",deleteCannotUndo:"? Это действие нельзя отменить!",addDeviceSuccess:"Устройство успешно добавлено",addDeviceFailed:"Не удалось добавить устройство",deviceRenameSuccess:"Устройство успешно переименовано",deviceRenameFailed:"Не удалось переименовать устройство",deviceEditSuccess:"Устройство успешно отредактировано",deviceEditFailed:"Не удалось отредактировать устройство",deviceSerialEditSuccess:"Серийный номер устройства успешно изменён",deviceSerialEditFailed:"Не удалось изменить серийный номер устройства",debugSoundSuccess:"Отладочный звук успешно установлен",debugSoundFailed:"Не удалось установить отладочный звук",deleteDeviceSuccess:"Устройство успешно удалено",deleteDeviceFailed:"Не удалось удалить устройство",adjustVolumeSuccess:"Громкость установлена на",adjustVolumeFailed:"Не удалось настроить громкость",batchAdjustSuccess:"Массовая настройка громкости выполнена, всего",batchAdjustFailed:"Не удалось выполнить массовую настройку громкости",volumeValidationError:"Громкость должна быть от 1 до 63",selectDevicesFirst:"Сначала выберите устройства для настройки громкости",successfullyFetched:"Успешно получено",devicesUnit:"устройств",deviceListFormatError:"Ошибка формата данных списка устройств",fetchDeviceListFailed:"Не удалось получить список устройств",searchPlaceholder:"Поиск по названию или серийному номеру...",unknownError:"Неизвестная ошибка",listView:"Список",cardView:"Карточки",scanDevices:"Scan Devices",deviceScan:"Device Scan",seed:"Device SEED",seedPlaceholder:"Enter 32-char hex SEED",scanButton:"Scan",scanning:"Scanning...",noDeviceFound:"No devices found",scanNotSupported:"Device scan only available in desktop client",autoIP:"Auto IP",warmMode:"Voice Prompt",mediaServer:"Media Server",mediaPort:"Media Port",gateway:"Gateway",subnetMask:"Subnet Mask",dns:"DNS",deviceIP:"Device IP",applyConfig:"Apply Config",clearDevice:"Clear Device",deviceConfigured:"Device config sent",deviceConfigureFailed:"Device config failed",deviceCleared:"Clear command sent",scanConfigTitle:"Device Network Config",scannedDevices:"Discovered Devices",scanHint:"Click scan to discover all devices on the local network",testComm:"Test Communication",testCommBtn:"Test",console:"Console",clearConsole:"Clear",consoleEmpty:"Waiting for communication...",invalidIP:"Invalid IP format",invalidMask:"Invalid subnet mask",invalidGateway:"Invalid gateway",invalidMediaIP:"Invalid media server IP",invalidPort:"Port range 1-65535",invalidDNS:"Invalid DNS format",dnsPlaceholder:"0.0.0.0 = System default",advanced:"Advanced",soundCard:"Sound Card",getAmixerStatus:"Get Status",amixerApply:"Apply",amixerGetting:"Getting...",amixerOn:"On",amixerOff:"Off",amixerDAC:"DAC Playback Volume",amixerHeadphoneVol:"Headphone Volume",amixerHeadphoneSwitch:"Headphone Switch",amixerHeadphoneRoute:"Headphone Source",amixerLineIn:"Line In Volume",amixerFMIn:"FM In Volume",amixerMicIn:"Mic In Volume",amixerMicBoost:"Mic Boost",amixerADCCapture:"ADC Capture Volume",amixerADCLeftFM:"Left FM Capture",amixerADCRightFM:"Right FM Capture",amixerADCLeftOut:"Left Out Capture",amixerADCRightOut:"Right Out Capture",amixerADCLineIn:"Line In Capture",amixerADCMic:"Mic Capture",amixerLeftFM:"Left FM",amixerLeftLeftDAC:"Left Left DAC",amixerLeftRightDAC:"Left Right DAC",amixerLeftLineIn:"Left Line In",amixerLeftMicIn:"Left Mic In",amixerRightFM:"Right FM",amixerRightLeftDAC:"Right Left DAC",amixerRightRightDAC:"Right Right DAC",amixerRightLineIn:"Right Line In",amixerRightMicIn:"Right Mic In",amixerGroupDecode:"Decode Output",amixerGroupCapture:"Capture Mixer Input",amixerGroupLeft:"Left Output Mixer",amixerGroupRight:"Right Output Mixer",amixerGroupGain:"Gain Config",amixerRouteDAC:"DAC",amixerRouteMixer:"Mixer",amixerGetSuccess:"Sound card status retrieved",amixerGetFailed:"Failed to get sound card status",amixerSetSuccess:"Setting sent",amixerSetFailed:"Setting failed"},groups:{title:"Управление группами",list:"Список групп",deviceCount:"Количество устройств",addGroup:"Добавить группу",editGroup:"Редактировать группу",deleteGroup:"Удалить группу",groupName:"Имя группы",manage:"Управление группой",inputName:"Введите имя группы",add:"Добавить группу",playMenu:"Меню воспроизведения",id:"ID",name:"Имя",actions:"Действия",noGroups:"Нет групп",untitled:"Безымянная группа",editDevices:"Редактировать устройства",editVideo:"Редактировать видео",previewVideo:"Предпросмотр видео",groupPlay:"Групповое воспроизведение",allDevices:"Все устройства",selectedDevices:"Выбранные устройства",selectAtLeastOneDevice:"Выберите хотя бы одно устройство",videoUrl:"URL видео",inputVideoUrl:"Введите URL видео",noVideoUrl:"URL видео не задан",noVideoUrlSet:"URL потокового вещания M3U8 ещё не задан",playSequence:"Последовательность воспроизведения",fileInterval:"Интервал между файлами",playCount:"Количество воспроизведений",noPlayingItems:"Нет воспроизводимых последовательностей",playList:"Список воспроизведения",nameRequired:"Имя группы не может быть пустым",loadSuccess:"Успешно загружено групп: {count}",loadFailed:"Не удалось загрузить список групп",addSuccess:"Группа успешно добавлена",addFailed:"Не удалось добавить группу",deleteConfirm:"Эта операция навсегда удалит эту группу. Продолжить?",deleteSuccess:"Успешно удалено",deleteFailed:"Не удалось удалить",saveSuccess:"Успешно сохранено",saveFailed:"Не удалось сохранить",loadDevicesFailed:"Не удалось загрузить список устройств",invalidGroupId:"Неверный ID группы",unknownDevice:"Неизвестное устройство",playFeatureComingSoon:"Функция группового воспроизведения скоро будет доступна",stopPlayFeatureComingSoon:"Функция остановки воспроизведения скоро будет доступна",playListFeatureComingSoon:"Функция списка воспроизведения скоро будет доступна",searchDevicePlaceholder:"Поиск по имени или ID устройства...",searchResult:"Найдено устройств: {filtered} (всего {total})",totalDevices:"Всего устройств: {count}",noSearchResult:"Устройства не найдены",noSelectedDevices:"Устройства не выбраны",searchFilePlaceholder:"Поиск по имени или ID файла...",availableFiles:"Доступные файлы",selectedFiles:"Выбранные файлы",noSelectedFiles:"Файлы не выбраны",doubleClickHint:"Двойной клик для дублирования файла",unknownFile:"Неизвестный файл",playMode:"Режим воспроизведения",playMode1:"Последовательное воспроизведение 1x",playMode2:"Последовательное воспроизведение 2x",playMode3:"Последовательное воспроизведение 3x",totalDuration:"Ориентировочная длительность",durationFormula:"Расчёт: (Общая длительность + Интервал) × Количество повторов",playModeHint:"Количество повторов, 1-99",intervalMaxHint:"Максимальный интервал 3 часа (10800 секунд)",estimatedDuration:"Ориентировочная длительность",forceStopDuration:"Принудительная остановка (необязательно)",forceStopHint:"Автоматическая остановка по истечении этого времени. Должно быть меньше ориентировочной длительности. 0 — без принудительной остановки",selectAtLeastOneFile:"Выберите хотя бы один файл",loadFilesFailed:"Не удалось загрузить список файлов",groupHasNoDevices:"В этой группе нет устройств",playStarted:"Воспроизведение успешно запущено",playFailed:"Не удалось запустить воспроизведение",invalidPlayId:"Неверный ID воспроизведения",stopPlayConfirm:"Вы уверены, что хотите остановить воспроизведение?",stopPlayInProgress:"Остановка воспроизведения, подождите...",stopPlaySuccess:"Воспроизведение успешно остановлено",stopPlaySuccessAndClosed:"Воспроизведение остановлено, список воспроизведения закрыт",stopPlayFailed:"Не удалось остановить воспроизведение",selectGroupForPlay:"Выберите группу для воспроизведения",devices:"устройств",devicesCount:"устройств",startPlay:"Начать воспроизведение"},tasks:{title:"Запланированные задачи",titleDescription:"Управление запланированными задачами воспроизведения с массовыми операциями и группами задач",list:"Список задач",addTask:"Добавить задачу",editTask:"Редактировать задачу",deleteTask:"Удалить задачу",taskName:"Имя задачи",executeTime:"Время выполнения",playMode:"Режим воспроизведения",repeat:"Повтор",files:"Файлы",devices:"Устройства",allGroups:"Все группы задач",addTaskGroup:"Добавить группу задач",deleteTaskGroup:"Удалить группу задач",disableTaskGroup:"Отключить группу задач",enableTaskGroup:"Включить группу задач",taskGroup:"Группа задач",taskGroupName:"Имя группы задач",enterGroupName:"Введите имя группы задач",applyTaskGroup:"Применить группу задач",task:"Задача",selectGroup:"Выберите группу задач",startTime:"Время начала",duration:"Длительность",loopCount:"Количество повторов",startDate:"Дата начала",endDate:"Дата окончания",endTime:"Время окончания",changeGroup:"Изменить группу",noGroup:"Без группы",tryPlay:"Пробное воспроизведение",batchDisable:"Массовое отключение",batchEnable:"Массовое включение",batchEditDevices:"Массовое редактирование устройств",batchEditFiles:"Массовое редактирование файлов",batchApplyGroup:"Массовое применение группы",batchEditTime:"Массовое редактирование времени",batchEditLoopCount:"Массовое редактирование повторов",batchEditDuration:"Массовое редактирование длительности",batchDelete:"Массовое удаление",batchCopy:"Массовое копирование",noTasks:"Нет задач",selectedCount:"Выбрано задач: {count}",randomPlay:"Случайное воспроизведение",loopPlay:"Повторять {count} раз",selectDevices:"Выберите устройства для воспроизведения",selectFiles:"Выберите аудиофайлы",allDevices:"Все устройства",selectedDevices:"Выбранные устройства",allFiles:"Все файлы",selectedFiles:"Выбранные файлы",editTaskDevices:"Редактировать устройства задачи",editTaskFiles:"Редактировать файлы задачи",taskDuration:"Длительность задачи",intervalDuration:"Длительность интервала",timeRange:"Диапазон времени",to:"до",playCount:"Количество воспроизведений",sequentialPlay:"Последовательное воспроизведение",randomPlayMode:"Случайное воспроизведение",playModeChange:"Изменение режима воспроизведения",enableOtherLimit:"Другие ограничения не требуются",enableStartDate:"Включить дату начала",enableEndDate:"Включить дату окончания",enterTaskName:"Введите имя задачи",noTasksSelected:"Задачи не выбраны",devicesRequired:"Устройства не выбраны",filesRequired:"Аудиофайлы не выбраны",saveSuccess:"Успешно сохранено",saveFailed:"Не удалось сохранить",deleteSuccess:"Успешно удалено",deleteFailed:"Не удалось удалить",deleteConfirm:"Эта операция навсегда удалит задачу. Продолжить?",enableSuccess:"Задача включена",disableSuccess:"Задача отключена",startPlaySuccess:"Воспроизведение запущено",startPlayFailed:"Не удалось запустить воспроизведение",stopPlaySuccess:"Воспроизведение остановлено",stopPlayFailed:"Не удалось остановить воспроизведение",groupNameRequired:"Имя группы задач не может быть пустым",addGroupSuccess:"Группа задач успешно добавлена",addGroupFailed:"Не удалось добавить группу задач",deleteGroupSuccess:"Группа задач успешно удалена",deleteGroupFailed:"Не удалось удалить группу задач",disableGroupSuccess:"Группа задач успешно отключена",disableGroupFailed:"Не удалось отключить группу задач",enableGroupSuccess:"Группа задач успешно включена",enableGroupFailed:"Не удалось включить группу задач",applyGroupSuccess:"Группа задач успешно применена",applyGroupFailed:"Не удалось применить группу задач",selectGroupFirst:"Сначала выберите группу задач",batchDisableSuccess:"Массовое отключение выполнено",batchEnableSuccess:"Массовое включение выполнено",unknownDevice:"Неизвестное устройство",unknownFile:"Неизвестный файл",calculate:"Рассчитать",monday:"Понедельник",tuesday:"Вторник",wednesday:"Среда",thursday:"Четверг",friday:"Пятница",saturday:"Суббота",sunday:"Воскресенье",index:"Индекс",weekdays:"Дни воспроизведения",noLimit:"Без ограничений",autoCalc:"Автоматический расчёт",taskNameRequired:"Имя задачи обязательно",startTimeRequired:"Время начала обязательно",cannotDeletePlaying:"Задача воспроизводится, сначала остановите",cannotDeleteEnabled:"Задача включена, сначала отключите",cannotEditPlaying:"Задача воспроизводится, сначала остановите",disabled:"Отключено",enabled:"Включено",enableTask:"Включить",disableTask:"Отключить",noSelectedFiles:"Файлы не выбраны",clickToAddHint:"Нажмите на файлы слева, чтобы добавить",estimatedDuration:"Ориентировочная длительность",advancedSettings:"Дополнительные настройки",playSettings:"Настройки воспроизведения",forceStopDuration:"Принудительная остановка",forceStopHint:"Если задано, воспроизведение автоматически остановится в это время. Должно быть меньше ориентировочной длительности. 0 или пусто — без принудительной остановки",durationRequired:"Для случайного воспроизведения необходимо указать длительность",durationFormula:"Расчёт: (Общая длительность + Интервал × Количество файлов) × Количество повторов",dateHint:"Примечание: Воспроизведение происходит в дату начала и дату окончания. Если даты совпадают, воспроизведение только в этот день. Дата начала не может быть позже даты окончания.",dateRangeError:"Дата начала не может быть позже даты окончания",batchDurationHint:"При последовательном воспроизведении: если общая длительность плейлиста > максимальной длительности, остановка по достижении; если < максимальной длительности, остановка по окончании плейлиста",copyConfirm:"Вы уверены, что хотите скопировать выбранные задачи? Это действие нельзя отменить.",copySuccess:"Задачи успешно скопированы",copyFailed:"Не удалось скопировать задачи",timeConflict:"Конфликт времени",dateRange:"Диапазон дат",copyCount:"Количество копий",copyNewName:"Имя по умолчанию",copyNewNamePlaceholder:"Имя новой задачи по умолчанию",copyInterval:"Интервал времени",copyIntervalUnit:"минут",copyPreview:"Список предпросмотра",deleteGroupConfirm:"Вы уверены, что хотите удалить эту группу задач? Задачи в группе не будут удалены.",noTasksInGroup:"В этой группе задач нет задач",batchPartialFailed:"Ошибка при обработке {failed} задач(и)"},media:{title:"Управление медиа",list:"Список файлов",upload:"Загрузить",delete:"Удалить",play:"Воспроизвести",download:"Скачать",fileName:"Имя файла",fileSize:"Размер файла",fileType:"Тип файла",uploadTime:"Время загрузки",duration:"Длительность",noFiles:"Файлов пока нет",dropHint:"Перетащите MP3 файлы сюда для загрузки",dropSub:"Поддерживается формат MP3, максимальный размер файла 40 МБ",selectFiles:"Выбрать файлы",selectFolder:"Выбрать папку",onlyMp3:"Поддерживаются только MP3 файлы",fileTooLarge:"Файл превышает ограничение 40 МБ",uploadFailed:"Не удалось загрузить",uploadSuccess:"Успешно загружено файлов: {count}",uploading:"Загрузка...",deleteSingleConfirm:"Вы уверены, что хотите удалить",deleteConfirm:"Удалить выбранные файлы? Это действие нельзя отменить",deleteSuccess:"Успешно удалено",deleteFailed:"Не удалось удалить",batchDelete:"Массовое удаление",batchDeleteSuccess:"Успешно удалено файлов: {count}",selectedCount:"Выбрано файлов: {count}",tts:"Text to Speech",ttsFileName:"File Name",ttsFileNamePlaceholder:"Enter file name",ttsVoice:"Voice",ttsSpeed:"Speed",ttsSpeedSlow:"Slow",ttsSpeedMedium:"Medium",ttsSpeedFast:"Fast",ttsText:"Text Input",ttsTextPlaceholder:"Enter text to convert",ttsTextTooShort:"Text must be at least 3 characters",ttsSuccess:"TTS file created",ttsFailed:"TTS generation failed",uploadDone:"Upload complete"},broadcast:{title:"Управление трансляцией",serverConfig:"Конфигурация сервера",selectDevices:"Выбрать устройства",quickSelectGroup:"Быстрый выбор группы",selectAllOnline:"Выбрать все онлайн",clearSelection:"Очистить выбор",selectedDevices:"Выбрано устройств: {count}",noDevices:"Нет доступных устройств",noMatch:"Подходящих устройств не найдено",broadcastControl:"Управление трансляцией",playLevel:"Приоритет воспроизведения",userLevel:"Уровень пользователя",holdToTalk:"Нажмите для разговора",releaseToStop:"Отпустите для остановки",broadcasting:"Трансляция...",connected:"Подключено",notConnected:"Не подключено",selectFiles:"Выбрать файлы",startBroadcast:"Начать трансляцию",stopBroadcast:"Остановить трансляцию",playbackMode:"Режим воспроизведения",interval:"Интервал",loop:"Количество повторов",audioSource:"Источник звука",microphone:"Микрофон",noAudioDevice:"Аудиовходное устройство не обнаружено",audioReady:"Аудио готово",inputVolume:"Входная громкость",enableMicrophone:"Подключить микрофон",startPreview:"Начать предпросмотр"},alarm:{title:"Система тревог",settings:"Настройки тревоги",history:"История тревог",enable:"Включить",disable:"Отключить",triggerCondition:"Условие срабатывания",alarmFile:"Файл тревоги",linkage:"Связанные устройства",selectDevices:"Выбрать устройства",searchDevice:"Поиск по имени или серийному номеру",selectAllOnline:"Выбрать все онлайн",clearSelection:"Очистить выбор",selectedCount:"Выбрано устройств: {count}",noDevices:"Нет устройств",noMatch:"Подходящих устройств не найдено",alarmConfig:"Конфигурация тревоги",alarmName:"Имя тревоги",alarmNamePlaceholder:"Введите имя тревоги",audioSource:"Источник звука",selectFile:"Выбрать загруженный файл",inputUrl:"Ввести URL вручную",selectFilePlaceholder:"Выберите аудиофайл",urlPlaceholder:"Введите URL аудиофайла",registerAlarm:"Зарегистрировать тревогу",registering:"Регистрация...",registerResult:"Результат регистрации",registerSuccess:"Успешная регистрация",registerFailed:"Не удалось зарегистрировать",noDevicesSelected:"Выберите хотя бы одно устройство",noAudioConfigured:"Настройте аудиофайл",online:"В сети",offline:"Не в сети",deviceSn:"Серийный номер устройства",registeredList:"Зарегистрированные тревоги",noRegistered:"Нет зарегистрированных тревог",loadListFailed:"Не удалось загрузить список тревог",deviceName:"Имя устройства",fileName:"Имя файла",refreshList:"Обновить список",unregisterAlarm:"Отменить регистрацию",unregisterConfirm:"Вы уверены, что хотите отменить регистрацию этой тревоги?",unregisterSuccess:"Регистрация отменена",unregisterFailed:"Не удалось отменить регистрацию",linkageTitle:"Связывание тревог",linkageDesc:"Когда устройство A срабатывает, связанные устройства (включая само устройство) воспроизводят указанный звук",linkagePlanName:"Имя плана",linkagePlanNamePlaceholder:"Введите имя плана",linkageDevices:"Связанные устройства",linkageDevicesHint:"Выберите триггерное и воспроизводящие устройства (может включать само триггерное устройство)",linkageAudio:"Аудиофайл",addLinkagePlan:"Добавить план связывания",adding:"Добавление...",linkageList:"Список планов связывания",noLinkagePlans:"Нет планов связывания",linkageDeviceCount:"Количество устройств",addLinkageSuccess:"План связывания успешно добавлен",addLinkageFailed:"Не удалось добавить план связывания",linkagePlanNameRequired:"Введите имя плана",linkageNoDevices:"Выберите хотя бы одно устройство",linkageNoAudio:"Настройте аудиофайл",linkageTriggerDevice:"Триггерное устройство",linkageTriggerDeviceHint:"Когда это устройство сработает, связанные устройства воспроизведут звук",linkageTriggerDevicePlaceholder:"Выберите триггерное устройство тревоги",linkageNoTriggerDevice:"Выберите триггерное устройство",registerTrigger:"Зарегистрировать",registerTriggerTitle:"Зарегистрировать триггерное устройство",registerTriggerSuccess:"Триггерное устройство успешно зарегистрировано",registerTriggerFailed:"Не удалось зарегистрировать триггерное устройство",loadLinkageFailed:"Не удалось загрузить планы связывания",deleteLinkageConfirm:"Вы уверены, что хотите удалить план связывания",deleteLinkageFailed:"Не удалось удалить план связывания",forceUnregTitle:"Принудительная отмена тревоги",forceUnregHint:"Принудительно отменить все регистрации тревог для устройства",forceUnregButton:"Принудительно отменить тревогу",forceUnregModalHint:"Выберите устройство для принудительной отмены всех тревог",forceUnregConfirm:"Подтвердить отмену",forceUnregSuccess:"Принудительная отмена тревоги выполнена",forceUnregFailed:"Не удалось выполнить принудительную отмену тревоги"},account:{title:"Управление аккаунтом",profile:"Профиль",changePassword:"Сменить пароль",subAccounts:"Субаккаунты",logs:"Журнал операций",username:"Имя пользователя",nickname:"Псевдоним",email:"Эл. почта",phone:"Телефон",role:"Роль",level:"Уровень",addSubUser:"Добавить субаккаунт",usernamePlaceholder:"Введите имя пользователя",passwordPlaceholder:"Введите пароль",nicknamePlaceholder:"Введите псевдоним",beizhu:"Примечание",beizhuPlaceholder:"Введите примечание",password:"Пароль",levelLabel:"Уровень",levelPlaceholder:"Выберите уровень",mask:"Маска прав",maskPlaceholder:"40-битная маска прав (0/1)",maskDefault:"00000000000000000000000000000000000000000000",permissions:"Настройки прав",permCreateSub:"Может создавать субаккаунты",permManageDevice:"Может добавлять/удалять устройства",permUploadFile:"Может загружать файлы",addSuccess:"Субаккаунт успешно добавлен",addFailed:"Не удалось добавить субаккаунт",listFailed:"Не удалось получить список субаккаунтов",noSubUsers:"Субаккаунты пока отсутствуют",createTime:"Время создания",status:"Статус",statusNormal:"Нормальный",statusDisabled:"Отключён",userLevel:"Уровень пользователя",playLevel:"Уровень воспроизведения",passwordShow:"Пароль",refreshList:"Обновить список",usernameRequired:"Введите имя пользователя",passwordRequired:"Введите пароль",permChangeFailed:"Не удалось изменить права",adding:"Добавление...",deleteConfirm:"Вы уверены, что хотите удалить субаккаунт {name}? Это действие нельзя отменить!",deleteSuccess:"Субаккаунт успешно удалён",deleteFailed:"Не удалось удалить субаккаунт",editDevices:"Редактировать устройства",editDevicesSuccess:"Устройства успешно обновлены",editDevicesFailed:"Не удалось обновить устройства",loadDevicesFailed:"Не удалось загрузить список устройств",searchDevice:"Поиск по имени или ID устройства",noDevices:"Нет устройств",resetToken:"Сбросить Token",resetTokenConfirm:"Вы уверены, что хотите сбросить Token для {name}?",resetTokenSuccess:"Token успешно сброшен",resetTokenFailed:"Не удалось сбросить Token",newToken:"Новый Token"},settings:{title:"Настройки",language:"Язык",theme:"Тема",darkMode:"Тёмная тема",lightMode:"Светлая тема",diabloMode:"Тема Diablo",notification:"Уведомления",sound:"Настройки звука",about:"О программе",version:"Версия"},language:{title:"Выберите язык",chinese:"简体中文",english:"English",korean:"한국어",thai:"ไทย",vietnamese:"Tiếng Việt",arabic:"العربية",malay:"Bahasa Melayu",japanese:"日本語",russian:"Русский",french:"Français",spanish:"Español",portuguese:"Português",german:"Deutsch",indonesian:"Bahasa Indonesia",hindi:"हिन्दी",turkish:"Türkçe",italian:"Italiano",polish:"Polski",swahili:"Kiswahili"},messages:{deleteConfirm:"Вы уверены, что хотите удалить? Это действие нельзя отменить!",saveSuccess:"Успешно сохранено",deleteSuccess:"Успешно удалено",operationSuccess:"Операция выполнена успешно",operationFailed:"Операция не удалась, попробуйте ещё раз",networkError:"Ошибка сети, проверьте подключение",serverError:"Ошибка сервера, попробуйте позже",noData:"Нет данных",loading:"Загрузка...",noPermission:"Нет прав доступа",tokenExpired:"Сеанс истёк, пожалуйста, войдите снова",operationTimeout:"Тайм-аут операции"},admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"Select Language",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data available",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",btnEnable:"Enable",btnDisable:"Disable",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully"},info:{title:"Select Language",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Announcement too short",saveSuccess:"Saved successfully",saveFailed:"Update failed"},upload:{title:"Select Language",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Select Language",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scrolling Notice",noData:"No data available",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"},billing:{title:"Select Language",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Slideshow",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"},gallery:{title:"Select Language",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No data available",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"}}},"fr-FR":{common:{appName:"Système de Diffusion ST",loading:"Chargement...",confirm:"Confirmer",cancel:"Annuler",save:"Enregistrer",delete:"Supprimer",edit:"Modifier",add:"Ajouter",search:"Rechercher",refresh:"Actualiser",submit:"Soumettre",reset:"Réinitialiser",logout:"Déconnexion",logoutConfirm:"Voulez-vous vraiment vous déconnecter ?",logoutTitle:"Confirmer la déconnexion",back:"Retour",success:"Succès",error:"Erreur",warning:"Avertissement",info:"Information",yes:"Oui",no:"Non",operation:"Opération",status:"Statut",index:"Index",name:"Nom",description:"Description",createTime:"Date de création",updateTime:"Date de mise à jour",close:"Fermer",stop:"Arrêter",toggle:"Activer/Désactiver",actions:"Actions",seconds:"secondes",minutes:"minutes",hours:"heures",moveUp:"Monter",moveDown:"Descendre",quick:"Rapide",unknown:"Inconnu",months:"mo",years:"yr",copy:"Copy"},login:{title:"Connexion",subtitle:"SYSTÈME DE DIFFUSION",username:"Nom d'utilisateur",password:"Mot de passe",usernamePlaceholder:"Entrez le nom d'utilisateur",passwordPlaceholder:"Entrez le mot de passe",rememberMe:"Se souvenir de moi",forgotPassword:"Mot de passe oublié ?",loginButton:"Se connecter",logging:"Connexion en cours...",loginSuccess:"Connexion réussie",loginFailed:"Échec de la connexion",usernameRequired:"Veuillez entrer le nom d'utilisateur",passwordRequired:"Veuillez entrer le mot de passe",invalidCredentials:"Nom d'utilisateur ou mot de passe incorrect"},clientLogin:{subtitle:"Édition Client",hostPlaceholder:"Adresse du serveur, ex. 192.168.1.100:12080",hostHint:"Entrez l'IP:port du serveur, http:// est facultatif",hostRequired:"Veuillez entrer l'adresse du serveur"},dashboard:{title:"Tableau de bord",welcome:"Bienvenue",systemStatus:"Le système fonctionne normalement",quickActions:"Actions rapides",addDevice:"Ajouter un appareil",createGroup:"Créer un groupe",scheduleTask:"Planifier une tâche",broadcastNow:"Diffuser maintenant"},menu:{dashboard:"Tableau de bord",devices:"Appareils",groups:"Groupes",tasks:"Tâches",media:"Médias",broadcast:"Diffusion",alarm:"Alarme",account:"Compte",settings:"Paramètres",apiTest:"Test API",home:"Accueil",mine:"Mon compte"},devices:{title:"Gestion des appareils",list:"Liste des appareils",online:"En ligne",offline:"Hors ligne",playing:"En lecture",volume:"Volume",adjustVolume:"Ajuster le volume",addDevice:"Ajouter un appareil",editDevice:"Modifier l'appareil",deleteDevice:"Supprimer l'appareil",deviceName:"Nom de l'appareil",serialNumber:"Numéro de série",lastUpdate:"Dernière mise à jour",refreshList:"Actualiser la liste des appareils",batchVolume:"Ajustement du volume par lot",noDevices:"Aucun appareil disponible, cliquez sur Ajouter un appareil en haut à droite",unnamedDevice:"Appareil sans nom",debugSound:"Son de débogage",changeVolume:"Changer le volume",changeName:"Changer le nom",changeSerial:"Changer le numéro de série",id:"ID",volumeNotSet:"Non défini",neverOnline:"Jamais en ligne",expiredDisabled:"Expiré et désactivé",unknown:"Inconnu",openDebugSound:"Activer le son de débogage",closeDebugSound:"Désactiver le son de débogage",unknownStatus:"Statut inconnu",addDeviceTitle:"Ajouter un appareil",deviceNameRequired:"Nom de l'appareil",deviceSerialRequired:"Numéro de série de l'appareil",deviceKeyRequired:"Clé de l'appareil",deviceNamePlaceholder:"Entrez le nom de l'appareil",deviceSerialPlaceholder:"Entrez le numéro de série de l'appareil",deviceKeyPlaceholder:"Clé d'enregistrement de l'appareil",deviceKeyHint:"La clé d'enregistrement est utilisée pour enregistrer l'appareil dans le système, elle équivaut au mot de passe de l'appareil",fillTestData:"Remplir avec des données de test",renameTitle:"Renommer l'appareil",newDeviceNamePlaceholder:"Entrez le nouveau nom de l'appareil",debugSoundTitle:"Son de débogage",selectDebugSoundStatus:"Sélectionner le statut du son de débogage",editSerialTitle:"Modifier le numéro de série",currentSerial:"Numéro de série actuel",currentSerialPlaceholder:"Numéro de série actuel de l'appareil",newSerial:"Nouveau numéro de série",newSerialPlaceholder:"Entrez le nouveau numéro de série à 32 chiffres",serialLengthHint:"Le numéro de série doit contenir 32 chiffres",editDeviceTitle:"Modifier l'appareil",macAddress:"Adresse MAC",macAddressPlaceholder:"Entrez l'adresse MAC",ipAddress:"Adresse IP",ipAddressPlaceholder:"Entrez l'adresse IP",port:"Port",portPlaceholder:"Entrez le numéro de port",adjustVolumeTitle:"Ajuster le volume",volumeRange:"Plage : 1-63",preciseSetting:"Réglage précis :",batchAdjustVolumeTitle:"Ajustement du volume par lot",selectedDevices:"Appareils sélectionnés :",devicesCount:"appareils",confirmAdjust:"Confirmer l'ajustement",adding:"Ajout en cours...",saving:"Enregistrement...",adjusting:"Ajustement en cours...",confirmButton:"Confirmer",cancelButton:"Annuler",deviceNameValidationError:"Veuillez entrer le nom de l'appareil",deviceSerialValidationError:"Veuillez entrer le numéro de série de l'appareil",deviceKeyValidationError:"Veuillez entrer la clé de l'appareil",newDeviceNameValidationError:"Veuillez entrer le nom de l'appareil",deviceSerialLengthError:"Veuillez entrer le numéro de série de l'appareil",newSerialLengthError:"Le numéro de série doit contenir 32 chiffres",debugSoundSelectError:"Veuillez sélectionner l'activation ou la désactivation du son de débogage",confirmOperation:"Confirmer l'opération",confirmDelete:"Êtes-vous sûr de vouloir supprimer cet appareil",deleteCannotUndo:" ? Cette action est irréversible !",addDeviceSuccess:"Appareil ajouté avec succès",addDeviceFailed:"Échec de l'ajout de l'appareil",deviceRenameSuccess:"Appareil renommé avec succès",deviceRenameFailed:"Échec du renommage de l'appareil",deviceEditSuccess:"Appareil modifié avec succès",deviceEditFailed:"Échec de la modification de l'appareil",deviceSerialEditSuccess:"Numéro de série modifié avec succès",deviceSerialEditFailed:"Échec de la modification du numéro de série",debugSoundSuccess:"Son de débogage configuré avec succès",debugSoundFailed:"Échec de la configuration du son de débogage",deleteDeviceSuccess:"Appareil supprimé avec succès",deleteDeviceFailed:"Échec de la suppression de l'appareil",adjustVolumeSuccess:"Volume réglé sur",adjustVolumeFailed:"Échec du réglage du volume",batchAdjustSuccess:"Ajustement du volume par lot réussi, total",batchAdjustFailed:"Échec de l'ajustement du volume par lot",volumeValidationError:"Le volume doit être compris entre 1 et 63",selectDevicesFirst:"Veuillez d'abord sélectionner des appareils pour ajuster le volume",successfullyFetched:"Récupéré avec succès",devicesUnit:"appareils",deviceListFormatError:"Erreur de format des données de la liste des appareils",fetchDeviceListFailed:"Échec de la récupération de la liste des appareils",searchPlaceholder:"Rechercher nom ou numéro de série...",unknownError:"Erreur inconnue",listView:"Vue en liste",cardView:"Vue en cartes",scanDevices:"Scan Devices",deviceScan:"Device Scan",seed:"Device SEED",seedPlaceholder:"Enter 32-char hex SEED",scanButton:"Scan",scanning:"Scanning...",noDeviceFound:"No devices found",scanNotSupported:"Device scan only available in desktop client",autoIP:"Auto IP",warmMode:"Voice Prompt",mediaServer:"Media Server",mediaPort:"Media Port",gateway:"Gateway",subnetMask:"Subnet Mask",dns:"DNS",deviceIP:"Device IP",applyConfig:"Apply Config",clearDevice:"Clear Device",deviceConfigured:"Device config sent",deviceConfigureFailed:"Device config failed",deviceCleared:"Clear command sent",scanConfigTitle:"Device Network Config",scannedDevices:"Discovered Devices",scanHint:"Click scan to discover all devices on the local network",testComm:"Test Communication",testCommBtn:"Test",console:"Console",clearConsole:"Clear",consoleEmpty:"Waiting for communication...",invalidIP:"Invalid IP format",invalidMask:"Invalid subnet mask",invalidGateway:"Invalid gateway",invalidMediaIP:"Invalid media server IP",invalidPort:"Port range 1-65535",invalidDNS:"Invalid DNS format",dnsPlaceholder:"0.0.0.0 = System default",advanced:"Advanced",soundCard:"Sound Card",getAmixerStatus:"Get Status",amixerApply:"Apply",amixerGetting:"Getting...",amixerOn:"On",amixerOff:"Off",amixerDAC:"DAC Playback Volume",amixerHeadphoneVol:"Headphone Volume",amixerHeadphoneSwitch:"Headphone Switch",amixerHeadphoneRoute:"Headphone Source",amixerLineIn:"Line In Volume",amixerFMIn:"FM In Volume",amixerMicIn:"Mic In Volume",amixerMicBoost:"Mic Boost",amixerADCCapture:"ADC Capture Volume",amixerADCLeftFM:"Left FM Capture",amixerADCRightFM:"Right FM Capture",amixerADCLeftOut:"Left Out Capture",amixerADCRightOut:"Right Out Capture",amixerADCLineIn:"Line In Capture",amixerADCMic:"Mic Capture",amixerLeftFM:"Left FM",amixerLeftLeftDAC:"Left Left DAC",amixerLeftRightDAC:"Left Right DAC",amixerLeftLineIn:"Left Line In",amixerLeftMicIn:"Left Mic In",amixerRightFM:"Right FM",amixerRightLeftDAC:"Right Left DAC",amixerRightRightDAC:"Right Right DAC",amixerRightLineIn:"Right Line In",amixerRightMicIn:"Right Mic In",amixerGroupDecode:"Decode Output",amixerGroupCapture:"Capture Mixer Input",amixerGroupLeft:"Left Output Mixer",amixerGroupRight:"Right Output Mixer",amixerGroupGain:"Gain Config",amixerRouteDAC:"DAC",amixerRouteMixer:"Mixer",amixerGetSuccess:"Sound card status retrieved",amixerGetFailed:"Failed to get sound card status",amixerSetSuccess:"Setting sent",amixerSetFailed:"Setting failed"},groups:{title:"Gestion des groupes",list:"Liste des groupes",deviceCount:"Nombre d'appareils",addGroup:"Ajouter un groupe",editGroup:"Modifier le groupe",deleteGroup:"Supprimer le groupe",groupName:"Nom du groupe",manage:"Gestion du groupe",inputName:"Entrez le nom du groupe",add:"Ajouter un groupe",playMenu:"Menu de lecture",id:"ID",name:"Nom",actions:"Actions",noGroups:"Aucun groupe disponible",untitled:"Groupe sans titre",editDevices:"Modifier les appareils",editVideo:"Modifier la vidéo",previewVideo:"Aperçu de la vidéo",groupPlay:"Lecture de groupe",allDevices:"Tous les appareils",selectedDevices:"Appareils sélectionnés",selectAtLeastOneDevice:"Veuillez sélectionner au moins un appareil",videoUrl:"URL vidéo",inputVideoUrl:"Veuillez entrer l'URL de la vidéo",noVideoUrl:"Aucune URL vidéo définie",noVideoUrlSet:"L'URL du flux en direct M3U8 n'est pas encore définie",playSequence:"Séquence de lecture",fileInterval:"Intervalle entre fichiers",playCount:"Nombre de lectures",noPlayingItems:"Aucune séquence en cours de lecture",playList:"Liste de lecture",nameRequired:"Le nom du groupe ne peut pas être vide",loadSuccess:"{count} groupes chargés avec succès",loadFailed:"Échec du chargement de la liste des groupes",addSuccess:"Groupe ajouté avec succès",addFailed:"Échec de l'ajout du groupe",deleteConfirm:"Cette opération supprimera définitivement ce groupe. Continuer ?",deleteSuccess:"Supprimé avec succès",deleteFailed:"Échec de la suppression",saveSuccess:"Enregistré avec succès",saveFailed:"Échec de l'enregistrement",loadDevicesFailed:"Échec du chargement de la liste des appareils",invalidGroupId:"ID de groupe invalide",unknownDevice:"Appareil inconnu",playFeatureComingSoon:"Fonctionnalité de lecture de groupe bientôt disponible",stopPlayFeatureComingSoon:"Fonctionnalité d'arrêt de lecture bientôt disponible",playListFeatureComingSoon:"Fonctionnalité de liste de lecture bientôt disponible",searchDevicePlaceholder:"Rechercher par nom ou ID d'appareil...",searchResult:"{filtered} appareils trouvés (sur {total})",totalDevices:"Total de {count} appareils",noSearchResult:"Aucun appareil correspondant trouvé",noSelectedDevices:"Aucun appareil sélectionné",searchFilePlaceholder:"Rechercher par nom ou ID de fichier...",availableFiles:"Fichiers disponibles",selectedFiles:"Fichiers sélectionnés",noSelectedFiles:"Aucun fichier sélectionné",doubleClickHint:"Double-cliquez pour dupliquer un fichier",unknownFile:"Fichier inconnu",playMode:"Mode de lecture",playMode1:"Lecture séquentielle 1x",playMode2:"Lecture séquentielle 2x",playMode3:"Lecture séquentielle 3x",totalDuration:"Durée estimée",durationFormula:"Calcul : (Durée totale + Intervalle) × Nombre de boucles",playModeHint:"Nombre de boucles, 1-99",intervalMaxHint:"Intervalle maximum 3 heures (10800 secondes)",estimatedDuration:"Durée estimée",forceStopDuration:"Durée d'arrêt forcé (facultatif)",forceStopHint:"Arrêt automatique à cette durée. Doit être inférieur à la durée estimée. 0 signifie aucun arrêt forcé",selectAtLeastOneFile:"Veuillez sélectionner au moins un fichier",loadFilesFailed:"Échec du chargement de la liste des fichiers",groupHasNoDevices:"Ce groupe ne contient aucun appareil",playStarted:"Lecture démarrée avec succès",playFailed:"Échec du démarrage de la lecture",invalidPlayId:"ID de lecture invalide",stopPlayConfirm:"Êtes-vous sûr de vouloir arrêter la lecture ?",stopPlayInProgress:"Arrêt de la lecture, veuillez patienter...",stopPlaySuccess:"Lecture arrêtée avec succès",stopPlaySuccessAndClosed:"Lecture arrêtée, liste de lecture fermée",stopPlayFailed:"Échec de l'arrêt de la lecture",selectGroupForPlay:"Sélectionnez un groupe pour la lecture",devices:"appareils",devicesCount:"appareils",startPlay:"Démarrer la lecture"},tasks:{title:"Tâches planifiées",titleDescription:"Gérez les tâches de lecture planifiées avec des opérations par lot et des groupes de tâches",list:"Liste des tâches",addTask:"Ajouter une tâche",editTask:"Modifier la tâche",deleteTask:"Supprimer la tâche",taskName:"Nom de la tâche",executeTime:"Heure d'exécution",playMode:"Mode de lecture",repeat:"Répéter",files:"Fichiers",devices:"Appareils",allGroups:"Tous les groupes de tâches",addTaskGroup:"Ajouter un groupe de tâches",deleteTaskGroup:"Supprimer le groupe de tâches",disableTaskGroup:"Désactiver le groupe de tâches",enableTaskGroup:"Activer le groupe de tâches",taskGroup:"Groupe de tâches",taskGroupName:"Nom du groupe de tâches",enterGroupName:"Entrez le nom du groupe de tâches",applyTaskGroup:"Appliquer le groupe de tâches",task:"Tâche",selectGroup:"Sélectionner un groupe de tâches",startTime:"Heure de début",duration:"Durée",loopCount:"Nombre de boucles",startDate:"Date de début",endDate:"Date de fin",changeGroup:"Changer de groupe",noGroup:"Aucun groupe",tryPlay:"Essai de lecture",batchDisable:"Désactiver par lot",batchEnable:"Activer par lot",batchEditDevices:"Modifier les appareils par lot",batchEditFiles:"Modifier les fichiers par lot",batchApplyGroup:"Appliquer le groupe par lot",batchEditTime:"Modifier l'heure par lot",batchEditLoopCount:"Modifier les boucles par lot",batchEditDuration:"Modifier la durée par lot",batchDelete:"Supprimer par lot",batchCopy:"Copier par lot",noTasks:"Aucune tâche",selectedCount:"{count} tâche(s) sélectionnée(s)",randomPlay:"Lecture aléatoire",loopPlay:"Répéter {count} fois",selectDevices:"Sélectionner les appareils de lecture",selectFiles:"Sélectionner les fichiers audio",allDevices:"Tous les appareils",selectedDevices:"Appareils sélectionnés",allFiles:"Tous les fichiers",selectedFiles:"Fichiers sélectionnés",editTaskDevices:"Modifier les appareils de la tâche",editTaskFiles:"Modifier les fichiers de la tâche",taskDuration:"Durée de la tâche",intervalDuration:"Durée de l'intervalle",timeRange:"Plage horaire",to:"à",playCount:"Nombre de lectures",sequentialPlay:"Lecture séquentielle",randomPlayMode:"Lecture aléatoire",playModeChange:"Changement de mode de lecture",enableOtherLimit:"Autres limites non requises",enableStartDate:"Activer la date de début",enableEndDate:"Activer la date de fin",enterTaskName:"Entrez le nom de la tâche",noTasksSelected:"Aucune tâche sélectionnée",devicesRequired:"Aucun appareil sélectionné",filesRequired:"Aucun fichier audio sélectionné",saveSuccess:"Enregistré avec succès",saveFailed:"Échec de l'enregistrement",deleteSuccess:"Supprimé avec succès",deleteFailed:"Échec de la suppression",deleteConfirm:"Cette opération supprimera définitivement la tâche. Continuer ?",enableSuccess:"Tâche activée",disableSuccess:"Tâche désactivée",startPlaySuccess:"Lecture démarrée",startPlayFailed:"Échec du démarrage de la lecture",stopPlaySuccess:"Lecture arrêtée",stopPlayFailed:"Échec de l'arrêt de la lecture",groupNameRequired:"Le nom du groupe de tâches ne peut pas être vide",addGroupSuccess:"Groupe de tâches ajouté avec succès",addGroupFailed:"Échec de l'ajout du groupe de tâches",deleteGroupSuccess:"Groupe de tâches supprimé avec succès",deleteGroupFailed:"Échec de la suppression du groupe de tâches",disableGroupSuccess:"Groupe de tâches désactivé avec succès",disableGroupFailed:"Échec de la désactivation du groupe de tâches",enableGroupSuccess:"Groupe de tâches activé avec succès",enableGroupFailed:"Échec de l'activation du groupe de tâches",applyGroupSuccess:"Groupe de tâches appliqué avec succès",applyGroupFailed:"Échec de l'application du groupe de tâches",selectGroupFirst:"Veuillez d'abord sélectionner un groupe de tâches",batchDisableSuccess:"Désactivation par lot réussie",batchEnableSuccess:"Activation par lot réussie",unknownDevice:"Appareil inconnu",unknownFile:"Fichier inconnu",calculate:"Calculer",monday:"Lundi",tuesday:"Mardi",wednesday:"Mercredi",thursday:"Jeudi",friday:"Vendredi",saturday:"Samedi",sunday:"Dimanche",index:"Index",weekdays:"Jours de lecture",noLimit:"Illimité",autoCalc:"Calcul automatique",taskNameRequired:"Le nom de la tâche est obligatoire",startTimeRequired:"L'heure de début est obligatoire",cannotDeletePlaying:"La tâche est en cours de lecture, veuillez d'abord l'arrêter",cannotDeleteEnabled:"La tâche est activée, veuillez d'abord la désactiver",cannotEditPlaying:"La tâche est en cours de lecture, veuillez d'abord l'arrêter",disabled:"Désactivé",enabled:"Activé",enableTask:"Activer",disableTask:"Désactiver",noSelectedFiles:"Aucun fichier sélectionné",clickToAddHint:"Cliquez sur les fichiers à gauche pour ajouter",estimatedDuration:"Durée estimée",advancedSettings:"Paramètres avancés",playSettings:"Paramètres de lecture",forceStopDuration:"Durée d'arrêt forcé",forceStopHint:"Si défini, la lecture s'arrête automatiquement à cette durée. Doit être inférieur à la durée estimée. 0 ou vide signifie aucun arrêt forcé",durationRequired:"La lecture aléatoire nécessite une durée",durationFormula:"Calcul : (Durée totale + Intervalle × Nombre de fichiers) × Nombre de boucles",dateHint:"Remarque : La lecture a lieu à la date de début et à la date de fin. Si les dates sont identiques, lecture uniquement ce jour-là. La date de début ne peut pas être postérieure à la date de fin.",dateRangeError:"La date de début ne peut pas être postérieure à la date de fin",batchDurationHint:"Pour la lecture séquentielle : si la durée totale de la liste de lecture > durée max, arrêt à la durée max ; si < durée max, arrêt à la fin de la liste",copyConfirm:"Êtes-vous sûr de vouloir copier les tâches sélectionnées ? Cette action est irréversible.",copySuccess:"Tâches copiées avec succès",copyFailed:"Échec de la copie des tâches",timeConflict:"Conflit d'horaire",dateRange:"Plage de dates",endTime:"Heure de fin",copyCount:"Nombre de copies",copyNewName:"Nouveau nom par défaut",copyNewNamePlaceholder:"Nouveau nom de tâche par défaut",copyInterval:"Intervalle de temps",copyIntervalUnit:"minutes",copyPreview:"Liste d'aperçu",deleteGroupConfirm:"Êtes-vous sûr de vouloir supprimer ce groupe de tâches ? Les tâches du groupe ne seront pas supprimées.",noTasksInGroup:"Aucune tâche dans ce groupe de tâches",batchPartialFailed:"Échec de l'opération pour {failed} tâche(s)"},media:{title:"Gestion des médias",list:"Liste des fichiers",upload:"Téléverser",delete:"Supprimer",play:"Lire",download:"Télécharger",fileName:"Nom du fichier",fileSize:"Taille du fichier",fileType:"Type de fichier",uploadTime:"Date de téléversement",duration:"Durée",noFiles:"Aucun fichier",dropHint:"Glissez-déposez des fichiers MP3 ici pour les téléverser",dropSub:"Format MP3 supporté, taille maximale 40 Mo par fichier",selectFiles:"Sélectionner des fichiers",selectFolder:"Sélectionner un dossier",onlyMp3:"Seuls les fichiers MP3 sont supportés",fileTooLarge:"Le fichier dépasse la limite de 40 Mo",uploadFailed:"Échec du téléversement",uploadSuccess:"{count} fichier(s) téléversé(s) avec succès",uploading:"Téléversement en cours...",deleteSingleConfirm:"Êtes-vous sûr de vouloir supprimer",deleteConfirm:"Supprimer les fichiers sélectionnés ? Cette action est irréversible",deleteSuccess:"Supprimé avec succès",deleteFailed:"Échec de la suppression",batchDelete:"Suppression par lot",batchDeleteSuccess:"{count} fichier(s) supprimé(s) avec succès",selectedCount:"{count} fichier(s) sélectionné(s)",tts:"Text to Speech",ttsFileName:"File Name",ttsFileNamePlaceholder:"Enter file name",ttsVoice:"Voice",ttsSpeed:"Speed",ttsSpeedSlow:"Slow",ttsSpeedMedium:"Medium",ttsSpeedFast:"Fast",ttsText:"Text Input",ttsTextPlaceholder:"Enter text to convert",ttsTextTooShort:"Text must be at least 3 characters",ttsSuccess:"TTS file created",ttsFailed:"TTS generation failed",uploadDone:"Upload complete"},broadcast:{title:"Contrôle de diffusion",serverConfig:"Configuration du serveur",selectDevices:"Sélectionner les appareils",quickSelectGroup:"Sélection rapide de groupe",selectAllOnline:"Sélectionner tous les en ligne",clearSelection:"Effacer la sélection",selectedDevices:"{count} appareil(s) sélectionné(s)",noDevices:"Aucun appareil disponible",noMatch:"Aucun appareil correspondant",broadcastControl:"Contrôle de diffusion",playLevel:"Priorité de lecture",userLevel:"Niveau d'utilisateur",holdToTalk:"Maintenir pour parler",releaseToStop:"Relâcher pour arrêter",broadcasting:"Diffusion en cours...",connected:"Connecté",notConnected:"Non connecté",selectFiles:"Sélectionner des fichiers",startBroadcast:"Démarrer la diffusion",stopBroadcast:"Arrêter la diffusion",playbackMode:"Mode de lecture",interval:"Intervalle",loop:"Nombre de boucles",audioSource:"Source audio",microphone:"Microphone",noAudioDevice:"Aucun périphérique d'entrée audio détecté",audioReady:"Audio prêt",inputVolume:"Volume d'entrée",enableMicrophone:"Connecter le microphone",startPreview:"Démarrer l'aperçu"},alarm:{title:"Système d'alarme",settings:"Paramètres d'alarme",history:"Historique des alarmes",enable:"Activer",disable:"Désactiver",triggerCondition:"Condition de déclenchement",alarmFile:"Fichier d'alarme",linkage:"Appareil lié",selectDevices:"Sélectionner les appareils",searchDevice:"Rechercher par nom ou numéro de série",selectAllOnline:"Sélectionner tous en ligne",clearSelection:"Effacer la sélection",selectedCount:"{count} appareils sélectionnés",noDevices:"Aucun appareil",noMatch:"Aucun appareil correspondant",alarmConfig:"Configuration d'alarme",alarmName:"Nom de l'alarme",alarmNamePlaceholder:"Entrez le nom de l'alarme",audioSource:"Source audio",selectFile:"Sélectionner un fichier téléchargé",inputUrl:"Saisir URL manuellement",selectFilePlaceholder:"Sélectionnez un fichier audio",urlPlaceholder:"Entrez l'URL du fichier audio",registerAlarm:"Enregistrer l'alarme",registering:"Enregistrement...",registerResult:"Résultat de l'enregistrement",registerSuccess:"Enregistrement réussi",registerFailed:"Échec de l'enregistrement",noDevicesSelected:"Veuillez sélectionner au moins un appareil",noAudioConfigured:"Veuillez configurer un fichier audio",online:"En ligne",offline:"Hors ligne",deviceSn:"Numéro de série",registeredList:"Alarmes enregistrées",noRegistered:"Aucune alarme enregistrée",loadListFailed:"Échec du chargement de la liste des alarmes",deviceName:"Nom de l'appareil",fileName:"Nom du fichier",refreshList:"Actualiser la liste",unregisterAlarm:"Annuler",unregisterConfirm:"Êtes-vous sûr de vouloir annuler l'enregistrement de cette alarme ?",unregisterSuccess:"Enregistrement annulé avec succès",unregisterFailed:"Échec de l'annulation de l'enregistrement",linkageTitle:"Liaison d'alarme",linkageDesc:"Lorsque l'appareil A se déclenche, les appareils liés (y compris lui-même) lisent l'audio spécifié",linkagePlanName:"Nom du plan",linkagePlanNamePlaceholder:"Entrez le nom du plan",linkageDevices:"Appareils liés",linkageDevicesHint:"Sélectionnez les appareils déclencheurs et de lecture (peut inclure l'appareil déclencheur)",linkageAudio:"Fichier audio",addLinkagePlan:"Ajouter un plan de liaison",adding:"Ajout en cours...",linkageList:"Liste des plans de liaison",noLinkagePlans:"Aucun plan de liaison",linkageDeviceCount:"Nombre d'appareils",addLinkageSuccess:"Plan de liaison ajouté avec succès",addLinkageFailed:"Échec de l'ajout du plan de liaison",linkagePlanNameRequired:"Veuillez entrer le nom du plan",linkageNoDevices:"Veuillez sélectionner au moins un appareil",linkageNoAudio:"Veuillez configurer un fichier audio",linkageTriggerDevice:"Appareil déclencheur",linkageTriggerDeviceHint:"Lorsque cet appareil déclenche une alarme, les appareils liés liront l'audio",linkageTriggerDevicePlaceholder:"Sélectionnez l'appareil déclencheur d'alarme",linkageNoTriggerDevice:"Veuillez sélectionner un appareil déclencheur",registerTrigger:"Enregistrer",registerTriggerTitle:"Enregistrer un appareil déclencheur",registerTriggerSuccess:"Appareil déclencheur enregistré avec succès",registerTriggerFailed:"Échec de l'enregistrement de l'appareil déclencheur",loadLinkageFailed:"Échec du chargement des plans de liaison",deleteLinkageConfirm:"Êtes-vous sûr de vouloir supprimer le plan de liaison",deleteLinkageFailed:"Échec de la suppression du plan de liaison",forceUnregTitle:"Forcer l'annulation de l'alarme",forceUnregHint:"Forcer l'annulation de tous les enregistrements d'alarme d'un appareil",forceUnregButton:"Forcer l'annulation de l'alarme",forceUnregModalHint:"Sélectionnez un appareil pour forcer l'annulation de toutes les alarmes (autonome + liaison)",forceUnregConfirm:"Confirmer l'annulation",forceUnregSuccess:"Annulation forcée de l'alarme réussie",forceUnregFailed:"Échec de l'annulation forcée de l'alarme"},account:{title:"Gestion du compte",profile:"Profil",changePassword:"Changer le mot de passe",subAccounts:"Sous-comptes",logs:"Journal des opérations",username:"Nom d'utilisateur",nickname:"Pseudo",email:"E-mail",phone:"Téléphone",role:"Rôle",level:"Niveau",addSubUser:"Ajouter un sous-compte",usernamePlaceholder:"Entrez le nom d'utilisateur",passwordPlaceholder:"Entrez le mot de passe",nicknamePlaceholder:"Entrez le pseudo",beizhu:"Remarque",beizhuPlaceholder:"Entrez une remarque",password:"Mot de passe",levelLabel:"Niveau",levelPlaceholder:"Sélectionnez le niveau",mask:"Masque de permissions",maskPlaceholder:"Masque de permissions à 40 bits (0/1)",maskDefault:"00000000000000000000000000000000000000000000",permissions:"Paramètres des permissions",permCreateSub:"Peut créer des sous-comptes",permManageDevice:"Peut ajouter/supprimer des appareils",permUploadFile:"Peut téléverser des fichiers",addSuccess:"Sous-compte ajouté avec succès",addFailed:"Échec de l'ajout du sous-compte",listFailed:"Échec de la récupération de la liste des sous-comptes",noSubUsers:"Aucun sous-compte pour le moment",createTime:"Date de création",status:"Statut",statusNormal:"Normal",statusDisabled:"Désactivé",userLevel:"Niveau d'utilisateur",playLevel:"Niveau de lecture",passwordShow:"Mot de passe",refreshList:"Actualiser la liste",usernameRequired:"Veuillez entrer le nom d'utilisateur",passwordRequired:"Veuillez entrer le mot de passe",permChangeFailed:"Échec de la modification des permissions",adding:"Ajout en cours...",deleteConfirm:"Êtes-vous sûr de vouloir supprimer le sous-compte {name} ? Cette action est irréversible !",deleteSuccess:"Sous-compte supprimé avec succès",deleteFailed:"Échec de la suppression du sous-compte",editDevices:"Modifier les appareils",editDevicesSuccess:"Appareils mis à jour avec succès",editDevicesFailed:"Échec de la mise à jour des appareils",loadDevicesFailed:"Échec du chargement de la liste des appareils",searchDevice:"Rechercher par nom ou ID d'appareil",noDevices:"Aucun appareil",resetToken:"Réinitialiser le jeton",resetTokenConfirm:"Êtes-vous sûr de vouloir réinitialiser le jeton de {name} ?",resetTokenSuccess:"Jeton réinitialisé avec succès",resetTokenFailed:"Échec de la réinitialisation du jeton",newToken:"Nouveau jeton"},admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"User & Permission Management",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully",btnEnable:"Enable",btnDisable:"Disable"},info:{title:"App Privacy Agreement",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Content too short, at least 3000 characters",saveSuccess:"Saved successfully",saveFailed:"Save failed"},upload:{title:"Avatar & Logo Upload",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Announcement Management",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scroll notice: ",noData:"No data",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"},billing:{title:"Billing Settings",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Device",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure to delete?"},gallery:{title:"Gallery Overview",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No gallery items",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"}},settings:{title:"Paramètres",language:"Langue",theme:"Thème",darkMode:"Mode sombre",lightMode:"Mode clair",diabloMode:"Mode Diablo",notification:"Notifications",sound:"Paramètres sonores",about:"À propos",version:"Version"},language:{title:"Sélectionner la langue",chinese:"简体中文",english:"English",korean:"한국어",thai:"ไทย",vietnamese:"Tiếng Việt",arabic:"العربية",malay:"Bahasa Melayu",japanese:"日本語",russian:"Русский",french:"Français",spanish:"Español",portuguese:"Português",german:"Deutsch",indonesian:"Bahasa Indonesia",hindi:"हिन्दी",turkish:"Türkçe",italian:"Italiano",polish:"Polski",swahili:"Kiswahili"},messages:{deleteConfirm:"Êtes-vous sûr de vouloir supprimer ? Cette action est irréversible !",saveSuccess:"Enregistré avec succès",deleteSuccess:"Supprimé avec succès",operationSuccess:"Opération réussie",operationFailed:"L'opération a échoué, veuillez réessayer",networkError:"Erreur réseau, veuillez vérifier votre connexion",serverError:"Erreur serveur, veuillez réessayer plus tard",noData:"Aucune donnée disponible",loading:"Chargement...",noPermission:"Aucune permission d'accès",tokenExpired:"Session expirée, veuillez vous reconnecter",operationTimeout:"Délai d'attente de l'opération dépassé"}},"es-ES":{common:{appName:"Sistema de Difusión ST",loading:"Cargando...",confirm:"Confirmar",cancel:"Cancelar",save:"Guardar",delete:"Eliminar",edit:"Editar",add:"Agregar",search:"Buscar",refresh:"Actualizar",submit:"Enviar",reset:"Restablecer",logout:"Cerrar sesión",logoutConfirm:"¿Está seguro de que desea cerrar sesión?",logoutTitle:"Confirmar cierre de sesión",back:"Volver",success:"Éxito",error:"Error",warning:"Advertencia",info:"Información",yes:"Sí",no:"No",operation:"Operación",status:"Estado",index:"Índice",name:"Nombre",description:"Descripción",createTime:"Fecha de creación",updateTime:"Fecha de actualización",close:"Cerrar",stop:"Detener",toggle:"Habilitar/Deshabilitar",actions:"Acciones",seconds:"segundos",minutes:"minutos",hours:"horas",moveUp:"Subir",moveDown:"Bajar",quick:"Rápido",unknown:"Desconocido",months:"mo",years:"yr",copy:"Copy"},login:{title:"Iniciar sesión",subtitle:"BROADCAST SYSTEM",username:"Usuario",password:"Contraseña",usernamePlaceholder:"Ingrese su usuario",passwordPlaceholder:"Ingrese su contraseña",rememberMe:"Recordarme",forgotPassword:"¿Olvidó su contraseña?",loginButton:"Iniciar sesión",logging:"Iniciando sesión...",loginSuccess:"Sesión iniciada correctamente",loginFailed:"Error al iniciar sesión",usernameRequired:"Por favor ingrese su usuario",passwordRequired:"Por favor ingrese su contraseña",invalidCredentials:"Usuario o contraseña incorrectos"},clientLogin:{subtitle:"Edición Cliente",hostPlaceholder:"Dirección del servidor, ej. 192.168.1.100:12080",hostHint:"Ingrese IP:puerto del servidor, http:// es opcional",hostRequired:"Por favor ingrese la dirección del servidor"},dashboard:{title:"Panel de control",welcome:"Bienvenido de nuevo",systemStatus:"El sistema funciona normalmente",quickActions:"Acciones rápidas",addDevice:"Agregar dispositivo",createGroup:"Crear grupo",scheduleTask:"Programar tarea",broadcastNow:"Transmitir ahora"},menu:{dashboard:"Panel",devices:"Dispositivos",groups:"Grupos",tasks:"Tareas",media:"Multimedia",broadcast:"Transmisión",alarm:"Alarma",account:"Cuenta",settings:"Configuración",apiTest:"Prueba API",home:"Inicio",mine:"Mi cuenta"},devices:{title:"Gestión de dispositivos",list:"Lista de dispositivos",online:"En línea",offline:"Sin conexión",playing:"Reproduciendo",volume:"Volumen",adjustVolume:"Ajustar volumen",addDevice:"Agregar dispositivo",editDevice:"Editar dispositivo",deleteDevice:"Eliminar dispositivo",deviceName:"Nombre del dispositivo",serialNumber:"Número de serie",lastUpdate:"Última actualización",refreshList:"Actualizar lista de dispositivos",batchVolume:"Ajustar volumen por lote",noDevices:"No hay dispositivos disponibles, haga clic en Agregar dispositivo en la esquina superior derecha",unnamedDevice:"Dispositivo sin nombre",debugSound:"Sonido de depuración",changeVolume:"Cambiar volumen",changeName:"Cambiar nombre",changeSerial:"Cambiar número de serie",id:"ID",volumeNotSet:"No configurado",neverOnline:"Nunca conectado",expiredDisabled:"Expirado deshabilitado",unknown:"Desconocido",openDebugSound:"Activar sonido de depuración",closeDebugSound:"Desactivar sonido de depuración",unknownStatus:"Estado desconocido",addDeviceTitle:"Agregar dispositivo",deviceNameRequired:"Nombre del dispositivo",deviceSerialRequired:"Número de serie del dispositivo",deviceKeyRequired:"Clave del dispositivo",deviceNamePlaceholder:"Ingrese nombre del dispositivo",deviceSerialPlaceholder:"Ingrese número de serie del dispositivo",deviceKeyPlaceholder:"Ingrese clave de registro del dispositivo",deviceKeyHint:"La clave de registro se usa para registrar el dispositivo en el sistema, equivalente a la contraseña del dispositivo",fillTestData:"Llenar datos de prueba",renameTitle:"Renombrar dispositivo",newDeviceNamePlaceholder:"Ingrese nuevo nombre del dispositivo",debugSoundTitle:"Sonido de depuración",selectDebugSoundStatus:"Seleccione estado del sonido de depuración",editSerialTitle:"Editar número de serie del dispositivo",currentSerial:"Número de serie actual",currentSerialPlaceholder:"Número de serie actual del dispositivo",newSerial:"Nuevo número de serie",newSerialPlaceholder:"Ingrese nuevo número de serie de 32 dígitos",serialLengthHint:"El número de serie debe tener 32 dígitos",editDeviceTitle:"Editar dispositivo",macAddress:"Dirección MAC",macAddressPlaceholder:"Ingrese dirección MAC",ipAddress:"Dirección IP",ipAddressPlaceholder:"Ingrese dirección IP",port:"Puerto",portPlaceholder:"Ingrese número de puerto",adjustVolumeTitle:"Ajustar volumen",volumeRange:"Rango: 1-63",preciseSetting:"Configuración precisa:",batchAdjustVolumeTitle:"Ajustar volumen por lote",selectedDevices:"Dispositivos seleccionados:",devicesCount:"dispositivos",confirmAdjust:"Confirmar ajuste",adding:"Agregando...",saving:"Guardando...",adjusting:"Ajustando...",confirmButton:"Confirmar",cancelButton:"Cancelar",deviceNameValidationError:"Por favor ingrese el nombre del dispositivo",deviceSerialValidationError:"Por favor ingrese el número de serie del dispositivo",deviceKeyValidationError:"Por favor ingrese la clave del dispositivo",newDeviceNameValidationError:"Por favor ingrese el nombre del dispositivo",deviceSerialLengthError:"Por favor ingrese el número de serie del dispositivo",newSerialLengthError:"El número de serie debe tener 32 dígitos",debugSoundSelectError:"Por favor seleccione activar o desactivar sonido de depuración",confirmOperation:"Confirmar operación",confirmDelete:"¿Está seguro de eliminar el dispositivo",deleteCannotUndo:"? ¡Esta acción no se puede deshacer!",addDeviceSuccess:"Dispositivo agregado correctamente",addDeviceFailed:"Error al agregar dispositivo",deviceRenameSuccess:"Dispositivo renombrado correctamente",deviceRenameFailed:"Error al renombrar dispositivo",deviceEditSuccess:"Dispositivo editado correctamente",deviceEditFailed:"Error al editar dispositivo",deviceSerialEditSuccess:"Número de serie editado correctamente",deviceSerialEditFailed:"Error al editar número de serie",debugSoundSuccess:"Sonido de depuración configurado correctamente",debugSoundFailed:"Error al configurar sonido de depuración",deleteDeviceSuccess:"Dispositivo eliminado correctamente",deleteDeviceFailed:"Error al eliminar dispositivo",adjustVolumeSuccess:"Volumen ajustado a",adjustVolumeFailed:"Error al ajustar volumen",batchAdjustSuccess:"Ajuste de volumen por lote exitoso, total",batchAdjustFailed:"Error al ajustar volumen por lote",volumeValidationError:"El volumen debe estar entre 1-63",selectDevicesFirst:"Por favor seleccione dispositivos para ajustar el volumen primero",successfullyFetched:"Obtenido correctamente",devicesUnit:"dispositivos",deviceListFormatError:"Error en el formato de datos de la lista de dispositivos",fetchDeviceListFailed:"Error al obtener la lista de dispositivos",searchPlaceholder:"Buscar nombre o número de serie...",unknownError:"Error desconocido",listView:"Vista de lista",cardView:"Vista de tarjetas",scanDevices:"Scan Devices",deviceScan:"Device Scan",seed:"Device SEED",seedPlaceholder:"Enter 32-char hex SEED",scanButton:"Scan",scanning:"Scanning...",noDeviceFound:"No devices found",scanNotSupported:"Device scan only available in desktop client",autoIP:"Auto IP",warmMode:"Voice Prompt",mediaServer:"Media Server",mediaPort:"Media Port",gateway:"Gateway",subnetMask:"Subnet Mask",dns:"DNS",deviceIP:"Device IP",applyConfig:"Apply Config",clearDevice:"Clear Device",deviceConfigured:"Device config sent",deviceConfigureFailed:"Device config failed",deviceCleared:"Clear command sent",scanConfigTitle:"Device Network Config",scannedDevices:"Discovered Devices",scanHint:"Click scan to discover all devices on the local network",testComm:"Test Communication",testCommBtn:"Test",console:"Console",clearConsole:"Clear",consoleEmpty:"Waiting for communication...",invalidIP:"Invalid IP format",invalidMask:"Invalid subnet mask",invalidGateway:"Invalid gateway",invalidMediaIP:"Invalid media server IP",invalidPort:"Port range 1-65535",invalidDNS:"Invalid DNS format",dnsPlaceholder:"0.0.0.0 = System default",advanced:"Advanced",soundCard:"Sound Card",getAmixerStatus:"Get Status",amixerApply:"Apply",amixerGetting:"Getting...",amixerOn:"On",amixerOff:"Off",amixerDAC:"DAC Playback Volume",amixerHeadphoneVol:"Headphone Volume",amixerHeadphoneSwitch:"Headphone Switch",amixerHeadphoneRoute:"Headphone Source",amixerLineIn:"Line In Volume",amixerFMIn:"FM In Volume",amixerMicIn:"Mic In Volume",amixerMicBoost:"Mic Boost",amixerADCCapture:"ADC Capture Volume",amixerADCLeftFM:"Left FM Capture",amixerADCRightFM:"Right FM Capture",amixerADCLeftOut:"Left Out Capture",amixerADCRightOut:"Right Out Capture",amixerADCLineIn:"Line In Capture",amixerADCMic:"Mic Capture",amixerLeftFM:"Left FM",amixerLeftLeftDAC:"Left Left DAC",amixerLeftRightDAC:"Left Right DAC",amixerLeftLineIn:"Left Line In",amixerLeftMicIn:"Left Mic In",amixerRightFM:"Right FM",amixerRightLeftDAC:"Right Left DAC",amixerRightRightDAC:"Right Right DAC",amixerRightLineIn:"Right Line In",amixerRightMicIn:"Right Mic In",amixerGroupDecode:"Decode Output",amixerGroupCapture:"Capture Mixer Input",amixerGroupLeft:"Left Output Mixer",amixerGroupRight:"Right Output Mixer",amixerGroupGain:"Gain Config",amixerRouteDAC:"DAC",amixerRouteMixer:"Mixer",amixerGetSuccess:"Sound card status retrieved",amixerGetFailed:"Failed to get sound card status",amixerSetSuccess:"Setting sent",amixerSetFailed:"Setting failed"},groups:{title:"Gestión de grupos",list:"Lista de grupos",deviceCount:"Cantidad de dispositivos",addGroup:"Agregar grupo",editGroup:"Editar grupo",deleteGroup:"Eliminar grupo",groupName:"Nombre del grupo",manage:"Gestión de grupos",inputName:"Ingrese nombre del grupo",add:"Agregar grupo",playMenu:"Menú de reproducción",id:"ID",name:"Nombre",actions:"Acciones",noGroups:"No hay grupos disponibles",untitled:"Grupo sin título",editDevices:"Editar dispositivos",editVideo:"Editar video",previewVideo:"Vista previa del video",groupPlay:"Reproducción grupal",allDevices:"Todos los dispositivos",selectedDevices:"Dispositivos seleccionados",selectAtLeastOneDevice:"Por favor seleccione al menos un dispositivo",videoUrl:"URL del video",inputVideoUrl:"Por favor ingrese la URL del video",noVideoUrl:"No hay URL de video configurada",noVideoUrlSet:"URL de transmisión en vivo Mu38 no configurada",playSequence:"Secuencia de reproducción",fileInterval:"Intervalo entre archivos",playCount:"Cantidad de reproducciones",noPlayingItems:"No hay secuencias reproduciéndose actualmente",playList:"Lista de reproducción",nameRequired:"El nombre del grupo no puede estar vacío",loadSuccess:"Se cargaron {count} grupos correctamente",loadFailed:"Error al cargar la lista de grupos",addSuccess:"Grupo agregado correctamente",addFailed:"Error al agregar grupo",deleteConfirm:"Esta operación eliminará permanentemente este grupo. ¿Continuar?",deleteSuccess:"Eliminado correctamente",deleteFailed:"Error al eliminar",saveSuccess:"Guardado correctamente",saveFailed:"Error al guardar",loadDevicesFailed:"Error al cargar la lista de dispositivos",invalidGroupId:"ID de grupo inválido",unknownDevice:"Dispositivo desconocido",playFeatureComingSoon:"Función de reproducción grupal próximamente",stopPlayFeatureComingSoon:"Función de detener reproducción próximamente",playListFeatureComingSoon:"Función de lista de reproducción próximamente",searchDevicePlaceholder:"Ingrese nombre o ID del dispositivo para buscar...",searchResult:"Se encontraron {filtered} dispositivos (total {total})",totalDevices:"Total {count} dispositivos",noSearchResult:"No se encontraron dispositivos coincidentes",noSelectedDevices:"No hay dispositivos seleccionados aún",searchFilePlaceholder:"Ingrese nombre o ID del archivo para buscar...",availableFiles:"Archivos disponibles",selectedFiles:"Archivos seleccionados",noSelectedFiles:"No hay archivos seleccionados aún",doubleClickHint:"Doble clic para agregar archivos duplicados",unknownFile:"Archivo desconocido",playMode:"Modo de reproducción",playMode1:"Reproducción secuencial 1x",playMode2:"Reproducción secuencial 2x",playMode3:"Reproducción secuencial 3x",totalDuration:"Duración estimada",durationFormula:"Cálculo: (Duración total + Intervalo) × Cantidad de ciclos",playModeHint:"Cantidad de ciclos, 1-99",intervalMaxHint:"Intervalo máximo 3 horas (10800 segundos)",estimatedDuration:"Duración estimada",forceStopDuration:"Duración de parada forzada (Opcional)",forceStopHint:"Se detiene automáticamente en esta duración. Debe ser menor que la duración estimada. 0 significa sin parada forzada",selectAtLeastOneFile:"Por favor seleccione al menos un archivo",loadFilesFailed:"Error al cargar la lista de archivos",groupHasNoDevices:"Este grupo no tiene dispositivos",playStarted:"Reproducción iniciada correctamente",playFailed:"Error al iniciar reproducción",invalidPlayId:"ID de reproducción inválido",stopPlayConfirm:"¿Está seguro de que desea detener la reproducción?",stopPlayInProgress:"Deteniendo reproducción, por favor espere...",stopPlaySuccess:"Reproducción detenida correctamente",stopPlaySuccessAndClosed:"Reproducción detenida correctamente, lista de reproducción cerrada",stopPlayFailed:"Error al detener reproducción",selectGroupForPlay:"Seleccione un grupo para reproducir",devices:"dispositivos",devicesCount:"dispositivos",startPlay:"Iniciar reproducción"},tasks:{title:"Tareas programadas",titleDescription:"Administre tareas de reproducción programadas con operaciones por lote y grupos de tareas",list:"Lista de tareas",addTask:"Agregar tarea",editTask:"Editar tarea",deleteTask:"Eliminar tarea",taskName:"Nombre de la tarea",executeTime:"Hora de ejecución",playMode:"Modo de reproducción",repeat:"Repetir",files:"Archivos",devices:"Dispositivos",allGroups:"Todos los grupos de tareas",addTaskGroup:"Agregar grupo de tareas",deleteTaskGroup:"Eliminar grupo de tareas",disableTaskGroup:"Deshabilitar grupo de tareas",enableTaskGroup:"Habilitar grupo de tareas",taskGroup:"Grupo de tareas",taskGroupName:"Nombre del grupo de tareas",enterGroupName:"Ingrese nombre del grupo de tareas",applyTaskGroup:"Aplicar grupo de tareas",task:"Tarea",selectGroup:"Seleccionar grupo de tareas",startTime:"Hora de inicio",duration:"Duración",loopCount:"Cantidad de ciclos",startDate:"Fecha de inicio",endDate:"Fecha de finalización",changeGroup:"Cambiar grupo",noGroup:"Sin grupo",tryPlay:"Probar reproducción",batchDisable:"Deshabilitar por lote",batchEnable:"Habilitar por lote",batchEditDevices:"Editar dispositivos por lote",batchEditFiles:"Editar archivos por lote",batchApplyGroup:"Aplicar grupo por lote",batchEditTime:"Editar hora por lote",batchEditLoopCount:"Editar ciclos por lote",batchEditDuration:"Editar duración por lote",batchDelete:"Eliminar por lote",batchCopy:"Copiar por lote",noTasks:"Sin tareas",selectedCount:"{count} tareas seleccionadas",randomPlay:"Reproducción aleatoria",loopPlay:"Repetir {count} veces",selectDevices:"Seleccionar dispositivos para reproducir",selectFiles:"Seleccionar archivos de audio",allDevices:"Todos los dispositivos",selectedDevices:"Dispositivos seleccionados",allFiles:"Todos los archivos",selectedFiles:"Archivos seleccionados",editTaskDevices:"Editar dispositivos de la tarea",editTaskFiles:"Editar archivos de la tarea",taskDuration:"Duración de la tarea",intervalDuration:"Duración del intervalo",timeRange:"Rango de tiempo",to:"a",playCount:"Cantidad de reproducciones",sequentialPlay:"Reproducción secuencial",randomPlayMode:"Reproducción aleatoria",playModeChange:"Cambio de modo de reproducción",enableOtherLimit:"Otros límites no requeridos",enableStartDate:"Habilitar fecha de inicio",enableEndDate:"Habilitar fecha de finalización",enterTaskName:"Ingrese nombre de la tarea",noTasksSelected:"No hay tareas seleccionadas",devicesRequired:"No hay dispositivos seleccionados",filesRequired:"No hay archivos de audio seleccionados",saveSuccess:"Guardado correctamente",saveFailed:"Error al guardar",deleteSuccess:"Eliminado correctamente",deleteFailed:"Error al eliminar",deleteConfirm:"Esta operación eliminará permanentemente la tarea. ¿Continuar?",enableSuccess:"Tarea habilitada",disableSuccess:"Tarea deshabilitada",startPlaySuccess:"Reproducción iniciada",startPlayFailed:"Error al iniciar reproducción",stopPlaySuccess:"Reproducción detenida",stopPlayFailed:"Error al detener reproducción",groupNameRequired:"El nombre del grupo de tareas no puede estar vacío",addGroupSuccess:"Grupo de tareas agregado correctamente",addGroupFailed:"Error al agregar grupo de tareas",deleteGroupSuccess:"Grupo de tareas eliminado correctamente",deleteGroupFailed:"Error al eliminar grupo de tareas",disableGroupSuccess:"Grupo de tareas deshabilitado correctamente",disableGroupFailed:"Error al deshabilitar grupo de tareas",enableGroupSuccess:"Grupo de tareas habilitado correctamente",enableGroupFailed:"Error al habilitar grupo de tareas",applyGroupSuccess:"Grupo de tareas aplicado correctamente",applyGroupFailed:"Error al aplicar grupo de tareas",selectGroupFirst:"Por favor seleccione un grupo de tareas primero",batchDisableSuccess:"Deshabilitación por lote exitosa",batchEnableSuccess:"Habilitación por lote exitosa",unknownDevice:"Dispositivo desconocido",unknownFile:"Archivo desconocido",calculate:"Calcular",monday:"Lunes",tuesday:"Martes",wednesday:"Miércoles",thursday:"Jueves",friday:"Viernes",saturday:"Sábado",sunday:"Domingo",index:"Índice",weekdays:"Días de reproducción",noLimit:"Sin límite",autoCalc:"Autocalculado",taskNameRequired:"El nombre de la tarea es obligatorio",startTimeRequired:"La hora de inicio es obligatoria",cannotDeletePlaying:"La tarea se está reproduciendo, por favor deténgala primero",cannotDeleteEnabled:"La tarea está habilitada, por favor deshabilítela primero",cannotEditPlaying:"La tarea se está reproduciendo, por favor deténgala primero",disabled:"Deshabilitada",enabled:"Habilitada",enableTask:"Habilitar",disableTask:"Deshabilitar",noSelectedFiles:"No hay archivos seleccionados aún",clickToAddHint:"Haga clic en los archivos de la izquierda para agregar",estimatedDuration:"Duración estimada",advancedSettings:"Configuración avanzada",playSettings:"Configuración de reproducción",forceStopDuration:"Duración de parada forzada",forceStopHint:"Si se configura, la reproducción se detiene automáticamente en este tiempo. Debe ser menor que la duración estimada. 0 o vacío significa sin parada forzada",durationRequired:"La reproducción aleatoria requiere una duración",durationFormula:"Cálculo: (Duración total + Intervalo × Cantidad de archivos) × Cantidad de ciclos",dateHint:"Nota: Se reproduce en la fecha de inicio y también en la fecha de finalización. Si ambas fechas son iguales, se reproduce solo ese día. La fecha de inicio no puede ser posterior a la fecha de finalización.",dateRangeError:"La fecha de inicio no puede ser posterior a la fecha de finalización",batchDurationHint:"Para reproducción secuencial: si la duración total de la lista es > duración máxima, se detiene al alcanzar la duración; si la duración total de la lista es < duración máxima, se detiene al finalizar la lista",copyConfirm:"¿Está seguro de que desea copiar las tareas seleccionadas? Esta acción no se puede deshacer.",copySuccess:"Tareas copiadas correctamente",copyFailed:"Error al copiar tareas",timeConflict:"Conflicto de horario",dateRange:"Rango de fechas",endTime:"Hora de finalización",copyCount:"Cantidad de copias",copyNewName:"Nombre nuevo predeterminado",copyNewNamePlaceholder:"Nombre predeterminado de la nueva tarea",copyInterval:"Intervalo de tiempo",copyIntervalUnit:"minutos",copyPreview:"Vista previa",deleteGroupConfirm:"¿Está seguro de que desea eliminar este grupo de tareas? Las tareas del grupo no se eliminarán.",noTasksInGroup:"No hay tareas en este grupo de tareas",batchPartialFailed:"{failed} tarea(s) con error en la operación"},media:{title:"Gestión multimedia",list:"Lista de archivos",upload:"Subir",delete:"Eliminar",play:"Reproducir",download:"Descargar",fileName:"Nombre del archivo",fileSize:"Tamaño del archivo",fileType:"Tipo de archivo",uploadTime:"Fecha de subida",duration:"Duración",noFiles:"No hay archivos aún",dropHint:"Arrastre y suelte archivos MP3 aquí para subir",dropSub:"Soporta formato MP3, máximo 40MB por archivo",selectFiles:"Seleccionar archivos",selectFolder:"Seleccionar carpeta",onlyMp3:"Solo se admiten archivos MP3",fileTooLarge:"El archivo excede el límite de 40MB",uploadFailed:"Error al subir",uploadSuccess:"Se subieron {count} archivo(s) correctamente",uploading:"Subiendo...",deleteSingleConfirm:"¿Está seguro de que desea eliminar",deleteConfirm:"¿Eliminar los archivos seleccionados? Esta acción no se puede deshacer",deleteSuccess:"Eliminado correctamente",deleteFailed:"Error al eliminar",batchDelete:"Eliminar por lote",batchDeleteSuccess:"Se eliminaron {count} archivo(s) correctamente",selectedCount:"{count} archivo(s) seleccionado(s)",tts:"Text to Speech",ttsFileName:"File Name",ttsFileNamePlaceholder:"Enter file name",ttsVoice:"Voice",ttsSpeed:"Speed",ttsSpeedSlow:"Slow",ttsSpeedMedium:"Medium",ttsSpeedFast:"Fast",ttsText:"Text Input",ttsTextPlaceholder:"Enter text to convert",ttsTextTooShort:"Text must be at least 3 characters",ttsSuccess:"TTS file created",ttsFailed:"TTS generation failed",uploadDone:"Upload complete"},broadcast:{title:"Control de transmisión",serverConfig:"Configuración del servidor",selectDevices:"Seleccionar dispositivos",quickSelectGroup:"Selección rápida de grupo",selectAllOnline:"Seleccionar todos en línea",clearSelection:"Limpiar selección",selectedDevices:"{count} dispositivo(s) seleccionado(s)",noDevices:"No hay dispositivos disponibles",noMatch:"No hay dispositivos coincidentes",broadcastControl:"Control de transmisión",playLevel:"Prioridad de reproducción",userLevel:"Nivel de usuario",holdToTalk:"Mantener para hablar",releaseToStop:"Soltar para detener",broadcasting:"Transmitiendo...",connected:"Conectado",notConnected:"Desconectado",selectFiles:"Seleccionar archivos",startBroadcast:"Iniciar transmisión",stopBroadcast:"Detener transmisión",playbackMode:"Modo de reproducción",interval:"Intervalo",loop:"Cantidad de ciclos",audioSource:"Fuente de audio",microphone:"Micrófono",noAudioDevice:"No se detectó dispositivo de entrada de audio",audioReady:"Audio listo",inputVolume:"Volumen de entrada",enableMicrophone:"Conectar micrófono",startPreview:"Iniciar vista previa"},alarm:{title:"Sistema de alarma",settings:"Configuración de alarma",history:"Historial de alarmas",enable:"Habilitar",disable:"Deshabilitar",triggerCondition:"Condición de activación",alarmFile:"Archivo de alarma",linkage:"Dispositivo vinculado",selectDevices:"Seleccionar dispositivos",searchDevice:"Buscar nombre o número de serie del dispositivo",selectAllOnline:"Seleccionar todos en línea",clearSelection:"Limpiar selección",selectedCount:"{count} dispositivos seleccionados",noDevices:"Sin dispositivos",noMatch:"No hay dispositivos coincidentes",alarmConfig:"Configuración de alarma",alarmName:"Nombre de alarma",alarmNamePlaceholder:"Ingrese nombre de alarma",audioSource:"Fuente de audio",selectFile:"Seleccionar archivo cargado",inputUrl:"Ingresar URL manualmente",selectFilePlaceholder:"Seleccione archivo de audio",urlPlaceholder:"Ingrese URL del archivo de audio",registerAlarm:"Registrar alarma",registering:"Registrando...",registerResult:"Resultado del registro",registerSuccess:"Registro exitoso",registerFailed:"Error en el registro",noDevicesSelected:"Seleccione al menos un dispositivo",noAudioConfigured:"Configure un archivo de audio",online:"En línea",offline:"Desconectado",deviceSn:"Número de serie del dispositivo",registeredList:"Alarmas registradas",noRegistered:"Sin alarmas registradas",loadListFailed:"Error al cargar lista de alarmas",deviceName:"Nombre del dispositivo",fileName:"Nombre del archivo",refreshList:"Actualizar lista",unregisterAlarm:"Cancelar registro",unregisterConfirm:"¿Está seguro de cancelar el registro de esta alarma?",unregisterSuccess:"Registro cancelado exitosamente",unregisterFailed:"Error al cancelar registro",linkageTitle:"Vinculación de alarma",linkageDesc:"Cuando el dispositivo A se activa, los dispositivos vinculados (incluido él mismo) reproducen el audio especificado",linkagePlanName:"Nombre del plan",linkagePlanNamePlaceholder:"Ingrese nombre del plan",linkageDevices:"Dispositivos vinculados",linkageDevicesHint:"Seleccione dispositivos de activación y reproducción (puede incluir el dispositivo activador)",linkageAudio:"Archivo de audio",addLinkagePlan:"Agregar plan de vinculación",adding:"Agregando...",linkageList:"Lista de planes de vinculación",noLinkagePlans:"Sin planes de vinculación",linkageDeviceCount:"Cantidad de dispositivos",addLinkageSuccess:"Plan de vinculación agregado exitosamente",addLinkageFailed:"Error al agregar plan de vinculación",linkagePlanNameRequired:"Ingrese nombre del plan",linkageNoDevices:"Seleccione al menos un dispositivo",linkageNoAudio:"Configure un archivo de audio",linkageTriggerDevice:"Dispositivo activador",linkageTriggerDeviceHint:"Cuando este dispositivo activa una alarma, los dispositivos vinculados reproducirán audio",linkageTriggerDevicePlaceholder:"Seleccione el dispositivo activador de alarma",linkageNoTriggerDevice:"Seleccione un dispositivo activador",registerTrigger:"Registrar",registerTriggerTitle:"Registrar dispositivo activador",registerTriggerSuccess:"Dispositivo activador registrado exitosamente",registerTriggerFailed:"Error al registrar dispositivo activador",loadLinkageFailed:"Error al cargar planes de vinculación",deleteLinkageConfirm:"¿Está seguro de eliminar el plan de vinculación",deleteLinkageFailed:"Error al eliminar plan de vinculación",forceUnregTitle:"Forzar cancelación de alarma",forceUnregHint:"Forzar cancelación de todos los registros de alarma del dispositivo",forceUnregButton:"Forzar cancelación de alarma",forceUnregModalHint:"Seleccione un dispositivo para forzar la cancelación de todas las alarmas (independiente + vinculación)",forceUnregConfirm:"Confirmar cancelación",forceUnregSuccess:"Cancelación forzada de alarma exitosa",forceUnregFailed:"Error en cancelación forzada de alarma"},account:{title:"Gestión de cuentas",profile:"Perfil",changePassword:"Cambiar contraseña",subAccounts:"Subcuentas",logs:"Registros de operaciones",username:"Usuario",nickname:"Apodo",email:"Correo electrónico",phone:"Teléfono",role:"Rol",level:"Nivel",addSubUser:"Agregar subcuenta",usernamePlaceholder:"Ingrese usuario",passwordPlaceholder:"Ingrese contraseña",nicknamePlaceholder:"Ingrese apodo",beizhu:"Observación",beizhuPlaceholder:"Ingrese observación",password:"Contraseña",levelLabel:"Nivel",levelPlaceholder:"Seleccionar nivel",mask:"Máscara de permisos",maskPlaceholder:"Máscara de permisos de 40 bits (0/1)",maskDefault:"00000000000000000000000000000000000000000000",permissions:"Configuración de permisos",permCreateSub:"Puede crear subcuentas",permManageDevice:"Puede agregar/eliminar dispositivos",permUploadFile:"Puede subir archivos",addSuccess:"Subcuenta agregada correctamente",addFailed:"Error al agregar subcuenta",listFailed:"Error al obtener lista de subcuentas",noSubUsers:"No hay subcuentas aún",createTime:"Fecha de creación",status:"Estado",statusNormal:"Normal",statusDisabled:"Deshabilitada",userLevel:"Nivel de usuario",playLevel:"Nivel de reproducción",passwordShow:"Contraseña",refreshList:"Actualizar lista",usernameRequired:"Por favor ingrese usuario",passwordRequired:"Por favor ingrese contraseña",permChangeFailed:"Error al cambiar permisos",adding:"Agregando...",deleteConfirm:"¿Está seguro de eliminar la subcuenta {name}? ¡Esta acción no se puede deshacer!",deleteSuccess:"Subcuenta eliminada correctamente",deleteFailed:"Error al eliminar subcuenta",editDevices:"Editar dispositivos",editDevicesSuccess:"Dispositivos actualizados correctamente",editDevicesFailed:"Error al actualizar dispositivos",loadDevicesFailed:"Error al cargar lista de dispositivos",searchDevice:"Buscar dispositivo por nombre o ID",noDevices:"Sin dispositivos",resetToken:"Restablecer Token",resetTokenConfirm:"¿Está seguro de restablecer el Token de {name}?",resetTokenSuccess:"Token restablecido correctamente",resetTokenFailed:"Error al restablecer Token",newToken:"Nuevo Token"},admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"User & Permission Management",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully",btnEnable:"Enable",btnDisable:"Disable"},info:{title:"App Privacy Agreement",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Content too short, at least 3000 characters",saveSuccess:"Saved successfully",saveFailed:"Save failed"},upload:{title:"Avatar & Logo Upload",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Announcement Management",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scroll notice: ",noData:"No data",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"},billing:{title:"Billing Settings",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Device",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure to delete?"},gallery:{title:"Gallery Overview",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No gallery items",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"}},settings:{title:"Configuración",language:"Idioma",theme:"Tema",darkMode:"Modo oscuro",lightMode:"Modo claro",diabloMode:"Modo Diablo",notification:"Notificaciones",sound:"Configuración de sonido",about:"Acerca de",version:"Versión"},language:{title:"Seleccionar idioma",chinese:"简体中文",english:"English",korean:"한국어",thai:"ไทย",vietnamese:"Tiếng Việt",arabic:"العربية",malay:"Bahasa Melayu",japanese:"日本語",russian:"Русский",french:"Français",spanish:"Español",portuguese:"Português",german:"Deutsch",indonesian:"Bahasa Indonesia",hindi:"हिन्दी",turkish:"Türkçe",italian:"Italiano",polish:"Polski",swahili:"Kiswahili"},messages:{deleteConfirm:"¿Está seguro de que desea eliminar? ¡Esta acción no se puede deshacer!",saveSuccess:"Guardado correctamente",deleteSuccess:"Eliminado correctamente",operationSuccess:"Operación exitosa",operationFailed:"Operación fallida, por favor intente de nuevo",networkError:"Error de red, por favor verifique su conexión",serverError:"Error del servidor, por favor intente más tarde",noData:"No hay datos disponibles",loading:"Cargando...",noPermission:"Sin permiso de acceso",tokenExpired:"Sesión expirada, por favor inicie sesión de nuevo",operationTimeout:"Tiempo de espera agotado"}},"pt-BR":{common:{appName:"Sistema de Transmissão ST",loading:"Carregando...",confirm:"Confirmar",cancel:"Cancelar",save:"Salvar",delete:"Excluir",edit:"Editar",add:"Adicionar",search:"Buscar",refresh:"Atualizar",submit:"Enviar",reset:"Redefinir",logout:"Sair",logoutConfirm:"Tem certeza de que deseja sair?",logoutTitle:"Confirmar saída",back:"Voltar",success:"Sucesso",error:"Erro",warning:"Aviso",info:"Informação",yes:"Sim",no:"Não",operation:"Operação",status:"Status",index:"Índice",name:"Nome",description:"Descrição",createTime:"Data de criação",updateTime:"Data de atualização",close:"Fechar",stop:"Parar",toggle:"Habilitar/Desabilitar",actions:"Ações",seconds:"segundos",minutes:"minutos",hours:"horas",moveUp:"Mover para cima",moveDown:"Mover para baixo",quick:"Rápido",unknown:"Desconhecido",months:"mo",years:"yr",copy:"Copy"},login:{title:"Entrar",subtitle:"BROADCAST SYSTEM",username:"Usuário",password:"Senha",usernamePlaceholder:"Digite seu usuário",passwordPlaceholder:"Digite sua senha",rememberMe:"Lembrar-me",forgotPassword:"Esqueceu a senha?",loginButton:"Entrar",logging:"Entrando...",loginSuccess:"Login realizado com sucesso",loginFailed:"Falha ao fazer login",usernameRequired:"Por favor, digite seu usuário",passwordRequired:"Por favor, digite sua senha",invalidCredentials:"Usuário ou senha inválidos"},clientLogin:{subtitle:"Edição Cliente",hostPlaceholder:"Endereço do servidor, ex. 192.168.1.100:12080",hostHint:"Digite IP:porta do servidor, http:// é opcional",hostRequired:"Por favor, digite o endereço do servidor"},dashboard:{title:"Painel de controle",welcome:"Bem-vindo de volta",systemStatus:"O sistema está funcionando normalmente",quickActions:"Ações rápidas",addDevice:"Adicionar dispositivo",createGroup:"Criar grupo",scheduleTask:"Agendar tarefa",broadcastNow:"Transmitir agora"},menu:{dashboard:"Painel",devices:"Dispositivos",groups:"Grupos",tasks:"Tarefas",media:"Mídia",broadcast:"Transmissão",alarm:"Alarme",account:"Conta",settings:"Configurações",apiTest:"Teste API",home:"Início",mine:"Minha conta",admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"User & Permission Management",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully"},info:{title:"App Privacy Agreement",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Content too short, at least 3000 characters",saveSuccess:"Saved successfully",saveFailed:"Save failed"},upload:{title:"Avatar & Logo Upload",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Announcement Management",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scroll notice: ",noData:"No data",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"},billing:{title:"Billing Settings",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Device",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure to delete?"},gallery:{title:"Gallery Overview",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No gallery items",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"}}},devices:{title:"Gerenciamento de dispositivos",list:"Lista de dispositivos",online:"Online",offline:"Offline",playing:"Reproduzindo",volume:"Volume",adjustVolume:"Ajustar volume",addDevice:"Adicionar dispositivo",editDevice:"Editar dispositivo",deleteDevice:"Excluir dispositivo",deviceName:"Nome do dispositivo",serialNumber:"Número de série",lastUpdate:"Última atualização",refreshList:"Atualizar lista de dispositivos",batchVolume:"Ajustar volume em lote",noDevices:"Nenhum dispositivo disponível, clique em Adicionar dispositivo no canto superior direito",unnamedDevice:"Dispositivo sem nome",debugSound:"Som de depuração",changeVolume:"Alterar volume",changeName:"Alterar nome",changeSerial:"Alterar número de série",id:"ID",volumeNotSet:"Não definido",neverOnline:"Nunca esteve online",expiredDisabled:"Expirado desabilitado",unknown:"Desconhecido",openDebugSound:"Ativar som de depuração",closeDebugSound:"Desativar som de depuração",unknownStatus:"Status desconhecido",addDeviceTitle:"Adicionar dispositivo",deviceNameRequired:"Nome do dispositivo",deviceSerialRequired:"Número de série do dispositivo",deviceKeyRequired:"Chave do dispositivo",deviceNamePlaceholder:"Digite o nome do dispositivo",deviceSerialPlaceholder:"Digite o número de série do dispositivo",deviceKeyPlaceholder:"Digite a chave de registro do dispositivo",deviceKeyHint:"A chave de registro é usada para registrar o dispositivo no sistema, equivalente à senha do dispositivo",fillTestData:"Preencher dados de teste",renameTitle:"Renomear dispositivo",newDeviceNamePlaceholder:"Digite o novo nome do dispositivo",debugSoundTitle:"Som de depuração",selectDebugSoundStatus:"Selecione o status do som de depuração",editSerialTitle:"Editar número de série do dispositivo",currentSerial:"Número de série atual",currentSerialPlaceholder:"Número de série atual do dispositivo",newSerial:"Novo número de série",newSerialPlaceholder:"Digite o novo número de série de 32 dígitos",serialLengthHint:"O número de série deve ter 32 dígitos",editDeviceTitle:"Editar dispositivo",macAddress:"Endereço MAC",macAddressPlaceholder:"Digite o endereço MAC",ipAddress:"Endereço IP",ipAddressPlaceholder:"Digite o endereço IP",port:"Porta",portPlaceholder:"Digite o número da porta",adjustVolumeTitle:"Ajustar volume",volumeRange:"Faixa: 1-63",preciseSetting:"Configuração precisa:",batchAdjustVolumeTitle:"Ajustar volume em lote",selectedDevices:"Dispositivos selecionados:",devicesCount:"dispositivos",confirmAdjust:"Confirmar ajuste",adding:"Adicionando...",saving:"Salvando...",adjusting:"Ajustando...",confirmButton:"Confirmar",cancelButton:"Cancelar",deviceNameValidationError:"Por favor, digite o nome do dispositivo",deviceSerialValidationError:"Por favor, digite o número de série do dispositivo",deviceKeyValidationError:"Por favor, digite a chave do dispositivo",newDeviceNameValidationError:"Por favor, digite o nome do dispositivo",deviceSerialLengthError:"Por favor, digite o número de série do dispositivo",newSerialLengthError:"O número de série deve ter 32 dígitos",debugSoundSelectError:"Por favor, selecione ativar ou desativar o som de depuração",confirmOperation:"Confirmar operação",confirmDelete:"Tem certeza de que deseja excluir o dispositivo",deleteCannotUndo:"? Esta ação não pode ser desfeita!",addDeviceSuccess:"Dispositivo adicionado com sucesso",addDeviceFailed:"Falha ao adicionar dispositivo",deviceRenameSuccess:"Dispositivo renomeado com sucesso",deviceRenameFailed:"Falha ao renomear dispositivo",deviceEditSuccess:"Dispositivo editado com sucesso",deviceEditFailed:"Falha ao editar dispositivo",deviceSerialEditSuccess:"Número de série editado com sucesso",deviceSerialEditFailed:"Falha ao editar número de série",debugSoundSuccess:"Som de depuração configurado com sucesso",debugSoundFailed:"Falha ao configurar som de depuração",deleteDeviceSuccess:"Dispositivo excluído com sucesso",deleteDeviceFailed:"Falha ao excluir dispositivo",adjustVolumeSuccess:"Volume ajustado para",adjustVolumeFailed:"Falha ao ajustar volume",batchAdjustSuccess:"Ajuste de volume em lote realizado com sucesso, total",batchAdjustFailed:"Falha ao ajustar volume em lote",volumeValidationError:"O volume deve estar entre 1-63",selectDevicesFirst:"Por favor, selecione dispositivos para ajustar o volume primeiro",successfullyFetched:"Obtido com sucesso",devicesUnit:"dispositivos",deviceListFormatError:"Erro no formato dos dados da lista de dispositivos",fetchDeviceListFailed:"Falha ao obter lista de dispositivos",searchPlaceholder:"Buscar nome ou número de série...",unknownError:"Erro desconhecido",listView:"Visualização em lista",cardView:"Visualização em cartões",scanDevices:"Scan Devices",deviceScan:"Device Scan",seed:"Device SEED",seedPlaceholder:"Enter 32-char hex SEED",scanButton:"Scan",scanning:"Scanning...",noDeviceFound:"No devices found",scanNotSupported:"Device scan only available in desktop client",autoIP:"Auto IP",warmMode:"Voice Prompt",mediaServer:"Media Server",mediaPort:"Media Port",gateway:"Gateway",subnetMask:"Subnet Mask",dns:"DNS",deviceIP:"Device IP",applyConfig:"Apply Config",clearDevice:"Clear Device",deviceConfigured:"Device config sent",deviceConfigureFailed:"Device config failed",deviceCleared:"Clear command sent",scanConfigTitle:"Device Network Config",scannedDevices:"Discovered Devices",scanHint:"Click scan to discover all devices on the local network",testComm:"Test Communication",testCommBtn:"Test",console:"Console",clearConsole:"Clear",consoleEmpty:"Waiting for communication...",invalidIP:"Invalid IP format",invalidMask:"Invalid subnet mask",invalidGateway:"Invalid gateway",invalidMediaIP:"Invalid media server IP",invalidPort:"Port range 1-65535",invalidDNS:"Invalid DNS format",dnsPlaceholder:"0.0.0.0 = System default",advanced:"Advanced",soundCard:"Sound Card",getAmixerStatus:"Get Status",amixerApply:"Apply",amixerGetting:"Getting...",amixerOn:"On",amixerOff:"Off",amixerDAC:"DAC Playback Volume",amixerHeadphoneVol:"Headphone Volume",amixerHeadphoneSwitch:"Headphone Switch",amixerHeadphoneRoute:"Headphone Source",amixerLineIn:"Line In Volume",amixerFMIn:"FM In Volume",amixerMicIn:"Mic In Volume",amixerMicBoost:"Mic Boost",amixerADCCapture:"ADC Capture Volume",amixerADCLeftFM:"Left FM Capture",amixerADCRightFM:"Right FM Capture",amixerADCLeftOut:"Left Out Capture",amixerADCRightOut:"Right Out Capture",amixerADCLineIn:"Line In Capture",amixerADCMic:"Mic Capture",amixerLeftFM:"Left FM",amixerLeftLeftDAC:"Left Left DAC",amixerLeftRightDAC:"Left Right DAC",amixerLeftLineIn:"Left Line In",amixerLeftMicIn:"Left Mic In",amixerRightFM:"Right FM",amixerRightLeftDAC:"Right Left DAC",amixerRightRightDAC:"Right Right DAC",amixerRightLineIn:"Right Line In",amixerRightMicIn:"Right Mic In",amixerGroupDecode:"Decode Output",amixerGroupCapture:"Capture Mixer Input",amixerGroupLeft:"Left Output Mixer",amixerGroupRight:"Right Output Mixer",amixerGroupGain:"Gain Config",amixerRouteDAC:"DAC",amixerRouteMixer:"Mixer",amixerGetSuccess:"Sound card status retrieved",amixerGetFailed:"Failed to get sound card status",amixerSetSuccess:"Setting sent",amixerSetFailed:"Setting failed"},groups:{title:"Gerenciamento de grupos",list:"Lista de grupos",deviceCount:"Quantidade de dispositivos",addGroup:"Adicionar grupo",editGroup:"Editar grupo",deleteGroup:"Excluir grupo",groupName:"Nome do grupo",manage:"Gerenciamento de grupos",inputName:"Digite o nome do grupo",add:"Adicionar grupo",playMenu:"Menu de reprodução",id:"ID",name:"Nome",actions:"Ações",noGroups:"Nenhum grupo disponível",untitled:"Grupo sem título",editDevices:"Editar dispositivos",editVideo:"Editar vídeo",previewVideo:"Pré-visualizar vídeo",groupPlay:"Reprodução em grupo",allDevices:"Todos os dispositivos",selectedDevices:"Dispositivos selecionados",selectAtLeastOneDevice:"Por favor, selecione pelo menos um dispositivo",videoUrl:"URL do vídeo",inputVideoUrl:"Por favor, digite a URL do vídeo",noVideoUrl:"Nenhuma URL de vídeo configurada",noVideoUrlSet:"URL de transmissão ao vivo Mu38 não configurada",playSequence:"Sequência de reprodução",fileInterval:"Intervalo entre arquivos",playCount:"Quantidade de reproduções",noPlayingItems:"Nenhuma sequência sendo reproduzida atualmente",playList:"Lista de reprodução",nameRequired:"O nome do grupo não pode estar vazio",loadSuccess:"Carregados {count} grupos com sucesso",loadFailed:"Falha ao carregar lista de grupos",addSuccess:"Grupo adicionado com sucesso",addFailed:"Falha ao adicionar grupo",deleteConfirm:"Esta operação excluirá permanentemente este grupo. Continuar?",deleteSuccess:"Excluído com sucesso",deleteFailed:"Falha ao excluir",saveSuccess:"Salvo com sucesso",saveFailed:"Falha ao salvar",loadDevicesFailed:"Falha ao carregar lista de dispositivos",invalidGroupId:"ID de grupo inválido",unknownDevice:"Dispositivo desconhecido",playFeatureComingSoon:"Recurso de reprodução em grupo em breve",stopPlayFeatureComingSoon:"Recurso de parar reprodução em breve",playListFeatureComingSoon:"Recurso de lista de reprodução em breve",searchDevicePlaceholder:"Digite nome ou ID do dispositivo para buscar...",searchResult:"Encontrados {filtered} dispositivos (total {total})",totalDevices:"Total de {count} dispositivos",noSearchResult:"Nenhum dispositivo encontrado",noSelectedDevices:"Nenhum dispositivo selecionado ainda",searchFilePlaceholder:"Digite nome ou ID do arquivo para buscar...",availableFiles:"Arquivos disponíveis",selectedFiles:"Arquivos selecionados",noSelectedFiles:"Nenhum arquivo selecionado ainda",doubleClickHint:"Clique duplo para adicionar arquivos duplicados",unknownFile:"Arquivo desconhecido",playMode:"Modo de reprodução",playMode1:"Reprodução sequencial 1x",playMode2:"Reprodução sequencial 2x",playMode3:"Reprodução sequencial 3x",totalDuration:"Duração estimada",durationFormula:"Cálculo: (Duração total + Intervalo) × Quantidade de ciclos",playModeHint:"Quantidade de ciclos, 1-99",intervalMaxHint:"Intervalo máximo de 3 horas (10800 segundos)",estimatedDuration:"Duração estimada",forceStopDuration:"Duração de parada forçada (Opcional)",forceStopHint:"Para automaticamente nesta duração. Deve ser menor que a duração estimada. 0 significa sem parada forçada",selectAtLeastOneFile:"Por favor, selecione pelo menos um arquivo",loadFilesFailed:"Falha ao carregar lista de arquivos",groupHasNoDevices:"Este grupo não possui dispositivos",playStarted:"Reprodução iniciada com sucesso",playFailed:"Falha ao iniciar reprodução",invalidPlayId:"ID de reprodução inválido",stopPlayConfirm:"Tem certeza de que deseja parar a reprodução?",stopPlayInProgress:"Parando reprodução, por favor aguarde...",stopPlaySuccess:"Reprodução parada com sucesso",stopPlaySuccessAndClosed:"Reprodução parada com sucesso, lista de reprodução fechada",stopPlayFailed:"Falha ao parar reprodução",selectGroupForPlay:"Selecione um grupo para reproduzir",devices:"dispositivos",devicesCount:"dispositivos",startPlay:"Iniciar reprodução"},tasks:{title:"Tarefas agendadas",titleDescription:"Gerencie tarefas de reprodução agendadas com operações em lote e grupos de tarefas",list:"Lista de tarefas",addTask:"Adicionar tarefa",editTask:"Editar tarefa",deleteTask:"Excluir tarefa",taskName:"Nome da tarefa",executeTime:"Hora de execução",playMode:"Modo de reprodução",repeat:"Repetir",files:"Arquivos",devices:"Dispositivos",allGroups:"Todos os grupos de tarefas",addTaskGroup:"Adicionar grupo de tarefas",deleteTaskGroup:"Excluir grupo de tarefas",disableTaskGroup:"Desabilitar grupo de tarefas",enableTaskGroup:"Habilitar grupo de tarefas",taskGroup:"Grupo de tarefas",taskGroupName:"Nome do grupo de tarefas",enterGroupName:"Digite o nome do grupo de tarefas",applyTaskGroup:"Aplicar grupo de tarefas",task:"Tarefa",selectGroup:"Selecionar grupo de tarefas",startTime:"Hora de início",duration:"Duração",loopCount:"Quantidade de ciclos",startDate:"Data de início",endDate:"Data de término",changeGroup:"Alterar grupo",noGroup:"Sem grupo",tryPlay:"Testar reprodução",batchDisable:"Desabilitar em lote",batchEnable:"Habilitar em lote",batchEditDevices:"Editar dispositivos em lote",batchEditFiles:"Editar arquivos em lote",batchApplyGroup:"Aplicar grupo em lote",batchEditTime:"Editar horário em lote",batchEditLoopCount:"Editar ciclos em lote",batchEditDuration:"Editar duração em lote",batchDelete:"Excluir em lote",batchCopy:"Copiar em lote",noTasks:"Sem tarefas",selectedCount:"{count} tarefas selecionadas",randomPlay:"Reprodução aleatória",loopPlay:"Repetir {count} vezes",selectDevices:"Selecionar dispositivos para reproduzir",selectFiles:"Selecionar arquivos de áudio",allDevices:"Todos os dispositivos",selectedDevices:"Dispositivos selecionados",allFiles:"Todos os arquivos",selectedFiles:"Arquivos selecionados",editTaskDevices:"Editar dispositivos da tarefa",editTaskFiles:"Editar arquivos da tarefa",taskDuration:"Duração da tarefa",intervalDuration:"Duração do intervalo",timeRange:"Faixa de tempo",to:"até",playCount:"Quantidade de reproduções",sequentialPlay:"Reprodução sequencial",randomPlayMode:"Reprodução aleatória",playModeChange:"Alteração do modo de reprodução",enableOtherLimit:"Outros limites não necessários",enableStartDate:"Habilitar data de início",enableEndDate:"Habilitar data de término",enterTaskName:"Digite o nome da tarefa",noTasksSelected:"Nenhuma tarefa selecionada",devicesRequired:"Nenhum dispositivo selecionado",filesRequired:"Nenhum arquivo de áudio selecionado",saveSuccess:"Salvo com sucesso",saveFailed:"Falha ao salvar",deleteSuccess:"Excluído com sucesso",deleteFailed:"Falha ao excluir",deleteConfirm:"Esta operação excluirá permanentemente a tarefa. Continuar?",enableSuccess:"Tarefa habilitada",disableSuccess:"Tarefa desabilitada",startPlaySuccess:"Reprodução iniciada",startPlayFailed:"Falha ao iniciar reprodução",stopPlaySuccess:"Reprodução parada",stopPlayFailed:"Falha ao parar reprodução",groupNameRequired:"O nome do grupo de tarefas não pode estar vazio",addGroupSuccess:"Grupo de tarefas adicionado com sucesso",addGroupFailed:"Falha ao adicionar grupo de tarefas",deleteGroupSuccess:"Grupo de tarefas excluído com sucesso",deleteGroupFailed:"Falha ao excluir grupo de tarefas",disableGroupSuccess:"Grupo de tarefas desabilitado com sucesso",disableGroupFailed:"Falha ao desabilitar grupo de tarefas",enableGroupSuccess:"Grupo de tarefas habilitado com sucesso",enableGroupFailed:"Falha ao habilitar grupo de tarefas",applyGroupSuccess:"Grupo de tarefas aplicado com sucesso",applyGroupFailed:"Falha ao aplicar grupo de tarefas",selectGroupFirst:"Por favor, selecione um grupo de tarefas primeiro",batchDisableSuccess:"Desabilitação em lote realizada com sucesso",batchEnableSuccess:"Habilitação em lote realizada com sucesso",unknownDevice:"Dispositivo desconhecido",unknownFile:"Arquivo desconhecido",calculate:"Calcular",monday:"Segunda-feira",tuesday:"Terça-feira",wednesday:"Quarta-feira",thursday:"Quinta-feira",friday:"Sexta-feira",saturday:"Sábado",sunday:"Domingo",index:"Índice",weekdays:"Dias de reprodução",noLimit:"Ilimitado",autoCalc:"Autocalculado",taskNameRequired:"O nome da tarefa é obrigatório",startTimeRequired:"A hora de início é obrigatória",cannotDeletePlaying:"A tarefa está em reprodução, por favor pare primeiro",cannotDeleteEnabled:"A tarefa está habilitada, por favor desabilite primeiro",cannotEditPlaying:"A tarefa está em reprodução, por favor pare primeiro",disabled:"Desabilitada",enabled:"Habilitada",enableTask:"Habilitar",disableTask:"Desabilitar",noSelectedFiles:"Nenhum arquivo selecionado ainda",clickToAddHint:"Clique nos arquivos à esquerda para adicionar",estimatedDuration:"Duração estimada",advancedSettings:"Configurações avançadas",playSettings:"Configurações de reprodução",forceStopDuration:"Duração de parada forçada",forceStopHint:"Se definido, a reprodução para automaticamente neste tempo. Deve ser menor que a duração estimada. 0 ou vazio significa sem parada forçada",durationRequired:"Reprodução aleatória requer uma duração",durationFormula:"Cálculo: (Duração total + Intervalo × Quantidade de arquivos) × Quantidade de ciclos",dateHint:"Nota: Reproduz na data de início e também na data de término. Se ambas forem iguais, reproduz apenas nesse dia. A data de início não pode ser posterior à data de término.",dateRangeError:"A data de início não pode ser posterior à data de término",batchDurationHint:"Para reprodução sequencial: se a duração total da lista for > duração máxima, para ao atingir a duração; se a duração total da lista for < duração máxima, para ao finalizar a lista",copyConfirm:"Tem certeza de que deseja copiar selecionadas? Esta ação não pode ser desfeita.",copySuccess:"Tarefas copiadas com sucesso",copyFailed:"Falha ao copiar tarefas",timeConflict:"Conflito de horário",dateRange:"Período de datas",endTime:"Hora de término",copyCount:"Quantidade de cópias",copyNewName:"Novo nome padrão",copyNewNamePlaceholder:"Nome padrão da nova tarefa",copyInterval:"Intervalo de tempo",copyIntervalUnit:"minutos",copyPreview:"Pré-visualização",deleteGroupConfirm:"Tem certeza de que deseja excluir este grupo de tarefas? As tarefas do grupo não serão excluídas.",noTasksInGroup:"Nenhuma tarefa neste grupo de tarefas",batchPartialFailed:"{failed} tarefa(s) falharam na operação"},media:{title:"Gerenciamento de mídia",list:"Lista de arquivos",upload:"Enviar",delete:"Excluir",play:"Reproduzir",download:"Baixar",fileName:"Nome do arquivo",fileSize:"Tamanho do arquivo",fileType:"Tipo de arquivo",uploadTime:"Data de envio",duration:"Duração",noFiles:"Nenhum arquivo ainda",dropHint:"Arraste e solte arquivos MP3 aqui para enviar",dropSub:"Suporta formato MP3, máximo 40MB por arquivo",selectFiles:"Selecionar arquivos",selectFolder:"Selecionar pasta",onlyMp3:"Apenas arquivos MP3 são suportados",fileTooLarge:"O arquivo excede o limite de 40MB",uploadFailed:"Falha ao enviar",uploadSuccess:"Enviado(s) {count} arquivo(s) com sucesso",uploading:"Enviando...",deleteSingleConfirm:"Tem certeza de que deseja excluir",deleteConfirm:"Excluir arquivos selecionados? Esta ação não pode ser desfeita",deleteSuccess:"Excluído com sucesso",deleteFailed:"Falha ao excluir",batchDelete:"Excluir em lote",batchDeleteSuccess:"Excluído(s) {count} arquivo(s) com sucesso",selectedCount:"{count} arquivo(s) selecionado(s)",tts:"Text to Speech",ttsFileName:"File Name",ttsFileNamePlaceholder:"Enter file name",ttsVoice:"Voice",ttsSpeed:"Speed",ttsSpeedSlow:"Slow",ttsSpeedMedium:"Medium",ttsSpeedFast:"Fast",ttsText:"Text Input",ttsTextPlaceholder:"Enter text to convert",ttsTextTooShort:"Text must be at least 3 characters",ttsSuccess:"TTS file created",ttsFailed:"TTS generation failed",uploadDone:"Upload complete"},broadcast:{title:"Controle de transmissão",serverConfig:"Configuração do servidor",selectDevices:"Selecionar dispositivos",quickSelectGroup:"Seleção rápida de grupo",selectAllOnline:"Selecionar todos online",clearSelection:"Limpar seleção",selectedDevices:"{count} dispositivo(s) selecionado(s)",noDevices:"Nenhum dispositivo disponível",noMatch:"Nenhum dispositivo correspondente",broadcastControl:"Controle de transmissão",playLevel:"Prioridade de reprodução",userLevel:"Nível de usuário",holdToTalk:"Segurar para falar",releaseToStop:"Soltar para parar",broadcasting:"Transmitindo...",connected:"Conectado",notConnected:"Desconectado",selectFiles:"Selecionar arquivos",startBroadcast:"Iniciar transmissão",stopBroadcast:"Parar transmissão",playbackMode:"Modo de reprodução",interval:"Intervalo",loop:"Quantidade de ciclos",audioSource:"Fonte de áudio",microphone:"Microfone",noAudioDevice:"Nenhum dispositivo de entrada de áudio detectado",audioReady:"Áudio pronto",inputVolume:"Volume de entrada",enableMicrophone:"Conectar microfone",startPreview:"Iniciar pré-visualização"},alarm:{title:"Sistema de alarme",settings:"Configurações de alarme",history:"Histórico de alarmes",enable:"Habilitar",disable:"Desabilitar",triggerCondition:"Condição de ativação",alarmFile:"Arquivo de alarme",linkage:"Dispositivo vinculado",selectDevices:"Selecionar dispositivos",searchDevice:"Pesquisar nome ou número de série do dispositivo",selectAllOnline:"Selecionar todos online",clearSelection:"Limpar seleção",selectedCount:"{count} dispositivos selecionados",noDevices:"Sem dispositivos",noMatch:"Nenhum dispositivo correspondente",alarmConfig:"Configuração de alarme",alarmName:"Nome do alarme",alarmNamePlaceholder:"Insira o nome do alarme",audioSource:"Fonte de áudio",selectFile:"Selecionar arquivo enviado",inputUrl:"Inserir URL manualmente",selectFilePlaceholder:"Selecione um arquivo de áudio",urlPlaceholder:"Insira a URL do arquivo de áudio",registerAlarm:"Registrar alarme",registering:"Registrando...",registerResult:"Resultado do registro",registerSuccess:"Registro bem-sucedido",registerFailed:"Falha no registro",noDevicesSelected:"Selecione pelo menos um dispositivo",noAudioConfigured:"Configure um arquivo de áudio",online:"Online",offline:"Offline",deviceSn:"Número de série do dispositivo",registeredList:"Alarmes registrados",noRegistered:"Nenhum alarme registrado",loadListFailed:"Falha ao carregar lista de alarmes",deviceName:"Nome do dispositivo",fileName:"Nome do arquivo",refreshList:"Atualizar lista",unregisterAlarm:"Cancelar registro",unregisterConfirm:"Tem certeza de que deseja cancelar o registro deste alarme?",unregisterSuccess:"Registro cancelado com sucesso",unregisterFailed:"Falha ao cancelar registro",linkageTitle:"Vinculação de alarme",linkageDesc:"Quando o dispositivo A é acionado, os dispositivos vinculados (incluindo ele mesmo) reproduzem o áudio especificado",linkagePlanName:"Nome do plano",linkagePlanNamePlaceholder:"Insira o nome do plano",linkageDevices:"Dispositivos vinculados",linkageDevicesHint:"Selecione dispositivos de acionamento e reprodução (pode incluir o próprio dispositivo acionador)",linkageAudio:"Arquivo de áudio",addLinkagePlan:"Adicionar plano de vinculação",adding:"Adicionando...",linkageList:"Lista de planos de vinculação",noLinkagePlans:"Nenhum plano de vinculação",linkageDeviceCount:"Quantidade de dispositivos",addLinkageSuccess:"Plano de vinculação adicionado com sucesso",addLinkageFailed:"Falha ao adicionar plano de vinculação",linkagePlanNameRequired:"Insira o nome do plano",linkageNoDevices:"Selecione pelo menos um dispositivo",linkageNoAudio:"Configure um arquivo de áudio",linkageTriggerDevice:"Dispositivo acionador",linkageTriggerDeviceHint:"Quando este dispositivo acionar um alarme, os dispositivos vinculados reproduzirão áudio",linkageTriggerDevicePlaceholder:"Selecione o dispositivo acionador do alarme",linkageNoTriggerDevice:"Selecione um dispositivo acionador",registerTrigger:"Registrar",registerTriggerTitle:"Registrar dispositivo acionador",registerTriggerSuccess:"Dispositivo acionador registrado com sucesso",registerTriggerFailed:"Falha ao registrar dispositivo acionador",loadLinkageFailed:"Falha ao carregar planos de vinculação",deleteLinkageConfirm:"Tem certeza de que deseja excluir o plano de vinculação",deleteLinkageFailed:"Falha ao excluir plano de vinculação",forceUnregTitle:"Forçar cancelamento de alarme",forceUnregHint:"Forçar cancelamento de todos os registros de alarme do dispositivo",forceUnregButton:"Forçar cancelamento de alarme",forceUnregModalHint:"Selecione um dispositivo para forçar o cancelamento de todos os alarmes (autônomo + vinculação)",forceUnregConfirm:"Confirmar cancelamento",forceUnregSuccess:"Cancelamento forçado de alarme bem-sucedido",forceUnregFailed:"Falha no cancelamento forçado de alarme"},account:{title:"Gerenciamento de contas",profile:"Perfil",changePassword:"Alterar senha",subAccounts:"Subcontas",logs:"Registros de operações",username:"Usuário",nickname:"Apelido",email:"E-mail",phone:"Telefone",role:"Função",level:"Nível",addSubUser:"Adicionar subconta",usernamePlaceholder:"Digite o usuário",passwordPlaceholder:"Digite a senha",nicknamePlaceholder:"Digite o apelido",beizhu:"Observação",beizhuPlaceholder:"Digite a observação",password:"Senha",levelLabel:"Nível",levelPlaceholder:"Selecionar nível",mask:"Máscara de permissões",maskPlaceholder:"Máscara de permissões de 40 bits (0/1)",maskDefault:"00000000000000000000000000000000000000000000",permissions:"Configuração de permissões",permCreateSub:"Pode criar subcontas",permManageDevice:"Pode adicionar/excluir dispositivos",permUploadFile:"Pode enviar arquivos",addSuccess:"Subconta adicionada com sucesso",addFailed:"Falha ao adicionar subconta",listFailed:"Falha ao obter lista de subcontas",noSubUsers:"Nenhuma subconta ainda",createTime:"Data de criação",status:"Status",statusNormal:"Normal",statusDisabled:"Desabilitada",userLevel:"Nível de usuário",playLevel:"Nível de reprodução",passwordShow:"Senha",refreshList:"Atualizar lista",usernameRequired:"Por favor, digite o usuário",passwordRequired:"Por favor, digite a senha",permChangeFailed:"Falha ao alterar permissões",adding:"Adicionando...",deleteConfirm:"Tem certeza de que deseja excluir a subconta {name}? Esta ação não pode ser desfeita!",deleteSuccess:"Subconta excluída com sucesso",deleteFailed:"Falha ao excluir subconta",editDevices:"Editar dispositivos",editDevicesSuccess:"Dispositivos atualizados com sucesso",editDevicesFailed:"Falha ao atualizar dispositivos",loadDevicesFailed:"Falha ao carregar lista de dispositivos",searchDevice:"Buscar dispositivo por nome ou ID",noDevices:"Nenhum dispositivo",resetToken:"Redefinir Token",resetTokenConfirm:"Tem certeza de que deseja redefinir o Token de {name}?",resetTokenSuccess:"Token redefinido com sucesso",resetTokenFailed:"Falha ao redefinir Token",newToken:"Novo Token"},settings:{title:"Configurações",language:"Idioma",theme:"Tema",darkMode:"Modo escuro",lightMode:"Modo claro",diabloMode:"Modo Diablo",notification:"Notificações",sound:"Configurações de som",about:"Sobre",version:"Versão"},language:{title:"Selecionar idioma",chinese:"简体中文",english:"English",korean:"한국어",thai:"ไทย",vietnamese:"Tiếng Việt",arabic:"العربية",malay:"Bahasa Melayu",japanese:"日本語",russian:"Русский",french:"Français",spanish:"Español",portuguese:"Português",german:"Deutsch",indonesian:"Bahasa Indonesia",hindi:"हिन्दी",turkish:"Türkçe",italian:"Italiano",polish:"Polski",swahili:"Kiswahili"},messages:{deleteConfirm:"Tem certeza de que deseja excluir? Esta ação não pode ser desfeita!",saveSuccess:"Salvo com sucesso",deleteSuccess:"Excluído com sucesso",operationSuccess:"Operação realizada com sucesso",operationFailed:"Falha na operação, por favor tente novamente",networkError:"Erro de rede, por favor verifique sua conexão",serverError:"Erro no servidor, por favor tente novamente mais tarde",noData:"Nenhum dado disponível",loading:"Carregando...",noPermission:"Sem permissão de acesso",tokenExpired:"Sessão expirada, por favor faça login novamente",operationTimeout:"Tempo limite da operação esgotado"},admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"Select Language",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data available",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",btnEnable:"Enable",btnDisable:"Disable",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully"},info:{title:"Select Language",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Announcement too short",saveSuccess:"Saved successfully",saveFailed:"Update failed"},upload:{title:"Select Language",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Select Language",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scrolling Notice",noData:"No data available",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"},billing:{title:"Select Language",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Slideshow",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"},gallery:{title:"Select Language",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No data available",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"}}},"de-DE":{common:{appName:"ST Rundfunksystem",loading:"Laden...",confirm:"Bestätigen",cancel:"Abbrechen",save:"Speichern",delete:"Löschen",edit:"Bearbeiten",add:"Hinzufügen",search:"Suchen",refresh:"Aktualisieren",submit:"Absenden",reset:"Zurücksetzen",logout:"Abmelden",logoutConfirm:"Möchten Sie sich wirklich abmelden?",logoutTitle:"Abmeldung bestätigen",back:"Zurück",success:"Erfolg",error:"Fehler",warning:"Warnung",info:"Info",yes:"Ja",no:"Nein",operation:"Vorgang",status:"Status",index:"Index",name:"Name",description:"Beschreibung",createTime:"Erstellt am",updateTime:"Aktualisiert am",close:"Schließen",stop:"Stoppen",toggle:"Aktivieren/Deaktivieren",actions:"Aktionen",seconds:"Sekunden",minutes:"Minuten",hours:"Stunden",moveUp:"Nach oben",moveDown:"Nach unten",quick:"Schnell",unknown:"Unbekannt",months:"mo",years:"yr",copy:"Copy"},login:{title:"Anmelden",subtitle:"BROADCAST SYSTEM",username:"Benutzername",password:"Passwort",usernamePlaceholder:"Benutzername eingeben",passwordPlaceholder:"Passwort eingeben",rememberMe:"Angemeldet bleiben",forgotPassword:"Passwort vergessen?",loginButton:"Anmelden",logging:"Anmeldung läuft...",loginSuccess:"Anmeldung erfolgreich",loginFailed:"Anmeldung fehlgeschlagen",usernameRequired:"Bitte Benutzernamen eingeben",passwordRequired:"Bitte Passwort eingeben",invalidCredentials:"Ungültiger Benutzername oder Passwort"},clientLogin:{subtitle:"Client-Edition",hostPlaceholder:"Serveradresse, z.B. 192.168.1.100:12080",hostHint:"Server IP:Port eingeben, http:// ist optional",hostRequired:"Bitte Serveradresse eingeben"},dashboard:{title:"Dashboard",welcome:"Willkommen zurück",systemStatus:"System läuft normal",quickActions:"Schnellaktionen",addDevice:"Gerät hinzufügen",createGroup:"Gruppe erstellen",scheduleTask:"Aufgabe planen",broadcastNow:"Jetzt übertragen"},menu:{dashboard:"Dashboard",devices:"Geräte",groups:"Gruppen",tasks:"Aufgaben",media:"Medien",broadcast:"Übertragung",alarm:"Alarm",account:"Konto",settings:"Einstellungen",apiTest:"API-Test",home:"Startseite",mine:"Mein Konto"},devices:{title:"Geräteverwaltung",list:"Geräteliste",online:"Online",offline:"Offline",playing:"Wiedergabe",volume:"Lautstärke",adjustVolume:"Lautstärke anpassen",addDevice:"Gerät hinzufügen",editDevice:"Gerät bearbeiten",deleteDevice:"Gerät löschen",deviceName:"Gerätename",serialNumber:"Seriennummer",lastUpdate:"Letzte Aktualisierung",refreshList:"Geräteliste aktualisieren",batchVolume:"Lautstärke stapelweise anpassen",noDevices:"Keine Geräte verfügbar, klicken Sie oben rechts auf Gerät hinzufügen",unnamedDevice:"Unbenanntes Gerät",debugSound:"Testton",changeVolume:"Lautstärke ändern",changeName:"Name ändern",changeSerial:"Seriennummer ändern",id:"ID",volumeNotSet:"Nicht festgelegt",neverOnline:"Nie online",expiredDisabled:"Abgelaufen deaktiviert",unknown:"Unbekannt",openDebugSound:"Testton aktivieren",closeDebugSound:"Testton deaktivieren",unknownStatus:"Unbekannter Status",addDeviceTitle:"Gerät hinzufügen",deviceNameRequired:"Gerätename",deviceSerialRequired:"Geräteseriennummer",deviceKeyRequired:"Geräteschlüssel",deviceNamePlaceholder:"Gerätename eingeben",deviceSerialPlaceholder:"Geräteseriennummer eingeben",deviceKeyPlaceholder:"Geräteregistrierungsschlüssel eingeben",deviceKeyHint:"Der Registrierungsschlüssel wird zur Registrierung des Geräts im System verwendet, entspricht dem Gerätekennwort",fillTestData:"Testdaten ausfüllen",renameTitle:"Gerät umbenennen",newDeviceNamePlaceholder:"Neuen Gerätename eingeben",debugSoundTitle:"Testton",selectDebugSoundStatus:"Testton-Status auswählen",editSerialTitle:"Geräteseriennummer bearbeiten",currentSerial:"Aktuelle Seriennummer",currentSerialPlaceholder:"Aktuelle Geräteseriennummer",newSerial:"Neue Seriennummer",newSerialPlaceholder:"Neue 32-stellige Seriennummer eingeben",serialLengthHint:"Die Seriennummer muss 32 Stellen lang sein",editDeviceTitle:"Gerät bearbeiten",macAddress:"MAC-Adresse",macAddressPlaceholder:"MAC-Adresse eingeben",ipAddress:"IP-Adresse",ipAddressPlaceholder:"IP-Adresse eingeben",port:"Port",portPlaceholder:"Portnummer eingeben",adjustVolumeTitle:"Lautstärke anpassen",volumeRange:"Bereich: 1-63",preciseSetting:"Präzise Einstellung:",batchAdjustVolumeTitle:"Lautstärke stapelweise anpassen",selectedDevices:"Ausgewählte Geräte:",devicesCount:"Geräte",confirmAdjust:"Anpassung bestätigen",adding:"Wird hinzugefügt...",saving:"Wird gespeichert...",adjusting:"Wird angepasst...",confirmButton:"Bestätigen",cancelButton:"Abbrechen",deviceNameValidationError:"Bitte Gerätename eingeben",deviceSerialValidationError:"Bitte Geräteseriennummer eingeben",deviceKeyValidationError:"Bitte Geräteschlüssel eingeben",newDeviceNameValidationError:"Bitte Gerätename eingeben",deviceSerialLengthError:"Bitte Geräteseriennummer eingeben",newSerialLengthError:"Die Seriennummer muss 32 Stellen lang sein",debugSoundSelectError:"Bitte Testton aktivieren oder deaktivieren auswählen",confirmOperation:"Vorgang bestätigen",confirmDelete:"Möchten Sie das Gerät wirklich löschen",deleteCannotUndo:"? Diese Aktion kann nicht rückgängig gemacht werden!",addDeviceSuccess:"Gerät erfolgreich hinzugefügt",addDeviceFailed:"Gerät konnte nicht hinzugefügt werden",deviceRenameSuccess:"Gerät erfolgreich umbenannt",deviceRenameFailed:"Gerät konnte nicht umbenannt werden",deviceEditSuccess:"Gerät erfolgreich bearbeitet",deviceEditFailed:"Gerät konnte nicht bearbeitet werden",deviceSerialEditSuccess:"Seriennummer erfolgreich bearbeitet",deviceSerialEditFailed:"Seriennummer konnte nicht bearbeitet werden",debugSoundSuccess:"Testton erfolgreich eingestellt",debugSoundFailed:"Testton konnte nicht eingestellt werden",deleteDeviceSuccess:"Gerät erfolgreich gelöscht",deleteDeviceFailed:"Gerät konnte nicht gelöscht werden",adjustVolumeSuccess:"Lautstärke eingestellt auf",adjustVolumeFailed:"Lautstärke konnte nicht angepasst werden",batchAdjustSuccess:"Stapelweise Lautstärkeanpassung erfolgreich, insgesamt",batchAdjustFailed:"Stapelweise Lautstärkeanpassung fehlgeschlagen",volumeValidationError:"Lautstärke muss zwischen 1-63 liegen",selectDevicesFirst:"Bitte zuerst Geräte zur Lautstärkeanpassung auswählen",successfullyFetched:"Erfolgreich abgerufen",devicesUnit:"Geräte",deviceListFormatError:"Fehler im Datenformat der Geräteliste",fetchDeviceListFailed:"Geräteliste konnte nicht abgerufen werden",searchPlaceholder:"Gerätename oder Seriennummer suchen...",unknownError:"Unbekannter Fehler",listView:"Listenansicht",cardView:"Kartenansicht",scanDevices:"Scan Devices",deviceScan:"Device Scan",seed:"Device SEED",seedPlaceholder:"Enter 32-char hex SEED",scanButton:"Scan",scanning:"Scanning...",noDeviceFound:"No devices found",scanNotSupported:"Device scan only available in desktop client",autoIP:"Auto IP",warmMode:"Voice Prompt",mediaServer:"Media Server",mediaPort:"Media Port",gateway:"Gateway",subnetMask:"Subnet Mask",dns:"DNS",deviceIP:"Device IP",applyConfig:"Apply Config",clearDevice:"Clear Device",deviceConfigured:"Device config sent",deviceConfigureFailed:"Device config failed",deviceCleared:"Clear command sent",scanConfigTitle:"Device Network Config",scannedDevices:"Discovered Devices",scanHint:"Click scan to discover all devices on the local network",testComm:"Test Communication",testCommBtn:"Test",console:"Console",clearConsole:"Clear",consoleEmpty:"Waiting for communication...",invalidIP:"Invalid IP format",invalidMask:"Invalid subnet mask",invalidGateway:"Invalid gateway",invalidMediaIP:"Invalid media server IP",invalidPort:"Port range 1-65535",invalidDNS:"Invalid DNS format",dnsPlaceholder:"0.0.0.0 = System default",advanced:"Advanced",soundCard:"Sound Card",getAmixerStatus:"Get Status",amixerApply:"Apply",amixerGetting:"Getting...",amixerOn:"On",amixerOff:"Off",amixerDAC:"DAC Playback Volume",amixerHeadphoneVol:"Headphone Volume",amixerHeadphoneSwitch:"Headphone Switch",amixerHeadphoneRoute:"Headphone Source",amixerLineIn:"Line In Volume",amixerFMIn:"FM In Volume",amixerMicIn:"Mic In Volume",amixerMicBoost:"Mic Boost",amixerADCCapture:"ADC Capture Volume",amixerADCLeftFM:"Left FM Capture",amixerADCRightFM:"Right FM Capture",amixerADCLeftOut:"Left Out Capture",amixerADCRightOut:"Right Out Capture",amixerADCLineIn:"Line In Capture",amixerADCMic:"Mic Capture",amixerLeftFM:"Left FM",amixerLeftLeftDAC:"Left Left DAC",amixerLeftRightDAC:"Left Right DAC",amixerLeftLineIn:"Left Line In",amixerLeftMicIn:"Left Mic In",amixerRightFM:"Right FM",amixerRightLeftDAC:"Right Left DAC",amixerRightRightDAC:"Right Right DAC",amixerRightLineIn:"Right Line In",amixerRightMicIn:"Right Mic In",amixerGroupDecode:"Decode Output",amixerGroupCapture:"Capture Mixer Input",amixerGroupLeft:"Left Output Mixer",amixerGroupRight:"Right Output Mixer",amixerGroupGain:"Gain Config",amixerRouteDAC:"DAC",amixerRouteMixer:"Mixer",amixerGetSuccess:"Sound card status retrieved",amixerGetFailed:"Failed to get sound card status",amixerSetSuccess:"Setting sent",amixerSetFailed:"Setting failed"},groups:{title:"Gruppenverwaltung",list:"Gruppenliste",deviceCount:"Geräteanzahl",addGroup:"Gruppe hinzufügen",editGroup:"Gruppe bearbeiten",deleteGroup:"Gruppe löschen",groupName:"Gruppenname",manage:"Gruppenverwaltung",inputName:"Gruppennamen eingeben",add:"Gruppe hinzufügen",playMenu:"Wiedergabemenü",id:"ID",name:"Name",actions:"Aktionen",noGroups:"Keine Gruppen verfügbar",untitled:"Unbenannte Gruppe",editDevices:"Geräte bearbeiten",editVideo:"Video bearbeiten",previewVideo:"Videovorschau",groupPlay:"Gruppenwiedergabe",allDevices:"Alle Geräte",selectedDevices:"Ausgewählte Geräte",selectAtLeastOneDevice:"Bitte mindestens ein Gerät auswählen",videoUrl:"Video-URL",inputVideoUrl:"Bitte Video-URL eingeben",noVideoUrl:"Keine Video-URL festgelegt",noVideoUrlSet:"Mu38-Livestream-URL noch nicht festgelegt",playSequence:"Wiedergabereihenfolge",fileInterval:"Dateiabstand",playCount:"Wiedergabeanzahl",noPlayingItems:"Keine aktuell wiedergegebenen Sequenzen",playList:"Wiedergabeliste",nameRequired:"Gruppenname darf nicht leer sein",loadSuccess:"{count} Gruppen erfolgreich geladen",loadFailed:"Gruppenliste konnte nicht geladen werden",addSuccess:"Gruppe erfolgreich hinzugefügt",addFailed:"Gruppe konnte nicht hinzugefügt werden",deleteConfirm:"Dieser Vorgang löscht diese Gruppe dauerhaft. Fortfahren?",deleteSuccess:"Erfolgreich gelöscht",deleteFailed:"Löschen fehlgeschlagen",saveSuccess:"Erfolgreich gespeichert",saveFailed:"Speichern fehlgeschlagen",loadDevicesFailed:"Geräteliste konnte nicht geladen werden",invalidGroupId:"Ungültige Gruppen-ID",unknownDevice:"Unbekanntes Gerät",playFeatureComingSoon:"Gruppenwiedergabefunktion kommt bald",stopPlayFeatureComingSoon:"Stopp-Funktion kommt bald",playListFeatureComingSoon:"Wiedergabelistenfunktion kommt bald",searchDevicePlaceholder:"Gerätename oder ID zur Suche eingeben...",searchResult:"{filtered} Geräte gefunden (gesamt {total})",totalDevices:"Gesamt {count} Geräte",noSearchResult:"Keine passenden Geräte gefunden",noSelectedDevices:"Noch keine Geräte ausgewählt",searchFilePlaceholder:"Dateiname oder ID zur Suche eingeben...",availableFiles:"Verfügbare Dateien",selectedFiles:"Ausgewählte Dateien",noSelectedFiles:"Noch keine Dateien ausgewählt",doubleClickHint:"Doppelklick zum Hinzufügen doppelter Dateien",unknownFile:"Unbekannte Datei",playMode:"Wiedergabemodus",playMode1:"Sequentielle Wiedergabe 1x",playMode2:"Sequentielle Wiedergabe 2x",playMode3:"Sequentielle Wiedergabe 3x",totalDuration:"Geschätzte Dauer",durationFormula:"Berechnung: (Gesamtdauer + Intervall) × Wiederholungsanzahl",playModeHint:"Wiederholungsanzahl, 1-99",intervalMaxHint:"Maximales Intervall 3 Stunden (10800 Sekunden)",estimatedDuration:"Geschätzte Dauer",forceStopDuration:"Erzwungene Stopp-Dauer (Optional)",forceStopHint:"Automatischer Stopp bei dieser Dauer. Muss kürzer als die geschätzte Dauer sein. 0 bedeutet kein erzwungener Stopp",selectAtLeastOneFile:"Bitte mindestens eine Datei auswählen",loadFilesFailed:"Dateiliste konnte nicht geladen werden",groupHasNoDevices:"Diese Gruppe hat keine Geräte",playStarted:"Wiedergabe erfolgreich gestartet",playFailed:"Wiedergabe konnte nicht gestartet werden",invalidPlayId:"Ungültige Wiedergabe-ID",stopPlayConfirm:"Möchten Sie die Wiedergabe wirklich stoppen?",stopPlayInProgress:"Wiedergabe wird gestoppt, bitte warten...",stopPlaySuccess:"Wiedergabe erfolgreich gestoppt",stopPlaySuccessAndClosed:"Wiedergabe erfolgreich gestoppt, Wiedergabeliste geschlossen",stopPlayFailed:"Wiedergabe konnte nicht gestoppt werden",selectGroupForPlay:"Gruppe zur Wiedergabe auswählen",devices:"Geräte",devicesCount:"Geräte",startPlay:"Wiedergabe starten"},tasks:{title:"Geplante Aufgaben",titleDescription:"Verwalten Sie geplante Wiedergabeaufgaben mit Stapelverarbeitung und Aufgabengruppen",list:"Aufgabenliste",addTask:"Aufgabe hinzufügen",editTask:"Aufgabe bearbeiten",deleteTask:"Aufgabe löschen",taskName:"Aufgabenname",executeTime:"Ausführungszeit",playMode:"Wiedergabemodus",repeat:"Wiederholen",files:"Dateien",devices:"Geräte",allGroups:"Alle Aufgabengruppen",addTaskGroup:"Aufgabengruppe hinzufügen",deleteTaskGroup:"Aufgabengruppe löschen",disableTaskGroup:"Aufgabengruppe deaktivieren",enableTaskGroup:"Aufgabengruppe aktivieren",taskGroup:"Aufgabengruppe",taskGroupName:"Aufgabengruppenname",enterGroupName:"Aufgabengruppennamen eingeben",applyTaskGroup:"Aufgabengruppe anwenden",task:"Aufgabe",selectGroup:"Aufgabengruppe auswählen",startTime:"Startzeit",duration:"Dauer",loopCount:"Wiederholungsanzahl",startDate:"Startdatum",endDate:"Enddatum",changeGroup:"Gruppe wechseln",noGroup:"Keine Gruppe",tryPlay:"Testwiedergabe",batchDisable:"Stapelweise deaktivieren",batchEnable:"Stapelweise aktivieren",batchEditDevices:"Geräte stapelweise bearbeiten",batchEditFiles:"Dateien stapelweise bearbeiten",batchApplyGroup:"Gruppe stapelweise anwenden",batchEditTime:"Zeit stapelweise bearbeiten",batchEditLoopCount:"Wiederholungsanzahl stapelweise bearbeiten",batchEditDuration:"Dauer stapelweise bearbeiten",batchDelete:"Stapelweise löschen",batchCopy:"Stapelweise kopieren",noTasks:"Keine Aufgaben",selectedCount:"{count} Aufgaben ausgewählt",randomPlay:"Zufallswiedergabe",loopPlay:"{count} Mal wiederholen",selectDevices:"Geräte zur Wiedergabe auswählen",selectFiles:"Audiodateien auswählen",allDevices:"Alle Geräte",selectedDevices:"Ausgewählte Geräte",allFiles:"Alle Dateien",selectedFiles:"Ausgewählte Dateien",editTaskDevices:"Aufgabengeräte bearbeiten",editTaskFiles:"Aufgabendateien bearbeiten",taskDuration:"Aufgabendauer",intervalDuration:"Intervalldauer",timeRange:"Zeitraum",to:"bis",playCount:"Wiedergabeanzahl",sequentialPlay:"Sequentielle Wiedergabe",randomPlayMode:"Zufallswiedergabe",playModeChange:"Wiedergabemodus-Änderung",enableOtherLimit:"Weitere Einschränkungen nicht erforderlich",enableStartDate:"Startdatum aktivieren",enableEndDate:"Enddatum aktivieren",enterTaskName:"Aufgabennamen eingeben",noTasksSelected:"Keine Aufgaben ausgewählt",devicesRequired:"Keine Geräte ausgewählt",filesRequired:"Keine Audiodateien ausgewählt",saveSuccess:"Erfolgreich gespeichert",saveFailed:"Speichern fehlgeschlagen",deleteSuccess:"Erfolgreich gelöscht",deleteFailed:"Löschen fehlgeschlagen",deleteConfirm:"Dieser Vorgang löscht die Aufgabe dauerhaft. Fortfahren?",enableSuccess:"Aufgabe aktiviert",disableSuccess:"Aufgabe deaktiviert",startPlaySuccess:"Wiedergabe gestartet",startPlayFailed:"Wiedergabestart fehlgeschlagen",stopPlaySuccess:"Wiedergabe gestoppt",stopPlayFailed:"Wiedergabestopp fehlgeschlagen",groupNameRequired:"Aufgabengruppenname darf nicht leer sein",addGroupSuccess:"Aufgabengruppe erfolgreich hinzugefügt",addGroupFailed:"Aufgabengruppe konnte nicht hinzugefügt werden",deleteGroupSuccess:"Aufgabengruppe erfolgreich gelöscht",deleteGroupFailed:"Aufgabengruppe konnte nicht gelöscht werden",disableGroupSuccess:"Aufgabengruppe erfolgreich deaktiviert",disableGroupFailed:"Aufgabengruppe konnte nicht deaktiviert werden",enableGroupSuccess:"Aufgabengruppe erfolgreich aktiviert",enableGroupFailed:"Aufgabengruppe konnte nicht aktiviert werden",applyGroupSuccess:"Aufgabengruppe erfolgreich angewendet",applyGroupFailed:"Aufgabengruppe konnte nicht angewendet werden",selectGroupFirst:"Bitte zuerst eine Aufgabengruppe auswählen",batchDisableSuccess:"Stapelweise Deaktivierung erfolgreich",batchEnableSuccess:"Stapelweise Aktivierung erfolgreich",unknownDevice:"Unbekanntes Gerät",unknownFile:"Unbekannte Datei",calculate:"Berechnen",monday:"Montag",tuesday:"Dienstag",wednesday:"Mittwoch",thursday:"Donnerstag",friday:"Freitag",saturday:"Samstag",sunday:"Sonntag",index:"Index",weekdays:"Wiedergabetage",noLimit:"Unbegrenzt",autoCalc:"Automatisch berechnet",taskNameRequired:"Aufgabenname ist erforderlich",startTimeRequired:"Startzeit ist erforderlich",cannotDeletePlaying:"Aufgabe wird wiedergegeben, bitte zuerst stoppen",cannotDeleteEnabled:"Aufgabe ist aktiviert, bitte zuerst deaktivieren",cannotEditPlaying:"Aufgabe wird wiedergegeben, bitte zuerst stoppen",disabled:"Deaktiviert",enabled:"Aktiviert",enableTask:"Aktivieren",disableTask:"Deaktivieren",noSelectedFiles:"Noch keine Dateien ausgewählt",clickToAddHint:"Klicken Sie auf Dateien links zum Hinzufügen",estimatedDuration:"Geschätzte Dauer",advancedSettings:"Erweiterte Einstellungen",playSettings:"Wiedergabeeinstellungen",forceStopDuration:"Erzwungene Stopp-Dauer",forceStopHint:"Festgelegt, stoppt die Wiedergabe automatisch zu dieser Zeit. Muss kürzer als die geschätzte Dauer sein. 0 oder leer bedeutet kein erzwungener Stopp",durationRequired:"Zufallswiedergabe erfordert eine Dauer",durationFormula:"Berechnung: (Gesamtdauer + Intervall × Dateianzahl) × Wiederholungsanzahl",dateHint:"Hinweis: Wird am Startdatum und auch am Enddatum wiedergegeben. Wenn beide Daten gleich sind, wird nur an diesem Tag wiedergegeben. Startdatum darf nicht nach Enddatum liegen.",dateRangeError:"Startdatum darf nicht nach Enddatum liegen",batchDurationHint:"Bei sequentieller Wiedergabe: Wenn die Gesamtdauer der Wiedergabeliste > maximale Dauer ist, wird bei Erreichen der Dauer gestoppt; wenn die Gesamtdauer der Wiedergabeliste < maximale Dauer ist, wird nach Abschluss der Liste gestoppt",copyConfirm:"Möchten Sie die ausgewählten Aufgaben wirklich kopieren? Diese Aktion kann nicht rückgängig gemacht werden.",copySuccess:"Aufgaben erfolgreich kopiert",copyFailed:"Aufgaben konnten nicht kopiert werden",timeConflict:"Zeitkonflikt",dateRange:"Datumsbereich",endTime:"Endzeit",copyCount:"Kopienanzahl",copyNewName:"Standard-Neuname",copyNewNamePlaceholder:"Standardname für neue Aufgabe",copyInterval:"Zeitintervall",copyIntervalUnit:"Minuten",copyPreview:"Vorschauliste",deleteGroupConfirm:"Möchten Sie diese Aufgabengruppe wirklich löschen? Aufgaben in der Gruppe werden nicht gelöscht.",noTasksInGroup:"Keine Aufgaben in dieser Aufgabengruppe",batchPartialFailed:"{failed} Aufgabe(n) fehlgeschlagen"},media:{title:"Medienverwaltung",list:"Dateiliste",upload:"Hochladen",delete:"Löschen",play:"Abspielen",download:"Herunterladen",fileName:"Dateiname",fileSize:"Dateigröße",fileType:"Dateityp",uploadTime:"Upload-Zeit",duration:"Dauer",noFiles:"Noch keine Dateien",dropHint:"MP3-Dateien zum Hochladen hierher ziehen",dropSub:"Unterstützt MP3-Format, max. 40MB pro Datei",selectFiles:"Dateien auswählen",selectFolder:"Ordner auswählen",onlyMp3:"Nur MP3-Dateien werden unterstützt",fileTooLarge:"Datei überschreitet 40MB-Grenze",uploadFailed:"Upload fehlgeschlagen",uploadSuccess:"{count} Datei(en) erfolgreich hochgeladen",uploading:"Wird hochgeladen...",deleteSingleConfirm:"Möchten Sie wirklich löschen",deleteConfirm:"Ausgewählte Dateien löschen? Dies kann nicht rückgängig gemacht werden",deleteSuccess:"Erfolgreich gelöscht",deleteFailed:"Löschen fehlgeschlagen",batchDelete:"Stapelweise löschen",batchDeleteSuccess:"{count} Datei(en) erfolgreich gelöscht",selectedCount:"{count} Datei(en) ausgewählt",tts:"Text to Speech",ttsFileName:"File Name",ttsFileNamePlaceholder:"Enter file name",ttsVoice:"Voice",ttsSpeed:"Speed",ttsSpeedSlow:"Slow",ttsSpeedMedium:"Medium",ttsSpeedFast:"Fast",ttsText:"Text Input",ttsTextPlaceholder:"Enter text to convert",ttsTextTooShort:"Text must be at least 3 characters",ttsSuccess:"TTS file created",ttsFailed:"TTS generation failed",uploadDone:"Upload complete"},broadcast:{title:"Übertragungssteuerung",serverConfig:"Serverkonfiguration",selectDevices:"Geräte auswählen",quickSelectGroup:"Schnellauswahl Gruppe",selectAllOnline:"Alle Online auswählen",clearSelection:"Auswahl aufheben",selectedDevices:"{count} Gerät(e) ausgewählt",noDevices:"Keine Geräte verfügbar",noMatch:"Keine passenden Geräte",broadcastControl:"Übertragungssteuerung",playLevel:"Wiedergabepriorität",userLevel:"Benutzerebene",holdToTalk:"Halten zum Sprechen",releaseToStop:"Loslassen zum Stoppen",broadcasting:"Übertragung läuft...",connected:"Verbunden",notConnected:"Nicht verbunden",selectFiles:"Dateien auswählen",startBroadcast:"Übertragung starten",stopBroadcast:"Übertragung stoppen",playbackMode:"Wiedergabemodus",interval:"Intervall",loop:"Wiederholungsanzahl",audioSource:"Audioquelle",microphone:"Mikrofon",noAudioDevice:"Kein Audio-Eingabegerät erkannt",audioReady:"Audio bereit",inputVolume:"Eingangslautstärke",enableMicrophone:"Mikrofon verbinden",startPreview:"Vorschau starten"},alarm:{title:"Alarmsystem",settings:"Alarmeinstellungen",history:"Alarmhistorie",enable:"Aktivieren",disable:"Deaktivieren",triggerCondition:"Auslösebedingung",alarmFile:"Alarmdatei",linkage:"Verknüpftes Gerät",selectDevices:"Geräte auswählen",searchDevice:"Gerätename oder Seriennummer suchen",selectAllOnline:"Alle Online auswählen",clearSelection:"Auswahl löschen",selectedCount:"{count} Geräte ausgewählt",noDevices:"Keine Geräte",noMatch:"Keine passenden Geräte",alarmConfig:"Alarmkonfiguration",alarmName:"Alarmname",alarmNamePlaceholder:"Alarmnamen eingeben",audioSource:"Audioquelle",selectFile:"Hochgeladene Datei auswählen",inputUrl:"URL manuell eingeben",selectFilePlaceholder:"Audiodatei auswählen",urlPlaceholder:"Audio-URL eingeben",registerAlarm:"Alarm registrieren",registering:"Registrierung...",registerResult:"Registrierungsergebnis",registerSuccess:"Registrierung erfolgreich",registerFailed:"Registrierung fehlgeschlagen",noDevicesSelected:"Bitte mindestens ein Gerät auswählen",noAudioConfigured:"Bitte Audiodatei konfigurieren",online:"Online",offline:"Offline",deviceSn:"Geräte-Seriennummer",registeredList:"Registrierte Alarme",noRegistered:"Keine registrierten Alarme",loadListFailed:"Laden der Alarmliste fehlgeschlagen",deviceName:"Gerätename",fileName:"Dateiname",refreshList:"Liste aktualisieren",unregisterAlarm:"Abmelden",unregisterConfirm:"Möchten Sie diesen Alarm wirklich abmelden?",unregisterSuccess:"Abmeldung erfolgreich",unregisterFailed:"Abmeldung fehlgeschlagen",linkageTitle:"Alarmverknüpfung",linkageDesc:"Wenn Gerät A auslöst, spielen verknüpfte Geräte (einschließlich sich selbst) das angegebene Audio ab",linkagePlanName:"Planname",linkagePlanNamePlaceholder:"Plannamen eingeben",linkageDevices:"Verknüpfte Geräte",linkageDevicesHint:"Auslöser- und Wiedergabegeräte auswählen (kann das Auslösergerät selbst enthalten)",linkageAudio:"Audiodatei",addLinkagePlan:"Verknüpfungsplan hinzufügen",adding:"Wird hinzugefügt...",linkageList:"Verknüpfungsplan-Liste",noLinkagePlans:"Keine Verknüpfungspläne",linkageDeviceCount:"Geräteanzahl",addLinkageSuccess:"Verknüpfungsplan erfolgreich hinzugefügt",addLinkageFailed:"Verknüpfungsplan konnte nicht hinzugefügt werden",linkagePlanNameRequired:"Bitte Plannamen eingeben",linkageNoDevices:"Bitte mindestens ein Gerät auswählen",linkageNoAudio:"Bitte Audiodatei konfigurieren",linkageTriggerDevice:"Auslösergerät",linkageTriggerDeviceHint:"Wenn dieses Gerät einen Alarm auslöst, spielen verknüpfte Geräte Audio ab",linkageTriggerDevicePlaceholder:"Alarmauslösergerät auswählen",linkageNoTriggerDevice:"Bitte Auslösergerät auswählen",registerTrigger:"Registrieren",registerTriggerTitle:"Auslösergerät registrieren",registerTriggerSuccess:"Auslösergerät erfolgreich registriert",registerTriggerFailed:"Auslösergerät konnte nicht registriert werden",loadLinkageFailed:"Laden der Verknüpfungspläne fehlgeschlagen",deleteLinkageConfirm:"Möchten Sie den Verknüpfungsplan wirklich löschen",deleteLinkageFailed:"Löschen des Verknüpfungsplans fehlgeschlagen",forceUnregTitle:"Alarm zwangsweise abmelden",forceUnregHint:"Alle Alarmregistrierungen eines Geräts zwangsweise abmelden",forceUnregButton:"Alarm zwangsweise abmelden",forceUnregModalHint:"Gerät auswählen, um alle Alarme abzumelden (eigenständig + verknüpft)",forceUnregConfirm:"Abmeldung bestätigen",forceUnregSuccess:"Alarmzwangsabmeldung erfolgreich",forceUnregFailed:"Alarmzwangsabmeldung fehlgeschlagen"},account:{title:"Kontoverwaltung",profile:"Profil",changePassword:"Passwort ändern",subAccounts:"Unterkonten",logs:"Vorgangsprotokolle",username:"Benutzername",nickname:"Spitzname",email:"E-Mail",phone:"Telefon",role:"Rolle",level:"Ebene",addSubUser:"Unterkonto hinzufügen",usernamePlaceholder:"Benutzername eingeben",passwordPlaceholder:"Passwort eingeben",nicknamePlaceholder:"Spitznamen eingeben",beizhu:"Bemerkung",beizhuPlaceholder:"Bemerkung eingeben",password:"Passwort",levelLabel:"Ebene",levelPlaceholder:"Ebene auswählen",mask:"Berechtigungsmaske",maskPlaceholder:"40-Bit-Berechtigungsmaske (0/1)",maskDefault:"00000000000000000000000000000000000000000000",permissions:"Berechtigungseinstellungen",permCreateSub:"Kann Unterkonten erstellen",permManageDevice:"Kann Geräte hinzufügen/löschen",permUploadFile:"Kann Dateien hochladen",addSuccess:"Unterkonto erfolgreich hinzugefügt",addFailed:"Unterkonto konnte nicht hinzugefügt werden",listFailed:"Unterkontoliste konnte nicht abgerufen werden",noSubUsers:"Noch keine Unterkonten",createTime:"Erstellt am",status:"Status",statusNormal:"Normal",statusDisabled:"Deaktiviert",userLevel:"Benutzerebene",playLevel:"Wiedergabeebene",passwordShow:"Passwort",refreshList:"Liste aktualisieren",usernameRequired:"Bitte Benutzernamen eingeben",passwordRequired:"Bitte Passwort eingeben",permChangeFailed:"Berechtigungsänderung fehlgeschlagen",adding:"Wird hinzugefügt...",deleteConfirm:"Möchten Sie das Unterkonto {name} wirklich löschen? Dies kann nicht rückgängig gemacht werden!",deleteSuccess:"Unterkonto erfolgreich gelöscht",deleteFailed:"Unterkonto konnte nicht gelöscht werden",editDevices:"Geräte bearbeiten",editDevicesSuccess:"Geräte erfolgreich aktualisiert",editDevicesFailed:"Geräte konnten nicht aktualisiert werden",loadDevicesFailed:"Geräteliste konnte nicht geladen werden",searchDevice:"Gerät nach Name oder ID suchen",noDevices:"Keine Geräte",resetToken:"Token zurücksetzen",resetTokenConfirm:"Möchten Sie das Token von {name} wirklich zurücksetzen?",resetTokenSuccess:"Token erfolgreich zurückgesetzt",resetTokenFailed:"Token konnte nicht zurückgesetzt werden",newToken:"Neues Token"},admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"User & Permission Management",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully",btnEnable:"Enable",btnDisable:"Disable"},info:{title:"App Privacy Agreement",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Content too short, at least 3000 characters",saveSuccess:"Saved successfully",saveFailed:"Save failed"},upload:{title:"Avatar & Logo Upload",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Announcement Management",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scroll notice: ",noData:"No data",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"},billing:{title:"Billing Settings",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Device",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure to delete?"},gallery:{title:"Gallery Overview",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No gallery items",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"}},settings:{title:"Einstellungen",language:"Sprache",theme:"Design",darkMode:"Dunkler Modus",lightMode:"Heller Modus",diabloMode:"Diablo-Modus",notification:"Benachrichtigungen",sound:"Toneinstellungen",about:"Über",version:"Version"},language:{title:"Sprache auswählen",chinese:"简体中文",english:"English",korean:"한국어",thai:"ไทย",vietnamese:"Tiếng Việt",arabic:"العربية",malay:"Bahasa Melayu",japanese:"日本語",russian:"Русский",french:"Français",spanish:"Español",portuguese:"Português",german:"Deutsch",indonesian:"Bahasa Indonesia",hindi:"हिन्दी",turkish:"Türkçe",italian:"Italiano",polish:"Polski",swahili:"Kiswahili"},messages:{deleteConfirm:"Möchten Sie wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden!",saveSuccess:"Erfolgreich gespeichert",deleteSuccess:"Erfolgreich gelöscht",operationSuccess:"Vorgang erfolgreich",operationFailed:"Vorgang fehlgeschlagen, bitte erneut versuchen",networkError:"Netzwerkfehler, bitte Verbindung prüfen",serverError:"Serverfehler, bitte später erneut versuchen",noData:"Keine Daten verfügbar",loading:"Laden...",noPermission:"Keine Zugriffsberechtigung",tokenExpired:"Sitzung abgelaufen, bitte erneut anmelden",operationTimeout:"Vorgangszeitüberschreitung"}},"it-IT":{common:{appName:"Sistema di Trasmissione ST",loading:"Caricamento...",confirm:"Conferma",cancel:"Annulla",save:"Salva",delete:"Elimina",edit:"Modifica",add:"Aggiungi",search:"Cerca",refresh:"Aggiorna",submit:"Invia",reset:"Reimposta",logout:"Esci",logoutConfirm:"Sei sicuro di voler uscire?",logoutTitle:"Conferma uscita",back:"Indietro",success:"Operazione riuscita",error:"Errore",warning:"Avviso",info:"Informazione",yes:"Sì",no:"No",operation:"Operazione",status:"Stato",index:"Indice",name:"Nome",description:"Descrizione",createTime:"Data di creazione",updateTime:"Data di aggiornamento",close:"Chiudi",stop:"Ferma",toggle:"Abilita/Disabilita",actions:"Azioni",seconds:"secondi",minutes:"minuti",hours:"ore",moveUp:"Sposta su",moveDown:"Sposta giù",quick:"Rapido",unknown:"Sconosciuto",months:"mo",years:"yr",copy:"Copy"},login:{title:"Accesso",subtitle:"BROADCAST SYSTEM",username:"Nome utente",password:"Password",usernamePlaceholder:"Inserisci il nome utente",passwordPlaceholder:"Inserisci la password",rememberMe:"Ricordami",forgotPassword:"Password dimenticata?",loginButton:"Accedi",logging:"Accesso in corso...",loginSuccess:"Accesso effettuato",loginFailed:"Accesso fallito",usernameRequired:"Inserisci il nome utente",passwordRequired:"Inserisci la password",invalidCredentials:"Nome utente o password non validi"},clientLogin:{subtitle:"Edizione Client",hostPlaceholder:"Indirizzo server, es. 192.168.1.100:12080",hostHint:"Inserisci IP:porta del server, http:// è facoltativo",hostRequired:"Inserisci l'indirizzo del server"},dashboard:{title:"Cruscotto",welcome:"Bentornato",systemStatus:"Il sistema funziona normalmente",quickActions:"Azioni rapide",addDevice:"Aggiungi dispositivo",createGroup:"Crea gruppo",scheduleTask:"Pianifica attività",broadcastNow:"Trasmetti ora"},menu:{dashboard:"Cruscotto",devices:"Dispositivi",groups:"Gruppi",tasks:"Attività",media:"Media",broadcast:"Trasmissione",alarm:"Allarme",account:"Account",settings:"Impostazioni",apiTest:"Test API",home:"Home",mine:"Il mio account"},admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"User & Permission Management",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully",btnEnable:"Enable",btnDisable:"Disable"},info:{title:"App Privacy Agreement",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Content too short, at least 3000 characters",saveSuccess:"Saved successfully",saveFailed:"Save failed"},upload:{title:"Avatar & Logo Upload",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Announcement Management",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scroll notice: ",noData:"No data",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"},billing:{title:"Billing Settings",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Device",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure to delete?"},gallery:{title:"Gallery Overview",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No gallery items",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"}},settings:{title:"Impostazioni",language:"Lingua",theme:"Tema",darkMode:"Modalità scura",lightMode:"Modalità chiara",diabloMode:"Modalità Diablo",notification:"Notifiche",sound:"Impostazioni audio",about:"Informazioni",version:"Versione"},language:{title:"Seleziona lingua",chinese:"简体中文",english:"English",korean:"한국어",thai:"ไทย",vietnamese:"Tiếng Việt",arabic:"العربية",malay:"Bahasa Melayu",japanese:"日本語",russian:"Русский",french:"Français",spanish:"Español",portuguese:"Português",german:"Deutsch",indonesian:"Bahasa Indonesia",hindi:"हिन्दी",turkish:"Türkçe",italian:"Italiano",polish:"Polski",swahili:"Kiswahili"},alarm:{title:"Sistema di allarme",settings:"Impostazioni allarme",history:"Cronologia allarmi",enable:"Abilita",disable:"Disabilita",triggerCondition:"Condizione di attivazione",alarmFile:"File allarme",linkage:"Dispositivo collegato",selectDevices:"Seleziona dispositivi",searchDevice:"Cerca nome dispositivo o numero seriale",selectAllOnline:"Seleziona tutti online",clearSelection:"Cancella selezione",selectedCount:"{count} dispositivi selezionati",noDevices:"Nessun dispositivo",noMatch:"Nessun dispositivo corrispondente",alarmConfig:"Configurazione allarme",alarmName:"Nome allarme",alarmNamePlaceholder:"Inserisci nome allarme",audioSource:"Sorgente audio",selectFile:"Seleziona file caricato",inputUrl:"Inserisci URL manualmente",selectFilePlaceholder:"Seleziona file audio",urlPlaceholder:"Inserisci URL file audio",registerAlarm:"Registra allarme",registering:"Registrazione...",registerResult:"Risultato registrazione",registerSuccess:"Registrazione riuscita",registerFailed:"Registrazione fallita",noDevicesSelected:"Seleziona almeno un dispositivo",noAudioConfigured:"Configura un file audio",online:"Online",offline:"Offline",deviceSn:"Numero seriale dispositivo",registeredList:"Allarmi registrati",noRegistered:"Nessun allarme registrato",loadListFailed:"Caricamento lista allarmi fallito",deviceName:"Nome dispositivo",fileName:"Nome file",refreshList:"Aggiorna lista",unregisterAlarm:"Annulla registrazione",unregisterConfirm:"Sei sicuro di voler annullare la registrazione di questo allarme?",unregisterSuccess:"Registrazione annullata con successo",unregisterFailed:"Annullamento registrazione fallito",linkageTitle:"Collegamento allarme",linkageDesc:"Quando il dispositivo A si attiva, i dispositivi collegati (incluso se stesso) riproducono l'audio specificato",linkagePlanName:"Nome piano",linkagePlanNamePlaceholder:"Inserisci nome piano",linkageDevices:"Dispositivi collegati",linkageDevicesHint:"Seleziona dispositivi di attivazione e riproduzione (può includere il dispositivo attivatore stesso)",linkageAudio:"File audio",addLinkagePlan:"Aggiungi piano di collegamento",adding:"Aggiunta...",linkageList:"Lista piani di collegamento",noLinkagePlans:"Nessun piano di collegamento",linkageDeviceCount:"Numero dispositivi",addLinkageSuccess:"Piano di collegamento aggiunto con successo",addLinkageFailed:"Aggiunta piano di collegamento fallita",linkagePlanNameRequired:"Inserisci nome piano",linkageNoDevices:"Seleziona almeno un dispositivo",linkageNoAudio:"Configura un file audio",linkageTriggerDevice:"Dispositivo attivatore",linkageTriggerDeviceHint:"Quando questo dispositivo attiva un allarme, i dispositivi collegati riprodurranno l'audio",linkageTriggerDevicePlaceholder:"Seleziona dispositivo attivatore allarme",linkageNoTriggerDevice:"Seleziona un dispositivo attivatore",registerTrigger:"Registra",registerTriggerTitle:"Registra dispositivo attivatore",registerTriggerSuccess:"Dispositivo attivatore registrato con successo",registerTriggerFailed:"Registrazione dispositivo attivatore fallita",loadLinkageFailed:"Caricamento piani di collegamento fallito",deleteLinkageConfirm:"Sei sicuro di voler eliminare il piano di collegamento",deleteLinkageFailed:"Eliminazione piano di collegamento fallita",forceUnregTitle:"Forza annullamento allarme",forceUnregHint:"Forza annullamento di tutte le registrazioni allarme del dispositivo",forceUnregButton:"Forza annullamento allarme",forceUnregModalHint:"Seleziona un dispositivo per forzare l'annullamento di tutti gli allarmi (autonomo + collegamento)",forceUnregConfirm:"Conferma annullamento",forceUnregSuccess:"Annullamento forzato allarme riuscito",forceUnregFailed:"Annullamento forzato allarme fallito"},messages:{deleteConfirm:"Sei sicuro di voler eliminare? Questa azione non può essere annullata!",saveSuccess:"Salvataggio riuscito",deleteSuccess:"Eliminazione riuscita",operationSuccess:"Operazione riuscita",operationFailed:"Operazione fallita, riprova",networkError:"Errore di rete, verifica la connessione",serverError:"Errore del server, riprova più tardi",noData:"Nessun dato disponibile",loading:"Caricamento...",noPermission:"Nessun permesso di accesso",tokenExpired:"Sessione scaduta, accedi nuovamente",operationTimeout:"Operazione scaduta"},devices:{title:"Device Management",list:"Device List",online:"Online",offline:"Offline",playing:"Playing",volume:"Volume",adjustVolume:"Adjust Volume",addDevice:"Add Device",editDevice:"Edit Device",deleteDevice:"Delete Device",deviceName:"Device Name",serialNumber:"Serial Number",lastUpdate:"Last Update",refreshList:"Refresh Device List",batchVolume:"Batch Adjust Volume",noDevices:"No devices available, click Add Device in top right",unnamedDevice:"Unnamed Device",debugSound:"Debug Sound",changeVolume:"Change Volume",changeName:"Change Name",changeSerial:"Change Serial",id:"ID",volumeNotSet:"Not Set",neverOnline:"Never Online",expiredDisabled:"Expired Disabled",unknown:"Unknown",openDebugSound:"Open Debug Sound",closeDebugSound:"Close Debug Sound",unknownStatus:"Unknown Status",addDeviceTitle:"Add Device",deviceNameRequired:"Device Name",deviceSerialRequired:"Device Serial",deviceKeyRequired:"Device Key",deviceNamePlaceholder:"Enter device name",deviceSerialPlaceholder:"Enter device serial",deviceKeyPlaceholder:"Enter device registration key",deviceKeyHint:"Registration key is used to register device to system, equivalent to device password",fillTestData:"Fill Test Data",renameTitle:"Rename Device",newDeviceNamePlaceholder:"Enter new device name",debugSoundTitle:"Debug Sound",selectDebugSoundStatus:"Select debug sound status",editSerialTitle:"Edit Device Serial",currentSerial:"Current Serial",currentSerialPlaceholder:"Current device serial",newSerial:"New Serial",newSerialPlaceholder:"Enter 32-digit new serial",serialLengthHint:"Serial number length must be 32 digits",editDeviceTitle:"Edit Device",macAddress:"MAC Address",macAddressPlaceholder:"Enter MAC address",ipAddress:"IP Address",ipAddressPlaceholder:"Enter IP address",port:"Port",portPlaceholder:"Enter port number",adjustVolumeTitle:"Adjust Volume",volumeRange:"Range: 1-63",preciseSetting:"Precise Setting:",batchAdjustVolumeTitle:"Batch Adjust Volume",selectedDevices:"Selected Devices:",devicesCount:"devices",confirmAdjust:"Confirm Adjust",adding:"Adding...",saving:"Saving...",adjusting:"Adjusting...",confirmButton:"Confirm",cancelButton:"Cancel",deviceNameValidationError:"Please enter device name",deviceSerialValidationError:"Please enter device serial",deviceKeyValidationError:"Please enter device key",newDeviceNameValidationError:"Please enter device name",deviceSerialLengthError:"Please enter device serial",newSerialLengthError:"Serial number length must be 32 digits",debugSoundSelectError:"Please select open or close debug sound",confirmOperation:"Confirm Operation",confirmDelete:"Are you sure to delete device",deleteCannotUndo:"? This action cannot be undone!",addDeviceSuccess:"Device added successfully",addDeviceFailed:"Failed to add device",deviceRenameSuccess:"Device renamed successfully",deviceRenameFailed:"Failed to rename device",deviceEditSuccess:"Device edited successfully",deviceEditFailed:"Failed to edit device",deviceSerialEditSuccess:"Device serial edited successfully",deviceSerialEditFailed:"Failed to edit device serial",debugSoundSuccess:"Debug sound set successfully",debugSoundFailed:"Failed to set debug sound",deleteDeviceSuccess:"Device deleted successfully",deleteDeviceFailed:"Failed to delete device",adjustVolumeSuccess:"Volume set to",adjustVolumeFailed:"Failed to adjust volume",batchAdjustSuccess:"Batch adjust volume successful, total",batchAdjustFailed:"Failed to batch adjust volume",volumeValidationError:"Volume must be between 1-63",selectDevicesFirst:"Please select devices to adjust volume first",successfullyFetched:"Successfully fetched",devicesUnit:"devices",deviceListFormatError:"Device list data format error",fetchDeviceListFailed:"Failed to fetch device list",searchPlaceholder:"Cerca nome o numero seriale...",unknownError:"Unknown error",listView:"List View",cardView:"Card View",scanDevices:"Scan Devices",deviceScan:"Device Scan",seed:"Device SEED",seedPlaceholder:"Enter 32-char hex SEED",scanButton:"Scan",scanning:"Scanning...",noDeviceFound:"No devices found",scanNotSupported:"Device scan only available in desktop client",autoIP:"Auto IP",warmMode:"Voice Prompt",mediaServer:"Media Server",mediaPort:"Media Port",gateway:"Gateway",subnetMask:"Subnet Mask",dns:"DNS",deviceIP:"Device IP",applyConfig:"Apply Config",clearDevice:"Clear Device",deviceConfigured:"Device config sent",deviceConfigureFailed:"Device config failed",deviceCleared:"Clear command sent",scanConfigTitle:"Device Network Config",scannedDevices:"Discovered Devices",scanHint:"Click scan to discover all devices on the local network",testComm:"Test Communication",testCommBtn:"Test",console:"Console",clearConsole:"Clear",consoleEmpty:"Waiting for communication...",invalidIP:"Invalid IP format",invalidMask:"Invalid subnet mask",invalidGateway:"Invalid gateway",invalidMediaIP:"Invalid media server IP",invalidPort:"Port range 1-65535",invalidDNS:"Invalid DNS format",dnsPlaceholder:"0.0.0.0 = System default",advanced:"Advanced",soundCard:"Sound Card",getAmixerStatus:"Get Status",amixerApply:"Apply",amixerGetting:"Getting...",amixerOn:"On",amixerOff:"Off",amixerDAC:"DAC Playback Volume",amixerHeadphoneVol:"Headphone Volume",amixerHeadphoneSwitch:"Headphone Switch",amixerHeadphoneRoute:"Headphone Source",amixerLineIn:"Line In Volume",amixerFMIn:"FM In Volume",amixerMicIn:"Mic In Volume",amixerMicBoost:"Mic Boost",amixerADCCapture:"ADC Capture Volume",amixerADCLeftFM:"Left FM Capture",amixerADCRightFM:"Right FM Capture",amixerADCLeftOut:"Left Out Capture",amixerADCRightOut:"Right Out Capture",amixerADCLineIn:"Line In Capture",amixerADCMic:"Mic Capture",amixerLeftFM:"Left FM",amixerLeftLeftDAC:"Left Left DAC",amixerLeftRightDAC:"Left Right DAC",amixerLeftLineIn:"Left Line In",amixerLeftMicIn:"Left Mic In",amixerRightFM:"Right FM",amixerRightLeftDAC:"Right Left DAC",amixerRightRightDAC:"Right Right DAC",amixerRightLineIn:"Right Line In",amixerRightMicIn:"Right Mic In",amixerGroupDecode:"Decode Output",amixerGroupCapture:"Capture Mixer Input",amixerGroupLeft:"Left Output Mixer",amixerGroupRight:"Right Output Mixer",amixerGroupGain:"Gain Config",amixerRouteDAC:"DAC",amixerRouteMixer:"Mixer",amixerGetSuccess:"Sound card status retrieved",amixerGetFailed:"Failed to get sound card status",amixerSetSuccess:"Setting sent",amixerSetFailed:"Setting failed"},groups:{title:"Group Management",list:"Group List",deviceCount:"Device Count",addGroup:"Add Group",editGroup:"Edit Group",deleteGroup:"Delete Group",groupName:"Group Name",manage:"Group Management",inputName:"Input group name",add:"Add Group",playMenu:"Play Menu",id:"ID",name:"Name",actions:"Actions",noGroups:"No groups available",untitled:"Untitled Group",editDevices:"Edit Devices",editVideo:"Edit Video",previewVideo:"Preview Video",groupPlay:"Group Play",allDevices:"All Devices",selectedDevices:"Selected Devices",selectAtLeastOneDevice:"Please select at least one device",videoUrl:"Video URL",inputVideoUrl:"Please enter video URL",noVideoUrl:"No video URL set",noVideoUrlSet:"Mu38 live stream URL not set yet",playSequence:"Play Sequence",fileInterval:"File Interval",playCount:"Play Count",noPlayingItems:"No currently playing sequences",playList:"Play List",nameRequired:"Group name cannot be empty",loadSuccess:"Successfully loaded {count} groups",loadFailed:"Failed to load group list",addSuccess:"Group added successfully",addFailed:"Failed to add group",deleteConfirm:"This operation will permanently delete this group. Continue?",deleteSuccess:"Deleted successfully",deleteFailed:"Failed to delete",saveSuccess:"Saved successfully",saveFailed:"Failed to save",loadDevicesFailed:"Failed to load device list",invalidGroupId:"Invalid group ID",unknownDevice:"Unknown device",playFeatureComingSoon:"Group play feature coming soon",stopPlayFeatureComingSoon:"Stop play feature coming soon",playListFeatureComingSoon:"Play list feature coming soon",searchDevicePlaceholder:"Enter device name or ID to search...",searchResult:"Found {filtered} devices (total {total})",totalDevices:"Total {count} devices",noSearchResult:"No matching devices found",noSelectedDevices:"No devices selected yet",searchFilePlaceholder:"Enter file name or ID to search...",availableFiles:"Available Files",selectedFiles:"Selected Files",noSelectedFiles:"No files selected yet",doubleClickHint:"Double-click to add duplicate files",unknownFile:"Unknown file",playMode:"Play Mode",playMode1:"Sequential Play 1x",playMode2:"Sequential Play 2x",playMode3:"Sequential Play 3x",totalDuration:"Estimated Duration",durationFormula:"Calculation: (Total Duration + Interval) × Loop Count",playModeHint:"Loop count, 1-99",intervalMaxHint:"Maximum interval 3 hours (10800 seconds)",estimatedDuration:"Estimated Duration",forceStopDuration:"Force Stop Duration (Optional)",forceStopHint:"Auto-stop at this duration. Must be less than estimated duration. 0 means no force stop",selectAtLeastOneFile:"Please select at least one file",loadFilesFailed:"Failed to load file list",groupHasNoDevices:"This group has no devices",playStarted:"Play started successfully",playFailed:"Failed to start play",invalidPlayId:"Invalid play ID",stopPlayConfirm:"Are you sure you want to stop play?",stopPlayInProgress:"Stopping play, please wait...",stopPlaySuccess:"Play stopped successfully",stopPlaySuccessAndClosed:"Play stopped successfully, play list closed",stopPlayFailed:"Failed to stop play",selectGroupForPlay:"Select a group to play",devices:"devices",devicesCount:"devices",startPlay:"Start Play"},tasks:{title:"Scheduled Tasks",titleDescription:"Manage scheduled playback tasks with batch operations and task groups",list:"Task List",addTask:"Add Task",editTask:"Edit Task",deleteTask:"Delete Task",taskName:"Task Name",executeTime:"Execute Time",playMode:"Play Mode",repeat:"Repeat",files:"Files",devices:"Devices",allGroups:"All Task Groups",addTaskGroup:"Add Task Group",deleteTaskGroup:"Delete Task Group",disableTaskGroup:"Disable Task Group",enableTaskGroup:"Enable Task Group",taskGroup:"Task Group",taskGroupName:"Task Group Name",enterGroupName:"Enter task group name",applyTaskGroup:"Apply Task Group",task:"Task",selectGroup:"Select Task Group",startTime:"Start Time",duration:"Duration",loopCount:"Loop Count",startDate:"Start Date",endDate:"End Date",changeGroup:"Change Group",noGroup:"No Group",tryPlay:"Try Play",batchDisable:"Batch Disable",batchEnable:"Batch Enable",batchEditDevices:"Batch Edit Devices",batchEditFiles:"Batch Edit Files",batchApplyGroup:"Batch Apply Group",batchEditTime:"Batch Edit Time",batchEditLoopCount:"Batch Edit Loop Count",batchEditDuration:"Batch Edit Duration",batchDelete:"Batch Delete",batchCopy:"Batch Copy",noTasks:"No Tasks",selectedCount:"Selected {count} tasks",randomPlay:"Random Play",loopPlay:"Loop {count} times",selectDevices:"Select Devices to Play",selectFiles:"Select Audio Files",allDevices:"All Devices",selectedDevices:"Selected Devices",allFiles:"All Files",selectedFiles:"Selected Files",editTaskDevices:"Edit Task Devices",editTaskFiles:"Edit Task Files",taskDuration:"Task Duration",intervalDuration:"Interval Duration",timeRange:"Time Range",to:"to",playCount:"Play Count",sequentialPlay:"Sequential Play",randomPlayMode:"Random Play",playModeChange:"Play Mode Change",enableOtherLimit:"Other limits not required",enableStartDate:"Enable Start Date",enableEndDate:"Enable End Date",enterTaskName:"Enter task name",noTasksSelected:"No tasks selected",devicesRequired:"No devices selected",filesRequired:"No audio files selected",saveSuccess:"Save successful",saveFailed:"Save failed",deleteSuccess:"Delete successful",deleteFailed:"Delete failed",deleteConfirm:"This operation will permanently delete the task. Continue?",enableSuccess:"Task enabled",disableSuccess:"Task disabled",startPlaySuccess:"Play started",startPlayFailed:"Play start failed",stopPlaySuccess:"Play stopped",stopPlayFailed:"Play stop failed",groupNameRequired:"Task group name cannot be empty",addGroupSuccess:"Task group added successfully",addGroupFailed:"Failed to add task group",deleteGroupSuccess:"Task group deleted successfully",deleteGroupFailed:"Failed to delete task group",disableGroupSuccess:"Task group disabled successfully",disableGroupFailed:"Failed to disable task group",enableGroupSuccess:"Task group enabled successfully",enableGroupFailed:"Failed to enable task group",applyGroupSuccess:"Task group applied successfully",applyGroupFailed:"Failed to apply task group",selectGroupFirst:"Please select a task group first",batchDisableSuccess:"Batch disable successful",batchEnableSuccess:"Batch enable successful",unknownDevice:"Unknown Device",unknownFile:"Unknown File",calculate:"Calculate",monday:"Lunedì",tuesday:"Martedì",wednesday:"Mercoledì",thursday:"Giovedì",friday:"Venerdì",saturday:"Sabato",sunday:"Domenica",index:"Index",weekdays:"Play Days",noLimit:"Illimitato",autoCalc:"Auto-calculated",taskNameRequired:"Task name is required",startTimeRequired:"Start time is required",cannotDeletePlaying:"Task is playing, please stop first",cannotDeleteEnabled:"Task is enabled, please disable first",cannotEditPlaying:"Task is playing, please stop first",disabled:"Disabled",enabled:"Enabled",enableTask:"Enable",disableTask:"Disable",noSelectedFiles:"No files selected yet",clickToAddHint:"Click files on the left to add",estimatedDuration:"Estimated Duration",advancedSettings:"Advanced Settings",playSettings:"Play Settings",forceStopDuration:"Force Stop Duration",forceStopHint:"If set, playback auto-stops at this time. Must be less than estimated duration. 0 or empty means no force stop",durationRequired:"Random play requires a duration",durationFormula:"Calculation: (Total Duration + Interval × File Count) × Loop Count",dateHint:"Note: Plays on the start date and also on the end date. If both dates are the same, plays only on that day. Start date cannot be later than end date.",dateRangeError:"Start date cannot be later than end date",batchDurationHint:"For sequential play: if playlist total duration > max duration, it stops when duration is reached; if playlist total duration < max duration, it stops when playlist finishes",copyConfirm:"Are you sure you want to copy the selected tasks? This action cannot be undone.",copySuccess:"Tasks copied successfully",copyFailed:"Failed to copy tasks",timeConflict:"Time Conflict",dateRange:"Date Range",endTime:"End Time",copyCount:"Copy Count",copyNewName:"Default New Name",copyNewNamePlaceholder:"Default new task name",copyInterval:"Time Interval",copyIntervalUnit:"minutes",copyPreview:"Preview List",deleteGroupConfirm:"Are you sure you want to delete this task group? Tasks in the group will not be deleted.",noTasksInGroup:"No tasks in this task group",batchPartialFailed:"{failed} task(s) operation failed"},media:{title:"Media Management",list:"File List",upload:"Upload",delete:"Delete",play:"Play",download:"Download",fileName:"File Name",fileSize:"File Size",fileType:"File Type",uploadTime:"Upload Time",duration:"Duration",noFiles:"No files yet",dropHint:"Drag & drop MP3 files here to upload",dropSub:"Supports MP3 format, max 40MB per file",selectFiles:"Select Files",selectFolder:"Select Folder",onlyMp3:"Only MP3 files are supported",fileTooLarge:"File exceeds 40MB limit",uploadFailed:"Upload failed",uploadSuccess:"Successfully uploaded {count} file(s)",uploadDone:"Upload complete",uploading:"Uploading...",deleteSingleConfirm:"Are you sure you want to delete",deleteConfirm:"Delete selected files? This cannot be undone",deleteSuccess:"Deleted successfully",deleteFailed:"Delete failed",batchDelete:"Batch Delete",batchDeleteSuccess:"Successfully deleted {count} file(s)",selectedCount:"{count} file(s) selected",tts:"Text to Speech",ttsFileName:"File Name",ttsFileNamePlaceholder:"Enter file name to save",ttsVoice:"Voice",ttsSpeed:"Speed",ttsSpeedSlow:"Slow",ttsSpeedMedium:"Medium",ttsSpeedFast:"Fast",ttsText:"Text Input",ttsTextPlaceholder:"Enter text to convert to speech",ttsTextTooShort:"Text must be at least 3 characters",ttsSuccess:"TTS file created successfully",ttsFailed:"TTS generation failed"},broadcast:{title:"Broadcast Control",serverConfig:"Server Configuration",selectDevices:"Select Devices",quickSelectGroup:"Quick Select Group",selectAllOnline:"Select All Online",clearSelection:"Clear Selection",selectedDevices:"{count} device(s) selected",noDevices:"No devices available",noMatch:"No matching devices",broadcastControl:"Broadcast Control",playLevel:"Play Priority",userLevel:"User Level",holdToTalk:"Hold to Talk",releaseToStop:"Release to Stop",broadcasting:"Broadcasting...",connected:"Connected",notConnected:"Not Connected",selectFiles:"Select Files",startBroadcast:"Start Broadcast",stopBroadcast:"Stop Broadcast",playbackMode:"Playback Mode",interval:"Interval",loop:"Loop Count",audioSource:"Audio Source",microphone:"Microphone",noAudioDevice:"No audio input device detected",audioReady:"Audio Ready",inputVolume:"Input Volume",enableMicrophone:"Connect Microphone",startPreview:"Start Preview"},account:{title:"Account Management",profile:"Profile",changePassword:"Change Password",subAccounts:"Sub Accounts",logs:"Operation Logs",username:"Username",nickname:"Nickname",email:"Email",phone:"Phone",role:"Role",level:"Level",addSubUser:"Add Sub Account",usernamePlaceholder:"Enter username",passwordPlaceholder:"Enter password",nicknamePlaceholder:"Enter nickname",beizhu:"Remark",beizhuPlaceholder:"Enter remark",password:"Password",levelLabel:"Level",levelPlaceholder:"Select level",mask:"Permission Mask",maskPlaceholder:"40-bit permission mask (0/1)",maskDefault:"00000000000000000000000000000000000000000000",permissions:"Permission Settings",permCreateSub:"Can create sub accounts",permManageDevice:"Can add/delete devices",permUploadFile:"Can upload files",addSuccess:"Sub account added successfully",addFailed:"Failed to add sub account",listFailed:"Failed to get sub account list",noSubUsers:"No sub accounts yet",createTime:"Create Time",status:"Status",statusNormal:"Normal",statusDisabled:"Disabled",userLevel:"User Level",playLevel:"Play Level",passwordShow:"Password",refreshList:"Refresh List",usernameRequired:"Please enter username",passwordRequired:"Please enter password",permChangeFailed:"Permission change failed",adding:"Adding...",deleteConfirm:"Are you sure to delete sub account {name}? This cannot be undone!",deleteSuccess:"Sub account deleted successfully",deleteFailed:"Failed to delete sub account",editDevices:"Edit Devices",editDevicesSuccess:"Devices updated successfully",editDevicesFailed:"Failed to update devices",loadDevicesFailed:"Failed to load device list",searchDevice:"Search device name or ID",noDevices:"No devices",resetToken:"Reset Token",resetTokenConfirm:"Are you sure to reset token for {name}?",resetTokenSuccess:"Token reset successfully",resetTokenFailed:"Token reset failed",newToken:"New Token"}},"th-TH":{common:{appName:"ระบบกระจายเสียง ST",loading:"กำลังโหลด...",confirm:"ยืนยัน",cancel:"ยกเลิก",save:"บันทึก",delete:"ลบ",edit:"แก้ไข",add:"เพิ่ม",search:"ค้นหา",refresh:"รีเฟรช",submit:"ส่ง",reset:"รีเซ็ต",logout:"ออกจากระบบ",logoutConfirm:"คุณแน่ใจหรือไม่ว่าต้องการออกจากระบบ?",logoutTitle:"ยืนยันการออกจากระบบ",back:"ย้อนกลับ",success:"สำเร็จ",error:"ข้อผิดพลาด",warning:"คำเตือน",info:"ข้อมูล",yes:"ใช่",no:"ไม่",operation:"การดำเนินการ",status:"สถานะ",name:"ชื่อ",description:"คำอธิบาย",createTime:"เวลาสร้าง",updateTime:"เวลาอัปเดต",close:"ปิด",stop:"หยุด",actions:"การดำเนินการ",seconds:"วินาที",minutes:"นาที",hours:"ชั่วโมง",moveUp:"เลื่นขึ้น",moveDown:"เลื่นลง",quick:"ด่วน",unknown:"ไม่รู้จัก",months:"mo",years:"yr",copy:"Copy",index:"Index",toggle:"Enable/Disable"},login:{title:"เข้าสู่ระบบ",subtitle:"ระบบกระจายเสียง",username:"ชื่อผู้ใช้",password:"รหัสผ่าน",usernamePlaceholder:"กรอกชื่อผู้ใช้",passwordPlaceholder:"กรอกรหัสผ่าน",rememberMe:"จดจำฉัน",forgotPassword:"ลืมรหัสผ่าน?",loginButton:"เข้าสู่ระบบ Login",logging:"กำลังเข้าสู่ระบบ...",loginSuccess:"เข้าสู่ระบบสำเร็จ",loginFailed:"เข้าสู่ระบบไม่สำเร็จ",usernameRequired:"กรุณากรอกชื่อผู้ใช้",passwordRequired:"กรุณากรอกรหัสผ่าน",invalidCredentials:"ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง"},dashboard:{title:"แดชบอร์ด",welcome:"ยินดีต้อนรับ",systemStatus:"ระบบทำงานปกติ",quickActions:"การกระทำด่วน",addDevice:"เพิ่มอุปกรณ์",createGroup:"สร้างกลุ่ม",scheduleTask:"ตั้งเวลางาน",broadcastNow:"กระจายเสียงทันที"},menu:{dashboard:"แดชบอร์ด",devices:"จัดการอุปกรณ์",groups:"จัดการกลุ่ม",tasks:"งานตามกำหนดเวลา",media:"จัดการสื่อ",broadcast:"ควบคุมกระจาย",alarm:"ระบบแจ้งเตือน",account:"จัดการบัญชี",settings:"การตั้งค่า",apiTest:"ทดสอบ API",home:"หน้าแรก",mine:"บัญชีของฉัน",admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"User & Permission Management",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully"},info:{title:"App Privacy Agreement",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Content too short, at least 3000 characters",saveSuccess:"Saved successfully",saveFailed:"Save failed"},upload:{title:"Avatar & Logo Upload",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Announcement Management",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scroll notice: ",noData:"No data",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"},billing:{title:"Billing Settings",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Device",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure to delete?"},gallery:{title:"Gallery Overview",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No gallery items",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"}}},devices:{title:"จัดการอุปกรณ์",list:"รายการอุปกรณ์",online:"ออนไลน์",offline:"ออฟไลน์",playing:"กำลังเล่น",volume:"ระดับเสียง",adjustVolume:"ปรับระดับเสียง",addDevice:"เพิ่มอุปกรณ์",editDevice:"แก้ไขอุปกรณ์",deleteDevice:"ลบอุปกรณ์",deviceName:"ชื่ออุปกรณ์",serialNumber:"หมายเลขซีเรียล",lastUpdate:"อัปเดตล่าสุด",refreshList:"รีเฟรชรายการอุปกรณ์",batchVolume:"ปรับระดับเสียงแบบกลุ่ม",noDevices:"ไม่มีอุปกรณ์ คลิกเพิ่มอุปกรณ์ที่มุมซ้ายบน",unnamedDevice:"อุปกรณ์ไม่มีชื่อ",debugSound:"เสียงดีบัก",changeVolume:"เปลี่ยนระดับเสียง",changeName:"เปลี่ยนชื่อ",changeSerial:"เปลี่ยนหมายเลขซีเรียล",id:"ID",volumeNotSet:"ไม่ได้ตั้งค่า",neverOnline:"ไม่เคยออนไลน์",expiredDisabled:"หมดอายุถูกปิดใช้งาน",unknown:"ไม่รู้จัก",openDebugSound:"เปิดเสียงดีบัก",closeDebugSound:"ปิดเสียงดีบัก",unknownStatus:"สถานะไม่รู้จัก",addDeviceTitle:"เพิ่มอุปกรณ์",deviceNameRequired:"ชื่ออุปกรณ์",deviceSerialRequired:"หมายเลขซีเรียล",deviceKeyRequired:"คีย์อุปกรณ์",deviceNamePlaceholder:"ป้อนชื่ออุปกรณ์",deviceSerialPlaceholder:"ป้อนหมายเลขซีเรียล",deviceKeyPlaceholder:"ป้อนคีย์ลงทะเบียนอุปกรณ์",deviceKeyHint:"คีย์ลงทะเบียนใช้สำหรับลงทะเบียนอุปกรณ์ในระบบ เทียบเท่ากับรหัสผ่านของอุปกรณ์",fillTestData:"กรอกข้อมูลทดสอบ",renameTitle:"เปลี่ยนชื่ออุปกรณ์",newDeviceNamePlaceholder:"ป้อนชื่ออุปกรณ์ใหม่",debugSoundTitle:"เสียงดีบัก",selectDebugSoundStatus:"เลือกสถานะเสียงดีบัก",editSerialTitle:"แก้ไขหมายเลขซีเรียล",currentSerial:"หมายเลขซีเรียลปัจจุบัน",currentSerialPlaceholder:"หมายเลขซีเรียลอุปกรณ์ปัจจุบัน",newSerial:"หมายเลขซีเรียลใหม่",newSerialPlaceholder:"ป้อนหมายเลขซีเรียลใหม่ 32 หลัก",serialLengthHint:"ความยาวหมายเลขซีเรียลต้องเป็น 32 หลัก",editDeviceTitle:"แก้ไขอุปกรณ์",macAddress:"ที่อยู่ MAC",macAddressPlaceholder:"ป้อนที่อยู่ MAC",ipAddress:"ที่อยู่ IP",ipAddressPlaceholder:"ป้อนที่อยู่ IP",port:"พอร์ต",portPlaceholder:"ป้อนหมายเลขพอร์ต",adjustVolumeTitle:"ปรับระดับเสียง",volumeRange:"ช่วง: 1-63",preciseSetting:"การตั้งค่าที่แม่นยำ:",batchAdjustVolumeTitle:"ปรับระดับเสียงแบบกลุ่ม",selectedDevices:"อุปกรณ์ที่เลือก:",devicesCount:"เครื่อง",confirmAdjust:"ยืนยันการปรับ",adding:"กำลังเพิ่ม...",saving:"กำลังบันทึก...",adjusting:"กำลังปรับ...",confirmButton:"ยืนยัน",cancelButton:"ยกเลิก",deviceNameValidationError:"โปรดป้อนชื่ออุปกรณ์",deviceSerialValidationError:"โปรดป้อนหมายเลขซีเรียล",deviceKeyValidationError:"โปรดป้อนคีย์อุปกรณ์",newDeviceNameValidationError:"โปรดป้อนชื่ออุปกรณ์",deviceSerialLengthError:"โปรดป้อนหมายเลขซีเรียล",newSerialLengthError:"ความยาวหมายเลขซีเรียลต้องเป็น 32 หลัก",debugSoundSelectError:"โปรดเลือกเปิดหรือปิดเสียงดีบัก",confirmOperation:"ยืนยันการดำเนินการ",confirmDelete:"คุณแน่ใจหรือไม่ที่จะลบอุปกรณ์",deleteCannotUndo:"? การกระทำนี้ไม่สามารถยกเลิกได้!",addDeviceSuccess:"เพิ่มอุปกรณ์สำเร็จ",addDeviceFailed:"ไม่สามารถเพิ่มอุปกรณ์",deviceRenameSuccess:"เปลี่ยนชื่ออุปกรณ์สำเร็จ",deviceRenameFailed:"ไม่สามารถเปลี่ยนชื่ออุปกรณ์",deviceEditSuccess:"แก้ไขอุปกรณ์สำเร็จ",deviceEditFailed:"ไม่สามารถแก้ไขอุปกรณ์",deviceSerialEditSuccess:"แก้ไขหมายเลขซีเรียลสำเร็จ",deviceSerialEditFailed:"ไม่สามารถแก้ไขหมายเลขซีเรียล",debugSoundSuccess:"ตั้งค่าเสียงดีบักสำเร็จ",debugSoundFailed:"ไม่สามารถตั้งค่าเสียงดีบัก",deleteDeviceSuccess:"ลบอุปกรณ์สำเร็จ",deleteDeviceFailed:"ไม่สามารถลบอุปกรณ์",adjustVolumeSuccess:"ระดับเสียงถูกตั้งเป็น",adjustVolumeFailed:"ไม่สามารถปรับระดับเสียง",batchAdjustSuccess:"ปรับระดับเสียงแบบกลุ่มสำเร็จ ทั้งหมด",batchAdjustFailed:"ไม่สามารถปรับระดับเสียงแบบกลุ่ม",volumeValidationError:"ระดับเสียงต้องอยู่ระหว่าง 1-63",selectDevicesFirst:"โปรดเลือกอุปกรณ์ที่จะปรับระดับเสียงก่อน",successfullyFetched:"ดึงข้อมูลสำเร็จ",devicesUnit:"อุปกรณ์",deviceListFormatError:"รูปแบบข้อมูลรายการอุปกรณ์ผิดพลาด",fetchDeviceListFailed:"ไม่สามารถดึงข้อมูลรายการอุปกรณ์",searchPlaceholder:"ค้นหาชื่ออุปกรณ์หรือหมายเลขซีเรียล...",unknownError:"ข้อผิดพลาดที่ไม่รู้จัก",listView:"มุมมองรายการ",cardView:"มุมมองการ์ด",scanDevices:"Scan Devices",deviceScan:"Device Scan",seed:"Device SEED",seedPlaceholder:"Enter 32-char hex SEED",scanButton:"Scan",scanning:"Scanning...",noDeviceFound:"No devices found",scanNotSupported:"Device scan only available in desktop client",autoIP:"Auto IP",warmMode:"Voice Prompt",mediaServer:"Media Server",mediaPort:"Media Port",gateway:"Gateway",subnetMask:"Subnet Mask",dns:"DNS",deviceIP:"Device IP",applyConfig:"Apply Config",clearDevice:"Clear Device",deviceConfigured:"Device config sent",deviceConfigureFailed:"Device config failed",deviceCleared:"Clear command sent",scanConfigTitle:"Device Network Config",scannedDevices:"Discovered Devices",scanHint:"Click scan to discover all devices on the local network",testComm:"Test Communication",testCommBtn:"Test",console:"Console",clearConsole:"Clear",consoleEmpty:"Waiting for communication...",invalidIP:"Invalid IP format",invalidMask:"Invalid subnet mask",invalidGateway:"Invalid gateway",invalidMediaIP:"Invalid media server IP",invalidPort:"Port range 1-65535",invalidDNS:"Invalid DNS format",dnsPlaceholder:"0.0.0.0 = System default",advanced:"Advanced",soundCard:"Sound Card",getAmixerStatus:"Get Status",amixerApply:"Apply",amixerGetting:"Getting...",amixerOn:"On",amixerOff:"Off",amixerDAC:"DAC Playback Volume",amixerHeadphoneVol:"Headphone Volume",amixerHeadphoneSwitch:"Headphone Switch",amixerHeadphoneRoute:"Headphone Source",amixerLineIn:"Line In Volume",amixerFMIn:"FM In Volume",amixerMicIn:"Mic In Volume",amixerMicBoost:"Mic Boost",amixerADCCapture:"ADC Capture Volume",amixerADCLeftFM:"Left FM Capture",amixerADCRightFM:"Right FM Capture",amixerADCLeftOut:"Left Out Capture",amixerADCRightOut:"Right Out Capture",amixerADCLineIn:"Line In Capture",amixerADCMic:"Mic Capture",amixerLeftFM:"Left FM",amixerLeftLeftDAC:"Left Left DAC",amixerLeftRightDAC:"Left Right DAC",amixerLeftLineIn:"Left Line In",amixerLeftMicIn:"Left Mic In",amixerRightFM:"Right FM",amixerRightLeftDAC:"Right Left DAC",amixerRightRightDAC:"Right Right DAC",amixerRightLineIn:"Right Line In",amixerRightMicIn:"Right Mic In",amixerGroupDecode:"Decode Output",amixerGroupCapture:"Capture Mixer Input",amixerGroupLeft:"Left Output Mixer",amixerGroupRight:"Right Output Mixer",amixerGroupGain:"Gain Config",amixerRouteDAC:"DAC",amixerRouteMixer:"Mixer",amixerGetSuccess:"Sound card status retrieved",amixerGetFailed:"Failed to get sound card status",amixerSetSuccess:"Setting sent",amixerSetFailed:"Setting failed"},groups:{title:"จัดการกลุ่ม",manage:"จัดการกลุ่ม",list:"รายการกลุ่ม",deviceCount:"จำนวนอุปกรณ์",addGroup:"เพิ่มกลุ่ม",editGroup:"แก้ไขกลุ่ม",deleteGroup:"ลบกลุ่ม",groupName:"ชื่อกลุ่ม",inputName:"ป้อนชื่อกลุ่ม",add:"เพิ่มกลุ่ม",playMenu:"เมนูเล่น",id:"ID",name:"ชื่อ",actions:"การดำเนินการ",noGroups:"ไม่มีกลุ่ม",untitled:"กลุ่มไม่มีชื่อ",editDevices:"แก้ไขอุปกรณ์",editVideo:"แก้ไขวิดีโอ",previewVideo:"ดูตัวอย่างวิดีโอ",groupPlay:"เล่นกลุ่ม",allDevices:"อุปกรณ์ทั้งหมด",selectedDevices:"อุปกรณ์ที่เลือก",selectAtLeastOneDevice:"โปรดเลือกอุปกรณ์อย่างน้อยหนึ่งเครื่อง",videoUrl:"URL วิดีโอ",inputVideoUrl:"โปรดป้อน URL วิดีโอ",noVideoUrl:"ไม่ได้ตั้งค่า URL วิดีโอ",noVideoUrlSet:"ยังไม่ได้ตั้งค่า URL สตรีม mu38u",playSequence:"ลำดับการเล่น",fileInterval:"ช่วงเวลาไฟล์",playCount:"จำนวนการเล่น",noPlayingItems:"ไม่มีรายการที่กำลังเล่น",playList:"รายการเล่น",nameRequired:"ชื่อกลุ่มต้องไม่ว่างเปล่า",loadSuccess:"โหลด {count} กลุ่มสำเร็จ",loadFailed:"โหลดรายการกลุ่มไม่สำเร็จ",addSuccess:"เพิ่มกลุ่มสำเร็จ",addFailed:"เพิ่มกลุ่มไม่สำเร็จ",deleteConfirm:"การดำเนินการนี้จะลบกลุ่มนี้ถาวร ดำเนินการต่อหรือไม่?",deleteSuccess:"ลบสำเร็จ",deleteFailed:"ลบไม่สำเร็จ",saveSuccess:"บันทึกสำเร็จ",saveFailed:"บันทึกไม่สำเร็จ",loadDevicesFailed:"โหลดรายการอุปกรณ์ไม่สำเร็จ",invalidGroupId:"ID กลุ่มไม่ถูกต้อง",unknownDevice:"อุปกรณ์ที่ไม่รู้จัก",playFeatureComingSoon:"ฟีเจอร์เล่นกลุ่มเร็วๆ นี้",stopPlayFeatureComingSoon:"ฟีเจอร์หยุดเล่นเร็วๆ นี้",playListFeatureComingSoon:"ฟีเจอร์รายการเล่นเร็วๆ นี้",searchDevicePlaceholder:"ป้อนชื่อหรือ ID อุปกรณ์เพื่อค้นหา...",searchResult:"พบ {filtered} อุปกรณ์ (ทั้งหมด {total})",totalDevices:"ทั้งหมด {count} อุปกรณ์",noSearchResult:"ไม่พบอุปกรณ์ที่ตรงกัน",noSelectedDevices:"ยังไม่ได้เลือกอุปกรณ์",searchFilePlaceholder:"ป้อนชื่อหรือ ID ไฟล์เพื่อค้นหา...",availableFiles:"ไฟล์ที่มี",selectedFiles:"ไฟล์ที่เลือก",noSelectedFiles:"ยังไม่ได้เลือกไฟล์",doubleClickHint:"ดับเบิ้ลคลิกเพื่อเพิ่มไฟล์ซ้ำ",unknownFile:"ไฟล์ที่ไม่รู้จัก",playMode:"โหมดเล่น",playMode1:"เล่นตามลำดับ 1 ครั้ง",playMode2:"เล่นตามลำดับ 2 ครั้ง",playMode3:"เล่นตามลำดับ 3 ครั้ง",totalDuration:"ระยะเวลาโดยประมาณ",durationFormula:"การคำนวณ: (ระยะเวลาทั้งหมด + ช่วงเวลา) × จำนวนรอบ",playModeHint:"จำนวนรอบ, 1-99",intervalMaxHint:"ช่วงเวลาสูงสุด 3 ชั่วโมง (10800 วินาที)",estimatedDuration:"ระยะเวลาโดยประมาณ",forceStopDuration:"ระยะเวลาหยุดบังคับ (ไม่จำเป็น)",forceStopHint:"หยุดอัตโนมัติเมื่อถึงระยะเวลานี้ ต้องน้อยกว่าระยะเวลาโดยประมาณ 0 หมายถึงไม่หยุดบังคับ",selectAtLeastOneFile:"โปรดเลือกไฟล์อย่างน้อยหนึ่งไฟล์",loadFilesFailed:"โหลดรายการไฟล์ไม่สำเร็จ",groupHasNoDevices:"กลุ่มนี้ไม่มีอุปกรณ์",playStarted:"เริ่มเล่นสำเร็จ",playFailed:"เริ่มเล่นไม่สำเร็จ",invalidPlayId:"ID เล่นไม่ถูกต้อง",stopPlayConfirm:"แน่ใจหรือไม่ที่จะหยุดเล่น?",stopPlayInProgress:"กำลังหยุดเล่น กรุณารอสักครู่...",stopPlaySuccess:"หยุดเล่นสำเร็จ",stopPlaySuccessAndClosed:"หยุดเล่นสำเร็จ รายการเล่นถูกปิดแล้ว",stopPlayFailed:"หยุดเล่นไม่สำเร็จ",selectGroupForPlay:"เลือกกลุ่มเพื่อเล่น",devices:"อุปกรณ์",devicesCount:"อุปกรณ์",startPlay:"เริ่มเล่น"},tasks:{title:"งานตามกำหนดเวลา",list:"รายการงาน",addTask:"เพิ่มงาน",editTask:"แก้ไขงาน",deleteTask:"ลบงาน",taskName:"ชื่องาน",executeTime:"เวลาดำเนินการ",playMode:"โหมดเล่น",repeat:"ทำซ้ำ",files:"ไฟล์",devices:"อุปกรณ์",advancedSettings:"การตั้งค่าขั้นสูง",playSettings:"การตั้งค่าการเล่น",forceStopDuration:"ระยะเวลาหยุดบังคับ",forceStopHint:"ตั้งค่าเพื่อหยุดอัตโนมัติ 0 หรือเว้นว่าง = ไม่หยุดบังคับ",durationRequired:"การเล่นแบบสุ่มต้องตั้งระยะเวลา",durationFormula:"สูตร: (ระยะเวลารวม + ช่วงเวลา × ไฟล์) × จำนวนรอบ",dateHint:"หมายเหตุ: จะเล่นในวันเริ่มต้นและวันสิ้นสุด หากวันเริ่มต้นและวันสิ้นสุดเหมือนกันจะเล่นเฉพาะวันนั้น วันเริ่มต้นต้องไม่ช้ากว่าวันสิ้นสุด",dateRangeError:"วันเริ่มต้นต้องไม่ช้ากว่าวันสิ้นสุด",batchDurationHint:"เมื่อเล่นตามลำดับ: หากระยะเวลารวมของเพลย์ลิสต์ > ระยะเวลาสูงสุด จะหยุดเมื่อถึงเวลา; หากระยะเวลารวม < ระยะเวลาสูงสุด จะหยุดอัตโนมัติเมื่อเล่นจบ",copyConfirm:"คุณแน่ใจหรือไม่ที่จะคัดลอกงานที่เลือก? การกระทำนี้ไม่สามารถยกเลิกได้",copySuccess:"คัดลอกงานสำเร็จ",copyFailed:"ล้มเหลวในการคัดลอกงาน",timeConflict:"เวลาขัดแย้ง",dateRange:"ช่วงวันที่",titleDescription:"Manage scheduled playback tasks with batch operations and task groups",allGroups:"All Task Groups",addTaskGroup:"Add Task Group",deleteTaskGroup:"Delete Task Group",disableTaskGroup:"Disable Task Group",enableTaskGroup:"Enable Task Group",taskGroup:"Task Group",taskGroupName:"Task Group Name",enterGroupName:"Enter task group name",applyTaskGroup:"Apply Task Group",task:"Task",selectGroup:"Select Task Group",startTime:"Start Time",duration:"Duration",loopCount:"Loop Count",startDate:"Start Date",endDate:"End Date",changeGroup:"Change Group",noGroup:"No Group",tryPlay:"Try Play",batchDisable:"Batch Disable",batchEnable:"Batch Enable",batchEditDevices:"Batch Edit Devices",batchEditFiles:"Batch Edit Files",batchApplyGroup:"Batch Apply Group",batchEditTime:"Batch Edit Time",batchEditLoopCount:"Batch Edit Loop Count",batchEditDuration:"Batch Edit Duration",batchDelete:"Batch Delete",batchCopy:"Batch Copy",noTasks:"No Tasks",selectedCount:"Selected {count} tasks",randomPlay:"Random Play",loopPlay:"Loop {count} times",selectDevices:"Select Devices to Play",selectFiles:"Select Audio Files",allDevices:"All Devices",selectedDevices:"Selected Devices",allFiles:"All Files",selectedFiles:"Selected Files",editTaskDevices:"Edit Task Devices",editTaskFiles:"Edit Task Files",taskDuration:"Task Duration",intervalDuration:"Interval Duration",timeRange:"Time Range",to:"to",playCount:"Play Count",sequentialPlay:"Sequential Play",randomPlayMode:"Random Play",playModeChange:"Play Mode Change",enableOtherLimit:"Other limits not required",enableStartDate:"Enable Start Date",enableEndDate:"Enable End Date",enterTaskName:"Enter task name",noTasksSelected:"No tasks selected",devicesRequired:"No devices selected",filesRequired:"No audio files selected",saveSuccess:"Save successful",saveFailed:"Save failed",deleteSuccess:"Delete successful",deleteFailed:"Delete failed",deleteConfirm:"This operation will permanently delete the task. Continue?",enableSuccess:"Task enabled",disableSuccess:"Task disabled",startPlaySuccess:"Play started",startPlayFailed:"Play start failed",stopPlaySuccess:"Play stopped",stopPlayFailed:"Play stop failed",groupNameRequired:"Task group name cannot be empty",addGroupSuccess:"Task group added successfully",addGroupFailed:"Failed to add task group",deleteGroupSuccess:"Task group deleted successfully",deleteGroupFailed:"Failed to delete task group",disableGroupSuccess:"Task group disabled successfully",disableGroupFailed:"Failed to disable task group",enableGroupSuccess:"Task group enabled successfully",enableGroupFailed:"Failed to enable task group",applyGroupSuccess:"Task group applied successfully",applyGroupFailed:"Failed to apply task group",selectGroupFirst:"Please select a task group first",batchDisableSuccess:"Batch disable successful",batchEnableSuccess:"Batch enable successful",unknownDevice:"Unknown Device",unknownFile:"Unknown File",calculate:"Calculate",monday:"จันทร์",tuesday:"อังคาร",wednesday:"พุธ",thursday:"พฤหัสบดี",friday:"ศุกร์",saturday:"เสาร์",sunday:"อาทิตย์",index:"Index",weekdays:"Play Days",noLimit:"ไม่จำกัด",autoCalc:"Auto-calculated",taskNameRequired:"Task name is required",startTimeRequired:"Start time is required",cannotDeletePlaying:"Task is playing, please stop first",cannotDeleteEnabled:"Task is enabled, please disable first",cannotEditPlaying:"Task is playing, please stop first",disabled:"Disabled",enabled:"Enabled",enableTask:"Enable",disableTask:"Disable",noSelectedFiles:"No files selected yet",clickToAddHint:"Click files on the left to add",estimatedDuration:"Estimated Duration",endTime:"End Time",copyCount:"Copy Count",copyNewName:"Default New Name",copyNewNamePlaceholder:"Default new task name",copyInterval:"Time Interval",copyIntervalUnit:"minutes",copyPreview:"Preview List",deleteGroupConfirm:"Are you sure you want to delete this task group? Tasks in the group will not be deleted.",noTasksInGroup:"No tasks in this task group",batchPartialFailed:"{failed} task(s) operation failed"},media:{title:"จัดการสื่อ",list:"รายการไฟล์",upload:"อัปโหลด",delete:"ลบ",play:"เล่น",download:"ดาวน์โหลด",fileName:"ชื่อไฟล์",fileSize:"ขนาดไฟล์",fileType:"ประเภทไฟล์",uploadTime:"เวลาอัปโหลด",duration:"ระยะเวลา",noFiles:"ยังไม่มีไฟล์",dropHint:"ลากไฟล์ MP3 มาวางที่นี่เพื่ออัปโหลด",dropSub:"รองรับรูปแบบ MP3 ไฟล์ละไม่เกิน 40MB",selectFiles:"เลือกไฟล์",selectFolder:"เลือกโฟลเดอร์",onlyMp3:"รองรับเฉพาะไฟล์ MP3",fileTooLarge:"ไฟล์เกินขีดจำกัด 40MB",uploadFailed:"อัปโหลดล้มเหลว",uploadSuccess:"อัปโหลดสำเร็จ {count} ไฟล์",uploading:"กำลังอัปโหลด...",deleteSingleConfirm:"ต้องการลบไฟล์นี้หรือไม่",deleteConfirm:"ลบไฟล์ที่เลือก? ไม่สามารถย้อนกลับได้",deleteSuccess:"ลบสำเร็จ",deleteFailed:"ลบล้มเหลว",batchDelete:"ลบหลายรายการ",batchDeleteSuccess:"ลบสำเร็จ {count} ไฟล์",selectedCount:"เลือก {count} ไฟล์",tts:"Text to Speech",ttsFileName:"File Name",ttsFileNamePlaceholder:"Enter file name",ttsVoice:"Voice",ttsSpeed:"Speed",ttsSpeedSlow:"Slow",ttsSpeedMedium:"Medium",ttsSpeedFast:"Fast",ttsText:"Text Input",ttsTextPlaceholder:"Enter text to convert",ttsTextTooShort:"Text must be at least 3 characters",ttsSuccess:"TTS file created",ttsFailed:"TTS generation failed",uploadDone:"Upload complete"},broadcast:{title:"ควบคุมกระจายเสียง",serverConfig:"การตั้งค่าเซิร์ฟเวอร์",selectDevices:"เลือกอุปกรณ์",quickSelectGroup:"เลือกกลุ่มด่วน",selectAllOnline:"เลือกอุปกรณ์ออนไลน์ทั้งหมด",clearSelection:"ล้างการเลือก",selectedDevices:"เลือกแล้ว {count} อุปกรณ์",noDevices:"ไม่มีอุปกรณ์",noMatch:"ไม่พบอุปกรณ์ที่ตรงกัน",broadcastControl:"ควบคุมการกระจายเสียง",playLevel:"ระดับความสำคัญ",userLevel:"ระดับผู้ใช้",holdToTalk:"กดค้างเพื่อพูด",releaseToStop:"ปล่อยเพื่อหยุด",broadcasting:"กำลังกระจายเสียง...",connected:"เชื่อมต่อแล้ว",notConnected:"ยังไม่เชื่อมต่อ",selectFiles:"เลือกไฟล์",startBroadcast:"เริ่มกระจายเสียง",stopBroadcast:"หยุดกระจายเสียง",playbackMode:"โหมดเล่น",interval:"ช่วงเวลา",loop:"จำนวนรอบ",audioSource:"แหล่งเสียง",microphone:"ไมโครโฟน",noAudioDevice:"ไม่พบอุปกรณ์ input เสียง",audioReady:"เสียงพร้อมแล้ว",inputVolume:"Input Volume",enableMicrophone:"Connect Microphone",startPreview:"Start Preview"},alarm:{title:"ระบบแจ้งเตือน",settings:"การตั้งค่าแจ้งเตือน",history:"ประวัติแจ้งเตือน",enable:"เปิดใช้งาน",disable:"ปิดใช้งาน",triggerCondition:"เงื่อนไข",alarmFile:"ไฟล์แจ้งเตือน",linkage:"อุปกรณ์เชื่อมโยง",selectDevices:"เลือกอุปกรณ์",searchDevice:"ค้นหาชื่ออุปกรณ์หรือหมายเลขซีเรียล",selectAllOnline:"เลือกทั้งหมดที่ออนไลน์",clearSelection:"ล้างการเลือก",selectedCount:"เลือก {count} อุปกรณ์",noDevices:"ไม่มีอุปกรณ์",noMatch:"ไม่พบอุปกรณ์ที่ตรงกัน",alarmConfig:"การตั้งค่าแจ้งเตือน",alarmName:"ชื่อการแจ้งเตือน",alarmNamePlaceholder:"กรอกชื่อการแจ้งเตือน",audioSource:"แหล่งเสียง",selectFile:"เลือกไฟล์ที่อัปโหลด",inputUrl:"ใส่ URL ด้วยตนเอง",selectFilePlaceholder:"เลือกไฟล์เสียง",urlPlaceholder:"ใส่ URL ไฟล์เสียง",registerAlarm:"ลงทะเบียนการแจ้งเตือน",registering:"กำลังลงทะเบียน...",registerResult:"ผลการลงทะเบียน",registerSuccess:"ลงทะเบียนสำเร็จ",registerFailed:"ลงทะเบียนล้มเหลว",noDevicesSelected:"กรุณาเลือกอุปกรณ์อย่างน้อยหนึ่งเครื่อง",noAudioConfigured:"กรุณาตั้งค่าไฟล์เสียง",online:"ออนไลน์",offline:"ออฟไลน์",deviceSn:"หมายเลขซีเรียลอุปกรณ์",registeredList:"การแจ้งเตือนที่ลงทะเบียน",noRegistered:"ไม่มีการแจ้งเตือนที่ลงทะเบียน",loadListFailed:"โหลดรายการแจ้งเตือนล้มเหลว",deviceName:"ชื่ออุปกรณ์",fileName:"ชื่อไฟล์",refreshList:"รีเฟรชรายการ",unregisterAlarm:"ยกเลิกการลงทะเบียน",unregisterConfirm:"คุณแน่ใจหรือไม่ว่าต้องการยกเลิกการลงทะเบียนการแจ้งเตือนนี้?",unregisterSuccess:"ยกเลิกการลงทะเบียนสำเร็จ",unregisterFailed:"ยกเลิกการลงทะเบียนล้มเหลว",linkageTitle:"การเชื่อมโยงการแจ้งเตือน",linkageDesc:"เมื่ออุปกรณ์ A ทริกเกอร์ อุปกรณ์ที่เชื่อมโยง (รวมถึงตัวมันเอง) จะเล่นเสียงที่ระบุ",linkagePlanName:"ชื่อแผน",linkagePlanNamePlaceholder:"กรอกชื่อแผน",linkageDevices:"อุปกรณ์เชื่อมโยง",linkageDevicesHint:"เลือกอุปกรณ์ทริกเกอร์และเล่น (สามารถรวมอุปกรณ์ทริกเกอร์เอง)",linkageAudio:"ไฟล์เสียง",addLinkagePlan:"เพิ่มแผนเชื่อมโยง",adding:"กำลังเพิ่ม...",linkageList:"รายการแผนเชื่อมโยง",noLinkagePlans:"ไม่มีแผนเชื่อมโยง",linkageDeviceCount:"จำนวนอุปกรณ์",addLinkageSuccess:"เพิ่มแผนเชื่อมโยงสำเร็จ",addLinkageFailed:"เพิ่มแผนเชื่อมโยงล้มเหลว",linkagePlanNameRequired:"กรุณากรอกชื่อแผน",linkageNoDevices:"กรุณาเลือกอุปกรณ์อย่างน้อยหนึ่งเครื่อง",linkageNoAudio:"กรุณาตั้งค่าไฟล์เสียง",linkageTriggerDevice:"อุปกรณ์ทริกเกอร์",linkageTriggerDeviceHint:"เมื่ออุปกรณ์นี้ทริกเกอร์การแจ้งเตือน อุปกรณ์เชื่อมโยงจะเล่นเสียง",linkageTriggerDevicePlaceholder:"เลือกอุปกรณ์ทริกเกอร์การแจ้งเตือน",linkageNoTriggerDevice:"กรุณาเลือกอุปกรณ์ทริกเกอร์",registerTrigger:"ลงทะเบียน",registerTriggerTitle:"ลงทะเบียนอุปกรณ์ทริกเกอร์",registerTriggerSuccess:"ลงทะเบียนอุปกรณ์ทริกเกอร์สำเร็จ",registerTriggerFailed:"ลงทะเบียนอุปกรณ์ทริกเกอร์ล้มเหลว",loadLinkageFailed:"โหลดแผนเชื่อมโยงล้มเหลว",deleteLinkageConfirm:"คุณแน่ใจหรือไม่ว่าต้องการลบแผนเชื่อมโยง",deleteLinkageFailed:"ลบแผนเชื่อมโยงล้มเหลว",forceUnregTitle:"บังคับยกเลิกการแจ้งเตือน",forceUnregHint:"บังคับยกเลิกการลงทะเบียนแจ้งเตือนทั้งหมดของอุปกรณ์",forceUnregButton:"บังคับยกเลิกการแจ้งเตือน",forceUnregModalHint:"เลือกอุปกรณ์เพื่อบังคับยกเลิกแจ้งเตือนทั้งหมด (แบบ standalone + เชื่อมโยง)",forceUnregConfirm:"ยืนยันการยกเลิก",forceUnregSuccess:"บังคับยกเลิกการแจ้งเตือนสำเร็จ",forceUnregFailed:"บังคับยกเลิกการแจ้งเตือนล้มเหลว"},account:{title:"จัดการบัญชี",profile:"โปรไฟล์",changePassword:"เปลี่ยนรหัสผ่าน",subAccounts:"บัญชีย่อย",logs:"บันทึกการทำงาน",username:"ชื่อผู้ใช้",nickname:"ชื่อเล่น",email:"อีเมล",phone:"เบอร์โทรศัพท์",role:"บทบาท",level:"ระดับ",addSubUser:"Add Sub Account",usernamePlaceholder:"Enter username",passwordPlaceholder:"Enter password",nicknamePlaceholder:"Enter nickname",beizhu:"Remark",beizhuPlaceholder:"Enter remark",password:"Password",levelLabel:"Level",levelPlaceholder:"Select level",mask:"Permission Mask",maskPlaceholder:"40-bit permission mask (0/1)",maskDefault:"00000000000000000000000000000000000000000000",permissions:"Permission Settings",permCreateSub:"Can create sub accounts",permManageDevice:"Can add/delete devices",permUploadFile:"Can upload files",addSuccess:"Sub account added successfully",addFailed:"Failed to add sub account",listFailed:"Failed to get sub account list",noSubUsers:"No sub accounts yet",createTime:"Create Time",status:"Status",statusNormal:"Normal",statusDisabled:"Disabled",userLevel:"User Level",playLevel:"Play Level",passwordShow:"Password",refreshList:"Refresh List",usernameRequired:"Please enter username",passwordRequired:"Please enter password",permChangeFailed:"Permission change failed",adding:"Adding...",deleteConfirm:"Are you sure to delete sub account {name}? This cannot be undone!",deleteSuccess:"Sub account deleted successfully",deleteFailed:"Failed to delete sub account",editDevices:"Edit Devices",editDevicesSuccess:"Devices updated successfully",editDevicesFailed:"Failed to update devices",loadDevicesFailed:"Failed to load device list",searchDevice:"Search device name or ID",noDevices:"No devices",resetToken:"Reset Token",resetTokenConfirm:"Are you sure to reset token for {name}?",resetTokenSuccess:"Token reset successfully",resetTokenFailed:"Token reset failed",newToken:"New Token"},settings:{title:"การตั้งค่า",language:"ภาษา",theme:"ธีม",darkMode:"โหมดมืด",lightMode:"โหมดสว่าง",diabloMode:"โหมด Diablo",notification:"การแจ้งเตือน",sound:"การตั้งค่าเสียง",about:"เกี่ยวกับ",version:"เวอร์ชัน"},language:{title:"เลือกภาษา",chinese:"简体中文",english:"English",korean:"한국어",thai:"ไทย",vietnamese:"Tiếng Việt",arabic:"العربية",malay:"Bahasa Melayu",shiite:"ชีอะห์",sunni:"สุนนี",japanese:"日本語",russian:"Русский",french:"Français",spanish:"Español",portuguese:"Português",german:"Deutsch",indonesian:"Bahasa Indonesia",hindi:"हिन्दी",turkish:"Türkçe",italian:"Italiano",polish:"Polski",swahili:"Kiswahili"},messages:{deleteConfirm:"คุณแน่ใจหรือไม่ที่จะลบ? การกระทำนี้ไม่สามารถยกเลิกได้!",saveSuccess:"บันทึกสำเร็จ",deleteSuccess:"ลบสำเร็จ",operationSuccess:"ดำเนินการสำเร็จ",operationFailed:"การดำเนินการล้มเหลว โปรดลองอีกครั้ง",networkError:"ข้อผิดพลาดเครือข่าย กรุณาตรวจสอบการเชื่อมต่อ",serverError:"ข้อผิดพลาดเซิร์เวอร์ โปรดลองอีกครั้งในภายหลัง",noData:"ไม่มีข้อมูล",loading:"กำลังโหลด...",noPermission:"ไม่มีสิทธิ์เข้าถึง",tokenExpired:"เซสชันหมดอายุ กรุณาเข้าสู่ระบบอีกครั้ง",operationTimeout:"การดำเนินการหมดเวลา"},clientLogin:{subtitle:"Client Edition",hostPlaceholder:"Server address, e.g. 192.168.1.100:12080",hostHint:"Enter server IP:port, http:// is optional",hostRequired:"Please enter server address"},admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"Select Language",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data available",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",btnEnable:"Enable",btnDisable:"Disable",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully"},info:{title:"Select Language",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Announcement too short",saveSuccess:"Saved successfully",saveFailed:"Update failed"},upload:{title:"Select Language",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Select Language",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scrolling Notice",noData:"No data available",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"},billing:{title:"Select Language",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Slideshow",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"},gallery:{title:"Select Language",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No data available",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"}}},"vi-VN":{common:{appName:"Hệ thống Phát thanh ST",loading:"Đang tải...",confirm:"Xác nhận",cancel:"Hủy",save:"Lưu",delete:"Xóa",edit:"Chỉnh sửa",add:"Thêm",search:"Tìm kiếm",refresh:"Làm mới",submit:"Gửi",reset:"Đặt lại",logout:"Đăng xuất",logoutConfirm:"Bạn có chắc muốn đăng xuất không?",logoutTitle:"Xác nhận đăng xuất",back:"Quay lại",success:"Thành công",error:"Lỗi",warning:"Cảnh báo",info:"Thông tin",yes:"Có",no:"Không",operation:"Hoạt động",status:"Trạng thái",name:"Tên",description:"Mô tả",createTime:"Thời gian tạo",updateTime:"Thời gian cập nhật",close:"Đóng",stop:"Dừng",actions:"Hoạt động",seconds:"giây",minutes:"phút",hours:"giờ",moveUp:"Di chuyển lên",moveDown:"Di chuyển xuống",quick:"Nhanh",unknown:"Không xác định",months:"mo",years:"yr",copy:"Copy",index:"Index",toggle:"Enable/Disable"},login:{title:"Đăng nhập",subtitle:"HỆ THỐNG PHÁT THANH",username:"Tên đăng nhập",password:"Mật khẩu",usernamePlaceholder:"Nhập tên đăng nhập",passwordPlaceholder:"Nhập mật khẩu",rememberMe:"Ghi nhớ tôi",forgotPassword:"Quên mật khẩu?",loginButton:"Đăng nhập Login",logging:"Đang đăng nhập...",loginSuccess:"Đăng nhập thành công",loginFailed:"Đăng nhập thất bại",usernameRequired:"Vui lòng nhập tên đăng nhập",passwordRequired:"Vui lòng nhập mật khẩu",invalidCredentials:"Tên đăng nhập hoặc mật khẩu không đúng"},dashboard:{title:"Bảng điều khiển",welcome:"Chào mừng trở lại",systemStatus:"Hệ thống đang hoạt động bình thường",quickActions:"Hành động nhanh",addDevice:"Thêm thiết bị",createGroup:"Tạo nhóm",scheduleTask:"Lên lịch nhiệm vụ",broadcastNow:"Phát thanh ngay"},menu:{dashboard:"Bảng điều khiển",devices:"Quản lý thiết bị",groups:"Quản lý nhóm",tasks:"Lên lịch",media:"Quản lý phương tiện",broadcast:"Điều khiển phát thanh",alarm:"Hệ thống cảnh báo",account:"Quản lý tài khoản",settings:"Cài đặt",apiTest:"Kiểm tra API",home:"Trang chủ",mine:"Tài khoản của tôi",admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"User & Permission Management",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully"},info:{title:"App Privacy Agreement",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Content too short, at least 3000 characters",saveSuccess:"Saved successfully",saveFailed:"Save failed"},upload:{title:"Avatar & Logo Upload",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Announcement Management",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scroll notice: ",noData:"No data",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"},billing:{title:"Billing Settings",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Device",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure to delete?"},gallery:{title:"Gallery Overview",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No gallery items",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"}}},devices:{title:"Quản lý thiết bị",list:"Danh sách thiết bị",online:"Trực tuyến",offline:"Ngoại tuyến",playing:"Đang phát",volume:"Âm lượng",adjustVolume:"Chỉnh âm lượng",addDevice:"Thêm thiết bị",editDevice:"Chỉnh sửa thiết bị",deleteDevice:"Xóa thiết bị",deviceName:"Tên thiết bị",serialNumber:"Số sê-ri",lastUpdate:"Cập nhật lần cuối",refreshList:"Làm mới danh sách thiết bị",batchVolume:"Chỉnh âm lượng hàng loạt",noDevices:"Không có thiết bị, nhấn Thêm thiết bị ở góc trên bên phải",unnamedDevice:"Thiết bị không tên",debugSound:"Âm thanh gỡ lỗi",changeVolume:"Thay đổi âm lượng",changeName:"Thay đổi tên",changeSerial:"Thay đổi số sê-ri",id:"ID",volumeNotSet:"Chưa cài đặt",neverOnline:"Chưa bao giờ trực tuyến",expiredDisabled:"Hết hạn bị vô hiệu hóa",unknown:"Không xác định",openDebugSound:"Bật âm thanh gỡ lỗi",closeDebugSound:"Tắt âm thanh gỡ lỗi",unknownStatus:"Trạng thái không xác định",addDeviceTitle:"Thêm thiết bị",deviceNameRequired:"Tên thiết bị",deviceSerialRequired:"Số sê-ri thiết bị",deviceKeyRequired:"Khóa thiết bị",deviceNamePlaceholder:"Nhập tên thiết bị",deviceSerialPlaceholder:"Nhập số sê-ri thiết bị",deviceKeyPlaceholder:"Nhập khóa đăng ký thiết bị",deviceKeyHint:"Khóa đăng ký được sử dụng để đăng ký thiết bị vào hệ thống, tương đương với mật khẩu của thiết bị",fillTestData:"Điền dữ liệu kiểm tra",renameTitle:"Đổi tên thiết bị",newDeviceNamePlaceholder:"Nhập tên thiết bị mới",debugSoundTitle:"Âm thanh gỡ lỗi",selectDebugSoundStatus:"Vui lòng chọn trạng thái âm thanh gỡ lỗi",editSerialTitle:"Chỉnh sửa số sê-ri thiết bị",currentSerial:"Số sê-ri hiện tại",currentSerialPlaceholder:"Số sê-ri thiết bị hiện tại",newSerial:"Số sê-ri mới",newSerialPlaceholder:"Nhập số sê-ri mới 32 chữ số",serialLengthHint:"Độ dài số sê-ri phải là 32 chữ số",editDeviceTitle:"Chỉnh sửa thiết bị",macAddress:"Địa chỉ MAC",macAddressPlaceholder:"Nhập địa chỉ MAC",ipAddress:"Địa chỉ IP",ipAddressPlaceholder:"Nhập địa chỉ IP",port:"Cổng",portPlaceholder:"Nhập số cổng",adjustVolumeTitle:"Chỉnh âm lượng",volumeRange:"Phạm vi: 1-63",preciseSetting:"Cài đặt chính xác:",batchAdjustVolumeTitle:"Chỉnh âm lượng hàng loạt",selectedDevices:"Thiết bị đã chọn:",devicesCount:"thiết bị",confirmAdjust:"Xác nhận chỉnh",adding:"Đang thêm...",saving:"Đang lưu...",adjusting:"Đang chỉnh...",confirmButton:"Xác nhận",cancelButton:"Hủy",deviceNameValidationError:"Vui lòng nhập tên thiết bị",deviceSerialValidationError:"Vui lòng nhập số sê-ri thiết bị",deviceKeyValidationError:"Vui lòng nhập khóa thiết bị",newDeviceNameValidationError:"Vui lòng nhập tên thiết bị",deviceSerialLengthError:"Vui lòng nhập số sê-ri thiết bị",newSerialLengthError:"Độ dài số sê-ri phải là 32 chữ số",debugSoundSelectError:"Vui lòng chọn bật hoặc tắt âm thanh gỡ lỗi",confirmOperation:"Xác nhận thao tác",confirmDelete:"Bạn có chắc muốn xóa thiết bị",deleteCannotUndo:"? Thao tác này không thể hoàn tác!",addDeviceSuccess:"Thêm thiết bị thành công",addDeviceFailed:"Không thể thêm thiết bị",deviceRenameSuccess:"Đổi tên thiết bị thành công",deviceRenameFailed:"Không thể đổi tên thiết bị",deviceEditSuccess:"Chỉnh sửa thiết bị thành công",deviceEditFailed:"Không thể chỉnh sửa thiết bị",deviceSerialEditSuccess:"Chỉnh sửa số sê-ri thiết bị thành công",deviceSerialEditFailed:"Không thể chỉnh sửa số sê-ri thiết bị",debugSoundSuccess:"Cài đặt âm thanh gỡ lỗi thành công",debugSoundFailed:"Không thể cài đặt âm thanh gỡ lỗi",deleteDeviceSuccess:"Xóa thiết bị thành công",deleteDeviceFailed:"Không thể xóa thiết bị",adjustVolumeSuccess:"Âm lượng đã được đặt thành",adjustVolumeFailed:"Không thể chỉnh âm lượng",batchAdjustSuccess:"Chỉnh âm lượng hàng loạt thành công, tổng cộng",batchAdjustFailed:"Không thể chỉnh âm lượng hàng loạt",volumeValidationError:"Âm lượng phải nằm trong khoảng 1-63",selectDevicesFirst:"Vui lòng chọn thiết bị cần chỉnh âm lượng trước",successfullyFetched:"Đã lấy thành công",devicesUnit:"thiết bị",deviceListFormatError:"Lỗi định dạng dữ liệu danh sách thiết bị",fetchDeviceListFailed:"Không thể lấy danh sách thiết bị",searchPlaceholder:"Tìm tên hoặc số serial thiết bị...",unknownError:"Lỗi không xác định",listView:"Giao diện danh sách",cardView:"Giao diện thẻ",scanDevices:"Scan Devices",deviceScan:"Device Scan",seed:"Device SEED",seedPlaceholder:"Enter 32-char hex SEED",scanButton:"Scan",scanning:"Scanning...",noDeviceFound:"No devices found",scanNotSupported:"Device scan only available in desktop client",autoIP:"Auto IP",warmMode:"Voice Prompt",mediaServer:"Media Server",mediaPort:"Media Port",gateway:"Gateway",subnetMask:"Subnet Mask",dns:"DNS",deviceIP:"Device IP",applyConfig:"Apply Config",clearDevice:"Clear Device",deviceConfigured:"Device config sent",deviceConfigureFailed:"Device config failed",deviceCleared:"Clear command sent",scanConfigTitle:"Device Network Config",scannedDevices:"Discovered Devices",scanHint:"Click scan to discover all devices on the local network",testComm:"Test Communication",testCommBtn:"Test",console:"Console",clearConsole:"Clear",consoleEmpty:"Waiting for communication...",invalidIP:"Invalid IP format",invalidMask:"Invalid subnet mask",invalidGateway:"Invalid gateway",invalidMediaIP:"Invalid media server IP",invalidPort:"Port range 1-65535",invalidDNS:"Invalid DNS format",dnsPlaceholder:"0.0.0.0 = System default",advanced:"Advanced",soundCard:"Sound Card",getAmixerStatus:"Get Status",amixerApply:"Apply",amixerGetting:"Getting...",amixerOn:"On",amixerOff:"Off",amixerDAC:"DAC Playback Volume",amixerHeadphoneVol:"Headphone Volume",amixerHeadphoneSwitch:"Headphone Switch",amixerHeadphoneRoute:"Headphone Source",amixerLineIn:"Line In Volume",amixerFMIn:"FM In Volume",amixerMicIn:"Mic In Volume",amixerMicBoost:"Mic Boost",amixerADCCapture:"ADC Capture Volume",amixerADCLeftFM:"Left FM Capture",amixerADCRightFM:"Right FM Capture",amixerADCLeftOut:"Left Out Capture",amixerADCRightOut:"Right Out Capture",amixerADCLineIn:"Line In Capture",amixerADCMic:"Mic Capture",amixerLeftFM:"Left FM",amixerLeftLeftDAC:"Left Left DAC",amixerLeftRightDAC:"Left Right DAC",amixerLeftLineIn:"Left Line In",amixerLeftMicIn:"Left Mic In",amixerRightFM:"Right FM",amixerRightLeftDAC:"Right Left DAC",amixerRightRightDAC:"Right Right DAC",amixerRightLineIn:"Right Line In",amixerRightMicIn:"Right Mic In",amixerGroupDecode:"Decode Output",amixerGroupCapture:"Capture Mixer Input",amixerGroupLeft:"Left Output Mixer",amixerGroupRight:"Right Output Mixer",amixerGroupGain:"Gain Config",amixerRouteDAC:"DAC",amixerRouteMixer:"Mixer",amixerGetSuccess:"Sound card status retrieved",amixerGetFailed:"Failed to get sound card status",amixerSetSuccess:"Setting sent",amixerSetFailed:"Setting failed"},groups:{title:"Quản lý nhóm",manage:"Quản lý nhóm",list:"Danh sách nhóm",deviceCount:"Số lượng thiết bị",addGroup:"Thêm nhóm",editGroup:"Chỉnh sửa nhóm",deleteGroup:"Xóa nhóm",groupName:"Tên nhóm",inputName:"Nhập tên nhóm",add:"Thêm nhóm",playMenu:"Menu phát",id:"ID",name:"Tên",actions:"Hoạt động",noGroups:"Không có nhóm nào",untitled:"Nhóm không tên",editDevices:"Chỉnh sửa thiết bị",editVideo:"Chỉnh sửa video",previewVideo:"Xem trước video",groupPlay:"Phát nhóm",allDevices:"Tất cả thiết bị",selectedDevices:"Thiết bị đã chọn",selectAtLeastOneDevice:"Vui lòng chọn ít nhất một thiết bị",videoUrl:"URL video",inputVideoUrl:"Vui lòng nhập URL video",noVideoUrl:"Chưa đặt URL video",noVideoUrlSet:"Chưa đặt URL phát trực tiếp mu38u",playSequence:"Danh sách phát",fileInterval:"Khoảng cách tệp",playCount:"Số lần phát",noPlayingItems:"Không có danh sách phát nào đang chạy",playList:"Danh sách phát",nameRequired:"Tên nhóm không được để trống",loadSuccess:"Đã tải thành công {count} nhóm",loadFailed:"Không thể tải danh sách nhóm",addSuccess:"Đã thêm nhóm thành công",addFailed:"Không thể thêm nhóm",deleteConfirm:"Thao tác này sẽ xóa vĩnh viễn nhóm này. Tiếp tục?",deleteSuccess:"Đã xóa thành công",deleteFailed:"Không thể xóa",saveSuccess:"Đã lưu thành công",saveFailed:"Không thể lưu",loadDevicesFailed:"Không thể tải danh sách thiết bị",invalidGroupId:"ID nhóm không hợp lệ",unknownDevice:"Thiết bị không xác định",playFeatureComingSoon:"Tính năng phát nhóm sắp ra mắt",stopPlayFeatureComingSoon:"Tính năng dừng phát sắp ra mắt",playListFeatureComingSoon:"Tính năng danh sách phát sắp ra mắt",searchDevicePlaceholder:"Nhập tên hoặc ID thiết bị để tìm kiếm...",searchResult:"Tìm thấy {filtered} thiết bị (tổng số {total})",totalDevices:"Tổng số {count} thiết bị",noSearchResult:"Không tìm thấy thiết bị phù hợp",noSelectedDevices:"Chưa chọn thiết bị nào",searchFilePlaceholder:"Nhập tên hoặc ID tệp để tìm kiếm...",availableFiles:"Tệp có sẵn",selectedFiles:"Tệp đã chọn",noSelectedFiles:"Chưa chọn tệp nào",doubleClickHint:"Nhấp đúp để thêm tệp trùng lặp",unknownFile:"Tệp không xác định",playMode:"Chế độ phát",playMode1:"Phát tuần tự 1 lần",playMode2:"Phát tuần tự 2 lần",playMode3:"Phát tuần tự 3 lần",totalDuration:"Thời lượng dự kiến",durationFormula:"Công thức: (Tổng thời lượng + Khoảng cách) × Số lần lặp",playModeHint:"Số lần lặp, 1-99",intervalMaxHint:"Khoảng cách tối đa 3 giờ (10800 giây)",estimatedDuration:"Thời lượng dự kiến",forceStopDuration:"Thời lượng dừng bắt buộc (Tùy chọn)",forceStopHint:"Tự động dừng ở thời gian này. Phải nhỏ hơn thời lượng dự kiến. 0 là không dừng bắt buộc",selectAtLeastOneFile:"Vui lòng chọn ít nhất một tệp",loadFilesFailed:"Không thể tải danh sách tệp",groupHasNoDevices:"Nhóm này không có thiết bị",playStarted:"Đã bắt đầu phát thành công",playFailed:"Không thể bắt đầu phát",invalidPlayId:"ID phát không hợp lệ",stopPlayConfirm:"Bạn có chắc muốn dừng phát?",stopPlayInProgress:"Đang dừng phát, vui lòng đợi...",stopPlaySuccess:"Đã dừng phát thành công",stopPlaySuccessAndClosed:"Đã dừng phát thành công, danh sách phát đã đóng",stopPlayFailed:"Không thể dừng phát",selectGroupForPlay:"Chọn một nhóm để phát",devices:"thiết bị",devicesCount:"thiết bị",startPlay:"Bắt đầu phát"},tasks:{title:"Lên lịch nhiệm vụ",list:"Danh sách nhiệm vụ",addTask:"Thêm nhiệm vụ",editTask:"Chỉnh sửa nhiệm vụ",deleteTask:"Xóa nhiệm vụ",taskName:"Tên nhiệm vụ",executeTime:"Thời gian thực hiện",playMode:"Chế độ phát",repeat:"Lặp lại",files:"Tệp",devices:"Thiết bị",advancedSettings:"Cài đặt nâng cao",playSettings:"Cài đặt phát",forceStopDuration:"Thời gian dừng ép buộc",forceStopHint:"Tự động dừng tại thời gian này. 0 hoặc để trống = không dừng ép buộc",durationRequired:"Phát ngẫu nhiên cần đặt thời lượng",durationFormula:"Công thức: (Tổng thời lượng + Khoảng × Files) × Số lần lặp",dateHint:"Lưu ý: Sẽ phát vào ngày bắt đầu và cả ngày kết thúc. Nếu ngày bắt đầu trùng ngày kết thúc thì chỉ phát trong ngày đó. Ngày bắt đầu không được muộn hơn ngày kết thúc.",dateRangeError:"Ngày bắt đầu không được muộn hơn ngày kết thúc",batchDurationHint:"Phát tuần tự: nếu tổng thời gian danh sách phát > thời lượng tối đa thì dừng khi hết giờ; nếu tổng thời gian < thời lượng tối đa thì tự động dừng khi phát xong",copyConfirm:"Bạn có chắc chắn muốn sao chép các nhiệm vụ đã chọn? Hành động này không thể hoàn tác.",copySuccess:"Sao chép nhiệm vụ thành công",copyFailed:"Sao chép nhiệm vụ thất bại",timeConflict:"Xung đột thời gian",dateRange:"Phạm vi ngày",titleDescription:"Manage scheduled playback tasks with batch operations and task groups",allGroups:"All Task Groups",addTaskGroup:"Add Task Group",deleteTaskGroup:"Delete Task Group",disableTaskGroup:"Disable Task Group",enableTaskGroup:"Enable Task Group",taskGroup:"Task Group",taskGroupName:"Task Group Name",enterGroupName:"Enter task group name",applyTaskGroup:"Apply Task Group",task:"Task",selectGroup:"Select Task Group",startTime:"Start Time",duration:"Duration",loopCount:"Loop Count",startDate:"Start Date",endDate:"End Date",changeGroup:"Change Group",noGroup:"No Group",tryPlay:"Try Play",batchDisable:"Batch Disable",batchEnable:"Batch Enable",batchEditDevices:"Batch Edit Devices",batchEditFiles:"Batch Edit Files",batchApplyGroup:"Batch Apply Group",batchEditTime:"Batch Edit Time",batchEditLoopCount:"Batch Edit Loop Count",batchEditDuration:"Batch Edit Duration",batchDelete:"Batch Delete",batchCopy:"Batch Copy",noTasks:"No Tasks",selectedCount:"Selected {count} tasks",randomPlay:"Random Play",loopPlay:"Loop {count} times",selectDevices:"Select Devices to Play",selectFiles:"Select Audio Files",allDevices:"All Devices",selectedDevices:"Selected Devices",allFiles:"All Files",selectedFiles:"Selected Files",editTaskDevices:"Edit Task Devices",editTaskFiles:"Edit Task Files",taskDuration:"Task Duration",intervalDuration:"Interval Duration",timeRange:"Time Range",to:"to",playCount:"Play Count",sequentialPlay:"Sequential Play",randomPlayMode:"Random Play",playModeChange:"Play Mode Change",enableOtherLimit:"Other limits not required",enableStartDate:"Enable Start Date",enableEndDate:"Enable End Date",enterTaskName:"Enter task name",noTasksSelected:"No tasks selected",devicesRequired:"No devices selected",filesRequired:"No audio files selected",saveSuccess:"Save successful",saveFailed:"Save failed",deleteSuccess:"Delete successful",deleteFailed:"Delete failed",deleteConfirm:"This operation will permanently delete the task. Continue?",enableSuccess:"Task enabled",disableSuccess:"Task disabled",startPlaySuccess:"Play started",startPlayFailed:"Play start failed",stopPlaySuccess:"Play stopped",stopPlayFailed:"Play stop failed",groupNameRequired:"Task group name cannot be empty",addGroupSuccess:"Task group added successfully",addGroupFailed:"Failed to add task group",deleteGroupSuccess:"Task group deleted successfully",deleteGroupFailed:"Failed to delete task group",disableGroupSuccess:"Task group disabled successfully",disableGroupFailed:"Failed to disable task group",enableGroupSuccess:"Task group enabled successfully",enableGroupFailed:"Failed to enable task group",applyGroupSuccess:"Task group applied successfully",applyGroupFailed:"Failed to apply task group",selectGroupFirst:"Please select a task group first",batchDisableSuccess:"Batch disable successful",batchEnableSuccess:"Batch enable successful",unknownDevice:"Unknown Device",unknownFile:"Unknown File",calculate:"Calculate",monday:"Thứ Hai",tuesday:"Thứ Ba",wednesday:"Thứ Tư",thursday:"Thứ Năm",friday:"Thứ Sáu",saturday:"Thứ Bảy",sunday:"Chủ Nhật",index:"Index",weekdays:"Play Days",noLimit:"Không giới hạn",autoCalc:"Auto-calculated",taskNameRequired:"Task name is required",startTimeRequired:"Start time is required",cannotDeletePlaying:"Task is playing, please stop first",cannotDeleteEnabled:"Task is enabled, please disable first",cannotEditPlaying:"Task is playing, please stop first",disabled:"Disabled",enabled:"Enabled",enableTask:"Enable",disableTask:"Disable",noSelectedFiles:"No files selected yet",clickToAddHint:"Click files on the left to add",estimatedDuration:"Estimated Duration",endTime:"End Time",copyCount:"Copy Count",copyNewName:"Default New Name",copyNewNamePlaceholder:"Default new task name",copyInterval:"Time Interval",copyIntervalUnit:"minutes",copyPreview:"Preview List",deleteGroupConfirm:"Are you sure you want to delete this task group? Tasks in the group will not be deleted.",noTasksInGroup:"No tasks in this task group",batchPartialFailed:"{failed} task(s) operation failed"},media:{title:"Quản lý Media",list:"Danh sách tệp",upload:"Tải lên",delete:"Xóa",play:"Phát",download:"Tải xuống",fileName:"Tên tệp",fileSize:"Kích thước",fileType:"Loại tệp",uploadTime:"Thời gian tải lên",duration:"Thời lượng",noFiles:"Chưa có tệp nào",dropHint:"Kéo thả tệp MP3 vào đây để tải lên",dropSub:"Hỗ trợ định dạng MP3, tối đa 40MB mỗi tệp",selectFiles:"Chọn tệp",selectFolder:"Chọn thư mục",onlyMp3:"Chỉ hỗ trợ tệp MP3",fileTooLarge:"Tệp vượt quá giới hạn 40MB",uploadFailed:"Tải lên thất bại",uploadSuccess:"Đã tải lên thành công {count} tệp",uploading:"Đang tải lên...",deleteSingleConfirm:"Bạn có chắc muốn xóa",deleteConfirm:"Xóa các tệp đã chọn? Không thể hoàn tác",deleteSuccess:"Xóa thành công",deleteFailed:"Xóa thất bại",batchDelete:"Xóa hàng loạt",batchDeleteSuccess:"Đã xóa thành công {count} tệp",selectedCount:"Đã chọn {count} tệp",tts:"Text to Speech",ttsFileName:"File Name",ttsFileNamePlaceholder:"Enter file name",ttsVoice:"Voice",ttsSpeed:"Speed",ttsSpeedSlow:"Slow",ttsSpeedMedium:"Medium",ttsSpeedFast:"Fast",ttsText:"Text Input",ttsTextPlaceholder:"Enter text to convert",ttsTextTooShort:"Text must be at least 3 characters",ttsSuccess:"TTS file created",ttsFailed:"TTS generation failed",uploadDone:"Upload complete"},broadcast:{title:"Điều khiển phát thanh",serverConfig:"Cấu hình máy chủ",selectDevices:"Chọn thiết bị",quickSelectGroup:"Chọn nhóm nhanh",selectAllOnline:"Chọn tất cả online",clearSelection:"Xóa chọn",selectedDevices:"Đã chọn {count} thiết bị",noDevices:"Không có thiết bị",noMatch:"Không có thiết bị phù hợp",broadcastControl:"Điều khiển phát thanh",playLevel:"Mức ưu tiên",userLevel:"Cấp người dùng",holdToTalk:"Giữ để nói",releaseToStop:"Thả để dừng",broadcasting:"Đang phát thanh...",connected:"Đã kết nối",notConnected:"Chưa kết nối",selectFiles:"Chọn tệp",startBroadcast:"Bắt đầu phát thanh",stopBroadcast:"Dừng phát thanh",playbackMode:"Chế độ phát",interval:"Khoảng thời gian",loop:"Số lần lặp",audioSource:"Nguồn âm thanh",microphone:"Microphone",noAudioDevice:"Không phát hiện thiết bị đầu vào âm thanh",audioReady:"Âm thanh sẵn sàng",inputVolume:"Input Volume",enableMicrophone:"Connect Microphone",startPreview:"Start Preview"},alarm:{title:"Hệ thống cảnh báo",settings:"Cài đặt cảnh báo",history:"Lịch sử cảnh báo",enable:"Bật",disable:"Tắt",triggerCondition:"Điều kiện kích hoạt",alarmFile:"Tệp cảnh báo",linkage:"Thiết bị liên kết",selectDevices:"Chọn thiết bị",searchDevice:"Tìm tên thiết bị hoặc số serial",selectAllOnline:"Chọn tất cả trực tuyến",clearSelection:"Xóa lựa chọn",selectedCount:"Đã chọn {count} thiết bị",noDevices:"Không có thiết bị",noMatch:"Không có thiết bị phù hợp",alarmConfig:"Cấu hình cảnh báo",alarmName:"Tên cảnh báo",alarmNamePlaceholder:"Nhập tên cảnh báo",audioSource:"Nguồn âm thanh",selectFile:"Chọn tệp đã tải lên",inputUrl:"Nhập URL thủ công",selectFilePlaceholder:"Chọn tệp âm thanh",urlPlaceholder:"Nhập URL tệp âm thanh",registerAlarm:"Đăng ký cảnh báo",registering:"Đang đăng ký...",registerResult:"Kết quả đăng ký",registerSuccess:"Đăng ký thành công",registerFailed:"Đăng ký thất bại",noDevicesSelected:"Vui lòng chọn ít nhất một thiết bị",noAudioConfigured:"Vui lòng cấu hình tệp âm thanh",online:"Trực tuyến",offline:"Ngoại tuyến",deviceSn:"Số serial thiết bị",registeredList:"Cảnh báo đã đăng ký",noRegistered:"Không có cảnh báo đã đăng ký",loadListFailed:"Tải danh sách cảnh báo thất bại",deviceName:"Tên thiết bị",fileName:"Tên tệp",refreshList:"Làm mới danh sách",unregisterAlarm:"Hủy đăng ký",unregisterConfirm:"Bạn có chắc chắn muốn hủy đăng ký cảnh báo này?",unregisterSuccess:"Hủy đăng ký thành công",unregisterFailed:"Hủy đăng ký thất bại",linkageTitle:"Liên kết cảnh báo",linkageDesc:"Khi thiết bị A kích hoạt, các thiết bị liên kết (bao gồm chính nó) phát âm thanh được chỉ định",linkagePlanName:"Tên kế hoạch",linkagePlanNamePlaceholder:"Nhập tên kế hoạch",linkageDevices:"Thiết bị liên kết",linkageDevicesHint:"Chọn thiết bị kích hoạt và phát (có thể bao gồm thiết bị kích hoạt)",linkageAudio:"Tệp âm thanh",addLinkagePlan:"Thêm kế hoạch liên kết",adding:"Đang thêm...",linkageList:"Danh sách kế hoạch liên kết",noLinkagePlans:"Không có kế hoạch liên kết",linkageDeviceCount:"Số thiết bị",addLinkageSuccess:"Kế hoạch liên kết đã thêm thành công",addLinkageFailed:"Thêm kế hoạch liên kết thất bại",linkagePlanNameRequired:"Vui lòng nhập tên kế hoạch",linkageNoDevices:"Vui lòng chọn ít nhất một thiết bị",linkageNoAudio:"Vui lòng cấu hình tệp âm thanh",linkageTriggerDevice:"Thiết bị kích hoạt",linkageTriggerDeviceHint:"Khi thiết bị này kích hoạt cảnh báo, các thiết bị liên kết sẽ phát âm thanh",linkageTriggerDevicePlaceholder:"Chọn thiết bị kích hoạt cảnh báo",linkageNoTriggerDevice:"Vui lòng chọn thiết bị kích hoạt",registerTrigger:"Đăng ký",registerTriggerTitle:"Đăng ký thiết bị kích hoạt",registerTriggerSuccess:"Đăng ký thiết bị kích hoạt thành công",registerTriggerFailed:"Đăng ký thiết bị kích hoạt thất bại",loadLinkageFailed:"Tải kế hoạch liên kết thất bại",deleteLinkageConfirm:"Bạn có chắc chắn muốn xóa kế hoạch liên kết",deleteLinkageFailed:"Xóa kế hoạch liên kết thất bại",forceUnregTitle:"Buộc hủy đăng ký cảnh báo",forceUnregHint:"Buộc hủy tất cả đăng ký cảnh báo của thiết bị",forceUnregButton:"Buộc hủy đăng ký cảnh báo",forceUnregModalHint:"Chọn thiết bị để buộc hủy tất cả cảnh báo (độc lập + liên kết)",forceUnregConfirm:"Xác nhận hủy",forceUnregSuccess:"Buộc hủy đăng ký cảnh báo thành công",forceUnregFailed:"Buộc hủy đăng ký cảnh báo thất bại"},account:{title:"Quản lý tài khoản",profile:"Hồ sơ",changePassword:"Đổi mật khẩu",subAccounts:"Tài khoản phụ",logs:"Nhật ký hoạt động",username:"Tên đăng nhập",nickname:"Biệt danh",email:"Email",phone:"Số điện thoại",role:"Vai trò",level:"Cấp độ",addSubUser:"Add Sub Account",usernamePlaceholder:"Enter username",passwordPlaceholder:"Enter password",nicknamePlaceholder:"Enter nickname",beizhu:"Remark",beizhuPlaceholder:"Enter remark",password:"Password",levelLabel:"Level",levelPlaceholder:"Select level",mask:"Permission Mask",maskPlaceholder:"40-bit permission mask (0/1)",maskDefault:"00000000000000000000000000000000000000000000",permissions:"Permission Settings",permCreateSub:"Can create sub accounts",permManageDevice:"Can add/delete devices",permUploadFile:"Can upload files",addSuccess:"Sub account added successfully",addFailed:"Failed to add sub account",listFailed:"Failed to get sub account list",noSubUsers:"No sub accounts yet",createTime:"Create Time",status:"Status",statusNormal:"Normal",statusDisabled:"Disabled",userLevel:"User Level",playLevel:"Play Level",passwordShow:"Password",refreshList:"Refresh List",usernameRequired:"Please enter username",passwordRequired:"Please enter password",permChangeFailed:"Permission change failed",adding:"Adding...",deleteConfirm:"Are you sure to delete sub account {name}? This cannot be undone!",deleteSuccess:"Sub account deleted successfully",deleteFailed:"Failed to delete sub account",editDevices:"Edit Devices",editDevicesSuccess:"Devices updated successfully",editDevicesFailed:"Failed to update devices",loadDevicesFailed:"Failed to load device list",searchDevice:"Search device name or ID",noDevices:"No devices",resetToken:"Reset Token",resetTokenConfirm:"Are you sure to reset token for {name}?",resetTokenSuccess:"Token reset successfully",resetTokenFailed:"Token reset failed",newToken:"New Token"},settings:{title:"Cài đặt",language:"Ngôn ngữ",theme:"Giao diện",darkMode:"Chế độ tối",lightMode:"Chế độ sáng",diabloMode:"Chế độ Diablo",notification:"Thông báo",sound:"Cài đặt âm thanh",about:"Giới thiệu",version:"Phiên bản"},language:{title:"Chọn ngôn ngữ",chinese:"简体中文",english:"English",korean:"한국어",thai:"ไทย",vietnamese:"Tiếng Việt",arabic:"العربية",malay:"Bahasa Melayu",shiite:"Shiite",sunni:"Sunni",japanese:"日本語",russian:"Русский",french:"Français",spanish:"Español",portuguese:"Português",german:"Deutsch",indonesian:"Bahasa Indonesia",hindi:"हिन्दी",turkish:"Türkçe",italian:"Italiano",polish:"Polski",swahili:"Kiswahili"},messages:{deleteConfirm:"Bạn có chắc chắn muốn xóa? Hành động này không thể hoàn tác!",saveSuccess:"Lưu thành công",deleteSuccess:"Xóa thành công",operationSuccess:"Hoạt động thành công",operationFailed:"Hoạt động thất bại, vui lòng thử lại",networkError:"Lỗi mạng, vui lòng kiểm tra kết nối",serverError:"Lỗi máy chủ, vui lòng thử lại sau",noData:"Không có dữ liệu",loading:"Đang tải...",noPermission:"Không có quyền truy cập",tokenExpired:"Phiên đăng đã hết hạn, vui lòng đăng nhập lại",operationTimeout:"Hoạt động hết thời gian"},clientLogin:{subtitle:"Client Edition",hostPlaceholder:"Server address, e.g. 192.168.1.100:12080",hostHint:"Enter server IP:port, http:// is optional",hostRequired:"Please enter server address"},admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"Select Language",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data available",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",btnEnable:"Enable",btnDisable:"Disable",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully"},info:{title:"Select Language",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Announcement too short",saveSuccess:"Saved successfully",saveFailed:"Update failed"},upload:{title:"Select Language",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Select Language",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scrolling Notice",noData:"No data available",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"},billing:{title:"Select Language",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Slideshow",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"},gallery:{title:"Select Language",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No data available",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"}}},"id-ID":{common:{appName:"Sistem Siaran ST",loading:"Memuat...",confirm:"Konfirmasi",cancel:"Batal",save:"Simpan",delete:"Hapus",edit:"Edit",add:"Tambah",search:"Cari",refresh:"Segarkan",submit:"Kirim",reset:"Reset",logout:"Keluar",logoutConfirm:"Apakah Anda yakin ingin keluar?",logoutTitle:"Konfirmasi Keluar",back:"Kembali",success:"Berhasil",error:"Kesalahan",warning:"Peringatan",info:"Info",yes:"Ya",no:"Tidak",operation:"Operasi",status:"Status",index:"No",name:"Nama",description:"Deskripsi",createTime:"Waktu Dibuat",updateTime:"Waktu Diperbarui",close:"Tutup",stop:"Berhenti",toggle:"Aktif/Nonaktif",actions:"Tindakan",seconds:"detik",minutes:"menit",hours:"jam",moveUp:"Naik",moveDown:"Turun",quick:"Cepat",unknown:"Tidak diketahui",months:"mo",years:"yr",copy:"Copy"},login:{title:"Masuk",subtitle:"SISTEM SIARAN",username:"Nama Pengguna",password:"Kata Sandi",usernamePlaceholder:"Masukkan nama pengguna",passwordPlaceholder:"Masukkan kata sandi",rememberMe:"Ingat saya",forgotPassword:"Lupa kata sandi?",loginButton:"Masuk",logging:"Sedang masuk...",loginSuccess:"Berhasil masuk",loginFailed:"Gagal masuk",usernameRequired:"Masukkan nama pengguna",passwordRequired:"Masukkan kata sandi",invalidCredentials:"Nama pengguna atau kata sandi salah"},clientLogin:{subtitle:"Versi Klien",hostPlaceholder:"Alamat server, contoh: 192.168.1.100:12080",hostHint:"Masukkan IP:port server, http:// opsional",hostRequired:"Masukkan alamat server"},dashboard:{title:"Dasbor",welcome:"Selamat datang kembali",systemStatus:"Sistem berjalan normal",quickActions:"Aksi Cepat",addDevice:"Tambah Perangkat",createGroup:"Buat Grup",scheduleTask:"Jadwalkan Tugas",broadcastNow:"Siaran Sekarang"},menu:{dashboard:"Dasbor",devices:"Perangkat",groups:"Grup",tasks:"Tugas",media:"Media",broadcast:"Siaran",alarm:"Alarm",account:"Akun",settings:"Pengaturan",apiTest:"Uji API",home:"Beranda",mine:"Akun Saya"},devices:{title:"Manajemen Perangkat",list:"Daftar Perangkat",online:"Online",offline:"Offline",playing:"Memutar",volume:"Volume",adjustVolume:"Atur Volume",addDevice:"Tambah Perangkat",editDevice:"Edit Perangkat",deleteDevice:"Hapus Perangkat",deviceName:"Nama Perangkat",serialNumber:"Nomor Seri",lastUpdate:"Pembaruan Terakhir",refreshList:"Segarkan Daftar",batchVolume:"Atur Volume Massal",noDevices:"Belum ada perangkat, klik Tambah di kanan atas",unnamedDevice:"Perangkat Tanpa Nama",debugSound:"Suara Debug",changeVolume:"Ubah Volume",changeName:"Ubah Nama",changeSerial:"Ubah Nomor Seri",id:"ID",volumeNotSet:"Belum Diatur",neverOnline:"Belum Pernah Online",expiredDisabled:"Kedaluwarsa Dinonaktifkan",unknown:"Tidak Diketahui",openDebugSound:"Aktifkan Suara Debug",closeDebugSound:"Nonaktifkan Suara Debug",unknownStatus:"Status Tidak Diketahui",addDeviceTitle:"Tambah Perangkat",deviceNameRequired:"Nama Perangkat",deviceSerialRequired:"Nomor Seri",deviceKeyRequired:"Kunci Perangkat",deviceNamePlaceholder:"Masukkan nama perangkat",deviceSerialPlaceholder:"Masukkan nomor seri",deviceKeyPlaceholder:"Masukkan kunci registrasi",deviceKeyHint:"Kunci registrasi digunakan untuk mendaftarkan perangkat ke sistem, setara dengan kata sandi perangkat",fillTestData:"Isi Data Uji",renameTitle:"Ganti Nama Perangkat",newDeviceNamePlaceholder:"Masukkan nama baru",debugSoundTitle:"Suara Debug",selectDebugSoundStatus:"Pilih status suara debug",editSerialTitle:"Edit Nomor Seri",currentSerial:"Nomor Seri Saat Ini",currentSerialPlaceholder:"Nomor seri saat ini",newSerial:"Nomor Seri Baru",newSerialPlaceholder:"Masukkan 32 digit nomor seri baru",serialLengthHint:"Nomor seri harus 32 digit",editDeviceTitle:"Edit Perangkat",macAddress:"Alamat MAC",macAddressPlaceholder:"Masukkan alamat MAC",ipAddress:"Alamat IP",ipAddressPlaceholder:"Masukkan alamat IP",port:"Port",portPlaceholder:"Masukkan nomor port",adjustVolumeTitle:"Atur Volume",volumeRange:"Rentang: 1-63",preciseSetting:"Pengaturan Presisi:",batchAdjustVolumeTitle:"Atur Volume Massal",selectedDevices:"Perangkat Dipilih:",devicesCount:"perangkat",confirmAdjust:"Konfirmasi",adding:"Menambahkan...",saving:"Menyimpan...",adjusting:"Mengatur...",confirmButton:"Konfirmasi",cancelButton:"Batal",deviceNameValidationError:"Masukkan nama perangkat",deviceSerialValidationError:"Masukkan nomor seri",deviceKeyValidationError:"Masukkan kunci perangkat",newDeviceNameValidationError:"Masukkan nama perangkat",deviceSerialLengthError:"Masukkan nomor seri",newSerialLengthError:"Nomor seri harus 32 digit",debugSoundSelectError:"Pilih aktifkan atau nonaktifkan suara debug",confirmOperation:"Konfirmasi Operasi",confirmDelete:"Hapus perangkat",deleteCannotUndo:"? Tindakan ini tidak dapat dibatalkan!",addDeviceSuccess:"Perangkat berhasil ditambahkan",addDeviceFailed:"Gagal menambahkan perangkat",deviceRenameSuccess:"Nama perangkat berhasil diubah",deviceRenameFailed:"Gagal mengubah nama perangkat",deviceEditSuccess:"Perangkat berhasil diedit",deviceEditFailed:"Gagal mengedit perangkat",deviceSerialEditSuccess:"Nomor seri berhasil diubah",deviceSerialEditFailed:"Gagal mengubah nomor seri",debugSoundSuccess:"Suara debug berhasil diatur",debugSoundFailed:"Gagal mengatur suara debug",deleteDeviceSuccess:"Perangkat berhasil dihapus",deleteDeviceFailed:"Gagal menghapus perangkat",adjustVolumeSuccess:"Volume diatur ke",adjustVolumeFailed:"Gagal mengatur volume",batchAdjustSuccess:"Pengaturan volume massal berhasil, total",batchAdjustFailed:"Gagal mengatur volume massal",volumeValidationError:"Volume harus antara 1-63",selectDevicesFirst:"Pilih perangkat terlebih dahulu",successfullyFetched:"Berhasil diambil",devicesUnit:"perangkat",deviceListFormatError:"Format data daftar perangkat salah",fetchDeviceListFailed:"Gagal mengambil daftar perangkat",searchPlaceholder:"Cari nama atau serial perangkat...",unknownError:"Kesalahan tidak diketahui",listView:"Tampilan Daftar",cardView:"Tampilan Kartu",scanDevices:"Scan Devices",deviceScan:"Device Scan",seed:"Device SEED",seedPlaceholder:"Enter 32-char hex SEED",scanButton:"Scan",scanning:"Scanning...",noDeviceFound:"No devices found",scanNotSupported:"Device scan only available in desktop client",autoIP:"Auto IP",warmMode:"Voice Prompt",mediaServer:"Media Server",mediaPort:"Media Port",gateway:"Gateway",subnetMask:"Subnet Mask",dns:"DNS",deviceIP:"Device IP",applyConfig:"Apply Config",clearDevice:"Clear Device",deviceConfigured:"Device config sent",deviceConfigureFailed:"Device config failed",deviceCleared:"Clear command sent",scanConfigTitle:"Device Network Config",scannedDevices:"Discovered Devices",scanHint:"Click scan to discover all devices on the local network",testComm:"Test Communication",testCommBtn:"Test",console:"Console",clearConsole:"Clear",consoleEmpty:"Waiting for communication...",invalidIP:"Invalid IP format",invalidMask:"Invalid subnet mask",invalidGateway:"Invalid gateway",invalidMediaIP:"Invalid media server IP",invalidPort:"Port range 1-65535",invalidDNS:"Invalid DNS format",dnsPlaceholder:"0.0.0.0 = System default",advanced:"Advanced",soundCard:"Sound Card",getAmixerStatus:"Get Status",amixerApply:"Apply",amixerGetting:"Getting...",amixerOn:"On",amixerOff:"Off",amixerDAC:"DAC Playback Volume",amixerHeadphoneVol:"Headphone Volume",amixerHeadphoneSwitch:"Headphone Switch",amixerHeadphoneRoute:"Headphone Source",amixerLineIn:"Line In Volume",amixerFMIn:"FM In Volume",amixerMicIn:"Mic In Volume",amixerMicBoost:"Mic Boost",amixerADCCapture:"ADC Capture Volume",amixerADCLeftFM:"Left FM Capture",amixerADCRightFM:"Right FM Capture",amixerADCLeftOut:"Left Out Capture",amixerADCRightOut:"Right Out Capture",amixerADCLineIn:"Line In Capture",amixerADCMic:"Mic Capture",amixerLeftFM:"Left FM",amixerLeftLeftDAC:"Left Left DAC",amixerLeftRightDAC:"Left Right DAC",amixerLeftLineIn:"Left Line In",amixerLeftMicIn:"Left Mic In",amixerRightFM:"Right FM",amixerRightLeftDAC:"Right Left DAC",amixerRightRightDAC:"Right Right DAC",amixerRightLineIn:"Right Line In",amixerRightMicIn:"Right Mic In",amixerGroupDecode:"Decode Output",amixerGroupCapture:"Capture Mixer Input",amixerGroupLeft:"Left Output Mixer",amixerGroupRight:"Right Output Mixer",amixerGroupGain:"Gain Config",amixerRouteDAC:"DAC",amixerRouteMixer:"Mixer",amixerGetSuccess:"Sound card status retrieved",amixerGetFailed:"Failed to get sound card status",amixerSetSuccess:"Setting sent",amixerSetFailed:"Setting failed"},groups:{title:"Manajemen Grup",list:"Daftar Grup",deviceCount:"Jumlah Perangkat",addGroup:"Tambah Grup",editGroup:"Edit Grup",deleteGroup:"Hapus Grup",groupName:"Nama Grup",manage:"Manajemen Grup",inputName:"Masukkan nama grup",add:"Tambah Grup",playMenu:"Menu Putar",id:"ID",name:"Nama",actions:"Tindakan",noGroups:"Belum ada grup",untitled:"Grup Tanpa Nama",editDevices:"Edit Perangkat",editVideo:"Edit Video",previewVideo:"Pratinjau Video",groupPlay:"Putar Grup",allDevices:"Semua Perangkat",selectedDevices:"Perangkat Dipilih",selectAtLeastOneDevice:"Pilih setidaknya satu perangkat",videoUrl:"URL Video",inputVideoUrl:"Masukkan URL video",noVideoUrl:"URL video belum diatur",noVideoUrlSet:"URL stream M3U8 belum diatur",playSequence:"Urutan Putar",fileInterval:"Interval File",playCount:"Jumlah Putar",noPlayingItems:"Tidak ada urutan yang diputar",playList:"Daftar Putar",nameRequired:"Nama grup tidak boleh kosong",loadSuccess:"Berhasil memuat {count} grup",loadFailed:"Gagal memuat daftar grup",addSuccess:"Grup berhasil ditambahkan",addFailed:"Gagal menambahkan grup",deleteConfirm:"Hapus grup ini secara permanen?",deleteSuccess:"Berhasil dihapus",deleteFailed:"Gagal menghapus",saveSuccess:"Berhasil disimpan",saveFailed:"Gagal menyimpan",loadDevicesFailed:"Gagal memuat daftar perangkat",invalidGroupId:"ID grup tidak valid",unknownDevice:"Perangkat tidak diketahui",playFeatureComingSoon:"Fitur putar grup segera hadir",stopPlayFeatureComingSoon:"Fitur hentikan putar segera hadir",playListFeatureComingSoon:"Fitur daftar putar segera hadir",searchDevicePlaceholder:"Cari nama atau ID perangkat...",searchResult:"Ditemukan {filtered} perangkat (total {total})",totalDevices:"Total {count} perangkat",noSearchResult:"Perangkat tidak ditemukan",noSelectedDevices:"Belum ada perangkat dipilih",searchFilePlaceholder:"Cari nama atau ID file...",availableFiles:"File Tersedia",selectedFiles:"File Dipilih",noSelectedFiles:"Belum ada file dipilih",doubleClickHint:"Klik ganda untuk menambah duplikat",unknownFile:"File tidak diketahui",playMode:"Mode Putar",playMode1:"Putar Berurutan 1x",playMode2:"Putar Berurutan 2x",playMode3:"Putar Berurutan 3x",totalDuration:"Total Durasi Estimasi",durationFormula:"Perhitungan: (Total Durasi + Interval) × Pengulangan",playModeHint:"Jumlah pengulangan, 1-99",intervalMaxHint:"Interval maks 3 jam (10800 detik)",estimatedDuration:"Durasi Estimasi",forceStopDuration:"Hentikan Paksa (Opsional)",forceStopHint:"Berhenti otomatis pada durasi ini. Harus kurang dari estimasi. 0 berarti tanpa hentikan paksa",selectAtLeastOneFile:"Pilih setidaknya satu file",loadFilesFailed:"Gagal memuat daftar file",groupHasNoDevices:"Grup ini tidak memiliki perangkat",playStarted:"Putar berhasil dimulai",playFailed:"Gagal memulai putar",invalidPlayId:"ID putar tidak valid",stopPlayConfirm:"Yakin ingin menghentikan putar?",stopPlayInProgress:"Menghentikan putar, harap tunggu...",stopPlaySuccess:"Putar berhasil dihentikan",stopPlaySuccessAndClosed:"Putar berhasil dihentikan, daftar putar ditutup",stopPlayFailed:"Gagal menghentikan putar",selectGroupForPlay:"Pilih grup untuk diputar",devices:"perangkat",devicesCount:"perangkat",startPlay:"Mulai Putar"},tasks:{title:"Tugas Terjadwal",titleDescription:"Kelola tugas pemutaran terjadwal dengan operasi massal dan grup tugas",list:"Daftar Tugas",addTask:"Tambah Tugas",editTask:"Edit Tugas",deleteTask:"Hapus Tugas",taskName:"Nama Tugas",executeTime:"Waktu Eksekusi",playMode:"Mode Putar",repeat:"Ulangi",files:"File",devices:"Perangkat",allGroups:"Semua Grup Tugas",addTaskGroup:"Tambah Grup Tugas",deleteTaskGroup:"Hapus Grup Tugas",disableTaskGroup:"Nonaktifkan Grup Tugas",enableTaskGroup:"Aktifkan Grup Tugas",taskGroup:"Grup Tugas",taskGroupName:"Nama Grup",enterGroupName:"Masukkan nama grup tugas",applyTaskGroup:"Terapkan Grup Tugas",task:"Tugas",selectGroup:"Pilih Grup Tugas",startTime:"Waktu Mulai",duration:"Durasi",loopCount:"Jumlah Pengulangan",startDate:"Tanggal Mulai",endDate:"Tanggal Selesai",changeGroup:"Ganti Grup",noGroup:"Tanpa Grup",tryPlay:"Coba Putar",batchDisable:"Nonaktifkan Massal",batchEnable:"Aktifkan Massal",batchEditDevices:"Edit Perangkat Massal",batchEditFiles:"Edit File Massal",batchApplyGroup:"Terapkan Grup Massal",batchEditTime:"Edit Waktu Massal",batchEditLoopCount:"Edit Pengulangan Massal",batchEditDuration:"Edit Durasi Massal",batchDelete:"Hapus Massal",batchCopy:"Salin Massal",noTasks:"Belum ada tugas",selectedCount:"{count} tugas dipilih",randomPlay:"Putar Acak",loopPlay:"{count} kali pengulangan",selectDevices:"Pilih Perangkat",selectFiles:"Pilih File Audio",allDevices:"Semua Perangkat",selectedDevices:"Perangkat Dipilih",allFiles:"Semua File",selectedFiles:"File Dipilih",editTaskDevices:"Edit Perangkat Tugas",editTaskFiles:"Edit File Tugas",taskDuration:"Durasi Tugas",intervalDuration:"Durasi Interval",timeRange:"Rentang Waktu",to:"sampai",playCount:"Jumlah Putar",sequentialPlay:"Putar Berurutan",randomPlayMode:"Putar Acak",playModeChange:"Ubah Mode Putar",enableOtherLimit:"Batasan lain tidak diperlukan",enableStartDate:"Aktifkan Tanggal Mulai",enableEndDate:"Aktifkan Tanggal Selesai",enterTaskName:"Masukkan nama tugas",noTasksSelected:"Tidak ada tugas dipilih",devicesRequired:"Tidak ada perangkat dipilih",filesRequired:"Tidak ada file audio dipilih",saveSuccess:"Berhasil disimpan",saveFailed:"Gagal menyimpan",deleteSuccess:"Berhasil dihapus",deleteFailed:"Gagal menghapus",deleteConfirm:"Hapus tugas ini secara permanen?",enableSuccess:"Tugas diaktifkan",disableSuccess:"Tugas dinonaktifkan",startPlaySuccess:"Putar dimulai",startPlayFailed:"Gagal memulai putar",stopPlaySuccess:"Putar dihentikan",stopPlayFailed:"Gagal menghentikan putar",groupNameRequired:"Nama grup tidak boleh kosong",addGroupSuccess:"Grup tugas berhasil ditambahkan",addGroupFailed:"Gagal menambahkan grup tugas",deleteGroupSuccess:"Grup tugas berhasil dihapus",deleteGroupFailed:"Gagal menghapus grup tugas",disableGroupSuccess:"Grup tugas berhasil dinonaktifkan",disableGroupFailed:"Gagal menonaktifkan grup tugas",enableGroupSuccess:"Grup tugas berhasil diaktifkan",enableGroupFailed:"Gagal mengaktifkan grup tugas",applyGroupSuccess:"Grup tugas berhasil diterapkan",applyGroupFailed:"Gagal menerapkan grup tugas",selectGroupFirst:"Pilih grup tugas terlebih dahulu",batchDisableSuccess:"Nonaktifkan massal berhasil",batchEnableSuccess:"Aktifkan massal berhasil",unknownDevice:"Perangkat Tidak Diketahui",unknownFile:"File Tidak Diketahui",calculate:"Hitung",monday:"Senin",tuesday:"Selasa",wednesday:"Rabu",thursday:"Kamis",friday:"Jumat",saturday:"Sabtu",sunday:"Minggu",index:"No",weekdays:"Hari Putar",noLimit:"Tidak terbatas",autoCalc:"Hitung otomatis",taskNameRequired:"Nama tugas wajib diisi",startTimeRequired:"Waktu mulai wajib diisi",cannotDeletePlaying:"Tugas sedang diputar, hentikan terlebih dahulu",cannotDeleteEnabled:"Tugas diaktifkan, nonaktifkan terlebih dahulu",cannotEditPlaying:"Tugas sedang diputar, hentikan terlebih dahulu",disabled:"Dinonaktifkan",enabled:"Diaktifkan",enableTask:"Aktifkan",disableTask:"Nonaktifkan",noSelectedFiles:"Belum ada file dipilih",clickToAddHint:"Klik file di kiri untuk menambahkan",estimatedDuration:"Durasi Estimasi",advancedSettings:"Pengaturan Lanjutan",playSettings:"Pengaturan Putar",forceStopDuration:"Durasi Hentikan Paksa",forceStopHint:"Jika diatur, putar akan berhenti otomatis. Harus kurang dari estimasi. 0 atau kosong berarti tanpa hentikan paksa",durationRequired:"Putar acak memerlukan pengaturan durasi",durationFormula:"Perhitungan: (Total Durasi + Interval × Jumlah File) × Pengulangan",dateHint:"Catatan: Diputar pada tanggal mulai dan tanggal selesai. Jika tanggal sama, hanya diputar hari itu. Tanggal mulai tidak boleh lebih lambat dari tanggal selesai.",dateRangeError:"Tanggal mulai tidak boleh lebih lambat dari tanggal selesai",batchDurationHint:"Putar berurutan: jika total playlist > durasi maks, berhenti saat waktu habis; jika total playlist < durasi maks, berhenti saat playlist selesai",copyConfirm:"Salin tugas yang dipilih? Tindakan ini tidak dapat dibatalkan!",copySuccess:"Tugas berhasil disalin",copyFailed:"Gagal menyalin tugas",copyCount:"Jumlah Salinan",copyNewName:"Nama Baru Default",copyNewNamePlaceholder:"Nama tugas baru default",copyInterval:"Interval Waktu",copyIntervalUnit:"menit",copyPreview:"Pratinjau",deleteGroupConfirm:"Hapus grup tugas ini? Tugas dalam grup tidak akan dihapus.",noTasksInGroup:"Tidak ada tugas dalam grup ini",batchPartialFailed:"{failed} operasi gagal",endTime:"Waktu Selesai",timeConflict:"Konflik Waktu",dateRange:"Rentang Tanggal"},media:{title:"Manajemen Media",list:"Daftar File",upload:"Unggah",delete:"Hapus",play:"Putar",download:"Unduh",fileName:"Nama File",fileSize:"Ukuran File",fileType:"Tipe File",uploadTime:"Waktu Unggah",duration:"Durasi",noFiles:"Belum ada file",dropHint:"Seret & lepas file MP3 di sini untuk mengunggah",dropSub:"Format MP3, maks 40MB per file",selectFiles:"Pilih File",selectFolder:"Pilih Folder",onlyMp3:"Hanya file MP3 yang didukung",fileTooLarge:"File melebihi batas 40MB",uploadFailed:"Gagal mengunggah",uploadSuccess:"Berhasil mengunggah {count} file",uploading:"Mengunggah...",deleteSingleConfirm:"Hapus file",deleteConfirm:"Hapus file yang dipilih? Tidak dapat dibatalkan",deleteSuccess:"Berhasil dihapus",deleteFailed:"Gagal menghapus",batchDelete:"Hapus Massal",batchDeleteSuccess:"Berhasil menghapus {count} file",selectedCount:"{count} file dipilih",tts:"Text to Speech",ttsFileName:"File Name",ttsFileNamePlaceholder:"Enter file name",ttsVoice:"Voice",ttsSpeed:"Speed",ttsSpeedSlow:"Slow",ttsSpeedMedium:"Medium",ttsSpeedFast:"Fast",ttsText:"Text Input",ttsTextPlaceholder:"Enter text to convert",ttsTextTooShort:"Text must be at least 3 characters",ttsSuccess:"TTS file created",ttsFailed:"TTS generation failed",uploadDone:"Upload complete"},broadcast:{title:"Kontrol Siaran",serverConfig:"Konfigurasi Server",selectDevices:"Pilih Perangkat",quickSelectGroup:"Pilih Grup Cepat",selectAllOnline:"Pilih Semua Online",clearSelection:"Hapus Pilihan",selectedDevices:"{count} perangkat dipilih",noDevices:"Tidak ada perangkat",noMatch:"Tidak ada perangkat cocok",broadcastControl:"Kontrol Siaran",playLevel:"Prioritas Putar",userLevel:"Level Pengguna",holdToTalk:"Tahan untuk Bicara",releaseToStop:"Lepas untuk Berhenti",broadcasting:"Sedang Siaran...",connected:"Terhubung",notConnected:"Tidak Terhubung",selectFiles:"Pilih File",startBroadcast:"Mulai Siaran",stopBroadcast:"Hentikan Siaran",playbackMode:"Mode Putar",interval:"Interval",loop:"Jumlah Pengulangan",audioSource:"Sumber Audio",microphone:"Mikrofon",noAudioDevice:"Tidak ada perangkat audio terdeteksi",audioReady:"Audio Siap",inputVolume:"Volume Masuk",enableMicrophone:"Hubungkan Mikrofon",startPreview:"Mulai Pratinjau"},alarm:{title:"Sistem Alarm",settings:"Pengaturan Alarm",history:"Riwayat Alarm",enable:"Aktifkan",disable:"Nonaktifkan",triggerCondition:"Kondisi Pemicu",alarmFile:"File Alarm",linkage:"Perangkat Terhubung",selectDevices:"Pilih Perangkat",searchDevice:"Cari nama perangkat atau nomor seri",selectAllOnline:"Pilih Semua Online",clearSelection:"Hapus Pilihan",selectedCount:"{count} perangkat dipilih",noDevices:"Tidak ada perangkat",noMatch:"Tidak ada perangkat yang cocok",alarmConfig:"Konfigurasi Alarm",alarmName:"Nama Alarm",alarmNamePlaceholder:"Masukkan nama alarm",audioSource:"Sumber Audio",selectFile:"Pilih file yang diunggah",inputUrl:"Masukkan URL secara manual",selectFilePlaceholder:"Pilih file audio",urlPlaceholder:"Masukkan URL file audio",registerAlarm:"Daftarkan Alarm",registering:"Mendaftar...",registerResult:"Hasil Pendaftaran",registerSuccess:"Pendaftaran berhasil",registerFailed:"Pendaftaran gagal",noDevicesSelected:"Pilih setidaknya satu perangkat",noAudioConfigured:"Silakan konfigurasi file audio",online:"Online",offline:"Offline",deviceSn:"Nomor Seri Perangkat",registeredList:"Alarm Terdaftar",noRegistered:"Tidak ada alarm terdaftar",loadListFailed:"Gagal memuat daftar alarm",deviceName:"Nama Perangkat",fileName:"Nama File",refreshList:"Segarkan Daftar",unregisterAlarm:"Batalkan Pendaftaran",unregisterConfirm:"Apakah Anda yakin ingin membatalkan pendaftaran alarm ini?",unregisterSuccess:"Pembatalan pendaftaran berhasil",unregisterFailed:"Pembatalan pendaftaran gagal",linkageTitle:"Linkage Alarm",linkageDesc:"Ketika perangkat A terpicu, perangkat terhubung (termasuk dirinya sendiri) memutar audio yang ditentukan",linkagePlanName:"Nama Rencana",linkagePlanNamePlaceholder:"Masukkan nama rencana",linkageDevices:"Perangkat Linkage",linkageDevicesHint:"Pilih perangkat pemicu dan pemutaran (dapat menyertakan perangkat pemicu itu sendiri)",linkageAudio:"File Audio",addLinkagePlan:"Tambah Rencana Linkage",adding:"Menambahkan...",linkageList:"Daftar Rencana Linkage",noLinkagePlans:"Tidak ada rencana linkage",linkageDeviceCount:"Jumlah Perangkat",addLinkageSuccess:"Rencana linkage berhasil ditambahkan",addLinkageFailed:"Gagal menambahkan rencana linkage",linkagePlanNameRequired:"Silakan masukkan nama rencana",linkageNoDevices:"Pilih setidaknya satu perangkat",linkageNoAudio:"Silakan konfigurasi file audio",linkageTriggerDevice:"Perangkat Pemicu",linkageTriggerDeviceHint:"Ketika perangkat ini memicu alarm, perangkat terhubung akan memutar audio",linkageTriggerDevicePlaceholder:"Pilih perangkat pemicu alarm",linkageNoTriggerDevice:"Silakan pilih perangkat pemicu",registerTrigger:"Daftarkan",registerTriggerTitle:"Daftarkan Perangkat Pemicu",registerTriggerSuccess:"Perangkat pemicu berhasil didaftarkan",registerTriggerFailed:"Gagal mendaftarkan perangkat pemicu",loadLinkageFailed:"Gagal memuat rencana linkage",deleteLinkageConfirm:"Apakah Anda yakin ingin menghapus rencana linkage",deleteLinkageFailed:"Gagal menghapus rencana linkage",forceUnregTitle:"Paksa Batalkan Pendaftaran Alarm",forceUnregHint:"Paksa batalkan semua pendaftaran alarm perangkat",forceUnregButton:"Paksa Batalkan Pendaftaran Alarm",forceUnregModalHint:"Pilih perangkat untuk membatalkan semua alarm secara paksa (mandiri + linkage)",forceUnregConfirm:"Konfirmasi Pembatalan",forceUnregSuccess:"Pembatalan paksa alarm berhasil",forceUnregFailed:"Pembatalan paksa alarm gagal"},account:{title:"Manajemen Akun",profile:"Profil",changePassword:"Ubah Kata Sandi",subAccounts:"Sub Akun",logs:"Log Operasi",username:"Nama Pengguna",nickname:"Nama Panggilan",email:"Email",phone:"Telepon",role:"Peran",level:"Level",addSubUser:"Tambah Sub Akun",usernamePlaceholder:"Masukkan nama pengguna",passwordPlaceholder:"Masukkan kata sandi",nicknamePlaceholder:"Masukkan nama panggilan",beizhu:"Catatan",beizhuPlaceholder:"Masukkan catatan",password:"Kata Sandi",levelLabel:"Level",levelPlaceholder:"Pilih level",mask:"Masker Izin",maskPlaceholder:"Masker izin 40-bit (0/1)",maskDefault:"00000000000000000000000000000000000000000000",permissions:"Pengaturan Izin",permCreateSub:"Dapat membuat sub akun",permManageDevice:"Dapat menambah/menghapus perangkat",permUploadFile:"Dapat mengunggah file",addSuccess:"Sub akun berhasil ditambahkan",addFailed:"Gagal menambahkan sub akun",listFailed:"Gagal mendapatkan daftar sub akun",noSubUsers:"Belum ada sub akun",createTime:"Waktu Dibuat",status:"Status",statusNormal:"Normal",statusDisabled:"Dinonaktifkan",userLevel:"Level Pengguna",playLevel:"Level Putar",passwordShow:"Kata Sandi",refreshList:"Segarkan Daftar",usernameRequired:"Masukkan nama pengguna",passwordRequired:"Masukkan kata sandi",permChangeFailed:"Gagal mengubah izin",adding:"Menambahkan...",deleteConfirm:"Hapus sub akun {name}? Tidak dapat dibatalkan!",deleteSuccess:"Sub akun berhasil dihapus",deleteFailed:"Gagal menghapus sub akun",editDevices:"Edit Perangkat",editDevicesSuccess:"Perangkat berhasil diperbarui",editDevicesFailed:"Gagal memperbarui perangkat",loadDevicesFailed:"Gagal memuat daftar perangkat",searchDevice:"Cari nama atau ID perangkat",noDevices:"Tidak ada perangkat",resetToken:"Reset Token",resetTokenConfirm:"Reset token untuk {name}?",resetTokenSuccess:"Token berhasil direset",resetTokenFailed:"Gagal mereset token",newToken:"Token Baru"},admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"User & Permission Management",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",registeredDevices:"Registered Devices",devName:"Device Name",devSerial:"Serial",devStatus:"Status",devType:"Type",btnEnable:"Enable",btnDisable:"Disable",btnDelete:"Delete",btnEnableConfirm:"Are you sure to enable? This action cannot be undone!",btnDisableConfirm:"Are you sure to disable? This action cannot be undone!",btnDeleteConfirm:"Are you sure to delete? This action cannot be undone!",saveSuccess:"Saved successfully",saveFailed:"Save failed",deleteSuccess:"Deleted successfully",deleteFailed:"Delete failed",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure to delete?",devSeed:"Serial",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully"},info:{title:"App Privacy Agreement",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Content too short, at least 3000 characters",saveSuccess:"Saved successfully",saveFailed:"Save failed"},upload:{title:"Avatar & Logo Upload",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Announcement Management",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scroll notice: ",noData:"No data",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"},billing:{title:"Billing Settings",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Device",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure to delete?"},gallery:{title:"Gallery Overview",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No gallery items",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"}},settings:{title:"Pengaturan",language:"Bahasa",theme:"Tema",darkMode:"Mode Gelap",lightMode:"Mode Terang",diabloMode:"Mode Gelap",notification:"Notifikasi",sound:"Pengaturan Suara",about:"Tentang",version:"Versi"},language:{title:"Pilih Bahasa",chinese:"简体中文",english:"English",korean:"한국어",thai:"ไทย",vietnamese:"Tiếng Việt",arabic:"العربية",malay:"Bahasa Melayu",japanese:"日本語",russian:"Русский",french:"Français",spanish:"Español",portuguese:"Português",german:"Deutsch",indonesian:"Bahasa Indonesia",hindi:"हिन्दी",turkish:"Türkçe",italian:"Italiano",polish:"Polski",swahili:"Kiswahili"},messages:{deleteConfirm:"Yakin ingin menghapus? Tindakan ini tidak dapat dibatalkan!",saveSuccess:"Berhasil disimpan",deleteSuccess:"Berhasil dihapus",operationSuccess:"Operasi berhasil",operationFailed:"Operasi gagal, silakan coba lagi",networkError:"Kesalahan jaringan, periksa koneksi Anda",serverError:"Kesalahan server, coba lagi nanti",noData:"Tidak ada data",loading:"Memuat...",noPermission:"Tidak memiliki izin akses",tokenExpired:"Sesi berakhir, silakan masuk kembali",operationTimeout:"Operasi waktu habis"}},"my-MS":{common:{appName:"Sistem Siaran ST",loading:"Memuatkan...",confirm:"Sahkan",cancel:"Batal",save:"Simpan",delete:"Padam",edit:"Edit",add:"Tambah",search:"Carian",refresh:"Muat semula",submit:"Hantar",reset:"Tetapkan semula",logout:"Log keluar",logoutConfirm:"Adakah anda pasti mahu log keluar?",logoutTitle:"Sahkan Log Keluar",back:"Kembali",success:"Berjaya",error:"Ralat",warning:"Amaran",info:"Maklumat",yes:"Ya",no:"Tidak",operation:"Operasi",status:"Status",name:"Nama",description:"Penerangan",createTime:"Masa Cipta",updateTime:"Masa Kemaskini",close:"Tutup",stop:"Hentikan",actions:"Tindakan",seconds:"saat",minutes:"minit",hours:"jam",moveUp:"Alih ke Atas",moveDown:"Alih ke Bawah",quick:"Pantas",unknown:"Tidak Diketahui",months:"mo",years:"yr",copy:"Copy",index:"Index",toggle:"Enable/Disable"},login:{title:"Log Masuk",subtitle:"SISTEM SIARAN",username:"Nama Pengguna",password:"Kata Laluan",usernamePlaceholder:"Masukkan nama pengguna",passwordPlaceholder:"Masukkan kata laluan",rememberMe:"Ingat saya",forgotPassword:"Lupa kata laluan?",loginButton:"Log Masuk Login",logging:"Sedang log masuk...",loginSuccess:"Log masuk berjaya",loginFailed:"Log masuk gagal",usernameRequired:"Sila masukkan nama pengguna",passwordRequired:"Sila masukkan kata laluan",invalidCredentials:"Nama pengguna atau kata laluan tidak sah"},dashboard:{title:"Papan Pemuka",welcome:"Selamat kembali",systemStatus:"Sistem berfungsi dengan normal",quickActions:"Tindakan Pantas",addDevice:"Tambah Peranti",createGroup:"Cipta Kumpulan",scheduleTask:"Jadual Tugas",broadcastNow:"Siaran Segera"},menu:{dashboard:"Papan Pemuka",devices:"Pengurusan Peranti",groups:"Pengurusan Kumpulan",tasks:"Tugas Berjadual",media:"Pengurusan Media",broadcast:"Kawalan Siaran",alarm:"Sistem Penggera",account:"Pengurusan Akaun",settings:"Tetapan",apiTest:"Ujian API",home:"Utama",mine:"Akaun Saya",admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"User & Permission Management",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully"},info:{title:"App Privacy Agreement",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Content too short, at least 3000 characters",saveSuccess:"Saved successfully",saveFailed:"Save failed"},upload:{title:"Avatar & Logo Upload",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Announcement Management",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scroll notice: ",noData:"No data",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"},billing:{title:"Billing Settings",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Device",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure to delete?"},gallery:{title:"Gallery Overview",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No gallery items",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"}}},devices:{title:"Pengurusan Peranti",list:"Senarai Peranti",online:"Dalam Talian",offline:"Luar Talian",playing:"Sedang Memain",volume:"Volum",adjustVolume:"Laraskan Volum",addDevice:"Tambah Peranti",editDevice:"Edit Peranti",deleteDevice:"Padam Peranti",deviceName:"Nama Peranti",serialNumber:"Nombor Siri",lastUpdate:"Kemas Kini Terakhir",refreshList:"Muat semula senarai peranti",batchVolume:"Laraskan volum kelompok",noDevices:"Tiada peranti, klik Tambah Peranti di penjuru kanan atas",unnamedDevice:"Peranti tanpa nama",debugSound:"Nyah pepijat bunyi",changeVolume:"Ubah volum",changeName:"Ubah nama",changeSerial:"Ubah nombor siri",id:"ID",volumeNotSet:"Tidak Ditetapkan",neverOnline:"Tidak Pernah Dalam Talian",expiredDisabled:"Tamat Tempoh Dilumpuhkan",unknown:"Tidak Diketahui",openDebugSound:"Bunyi Nyah PEPijat Buka",closeDebugSound:"Bunyi Nyah PEPijat Tutup",unknownStatus:"Status Tidak Diketahui",addDeviceTitle:"Tambah Peranti",deviceNameRequired:"Nama Peranti",deviceSerialRequired:"Siri Peranti",deviceKeyRequired:"Kunci Peranti",deviceNamePlaceholder:"Masukkan nama peranti",deviceSerialPlaceholder:"Masukkan nombor siri peranti",deviceKeyPlaceholder:"Masukkan kunci pendaftaran peranti",deviceKeyHint:"Kunci pendaftaran digunakan untuk mendaftarkan peranti ke sistem, bersamaan dengan kata laluan peranti",fillTestData:"Isi Data Ujian",renameTitle:"Tukar Nama Peranti",newDeviceNamePlaceholder:"Masukkan nama peranti baru",debugSoundTitle:"Bunyi Nyah PEPijat",selectDebugSoundStatus:"Sila pilih status bunyi nyah pepijat",editSerialTitle:"Edit Siri Peranti",currentSerial:"Siri Semasa",currentSerialPlaceholder:"Nombor siri peranti semasa",newSerial:"Siri Baru",newSerialPlaceholder:"Masukkan nombor siri baru 32 digit",serialLengthHint:"Panjang nombor siri mestilah 32 digit",editDeviceTitle:"Edit Peranti",macAddress:"Alamat MAC",macAddressPlaceholder:"Masukkan alamat MAC",ipAddress:"Alamat IP",ipAddressPlaceholder:"Masukkan alamat IP",port:"Port",portPlaceholder:"Masukkan nombor port",adjustVolumeTitle:"Laraskan Volum",volumeRange:"Julat: 1-63",preciseSetting:"Tetapan Tepat:",batchAdjustVolumeTitle:"Laraskan Volum Kelompok",selectedDevices:"Peranti Dipilih:",devicesCount:"peranti",confirmAdjust:"Sahkan Laraskan",adding:"Menambah...",saving:"Menyimpan...",adjusting:"Melaraskan...",confirmButton:"Sahkan",cancelButton:"Batal",deviceNameValidationError:"Sila masukkan nama peranti",deviceSerialValidationError:"Sila masukkan nombor siri peranti",deviceKeyValidationError:"Sila masukkan kunci peranti",newDeviceNameValidationError:"Sila masukkan nama peranti",deviceSerialLengthError:"Sila masukkan nombor siri peranti",newSerialLengthError:"Panjang nombor siri mestilah 32 digit",debugSoundSelectError:"Sila pilih buka atau tutup bunyi nyah pepijat",confirmOperation:"Sahkan Operasi",confirmDelete:"Adakah anda pasti mahu memadam peranti",deleteCannotUndo:"? Tindakan ini tidak boleh diundur!",addDeviceSuccess:"Peranti ditambah berjaya",addDeviceFailed:"Gagal menambah peranti",deviceRenameSuccess:"Nama peranti ditukar berjaya",deviceRenameFailed:"Gagal menukar nama peranti",deviceEditSuccess:"Peranti diedit berjaya",deviceEditFailed:"Gagal mengedit peranti",deviceSerialEditSuccess:"Nombor siri peranti diedit berjaya",deviceSerialEditFailed:"Gagal mengedit nombor siri peranti",debugSoundSuccess:"Bunyi nyah pepijat ditetapkan berjaya",debugSoundFailed:"Gagal menetapkan bunyi nyah pepijat",deleteDeviceSuccess:"Peranti dipadam berjaya",deleteDeviceFailed:"Gagal memadam peranti",adjustVolumeSuccess:"Volum ditetapkan kepada",adjustVolumeFailed:"Gagal melaraskan volum",batchAdjustSuccess:"Laraskan volum kelompok berjaya, jumlah",batchAdjustFailed:"Gagal melaraskan volum kelompok",volumeValidationError:"Volum mestilah antara 1-63",selectDevicesFirst:"Sila pilih peranti untuk laraskan volum dahulu",successfullyFetched:"Berjaya mendapatkan",devicesUnit:"peranti",deviceListFormatError:"Ralat format data senarai peranti",fetchDeviceListFailed:"Gagal mendapatkan senarai peranti",searchPlaceholder:"Cari nama atau nombor siri peranti...",unknownError:"Ralat tidak diketahui",listView:"Paparan Senarai",cardView:"Paparan Kad",scanDevices:"Scan Devices",deviceScan:"Device Scan",seed:"Device SEED",seedPlaceholder:"Enter 32-char hex SEED",scanButton:"Scan",scanning:"Scanning...",noDeviceFound:"No devices found",scanNotSupported:"Device scan only available in desktop client",autoIP:"Auto IP",warmMode:"Voice Prompt",mediaServer:"Media Server",mediaPort:"Media Port",gateway:"Gateway",subnetMask:"Subnet Mask",dns:"DNS",deviceIP:"Device IP",applyConfig:"Apply Config",clearDevice:"Clear Device",deviceConfigured:"Device config sent",deviceConfigureFailed:"Device config failed",deviceCleared:"Clear command sent",scanConfigTitle:"Device Network Config",scannedDevices:"Discovered Devices",scanHint:"Click scan to discover all devices on the local network",testComm:"Test Communication",testCommBtn:"Test",console:"Console",clearConsole:"Clear",consoleEmpty:"Waiting for communication...",invalidIP:"Invalid IP format",invalidMask:"Invalid subnet mask",invalidGateway:"Invalid gateway",invalidMediaIP:"Invalid media server IP",invalidPort:"Port range 1-65535",invalidDNS:"Invalid DNS format",dnsPlaceholder:"0.0.0.0 = System default",advanced:"Advanced",soundCard:"Sound Card",getAmixerStatus:"Get Status",amixerApply:"Apply",amixerGetting:"Getting...",amixerOn:"On",amixerOff:"Off",amixerDAC:"DAC Playback Volume",amixerHeadphoneVol:"Headphone Volume",amixerHeadphoneSwitch:"Headphone Switch",amixerHeadphoneRoute:"Headphone Source",amixerLineIn:"Line In Volume",amixerFMIn:"FM In Volume",amixerMicIn:"Mic In Volume",amixerMicBoost:"Mic Boost",amixerADCCapture:"ADC Capture Volume",amixerADCLeftFM:"Left FM Capture",amixerADCRightFM:"Right FM Capture",amixerADCLeftOut:"Left Out Capture",amixerADCRightOut:"Right Out Capture",amixerADCLineIn:"Line In Capture",amixerADCMic:"Mic Capture",amixerLeftFM:"Left FM",amixerLeftLeftDAC:"Left Left DAC",amixerLeftRightDAC:"Left Right DAC",amixerLeftLineIn:"Left Line In",amixerLeftMicIn:"Left Mic In",amixerRightFM:"Right FM",amixerRightLeftDAC:"Right Left DAC",amixerRightRightDAC:"Right Right DAC",amixerRightLineIn:"Right Line In",amixerRightMicIn:"Right Mic In",amixerGroupDecode:"Decode Output",amixerGroupCapture:"Capture Mixer Input",amixerGroupLeft:"Left Output Mixer",amixerGroupRight:"Right Output Mixer",amixerGroupGain:"Gain Config",amixerRouteDAC:"DAC",amixerRouteMixer:"Mixer",amixerGetSuccess:"Sound card status retrieved",amixerGetFailed:"Failed to get sound card status",amixerSetSuccess:"Setting sent",amixerSetFailed:"Setting failed"},groups:{title:"Pengurusan Kumpulan",manage:"Pengurusan Kumpulan",list:"Senarai Kumpulan",deviceCount:"Bilangan Peranti",addGroup:"Tambah Kumpulan",editGroup:"Edit Kumpulan",deleteGroup:"Padam Kumpulan",groupName:"Nama Kumpulan",inputName:"Masukkan nama kumpulan",add:"Tambah Kumpulan",playMenu:"Menu Main",id:"ID",name:"Nama",actions:"Tindakan",noGroups:"Tiada kumpulan tersedia",untitled:"Kumpulan Tanpa Nama",editDevices:"Edit Peranti",editVideo:"Edit Video",previewVideo:"Pratonton Video",groupPlay:"Main Kumpulan",allDevices:"Semua Peranti",selectedDevices:"Peranti Dipilih",selectAtLeastOneDevice:"Sila pilih sekurang-kurangnya satu peranti",videoUrl:"URL Video",inputVideoUrl:"Sila masukkan URL video",noVideoUrl:"URL video tidak ditetapkan",noVideoUrlSet:"URL siaran langsung mu38u belum ditetapkan",playSequence:"Urutan Main",fileInterval:"Selang Fail",playCount:"Kiraan Main",noPlayingItems:"Tiada urutan yang sedang dimainkan",playList:"Senarai Main",nameRequired:"Nama kumpulan tidak boleh kosong",loadSuccess:"Berjaya memuat {count} kumpulan",loadFailed:"Gagal memuat senarai kumpulan",addSuccess:"Kumpulan ditambah berjaya",addFailed:"Gagal menambah kumpulan",deleteConfirm:"Operasi ini akan memadam kumpulan ini secara kekal. Teruskan?",deleteSuccess:"Berjaya dipadam",deleteFailed:"Gagal memadam",saveSuccess:"Berjaya disimpan",saveFailed:"Gagal disimpan",loadDevicesFailed:"Gagal memuat senarai peranti",invalidGroupId:"ID kumpulan tidak sah",unknownDevice:"Peranti tidak diketahui",playFeatureComingSoon:"Ciri main kumpulan akan datang",stopPlayFeatureComingSoon:"Ciri berhenti main akan datang",playListFeatureComingSoon:"Ciri senarai main akan datang",searchDevicePlaceholder:"Masukkan nama atau ID peranti untuk mencari...",searchResult:"Ditemui {filtered} peranti (jumlah {total})",totalDevices:"Jumlah {count} peranti",noSearchResult:"Tiada peranti sepadan ditemui",noSelectedDevices:"Belum memilih peranti",searchFilePlaceholder:"Masukkan nama atau ID fail untuk mencari...",availableFiles:"Fail Tersedia",selectedFiles:"Fail Dipilih",noSelectedFiles:"Belum memilih fail",doubleClickHint:"Klik dua kali untuk menambah fail duplikat",unknownFile:"Fail tidak diketahui",playMode:"Mod Main",playMode1:"Main Berurutan 1x",playMode2:"Main Berurutan 2x",playMode3:"Main Berurutan 3x",totalDuration:"Jangka Masa Jumlah",durationFormula:"Pengiraan: (Jumlah Masa + Selang) × Kiraan Gelung",playModeHint:"Kiraan gelung, 1-99",intervalMaxHint:"Selang maksimum 3 jam (10800 saat)",estimatedDuration:"Jangka Masa Anggaran",forceStopDuration:"Jangka Masa Paksa Berhenti (Pilihan)",forceStopHint:"Berhenti secara automatik pada jangka masa ini. Mestilah kurang daripada jangka masa anggaran. 0 bermaksud tiada paksa berhenti",selectAtLeastOneFile:"Sila pilih sekurang-kurangnya satu fail",loadFilesFailed:"Gagal memuat senarai fail",groupHasNoDevices:"Kumpulan ini tidak mempunyai peranti",playStarted:"Main dimulakan dengan jayanya",playFailed:"Gagal memulakan main",invalidPlayId:"ID main tidak sah",stopPlayConfirm:"Adakah anda pasti mahu berhenti main?",stopPlayInProgress:"Sedang berhenti main, sila tunggu sebentar...",stopPlaySuccess:"Main berhenti dengan jayanya",stopPlaySuccessAndClosed:"Main berhenti dengan jayanya, senarai main telah ditutup",stopPlayFailed:"Gagal berhenti main",selectGroupForPlay:"Pilih kumpulan untuk dimainkan",devices:"peranti",devicesCount:"peranti",startPlay:"Mula Main"},tasks:{title:"Tugas Berjadual",list:"Senarai Tugas",addTask:"Tambah Tugas",editTask:"Edit Tugas",deleteTask:"Padam Tugas",taskName:"Nama Tugas",executeTime:"Masa Pelaksanaan",playMode:"Mod Main",repeat:"Ulang",files:"Fail",devices:"Peranti",advancedSettings:"Tetapan Lanjutan",playSettings:"Tetapan Main",forceStopDuration:"Tempoh Henti Paksa",forceStopHint:"Berhenti automatik pada masa ini. 0 atau kosong = tiada henti paksa",durationRequired:"Main rawak memerlukan tetapan tempoh",durationFormula:"Formula: (Jumlah Tempoh + Selang × Fail) × Kali Ulang",dateHint:"Nota: Akan dimainkan pada tarikh mula dan juga tarikh tamat. Jika tarikh mula sama dengan tarikh tamat, hanya dimainkan pada hari tersebut. Tarikh mula tidak boleh lewat daripada tarikh tamat.",dateRangeError:"Tarikh mula tidak boleh lewat daripada tarikh tamat",batchDurationHint:"Apabila main berurutan: jika jumlah tempoh senarai main > tempoh maksimum, ia akan berhenti apabila tempoh dicapai; jika jumlah tempoh senarai main < tempoh maksimum, ia akan berhenti secara automatik apabila senarai selesai dimainkan",copyConfirm:"Adakah anda pasti mahu menyalin tugas yang dipilih? Tindakan ini tidak boleh diundur.",copySuccess:"Tugas berjaya disalin",copyFailed:"Gagal menyalin tugas",timeConflict:"Konflik Masa",dateRange:"Julat Tarikh",titleDescription:"Manage scheduled playback tasks with batch operations and task groups",allGroups:"All Task Groups",addTaskGroup:"Add Task Group",deleteTaskGroup:"Delete Task Group",disableTaskGroup:"Disable Task Group",enableTaskGroup:"Enable Task Group",taskGroup:"Task Group",taskGroupName:"Task Group Name",enterGroupName:"Enter task group name",applyTaskGroup:"Apply Task Group",task:"Task",selectGroup:"Select Task Group",startTime:"Start Time",duration:"Duration",loopCount:"Loop Count",startDate:"Start Date",endDate:"End Date",changeGroup:"Change Group",noGroup:"No Group",tryPlay:"Try Play",batchDisable:"Batch Disable",batchEnable:"Batch Enable",batchEditDevices:"Batch Edit Devices",batchEditFiles:"Batch Edit Files",batchApplyGroup:"Batch Apply Group",batchEditTime:"Batch Edit Time",batchEditLoopCount:"Batch Edit Loop Count",batchEditDuration:"Batch Edit Duration",batchDelete:"Batch Delete",batchCopy:"Batch Copy",noTasks:"No Tasks",selectedCount:"Selected {count} tasks",randomPlay:"Random Play",loopPlay:"Loop {count} times",selectDevices:"Select Devices to Play",selectFiles:"Select Audio Files",allDevices:"All Devices",selectedDevices:"Selected Devices",allFiles:"All Files",selectedFiles:"Selected Files",editTaskDevices:"Edit Task Devices",editTaskFiles:"Edit Task Files",taskDuration:"Task Duration",intervalDuration:"Interval Duration",timeRange:"Time Range",to:"to",playCount:"Play Count",sequentialPlay:"Sequential Play",randomPlayMode:"Random Play",playModeChange:"Play Mode Change",enableOtherLimit:"Other limits not required",enableStartDate:"Enable Start Date",enableEndDate:"Enable End Date",enterTaskName:"Enter task name",noTasksSelected:"No tasks selected",devicesRequired:"No devices selected",filesRequired:"No audio files selected",saveSuccess:"Save successful",saveFailed:"Save failed",deleteSuccess:"Delete successful",deleteFailed:"Delete failed",deleteConfirm:"This operation will permanently delete the task. Continue?",enableSuccess:"Task enabled",disableSuccess:"Task disabled",startPlaySuccess:"Play started",startPlayFailed:"Play start failed",stopPlaySuccess:"Play stopped",stopPlayFailed:"Play stop failed",groupNameRequired:"Task group name cannot be empty",addGroupSuccess:"Task group added successfully",addGroupFailed:"Failed to add task group",deleteGroupSuccess:"Task group deleted successfully",deleteGroupFailed:"Failed to delete task group",disableGroupSuccess:"Task group disabled successfully",disableGroupFailed:"Failed to disable task group",enableGroupSuccess:"Task group enabled successfully",enableGroupFailed:"Failed to enable task group",applyGroupSuccess:"Task group applied successfully",applyGroupFailed:"Failed to apply task group",selectGroupFirst:"Please select a task group first",batchDisableSuccess:"Batch disable successful",batchEnableSuccess:"Batch enable successful",unknownDevice:"Unknown Device",unknownFile:"Unknown File",calculate:"Calculate",monday:"Isnin",tuesday:"Selasa",wednesday:"Rabu",thursday:"Khamis",friday:"Jumaat",saturday:"Sabtu",sunday:"Ahad",index:"Index",weekdays:"Play Days",noLimit:"Tiada had",autoCalc:"Auto-calculated",taskNameRequired:"Task name is required",startTimeRequired:"Start time is required",cannotDeletePlaying:"Task is playing, please stop first",cannotDeleteEnabled:"Task is enabled, please disable first",cannotEditPlaying:"Task is playing, please stop first",disabled:"Disabled",enabled:"Enabled",enableTask:"Enable",disableTask:"Disable",noSelectedFiles:"No files selected yet",clickToAddHint:"Click files on the left to add",estimatedDuration:"Estimated Duration",endTime:"End Time",copyCount:"Copy Count",copyNewName:"Default New Name",copyNewNamePlaceholder:"Default new task name",copyInterval:"Time Interval",copyIntervalUnit:"minutes",copyPreview:"Preview List",deleteGroupConfirm:"Are you sure you want to delete this task group? Tasks in the group will not be deleted.",noTasksInGroup:"No tasks in this task group",batchPartialFailed:"{failed} task(s) operation failed"},media:{title:"Pengurusan Media",list:"Senarai Fail",upload:"Muat Naik",delete:"Padam",play:"Main",download:"Muat Turun",fileName:"Nama Fail",fileSize:"Saiz Fail",fileType:"Jenis Fail",uploadTime:"Masa Muat Naik",duration:"Tempoh",noFiles:"Tiada fail lagi",dropHint:"Seret fail MP3 ke sini untuk muat naik",dropSub:"Menyokong format MP3, maks 40MB setiap fail",selectFiles:"Pilih Fail",selectFolder:"Pilih Folder",onlyMp3:"Hanya fail MP3 disokong",fileTooLarge:"Fail melebihi had 40MB",uploadFailed:"Muat naik gagal",uploadSuccess:"Berjaya memuat naik {count} fail",uploading:"Memuat naik...",deleteSingleConfirm:"Pasti mahu padam",deleteConfirm:"Padam fail yang dipilih? Tidak boleh dibatalkan",deleteSuccess:"Berjaya dipadam",deleteFailed:"Padam gagal",batchDelete:"Padam Berkumpulan",batchDeleteSuccess:"Berjaya memadam {count} fail",selectedCount:"{count} fail dipilih",tts:"Text to Speech",ttsFileName:"File Name",ttsFileNamePlaceholder:"Enter file name",ttsVoice:"Voice",ttsSpeed:"Speed",ttsSpeedSlow:"Slow",ttsSpeedMedium:"Medium",ttsSpeedFast:"Fast",ttsText:"Text Input",ttsTextPlaceholder:"Enter text to convert",ttsTextTooShort:"Text must be at least 3 characters",ttsSuccess:"TTS file created",ttsFailed:"TTS generation failed",uploadDone:"Upload complete"},broadcast:{title:"Kawalan Siaran",serverConfig:"Konfigurasi Pelayan",selectDevices:"Pilih Peranti",quickSelectGroup:"Pilih Kumpulan Pantas",selectAllOnline:"Pilih Semua Online",clearSelection:"Kosongkan Pilihan",selectedDevices:"{count} peranti dipilih",noDevices:"Tiada peranti",noMatch:"Tiada peranti yang sepadan",broadcastControl:"Kawalan Siaran",playLevel:"Keutamaan Main",userLevel:"Tahap Pengguna",holdToTalk:"Tekan Untuk Bercakap",releaseToStop:"Lepas Untuk Berhenti",broadcasting:"Sedang Siarkan...",connected:"Bersambung",notConnected:"Tidak Bersambung",selectFiles:"Pilih Fail",startBroadcast:"Mula Siaran",stopBroadcast:"Henti Siaran",playbackMode:"Mod Main",interval:"Selang Masa",loop:"Kiraan Gelung",audioSource:"Sumber Audio",microphone:"Mikrofon",noAudioDevice:"Tiada peranti input audio dikesan",audioReady:"Audio Sedia",inputVolume:"Input Volume",enableMicrophone:"Connect Microphone",startPreview:"Start Preview"},alarm:{title:"Sistem Penggera",settings:"Tetapan Penggera",history:"Sejarah Penggera",enable:"Dayakan",disable:"Lumpuhkan",triggerCondition:"Syarat Pemicu",alarmFile:"Fail Penggera",linkage:"Peranti Berkaitan",selectDevices:"Pilih Peranti",searchDevice:"Cari nama peranti atau nombor siri",selectAllOnline:"Pilih Semua Dalam Talian",clearSelection:"Kosongkan Pilihan",selectedCount:"{count} peranti dipilih",noDevices:"Tiada peranti",noMatch:"Tiada peranti sepadan",alarmConfig:"Konfigurasi Penggera",alarmName:"Nama Penggera",alarmNamePlaceholder:"Masukkan nama penggera",audioSource:"Sumber Audio",selectFile:"Pilih fail yang dimuat naik",inputUrl:"Masukkan URL secara manual",selectFilePlaceholder:"Pilih fail audio",urlPlaceholder:"Masukkan URL fail audio",registerAlarm:"Daftar Penggera",registering:"Mendaftar...",registerResult:"Hasil Pendaftaran",registerSuccess:"Pendaftaran berjaya",registerFailed:"Pendaftaran gagal",noDevicesSelected:"Sila pilih sekurang-kurangnya satu peranti",noAudioConfigured:"Sila konfigurasikan fail audio",online:"Dalam Talian",offline:"Luar Talian",deviceSn:"Nombor Siri Peranti",registeredList:"Penggera Berdaftar",noRegistered:"Tiada penggera berdaftar",loadListFailed:"Gagal memuatkan senarai penggera",deviceName:"Nama Peranti",fileName:"Nama Fail",refreshList:"Segarkan Senarai",unregisterAlarm:"Nyahdaftar",unregisterConfirm:"Adakah anda pasti ingin menyahdaftarkan penggera ini?",unregisterSuccess:"Nyahdaftar berjaya",unregisterFailed:"Nyahdaftar gagal",linkageTitle:"Pautan Penggera",linkageDesc:"Apabila peranti A dipicu, peranti berkaitan (termasuk dirinya) memainkan audio yang ditentukan",linkagePlanName:"Nama Pelan",linkagePlanNamePlaceholder:"Masukkan nama pelan",linkageDevices:"Peranti Berkaitan",linkageDevicesHint:"Pilih peranti pencetus dan main balik (boleh termasuk peranti pencetus itu sendiri)",linkageAudio:"Fail Audio",addLinkagePlan:"Tambah Pelan Pautan",adding:"Menambah...",linkageList:"Senarai Pelan Pautan",noLinkagePlans:"Tiada pelan pautan",linkageDeviceCount:"Kiraan Peranti",addLinkageSuccess:"Pelan pautan berjaya ditambah",addLinkageFailed:"Gagal menambah pelan pautan",linkagePlanNameRequired:"Sila masukkan nama pelan",linkageNoDevices:"Sila pilih sekurang-kurangnya satu peranti",linkageNoAudio:"Sila konfigurasikan fail audio",linkageTriggerDevice:"Peranti Pencetus",linkageTriggerDeviceHint:"Apabila peranti ini mencetuskan penggera, peranti berkaitan akan memainkan audio",linkageTriggerDevicePlaceholder:"Pilih peranti pencetus penggera",linkageNoTriggerDevice:"Sila pilih peranti pencetus",registerTrigger:"Daftar",registerTriggerTitle:"Daftar Peranti Pencetus",registerTriggerSuccess:"Peranti pencetus berjaya didaftarkan",registerTriggerFailed:"Gagal mendaftarkan peranti pencetus",loadLinkageFailed:"Gagal memuatkan pelan pautan",deleteLinkageConfirm:"Adakah anda pasti ingin memadam pelan pautan",deleteLinkageFailed:"Gagal memadam pelan pautan",forceUnregTitle:"Paksa Nyahdaftar Penggera",forceUnregHint:"Paksa nyahdaftar semua pendaftaran penggera peranti",forceUnregButton:"Paksa Nyahdaftar Penggera",forceUnregModalHint:"Pilih peranti untuk memaksa nyahdaftar semua penggera (berdikari + pautan)",forceUnregConfirm:"Sahkan Nyahdaftar",forceUnregSuccess:"Paksa nyahdaftar penggera berjaya",forceUnregFailed:"Paksa nyahdaftar penggera gagal"},account:{title:"Pengurusan Akaun",profile:"Profil",changePassword:"Tukar Kata Laluan",subAccounts:"Akaun Sub",logs:"Log Operasi",username:"Nama Pengguna",nickname:"Nama Samaran",email:"E-mel",phone:"Nombor Telefon",role:"Peranan",level:"Tahap",addSubUser:"Add Sub Account",usernamePlaceholder:"Enter username",passwordPlaceholder:"Enter password",nicknamePlaceholder:"Enter nickname",beizhu:"Remark",beizhuPlaceholder:"Enter remark",password:"Password",levelLabel:"Level",levelPlaceholder:"Select level",mask:"Permission Mask",maskPlaceholder:"40-bit permission mask (0/1)",maskDefault:"00000000000000000000000000000000000000000000",permissions:"Permission Settings",permCreateSub:"Can create sub accounts",permManageDevice:"Can add/delete devices",permUploadFile:"Can upload files",addSuccess:"Sub account added successfully",addFailed:"Failed to add sub account",listFailed:"Failed to get sub account list",noSubUsers:"No sub accounts yet",createTime:"Create Time",status:"Status",statusNormal:"Normal",statusDisabled:"Disabled",userLevel:"User Level",playLevel:"Play Level",passwordShow:"Password",refreshList:"Refresh List",usernameRequired:"Please enter username",passwordRequired:"Please enter password",permChangeFailed:"Permission change failed",adding:"Adding...",deleteConfirm:"Are you sure to delete sub account {name}? This cannot be undone!",deleteSuccess:"Sub account deleted successfully",deleteFailed:"Failed to delete sub account",editDevices:"Edit Devices",editDevicesSuccess:"Devices updated successfully",editDevicesFailed:"Failed to update devices",loadDevicesFailed:"Failed to load device list",searchDevice:"Search device name or ID",noDevices:"No devices",resetToken:"Reset Token",resetTokenConfirm:"Are you sure to reset token for {name}?",resetTokenSuccess:"Token reset successfully",resetTokenFailed:"Token reset failed",newToken:"New Token"},settings:{title:"Tetapan",language:"Bahasa",theme:"Tema",darkMode:"Mod Gelap",lightMode:"Mod Cerah",diabloMode:"Mod Diablo",notification:"Pemberitahuan",sound:"Tetapan Bunyi",about:"Perihal",version:"Versi"},language:{title:"Pilih Bahasa",chinese:"简体中文",english:"English",korean:"한국어",thai:"ไทย",vietnamese:"Tiếng Việt",arabic:"العربية",malay:"Bahasa Melayu",shiite:"Syiah",sunni:"Sunni",japanese:"日本語",russian:"Русский",french:"Français",spanish:"Español",portuguese:"Português",german:"Deutsch",indonesian:"Bahasa Indonesia",hindi:"हिन्दी",turkish:"Türkçe",italian:"Italiano",polish:"Polski",swahili:"Kiswahili"},messages:{deleteConfirm:"Adakah anda pasti mahu memadam? Tindakan ini tidak boleh diundur!",saveSuccess:"Disimpan dengan jayanya",deleteSuccess:"Dipadam dengan jayanya",operationSuccess:"Operasi berjaya",operationFailed:"Operasi gagal, sila cuba lagi",networkError:"Ralat rangkaian, sila semak sambungan anda",serverError:"Ralat pelayan, sila cuba lagi kemudian",noData:"Tiada data tersedia",loading:"Memuatkan...",noPermission:"Tiada kebenaran untuk akses",tokenExpired:"Sesi telah tamat, sila log masuk semula",operationTimeout:"Operasi tamat tempoh"},clientLogin:{subtitle:"Client Edition",hostPlaceholder:"Server address, e.g. 192.168.1.100:12080",hostHint:"Enter server IP:port, http:// is optional",hostRequired:"Please enter server address"},admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"Select Language",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data available",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",btnEnable:"Enable",btnDisable:"Disable",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully"},info:{title:"Select Language",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Announcement too short",saveSuccess:"Saved successfully",saveFailed:"Update failed"},upload:{title:"Select Language",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Select Language",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scrolling Notice",noData:"No data available",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"},billing:{title:"Select Language",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Slideshow",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"},gallery:{title:"Select Language",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No data available",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"}}},"hi-IN":{common:{appName:"ST प्रसारण प्रणाली",loading:"Loading...",confirm:"Confirm",cancel:"Cancel",save:"Save",delete:"Delete",edit:"Edit",add:"Add",search:"Search",refresh:"Refresh",submit:"Submit",reset:"Reset",logout:"Logout",logoutConfirm:"क्या आप लॉग आउट करना चाहते हैं?",logoutTitle:"लॉग आउट की पुष्टि",back:"Back",success:"Success",error:"Error",warning:"Warning",info:"Info",yes:"Yes",no:"No",operation:"Operation",status:"Status",index:"Index",name:"Name",description:"Description",createTime:"Create Time",updateTime:"Update Time",close:"Close",stop:"Stop",toggle:"Enable/Disable",actions:"Actions",seconds:"seconds",minutes:"minutes",hours:"hours",moveUp:"Move Up",moveDown:"Move Down",quick:"Quick",unknown:"Unknown",months:"mo",years:"yr",copy:"Copy"},login:{title:"Login",subtitle:"BROADCAST SYSTEM",username:"Username",password:"Password",usernamePlaceholder:"Enter username",passwordPlaceholder:"Enter password",rememberMe:"Remember me",forgotPassword:"Forgot password?",loginButton:"Login",logging:"Logging in...",loginSuccess:"Login successful",loginFailed:"Login failed",usernameRequired:"Please enter username",passwordRequired:"Please enter password",invalidCredentials:"Invalid username or password"},clientLogin:{subtitle:"Client Edition",hostPlaceholder:"Server address, e.g. 192.168.1.100:12080",hostHint:"Enter server IP:port, http:// is optional",hostRequired:"Please enter server address"},dashboard:{title:"Dashboard",welcome:"Welcome back",systemStatus:"System is running normally",quickActions:"Quick Actions",addDevice:"Add Device",createGroup:"Create Group",scheduleTask:"Schedule Task",broadcastNow:"Broadcast Now"},menu:{dashboard:"Dashboard",devices:"Devices",groups:"Groups",tasks:"Tasks",media:"Media",broadcast:"Broadcast",alarm:"Alarm",account:"Account",settings:"Settings",apiTest:"API Test",home:"होम",mine:"मेरा खाता"},devices:{title:"Device Management",list:"Device List",online:"Online",offline:"Offline",playing:"Playing",volume:"Volume",adjustVolume:"Adjust Volume",addDevice:"Add Device",editDevice:"Edit Device",deleteDevice:"Delete Device",deviceName:"Device Name",serialNumber:"Serial Number",lastUpdate:"Last Update",refreshList:"Refresh Device List",batchVolume:"Batch Adjust Volume",noDevices:"No devices available, click Add Device in top right",unnamedDevice:"Unnamed Device",debugSound:"Debug Sound",changeVolume:"Change Volume",changeName:"Change Name",changeSerial:"Change Serial",id:"ID",volumeNotSet:"Not Set",neverOnline:"Never Online",expiredDisabled:"Expired Disabled",unknown:"Unknown",openDebugSound:"Open Debug Sound",closeDebugSound:"Close Debug Sound",unknownStatus:"Unknown Status",addDeviceTitle:"Add Device",deviceNameRequired:"Device Name",deviceSerialRequired:"Device Serial",deviceKeyRequired:"Device Key",deviceNamePlaceholder:"Enter device name",deviceSerialPlaceholder:"Enter device serial",deviceKeyPlaceholder:"Enter device registration key",deviceKeyHint:"Registration key is used to register device to system, equivalent to device password",fillTestData:"Fill Test Data",renameTitle:"Rename Device",newDeviceNamePlaceholder:"Enter new device name",debugSoundTitle:"Debug Sound",selectDebugSoundStatus:"Select debug sound status",editSerialTitle:"Edit Device Serial",currentSerial:"Current Serial",currentSerialPlaceholder:"Current device serial",newSerial:"New Serial",newSerialPlaceholder:"Enter 32-digit new serial",serialLengthHint:"Serial number length must be 32 digits",editDeviceTitle:"Edit Device",macAddress:"MAC Address",macAddressPlaceholder:"Enter MAC address",ipAddress:"IP Address",ipAddressPlaceholder:"Enter IP address",port:"Port",portPlaceholder:"Enter port number",adjustVolumeTitle:"Adjust Volume",volumeRange:"Range: 1-63",preciseSetting:"Precise Setting:",batchAdjustVolumeTitle:"Batch Adjust Volume",selectedDevices:"Selected Devices:",devicesCount:"devices",confirmAdjust:"Confirm Adjust",adding:"Adding...",saving:"Saving...",adjusting:"Adjusting...",confirmButton:"Confirm",cancelButton:"Cancel",deviceNameValidationError:"Please enter device name",deviceSerialValidationError:"Please enter device serial",deviceKeyValidationError:"Please enter device key",newDeviceNameValidationError:"Please enter device name",deviceSerialLengthError:"Please enter device serial",newSerialLengthError:"Serial number length must be 32 digits",debugSoundSelectError:"Please select open or close debug sound",confirmOperation:"Confirm Operation",confirmDelete:"Are you sure to delete device",deleteCannotUndo:"? This action cannot be undone!",addDeviceSuccess:"Device added successfully",addDeviceFailed:"Failed to add device",deviceRenameSuccess:"Device renamed successfully",deviceRenameFailed:"Failed to rename device",deviceEditSuccess:"Device edited successfully",deviceEditFailed:"Failed to edit device",deviceSerialEditSuccess:"Device serial edited successfully",deviceSerialEditFailed:"Failed to edit device serial",debugSoundSuccess:"Debug sound set successfully",debugSoundFailed:"Failed to set debug sound",deleteDeviceSuccess:"Device deleted successfully",deleteDeviceFailed:"Failed to delete device",adjustVolumeSuccess:"Volume set to",adjustVolumeFailed:"Failed to adjust volume",batchAdjustSuccess:"Batch adjust volume successful, total",batchAdjustFailed:"Failed to batch adjust volume",volumeValidationError:"Volume must be between 1-63",selectDevicesFirst:"Please select devices to adjust volume first",successfullyFetched:"Successfully fetched",devicesUnit:"devices",deviceListFormatError:"Device list data format error",fetchDeviceListFailed:"Failed to fetch device list",searchPlaceholder:"डिवाइस नाम या क्रमांक खोजें...",unknownError:"Unknown error",listView:"List View",cardView:"Card View",scanDevices:"Scan Devices",deviceScan:"Device Scan",seed:"Device SEED",seedPlaceholder:"Enter 32-char hex SEED",scanButton:"Scan",scanning:"Scanning...",noDeviceFound:"No devices found",scanNotSupported:"Device scan only available in desktop client",autoIP:"Auto IP",warmMode:"Voice Prompt",mediaServer:"Media Server",mediaPort:"Media Port",gateway:"Gateway",subnetMask:"Subnet Mask",dns:"DNS",deviceIP:"Device IP",applyConfig:"Apply Config",clearDevice:"Clear Device",deviceConfigured:"Device config sent",deviceConfigureFailed:"Device config failed",deviceCleared:"Clear command sent",scanConfigTitle:"Device Network Config",scannedDevices:"Discovered Devices",scanHint:"Click scan to discover all devices on the local network",testComm:"Test Communication",testCommBtn:"Test",console:"Console",clearConsole:"Clear",consoleEmpty:"Waiting for communication...",invalidIP:"Invalid IP format",invalidMask:"Invalid subnet mask",invalidGateway:"Invalid gateway",invalidMediaIP:"Invalid media server IP",invalidPort:"Port range 1-65535",invalidDNS:"Invalid DNS format",dnsPlaceholder:"0.0.0.0 = System default",advanced:"Advanced",soundCard:"Sound Card",getAmixerStatus:"Get Status",amixerApply:"Apply",amixerGetting:"Getting...",amixerOn:"On",amixerOff:"Off",amixerDAC:"DAC Playback Volume",amixerHeadphoneVol:"Headphone Volume",amixerHeadphoneSwitch:"Headphone Switch",amixerHeadphoneRoute:"Headphone Source",amixerLineIn:"Line In Volume",amixerFMIn:"FM In Volume",amixerMicIn:"Mic In Volume",amixerMicBoost:"Mic Boost",amixerADCCapture:"ADC Capture Volume",amixerADCLeftFM:"Left FM Capture",amixerADCRightFM:"Right FM Capture",amixerADCLeftOut:"Left Out Capture",amixerADCRightOut:"Right Out Capture",amixerADCLineIn:"Line In Capture",amixerADCMic:"Mic Capture",amixerLeftFM:"Left FM",amixerLeftLeftDAC:"Left Left DAC",amixerLeftRightDAC:"Left Right DAC",amixerLeftLineIn:"Left Line In",amixerLeftMicIn:"Left Mic In",amixerRightFM:"Right FM",amixerRightLeftDAC:"Right Left DAC",amixerRightRightDAC:"Right Right DAC",amixerRightLineIn:"Right Line In",amixerRightMicIn:"Right Mic In",amixerGroupDecode:"Decode Output",amixerGroupCapture:"Capture Mixer Input",amixerGroupLeft:"Left Output Mixer",amixerGroupRight:"Right Output Mixer",amixerGroupGain:"Gain Config",amixerRouteDAC:"DAC",amixerRouteMixer:"Mixer",amixerGetSuccess:"Sound card status retrieved",amixerGetFailed:"Failed to get sound card status",amixerSetSuccess:"Setting sent",amixerSetFailed:"Setting failed"},groups:{title:"Group Management",list:"Group List",deviceCount:"Device Count",addGroup:"Add Group",editGroup:"Edit Group",deleteGroup:"Delete Group",groupName:"Group Name",manage:"Group Management",inputName:"Input group name",add:"Add Group",playMenu:"Play Menu",id:"ID",name:"Name",actions:"Actions",noGroups:"No groups available",untitled:"Untitled Group",editDevices:"Edit Devices",editVideo:"Edit Video",previewVideo:"Preview Video",groupPlay:"Group Play",allDevices:"All Devices",selectedDevices:"Selected Devices",selectAtLeastOneDevice:"Please select at least one device",videoUrl:"Video URL",inputVideoUrl:"Please enter video URL",noVideoUrl:"No video URL set",noVideoUrlSet:"Mu38 live stream URL not set yet",playSequence:"Play Sequence",fileInterval:"File Interval",playCount:"Play Count",noPlayingItems:"No currently playing sequences",playList:"Play List",nameRequired:"Group name cannot be empty",loadSuccess:"Successfully loaded {count} groups",loadFailed:"Failed to load group list",addSuccess:"Group added successfully",addFailed:"Failed to add group",deleteConfirm:"This operation will permanently delete this group. Continue?",deleteSuccess:"Deleted successfully",deleteFailed:"Failed to delete",saveSuccess:"Saved successfully",saveFailed:"Failed to save",loadDevicesFailed:"Failed to load device list",invalidGroupId:"Invalid group ID",unknownDevice:"Unknown device",playFeatureComingSoon:"Group play feature coming soon",stopPlayFeatureComingSoon:"Stop play feature coming soon",playListFeatureComingSoon:"Play list feature coming soon",searchDevicePlaceholder:"Enter device name or ID to search...",searchResult:"Found {filtered} devices (total {total})",totalDevices:"Total {count} devices",noSearchResult:"No matching devices found",noSelectedDevices:"No devices selected yet",searchFilePlaceholder:"Enter file name or ID to search...",availableFiles:"Available Files",selectedFiles:"Selected Files",noSelectedFiles:"No files selected yet",doubleClickHint:"Double-click to add duplicate files",unknownFile:"Unknown file",playMode:"Play Mode",playMode1:"Sequential Play 1x",playMode2:"Sequential Play 2x",playMode3:"Sequential Play 3x",totalDuration:"Estimated Duration",durationFormula:"Calculation: (Total Duration + Interval) × Loop Count",playModeHint:"Loop count, 1-99",intervalMaxHint:"Maximum interval 3 hours (10800 seconds)",estimatedDuration:"Estimated Duration",forceStopDuration:"Force Stop Duration (Optional)",forceStopHint:"Auto-stop at this duration. Must be less than estimated duration. 0 means no force stop",selectAtLeastOneFile:"Please select at least one file",loadFilesFailed:"Failed to load file list",groupHasNoDevices:"This group has no devices",playStarted:"Play started successfully",playFailed:"Failed to start play",invalidPlayId:"Invalid play ID",stopPlayConfirm:"Are you sure you want to stop play?",stopPlayInProgress:"Stopping play, please wait...",stopPlaySuccess:"Play stopped successfully",stopPlaySuccessAndClosed:"Play stopped successfully, play list closed",stopPlayFailed:"Failed to stop play",selectGroupForPlay:"Select a group to play",devices:"devices",devicesCount:"devices",startPlay:"Start Play"},tasks:{title:"Scheduled Tasks",titleDescription:"Manage scheduled playback tasks with batch operations and task groups",list:"Task List",addTask:"Add Task",editTask:"Edit Task",deleteTask:"Delete Task",taskName:"Task Name",executeTime:"Execute Time",playMode:"Play Mode",repeat:"Repeat",files:"Files",devices:"Devices",allGroups:"All Task Groups",addTaskGroup:"Add Task Group",deleteTaskGroup:"Delete Task Group",disableTaskGroup:"Disable Task Group",enableTaskGroup:"Enable Task Group",taskGroup:"Task Group",taskGroupName:"Task Group Name",enterGroupName:"Enter task group name",applyTaskGroup:"Apply Task Group",task:"Task",selectGroup:"Select Task Group",startTime:"Start Time",duration:"Duration",loopCount:"Loop Count",startDate:"Start Date",endDate:"End Date",changeGroup:"Change Group",noGroup:"No Group",tryPlay:"Try Play",batchDisable:"Batch Disable",batchEnable:"Batch Enable",batchEditDevices:"Batch Edit Devices",batchEditFiles:"Batch Edit Files",batchApplyGroup:"Batch Apply Group",batchEditTime:"Batch Edit Time",batchEditLoopCount:"Batch Edit Loop Count",batchEditDuration:"Batch Edit Duration",batchDelete:"Batch Delete",batchCopy:"Batch Copy",noTasks:"No Tasks",selectedCount:"Selected {count} tasks",randomPlay:"Random Play",loopPlay:"Loop {count} times",selectDevices:"Select Devices to Play",selectFiles:"Select Audio Files",allDevices:"All Devices",selectedDevices:"Selected Devices",allFiles:"All Files",selectedFiles:"Selected Files",editTaskDevices:"Edit Task Devices",editTaskFiles:"Edit Task Files",taskDuration:"Task Duration",intervalDuration:"Interval Duration",timeRange:"Time Range",to:"to",playCount:"Play Count",sequentialPlay:"Sequential Play",randomPlayMode:"Random Play",playModeChange:"Play Mode Change",enableOtherLimit:"Other limits not required",enableStartDate:"Enable Start Date",enableEndDate:"Enable End Date",enterTaskName:"Enter task name",noTasksSelected:"No tasks selected",devicesRequired:"No devices selected",filesRequired:"No audio files selected",saveSuccess:"Save successful",saveFailed:"Save failed",deleteSuccess:"Delete successful",deleteFailed:"Delete failed",deleteConfirm:"This operation will permanently delete the task. Continue?",enableSuccess:"Task enabled",disableSuccess:"Task disabled",startPlaySuccess:"Play started",startPlayFailed:"Play start failed",stopPlaySuccess:"Play stopped",stopPlayFailed:"Play stop failed",groupNameRequired:"Task group name cannot be empty",addGroupSuccess:"Task group added successfully",addGroupFailed:"Failed to add task group",deleteGroupSuccess:"Task group deleted successfully",deleteGroupFailed:"Failed to delete task group",disableGroupSuccess:"Task group disabled successfully",disableGroupFailed:"Failed to disable task group",enableGroupSuccess:"Task group enabled successfully",enableGroupFailed:"Failed to enable task group",applyGroupSuccess:"Task group applied successfully",applyGroupFailed:"Failed to apply task group",selectGroupFirst:"Please select a task group first",batchDisableSuccess:"Batch disable successful",batchEnableSuccess:"Batch enable successful",unknownDevice:"Unknown Device",unknownFile:"Unknown File",calculate:"Calculate",monday:"सोमवार",tuesday:"मंगलवार",wednesday:"बुधवार",thursday:"गुरुवार",friday:"शुक्रवार",saturday:"शनिवार",sunday:"रविवार",index:"Index",weekdays:"Play Days",noLimit:"असीमित",autoCalc:"Auto-calculated",taskNameRequired:"Task name is required",startTimeRequired:"Start time is required",cannotDeletePlaying:"Task is playing, please stop first",cannotDeleteEnabled:"Task is enabled, please disable first",cannotEditPlaying:"Task is playing, please stop first",disabled:"Disabled",enabled:"Enabled",enableTask:"Enable",disableTask:"Disable",noSelectedFiles:"No files selected yet",clickToAddHint:"Click files on the left to add",estimatedDuration:"Estimated Duration",advancedSettings:"Advanced Settings",playSettings:"Play Settings",forceStopDuration:"Force Stop Duration",forceStopHint:"If set, playback auto-stops at this time. Must be less than estimated duration. 0 or empty means no force stop",durationRequired:"Random play requires a duration",durationFormula:"Calculation: (Total Duration + Interval × File Count) × Loop Count",dateHint:"Note: Plays on the start date and also on the end date. If both dates are the same, plays only on that day. Start date cannot be later than end date.",dateRangeError:"Start date cannot be later than end date",batchDurationHint:"For sequential play: if playlist total duration > max duration, it stops when duration is reached; if playlist total duration < max duration, it stops when playlist finishes",copyConfirm:"Are you sure you want to copy the selected tasks? This action cannot be undone.",copySuccess:"Tasks copied successfully",copyFailed:"Failed to copy tasks",timeConflict:"Time Conflict",dateRange:"Date Range",endTime:"End Time",copyCount:"Copy Count",copyNewName:"Default New Name",copyNewNamePlaceholder:"Default new task name",copyInterval:"Time Interval",copyIntervalUnit:"minutes",copyPreview:"Preview List",deleteGroupConfirm:"Are you sure you want to delete this task group? Tasks in the group will not be deleted.",noTasksInGroup:"No tasks in this task group",batchPartialFailed:"{failed} task(s) operation failed"},media:{title:"Media Management",list:"File List",upload:"Upload",delete:"Delete",play:"Play",download:"Download",fileName:"File Name",fileSize:"File Size",fileType:"File Type",uploadTime:"Upload Time",duration:"Duration",noFiles:"No files yet",dropHint:"Drag & drop MP3 files here to upload",dropSub:"Supports MP3 format, max 40MB per file",selectFiles:"Select Files",selectFolder:"Select Folder",onlyMp3:"Only MP3 files are supported",fileTooLarge:"File exceeds 40MB limit",uploadFailed:"Upload failed",uploadSuccess:"Successfully uploaded {count} file(s)",uploading:"Uploading...",deleteSingleConfirm:"Are you sure you want to delete",deleteConfirm:"Delete selected files? This cannot be undone",deleteSuccess:"Deleted successfully",deleteFailed:"Delete failed",batchDelete:"Batch Delete",batchDeleteSuccess:"Successfully deleted {count} file(s)",selectedCount:"{count} file(s) selected",uploadDone:"Upload complete",tts:"Text to Speech",ttsFileName:"File Name",ttsFileNamePlaceholder:"Enter file name to save",ttsVoice:"Voice",ttsSpeed:"Speed",ttsSpeedSlow:"Slow",ttsSpeedMedium:"Medium",ttsSpeedFast:"Fast",ttsText:"Text Input",ttsTextPlaceholder:"Enter text to convert to speech",ttsTextTooShort:"Text must be at least 3 characters",ttsSuccess:"TTS file created successfully",ttsFailed:"TTS generation failed"},broadcast:{title:"Broadcast Control",serverConfig:"Server Configuration",selectDevices:"Select Devices",quickSelectGroup:"Quick Select Group",selectAllOnline:"Select All Online",clearSelection:"Clear Selection",selectedDevices:"{count} device(s) selected",noDevices:"No devices available",noMatch:"No matching devices",broadcastControl:"Broadcast Control",playLevel:"Play Priority",userLevel:"User Level",holdToTalk:"Hold to Talk",releaseToStop:"Release to Stop",broadcasting:"Broadcasting...",connected:"Connected",notConnected:"Not Connected",selectFiles:"Select Files",startBroadcast:"Start Broadcast",stopBroadcast:"Stop Broadcast",playbackMode:"Playback Mode",interval:"Interval",loop:"Loop Count",audioSource:"Audio Source",microphone:"Microphone",noAudioDevice:"No audio input device detected",audioReady:"Audio Ready",inputVolume:"Input Volume",enableMicrophone:"Connect Microphone",startPreview:"Start Preview"},alarm:{title:"अलार्म सिस्टम",settings:"अलार्म सेटिंग्स",history:"अलार्म इतिहास",enable:"सक्षम",disable:"अक्षम",triggerCondition:"ट्रिगर स्थिति",alarmFile:"अलार्म फ़ाइल",linkage:"लिंकेज डिवाइस",selectDevices:"डिवाइस चुनें",searchDevice:"डिवाइस नाम या सीरियल नंबर खोजें",selectAllOnline:"सभी ऑनलाइन चुनें",clearSelection:"चयन साफ़ करें",selectedCount:"{count} डिवाइस चयनित",noDevices:"कोई डिवाइस नहीं",noMatch:"कोई मिलान डिवाइस नहीं",alarmConfig:"अलार्म कॉन्फ़िगरेशन",alarmName:"अलार्म नाम",alarmNamePlaceholder:"अलार्म नाम दर्ज करें",audioSource:"ऑडियो स्रोत",selectFile:"अपलोड की गई फ़ाइल चुनें",inputUrl:"URL मैन्युअली दर्ज करें",selectFilePlaceholder:"ऑडियो फ़ाइल चुनें",urlPlaceholder:"ऑडियो फ़ाइल URL दर्ज करें",registerAlarm:"अलार्म पंजीकृत करें",registering:"पंजीकरण हो रहा है...",registerResult:"पंजीकरण परिणाम",registerSuccess:"पंजीकरण सफल",registerFailed:"पंजीकरण विफल",noDevicesSelected:"कृपया कम से कम एक डिवाइस चुनें",noAudioConfigured:"कृपया ऑडियो फ़ाइल कॉन्फ़िगर करें",online:"ऑनलाइन",offline:"ऑफ़लाइन",deviceSn:"डिवाइस सीरियल नंबर",registeredList:"पंजीकृत अलार्म",noRegistered:"कोई पंजीकृत अलार्म नहीं",loadListFailed:"अलार्म सूची लोड करने में विफल",deviceName:"डिवाइस नाम",fileName:"फ़ाइल नाम",refreshList:"सूची रीफ़्रेश करें",unregisterAlarm:"पंजीकरण हटाएं",unregisterConfirm:"क्या आप इस अलार्म का पंजीकरण हटाना चाहते हैं?",unregisterSuccess:"पंजीकरण हटाना सफल",unregisterFailed:"पंजीकरण हटाना विफल",linkageTitle:"अलार्म लिंकेज",linkageDesc:"जब डिवाइस A ट्रिगर होता है, लिंक किए गए डिवाइस (स्वयं सहित) निर्दिष्ट ऑडियो चलाते हैं",linkagePlanName:"योजना नाम",linkagePlanNamePlaceholder:"योजना नाम दर्ज करें",linkageDevices:"लिंकेज डिवाइस",linkageDevicesHint:"ट्रिगर और प्लेबैक डिवाइस चुनें (ट्रिगर डिवाइस को शामिल कर सकते हैं)",linkageAudio:"ऑडियो फ़ाइल",addLinkagePlan:"लिंकेज योजना जोड़ें",adding:"जोड़ रहा है...",linkageList:"लिंकेज योजना सूची",noLinkagePlans:"कोई लिंकेज योजना नहीं",linkageDeviceCount:"डिवाइस संख्या",addLinkageSuccess:"लिंकेज योजना सफलतापूर्वक जोड़ी गई",addLinkageFailed:"लिंकेज योजना जोड़ने में विफल",linkagePlanNameRequired:"कृपया योजना नाम दर्ज करें",linkageNoDevices:"कृपया कम से कम एक डिवाइस चुनें",linkageNoAudio:"कृपया ऑडियो फ़ाइल कॉन्फ़िगर करें",linkageTriggerDevice:"ट्रिगर डिवाइस",linkageTriggerDeviceHint:"जब यह डिवाइस अलार्म ट्रिगर करता है, लिंक किए गए डिवाइस ऑडियो चलाएंगे",linkageTriggerDevicePlaceholder:"अलार्म ट्रिगर डिवाइस चुनें",linkageNoTriggerDevice:"कृपया एक ट्रिगर डिवाइस चुनें",registerTrigger:"पंजीकृत करें",registerTriggerTitle:"ट्रिगर डिवाइस पंजीकृत करें",registerTriggerSuccess:"ट्रिगर डिवाइस सफलतापूर्वक पंजीकृत",registerTriggerFailed:"ट्रिगर डिवाइस पंजीकरण विफल",loadLinkageFailed:"लिंकेज योजनाएं लोड करने में विफल",deleteLinkageConfirm:"क्या आप लिंकेज योजना हटाना चाहते हैं",deleteLinkageFailed:"लिंकेज योजना हटाने में विफल",forceUnregTitle:"अलार्म पंजीकरण बलपूर्वक हटाएं",forceUnregHint:"डिवाइस के सभी अलार्म पंजीकरण बलपूर्वक हटाएं",forceUnregButton:"अलार्म पंजीकरण बलपूर्वक हटाएं",forceUnregModalHint:"सभी अलार्म बलपूर्वक हटाने के लिए डिवाइस चुनें (स्टैंडअलोन + लिंकेज)",forceUnregConfirm:"हटाने की पुष्टि करें",forceUnregSuccess:"अलार्म बलपूर्वक हटाना सफल",forceUnregFailed:"अलार्म बलपूर्वक हटाना विफल"},account:{title:"Account Management",profile:"Profile",changePassword:"Change Password",subAccounts:"Sub Accounts",logs:"Operation Logs",username:"Username",nickname:"Nickname",email:"Email",phone:"Phone",role:"Role",level:"Level",addSubUser:"Add Sub Account",usernamePlaceholder:"Enter username",passwordPlaceholder:"Enter password",nicknamePlaceholder:"Enter nickname",beizhu:"Remark",beizhuPlaceholder:"Enter remark",password:"Password",levelLabel:"Level",levelPlaceholder:"Select level",mask:"Permission Mask",maskPlaceholder:"40-bit permission mask (0/1)",maskDefault:"00000000000000000000000000000000000000000000",permissions:"Permission Settings",permCreateSub:"Can create sub accounts",permManageDevice:"Can add/delete devices",permUploadFile:"Can upload files",addSuccess:"Sub account added successfully",addFailed:"Failed to add sub account",listFailed:"Failed to get sub account list",noSubUsers:"No sub accounts",createTime:"Create Time",status:"Status",statusNormal:"Normal",statusDisabled:"Disabled",userLevel:"User Level",playLevel:"Play Level",passwordShow:"Password",refreshList:"Refresh List",usernameRequired:"Please enter username",passwordRequired:"Please enter password",permChangeFailed:"Permission change failed",adding:"Adding...",deleteConfirm:"Are you sure to delete sub account {name}? This cannot be undone!",deleteSuccess:"Sub account deleted successfully",deleteFailed:"Failed to delete sub account",editDevices:"Edit Devices",editDevicesSuccess:"Devices updated successfully",editDevicesFailed:"Failed to update devices",loadDevicesFailed:"Failed to load device list",searchDevice:"Search device name or ID",noDevices:"No devices",resetToken:"Reset Token",resetTokenConfirm:"Are you sure to reset token for {name}?",resetTokenSuccess:"Token reset successfully",resetTokenFailed:"Token reset failed",newToken:"New Token"},admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"User & Permission Management",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",registeredDevices:"Registered Devices",devName:"Device Name",devSerial:"Serial",devStatus:"Status",devType:"Type",btnEnable:"Enable",btnDisable:"Disable",btnDelete:"Delete",btnEnableConfirm:"Are you sure to enable? This action cannot be undone!",btnDisableConfirm:"Are you sure to disable? This action cannot be undone!",btnDeleteConfirm:"Are you sure to delete? This action cannot be undone!",saveSuccess:"Saved successfully",saveFailed:"Save failed",deleteSuccess:"Deleted successfully",deleteFailed:"Delete failed",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure to delete?",devSeed:"Serial",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully"},info:{title:"App Privacy Agreement",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Content too short, at least 3000 characters",saveSuccess:"Saved successfully",saveFailed:"Save failed"},upload:{title:"Avatar & Logo Upload",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Announcement Management",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scroll notice",noData:"No data",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"},billing:{title:"Billing Settings",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Device",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure to delete?"},gallery:{title:"Gallery Overview",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No gallery items",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"}},settings:{title:"Settings",language:"Language",theme:"Theme",darkMode:"Dark Mode",lightMode:"Light Mode",diabloMode:"Diablo Mode",notification:"Notifications",sound:"Sound Settings",about:"About",version:"Version"},language:{title:"Select Language",chinese:"简体中文",english:"English",korean:"한국어",thai:"ไทย",vietnamese:"Tiếng Việt",arabic:"العربية",malay:"Bahasa Melayu",japanese:"日本語",russian:"Русский",french:"Français",spanish:"Español",portuguese:"Português",german:"Deutsch",indonesian:"Bahasa Indonesia",hindi:"हिन्दी",turkish:"Türkçe",italian:"Italiano",polish:"Polski",swahili:"Kiswahili"},messages:{deleteConfirm:"Are you sure you want to delete? This action cannot be undone!",saveSuccess:"Saved successfully",deleteSuccess:"Deleted successfully",operationSuccess:"Operation successful",operationFailed:"Operation failed, please try again",networkError:"Network error, please check your connection",serverError:"Server error, please try again later",noData:"No data available",loading:"Loading...",noPermission:"No permission to access",tokenExpired:"Session expired, please login again",operationTimeout:"Operation timeout"}},"tr-TR":{common:{appName:"ST Yayın Sistemi",loading:"Yükleniyor...",confirm:"Onayla",cancel:"İptal",save:"Kaydet",delete:"Sil",edit:"Düzenle",add:"Ekle",search:"Ara",refresh:"Yenile",submit:"Gönder",reset:"Sıfırla",logout:"Çıkış Yap",logoutConfirm:"Çıkış yapmak istediğinize emin misiniz?",logoutTitle:"Çıkışı Onayla",back:"Geri",success:"Başarılı",error:"Hata",warning:"Uyarı",info:"Bilgi",yes:"Evet",no:"Hayır",operation:"İşlem",status:"Durum",index:"Sıra",name:"Ad",description:"Açıklama",createTime:"Oluşturulma Tarihi",updateTime:"Güncellenme Tarihi",close:"Kapat",stop:"Durdur",toggle:"Etkinleştir/Devre Dışı Bırak",actions:"İşlemler",seconds:"saniye",minutes:"dakika",hours:"saat",moveUp:"Yukarı Taşı",moveDown:"Aşağı Taşı",quick:"Hızlı",unknown:"Bilinmiyor",months:"mo",years:"yr",copy:"Copy"},login:{title:"Giriş Yap",subtitle:"YAYIN SİSTEMİ",username:"Kullanıcı Adı",password:"Şifre",usernamePlaceholder:"Kullanıcı adını girin",passwordPlaceholder:"Şifrenizi girin",rememberMe:"Beni hatırla",forgotPassword:"Şifrenizi mi unuttunuz?",loginButton:"Giriş Yap",logging:"Giriş yapılıyor...",loginSuccess:"Giriş başarılı",loginFailed:"Giriş başarısız",usernameRequired:"Lütfen kullanıcı adını girin",passwordRequired:"Lütfen şifrenizi girin",invalidCredentials:"Geçersiz kullanıcı adı veya şifre"},clientLogin:{subtitle:"İstemci Sürümü",hostPlaceholder:"Sunucu adresi, ör. 192.168.1.100:12080",hostHint:"Sunucu IP:port girin, http:// isteğe bağlıdır",hostRequired:"Lütfen sunucu adresini girin"},dashboard:{title:"Kontrol Paneli",welcome:"Tekrar hoş geldiniz",systemStatus:"Sistem normal çalışıyor",quickActions:"Hızlı İşlemler",addDevice:"Cihaz Ekle",createGroup:"Grup Oluştur",scheduleTask:"Zamanlanmış Görev",broadcastNow:"Şimdi Yayınla"},menu:{dashboard:"Kontrol Paneli",devices:"Cihazlar",groups:"Gruplar",tasks:"Görevler",media:"Medya",broadcast:"Yayın",alarm:"Alarm",account:"Hesap",settings:"Ayarlar",apiTest:"API Testi",home:"Ana Sayfa",mine:"Hesabım",admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"User & Permission Management",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully"},info:{title:"App Privacy Agreement",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Content too short, at least 3000 characters",saveSuccess:"Saved successfully",saveFailed:"Save failed"},upload:{title:"Avatar & Logo Upload",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Announcement Management",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scroll notice: ",noData:"No data",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"},billing:{title:"Billing Settings",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Device",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure to delete?"},gallery:{title:"Gallery Overview",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No gallery items",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"}}},devices:{title:"Cihaz Yönetimi",list:"Cihaz Listesi",online:"Çevrimiçi",offline:"Çevrimdışı",playing:"Çalınıyor",volume:"Ses Seviyesi",adjustVolume:"Ses Seviyesini Ayarla",addDevice:"Cihaz Ekle",editDevice:"Cihazı Düzenle",deleteDevice:"Cihazı Sil",deviceName:"Cihaz Adı",serialNumber:"Seri Numarası",lastUpdate:"Son Güncelleme",refreshList:"Cihaz Listesini Yenile",batchVolume:"Toplu Ses Ayarla",noDevices:"Kullanılabilir cihaz yok, sağ üstteki Cihaz Ekle'ye tıklayın",unnamedDevice:"İsimsiz Cihaz",debugSound:"Hata Ayıklama Sesi",changeVolume:"Ses Seviyesini Değiştir",changeName:"Adı Değiştir",changeSerial:"Seri Numarasını Değiştir",id:"ID",volumeNotSet:"Ayarlanmadı",neverOnline:"Hiç Çevrimiçi Olmadı",expiredDisabled:"Süresi Dolmuş Devre Dışı",unknown:"Bilinmiyor",openDebugSound:"Hata Ayıklama Sesini Aç",closeDebugSound:"Hata Ayıklama Sesini Kapat",unknownStatus:"Bilinmeyen Durum",addDeviceTitle:"Cihaz Ekle",deviceNameRequired:"Cihaz Adı",deviceSerialRequired:"Cihaz Seri Numarası",deviceKeyRequired:"Cihaz Anahtarı",deviceNamePlaceholder:"Cihaz adını girin",deviceSerialPlaceholder:"Cihaz seri numarasını girin",deviceKeyPlaceholder:"Cihaz kayıt anahtarını girin",deviceKeyHint:"Kayıt anahtarı cihazı sisteme kaydetmek için kullanılır, cihaz şifresine eşdeğerdir",fillTestData:"Test Verisini Doldur",renameTitle:"Cihazı Yeniden Adlandır",newDeviceNamePlaceholder:"Yeni cihaz adını girin",debugSoundTitle:"Hata Ayıklama Sesi",selectDebugSoundStatus:"Hata ayıklama sesi durumunu seçin",editSerialTitle:"Cihaz Seri Numarasını Düzenle",currentSerial:"Mevcut Seri Numarası",currentSerialPlaceholder:"Mevcut cihaz seri numarası",newSerial:"Yeni Seri Numarası",newSerialPlaceholder:"32 haneli yeni seri numarasını girin",serialLengthHint:"Seri numarası 32 haneli olmalıdır",editDeviceTitle:"Cihazı Düzenle",macAddress:"MAC Adresi",macAddressPlaceholder:"MAC adresini girin",ipAddress:"IP Adresi",ipAddressPlaceholder:"IP adresini girin",port:"Port",portPlaceholder:"Port numarasını girin",adjustVolumeTitle:"Ses Seviyesini Ayarla",volumeRange:"Aralık: 1-63",preciseSetting:"Hassas Ayar:",batchAdjustVolumeTitle:"Toplu Ses Seviyesi Ayarla",selectedDevices:"Seçili Cihazlar:",devicesCount:"cihaz",confirmAdjust:"Ayarlamayı Onayla",adding:"Ekleniyor...",saving:"Kaydediliyor...",adjusting:"Ayarlanıyor...",confirmButton:"Onayla",cancelButton:"İptal",deviceNameValidationError:"Lütfen cihaz adını girin",deviceSerialValidationError:"Lütfen cihaz seri numarasını girin",deviceKeyValidationError:"Lütfen cihaz anahtarını girin",newDeviceNameValidationError:"Lütfen cihaz adını girin",deviceSerialLengthError:"Lütfen cihaz seri numarasını girin",newSerialLengthError:"Seri numarası 32 haneli olmalıdır",debugSoundSelectError:"Lütfen hata ayıklama sesini aç veya kapat seçin",confirmOperation:"İşlemi Onayla",confirmDelete:"Cihazı silmek istediğinizden emin misiniz",deleteCannotUndo:"? Bu işlem geri alınamaz!",addDeviceSuccess:"Cihaz başarıyla eklendi",addDeviceFailed:"Cihaz eklenemedi",deviceRenameSuccess:"Cihaz başarıyla yeniden adlandırıldı",deviceRenameFailed:"Cihaz yeniden adlandırılamadı",deviceEditSuccess:"Cihaz başarıyla düzenlendi",deviceEditFailed:"Cihaz düzenlenemedi",deviceSerialEditSuccess:"Cihaz seri numarası başarıyla düzenlendi",deviceSerialEditFailed:"Cihaz seri numarası düzenlenemedi",debugSoundSuccess:"Hata ayıklama sesi başarıyla ayarlandı",debugSoundFailed:"Hata ayıklama sesi ayarlanamadı",deleteDeviceSuccess:"Cihaz başarıyla silindi",deleteDeviceFailed:"Cihaz silinemedi",adjustVolumeSuccess:"Ses seviyesi şuna ayarlandı",adjustVolumeFailed:"Ses seviyesi ayarlanamadı",batchAdjustSuccess:"Toplu ses ayarı başarılı, toplam",batchAdjustFailed:"Toplu ses ayarı başarısız",volumeValidationError:"Ses seviyesi 1-63 arasında olmalıdır",selectDevicesFirst:"Lütfen önce ses seviyesini ayarlamak için cihazları seçin",successfullyFetched:"Başarıyla getirildi",devicesUnit:"cihaz",deviceListFormatError:"Cihaz listesi veri biçimi hatası",fetchDeviceListFailed:"Cihaz listesi getirilemedi",searchPlaceholder:"Cihaz adı veya seri numarası ara...",unknownError:"Bilinmeyen hata",listView:"Liste Görünümü",cardView:"Kart Görünümü",scanDevices:"Scan Devices",deviceScan:"Device Scan",seed:"Device SEED",seedPlaceholder:"Enter 32-char hex SEED",scanButton:"Scan",scanning:"Scanning...",noDeviceFound:"No devices found",scanNotSupported:"Device scan only available in desktop client",autoIP:"Auto IP",warmMode:"Voice Prompt",mediaServer:"Media Server",mediaPort:"Media Port",gateway:"Gateway",subnetMask:"Subnet Mask",dns:"DNS",deviceIP:"Device IP",applyConfig:"Apply Config",clearDevice:"Clear Device",deviceConfigured:"Device config sent",deviceConfigureFailed:"Device config failed",deviceCleared:"Clear command sent",scanConfigTitle:"Device Network Config",scannedDevices:"Discovered Devices",scanHint:"Click scan to discover all devices on the local network",testComm:"Test Communication",testCommBtn:"Test",console:"Console",clearConsole:"Clear",consoleEmpty:"Waiting for communication...",invalidIP:"Invalid IP format",invalidMask:"Invalid subnet mask",invalidGateway:"Invalid gateway",invalidMediaIP:"Invalid media server IP",invalidPort:"Port range 1-65535",invalidDNS:"Invalid DNS format",dnsPlaceholder:"0.0.0.0 = System default",advanced:"Advanced",soundCard:"Sound Card",getAmixerStatus:"Get Status",amixerApply:"Apply",amixerGetting:"Getting...",amixerOn:"On",amixerOff:"Off",amixerDAC:"DAC Playback Volume",amixerHeadphoneVol:"Headphone Volume",amixerHeadphoneSwitch:"Headphone Switch",amixerHeadphoneRoute:"Headphone Source",amixerLineIn:"Line In Volume",amixerFMIn:"FM In Volume",amixerMicIn:"Mic In Volume",amixerMicBoost:"Mic Boost",amixerADCCapture:"ADC Capture Volume",amixerADCLeftFM:"Left FM Capture",amixerADCRightFM:"Right FM Capture",amixerADCLeftOut:"Left Out Capture",amixerADCRightOut:"Right Out Capture",amixerADCLineIn:"Line In Capture",amixerADCMic:"Mic Capture",amixerLeftFM:"Left FM",amixerLeftLeftDAC:"Left Left DAC",amixerLeftRightDAC:"Left Right DAC",amixerLeftLineIn:"Left Line In",amixerLeftMicIn:"Left Mic In",amixerRightFM:"Right FM",amixerRightLeftDAC:"Right Left DAC",amixerRightRightDAC:"Right Right DAC",amixerRightLineIn:"Right Line In",amixerRightMicIn:"Right Mic In",amixerGroupDecode:"Decode Output",amixerGroupCapture:"Capture Mixer Input",amixerGroupLeft:"Left Output Mixer",amixerGroupRight:"Right Output Mixer",amixerGroupGain:"Gain Config",amixerRouteDAC:"DAC",amixerRouteMixer:"Mixer",amixerGetSuccess:"Sound card status retrieved",amixerGetFailed:"Failed to get sound card status",amixerSetSuccess:"Setting sent",amixerSetFailed:"Setting failed"},groups:{title:"Grup Yönetimi",list:"Grup Listesi",deviceCount:"Cihaz Sayısı",addGroup:"Grup Ekle",editGroup:"Grubu Düzenle",deleteGroup:"Grubu Sil",groupName:"Grup Adı",manage:"Grup Yönetimi",inputName:"Grup adını girin",add:"Grup Ekle",playMenu:"Çalma Menüsü",id:"ID",name:"Ad",actions:"İşlemler",noGroups:"Kullanılabilir grup yok",untitled:"İsimsiz Grup",editDevices:"Cihazları Düzenle",editVideo:"Videoyu Düzenle",previewVideo:"Videoyu Önizle",groupPlay:"Grup Çalma",allDevices:"Tüm Cihazlar",selectedDevices:"Seçili Cihazlar",selectAtLeastOneDevice:"Lütfen en az bir cihaz seçin",videoUrl:"Video URL'si",inputVideoUrl:"Lütfen video URL'sini girin",noVideoUrl:"Video URL'si ayarlanmadı",noVideoUrlSet:"M3U8 canlı yayın URL'si henüz ayarlanmadı",playSequence:"Çalma Sırası",fileInterval:"Dosya Aralığı",playCount:"Çalma Sayısı",noPlayingItems:"Şu anda çalınan sıra yok",playList:"Çalma Listesi",nameRequired:"Grup adı boş olamaz",loadSuccess:"{count} grup başarıyla yüklendi",loadFailed:"Grup listesi yüklenemedi",addSuccess:"Grup başarıyla eklendi",addFailed:"Grup eklenemedi",deleteConfirm:"Bu işlem bu grubu kalıcı olarak silecek. Devam edilsin mi?",deleteSuccess:"Başarıyla silindi",deleteFailed:"Silinemedi",saveSuccess:"Başarıyla kaydedildi",saveFailed:"Kaydedilemedi",loadDevicesFailed:"Cihaz listesi yüklenemedi",invalidGroupId:"Geçersiz grup ID'si",unknownDevice:"Bilinmeyen cihaz",playFeatureComingSoon:"Grup çalma özelliği yakında gelecek",stopPlayFeatureComingSoon:"Çalmayı durdurma özelliği yakında gelecek",playListFeatureComingSoon:"Çalma listesi özelliği yakında gelecek",searchDevicePlaceholder:"Aramak için cihaz adı veya ID girin...",searchResult:"{filtered} cihaz bulundu (toplam {total})",totalDevices:"Toplam {count} cihaz",noSearchResult:"Eşleşen cihaz bulunamadı",noSelectedDevices:"Henüz cihaz seçilmedi",searchFilePlaceholder:"Aramak için dosya adı veya ID girin...",availableFiles:"Kullanılabilir Dosyalar",selectedFiles:"Seçili Dosyalar",noSelectedFiles:"Henüz dosya seçilmedi",doubleClickHint:"Çift tıklayarak tekrarlanan dosyalar ekleyin",unknownFile:"Bilinmeyen dosya",playMode:"Çalma Modu",playMode1:"Sıralı Çalma 1x",playMode2:"Sıralı Çalma 2x",playMode3:"Sıralı Çalma 3x",totalDuration:"Tahmini Süre",durationFormula:"Hesaplama: (Toplam Süre + Aralık) × Döngü Sayısı",playModeHint:"Döngü sayısı, 1-99",intervalMaxHint:"Maksimum aralık 3 saat (10800 saniye)",estimatedDuration:"Tahmini Süre",forceStopDuration:"Zorla Durdurma Süresi (İsteğe Bağlı)",forceStopHint:"Bu sürede otomatik durur. Tahmini süreden küçük olmalıdır. 0 zorla durdurma yok demektir",selectAtLeastOneFile:"Lütfen en az bir dosya seçin",loadFilesFailed:"Dosya listesi yüklenemedi",groupHasNoDevices:"Bu grupta cihaz yok",playStarted:"Çalma başarıyla başladı",playFailed:"Çalma başlatılamadı",invalidPlayId:"Geçersiz çalma ID'si",stopPlayConfirm:"Çalmayı durdurmak istediğinizden emin misiniz?",stopPlayInProgress:"Çalma durduruluyor, lütfen bekleyin...",stopPlaySuccess:"Çalma başarıyla durduruldu",stopPlaySuccessAndClosed:"Çalma başarıyla durduruldu, çalma listesi kapatıldı",stopPlayFailed:"Çalma durdurulamadı",selectGroupForPlay:"Çalmak için bir grup seçin",devices:"cihaz",devicesCount:"cihaz",startPlay:"Çalmayı Başlat"},tasks:{title:"Zamanlanmış Görevler",titleDescription:"Toplu işlemler ve görev gruplarıyla zamanlanmış çalma görevlerini yönetin",list:"Görev Listesi",addTask:"Görev Ekle",editTask:"Görevi Düzenle",deleteTask:"Görevi Sil",taskName:"Görev Adı",executeTime:"Çalıştırma Zamanı",playMode:"Çalma Modu",repeat:"Tekrarla",files:"Dosyalar",devices:"Cihazlar",allGroups:"Tüm Görev Grupları",addTaskGroup:"Görev Grubu Ekle",deleteTaskGroup:"Görev Grubunu Sil",disableTaskGroup:"Görev Grubunu Devre Dışı Bırak",enableTaskGroup:"Görev Grubunu Etkinleştir",taskGroup:"Görev Grubu",taskGroupName:"Görev Grubu Adı",enterGroupName:"Görev grubu adını girin",applyTaskGroup:"Görev Grubunu Uygula",task:"Görev",selectGroup:"Görev Grubu Seç",startTime:"Başlangıç Zamanı",duration:"Süre",loopCount:"Döngü Sayısı",startDate:"Başlangıç Tarihi",endDate:"Bitiş Tarihi",changeGroup:"Grubu Değiştir",noGroup:"Grup Yok",tryPlay:"Deneme Çalma",batchDisable:"Toplu Devre Dışı Bırak",batchEnable:"Toplu Etkinleştir",batchEditDevices:"Toplu Cihaz Düzenle",batchEditFiles:"Toplu Dosya Düzenle",batchApplyGroup:"Toplu Grup Uygula",batchEditTime:"Toplu Zaman Düzenle",batchEditLoopCount:"Toplu Döngü Sayısı Düzenle",batchEditDuration:"Toplu Süre Düzenle",batchDelete:"Toplu Sil",batchCopy:"Toplu Kopyala",noTasks:"Görev Yok",selectedCount:"{count} görev seçildi",randomPlay:"Rastgele Çalma",loopPlay:"{count} kez döngü",selectDevices:"Çalınacak Cihazları Seç",selectFiles:"Ses Dosyalarını Seç",allDevices:"Tüm Cihazlar",selectedDevices:"Seçili Cihazlar",allFiles:"Tüm Dosyalar",selectedFiles:"Seçili Dosyalar",editTaskDevices:"Görev Cihazlarını Düzenle",editTaskFiles:"Görev Dosyalarını Düzenle",taskDuration:"Görev Süresi",intervalDuration:"Aralık Süresi",timeRange:"Zaman Aralığı",to:"ile",playCount:"Çalma Sayısı",sequentialPlay:"Sıralı Çalma",randomPlayMode:"Rastgele Çalma",playModeChange:"Çalma Modu Değişikliği",enableOtherLimit:"Diğer sınırlamalar gerekli değil",enableStartDate:"Başlangıç Tarihini Etkinleştir",enableEndDate:"Bitiş Tarihini Etkinleştir",enterTaskName:"Görev adını girin",noTasksSelected:"Görev seçilmedi",devicesRequired:"Cihaz seçilmedi",filesRequired:"Ses dosyası seçilmedi",saveSuccess:"Kaydetme başarılı",saveFailed:"Kaydetme başarısız",deleteSuccess:"Silme başarılı",deleteFailed:"Silme başarısız",deleteConfirm:"Bu işlem görevi kalıcı olarak silecek. Devam edilsin mi?",enableSuccess:"Görev etkinleştirildi",disableSuccess:"Görev devre dışı bırakıldı",startPlaySuccess:"Çalma başlatıldı",startPlayFailed:"Çalma başlatma başarısız",stopPlaySuccess:"Çalma durduruldu",stopPlayFailed:"Çalma durdurma başarısız",groupNameRequired:"Görev grubu adı boş olamaz",addGroupSuccess:"Görev grubu başarıyla eklendi",addGroupFailed:"Görev grubu eklenemedi",deleteGroupSuccess:"Görev grubu başarıyla silindi",deleteGroupFailed:"Görev grubu silinemedi",disableGroupSuccess:"Görev grubu başarıyla devre dışı bırakıldı",disableGroupFailed:"Görev grubu devre dışı bırakılamadı",enableGroupSuccess:"Görev grubu başarıyla etkinleştirildi",enableGroupFailed:"Görev grubu etkinleştirilemedi",applyGroupSuccess:"Görev grubu başarıyla uygulandı",applyGroupFailed:"Görev grubu uygulanamadı",selectGroupFirst:"Lütfen önce bir görev grubu seçin",batchDisableSuccess:"Toplu devre dışı bırakma başarılı",batchEnableSuccess:"Toplu etkinleştirme başarılı",unknownDevice:"Bilinmeyen Cihaz",unknownFile:"Bilinmeyen Dosya",calculate:"Hesapla",monday:"Pazartesi",tuesday:"Salı",wednesday:"Çarşamba",thursday:"Perşembe",friday:"Cuma",saturday:"Cumartesi",sunday:"Pazar",index:"Sıra",weekdays:"Çalma Günleri",noLimit:"Sınırsız",autoCalc:"Otomatik hesaplanan",taskNameRequired:"Görev adı gereklidir",startTimeRequired:"Başlangıç zamanı gereklidir",cannotDeletePlaying:"Görev çalınıyor, lütfen önce durdurun",cannotDeleteEnabled:"Görev etkinleştirilmiş, lütfen önce devre dışı bırakın",cannotEditPlaying:"Görev çalınıyor, lütfen önce durdurun",disabled:"Devre Dışı",enabled:"Etkin",enableTask:"Etkinleştir",disableTask:"Devre Dışı Bırak",noSelectedFiles:"Henüz dosya seçilmedi",clickToAddHint:"Eklemek için soldaki dosyalara tıklayın",estimatedDuration:"Tahmini Süre",advancedSettings:"Gelişmiş Ayarlar",playSettings:"Çalma Ayarları",forceStopDuration:"Zorla Durdurma Süresi",forceStopHint:"Ayarlanırsa, çalma bu sürede otomatik durur. Tahmini süreden küçük olmalıdır. 0 veya boş, zorla durdurma yok demektir",durationRequired:"Rastgele çalma bir süre gerektirir",durationFormula:"Hesaplama: (Toplam Süre + Aralık × Dosya Sayısı) × Döngü Sayısı",dateHint:"Not: Başlangıç tarihinde ve ayrıca bitiş tarihinde çalar. Her iki tarih aynıysa, sadece o gün çalar. Başlangıç tarihi bitiş tarihinden sonra olamaz.",dateRangeError:"Başlangıç tarihi bitiş tarihinden sonra olamaz",batchDurationHint:"Sıralı çalma için: çalma listesi toplam süresi > maksimum süre ise, süreye ulaşıldığında durur; çalma listesi toplam süresi < maksimum süre ise, çalma listesi bittiğinde durur",copyConfirm:"Seçili görevleri kopyalamak istediğinizden emin misiniz? Bu işlem geri alınamaz.",copySuccess:"Görevler başarıyla kopyalandı",copyFailed:"Görevler kopyalanamadı",timeConflict:"Zaman Çakışması",dateRange:"Tarih Aralığı",endTime:"Bitiş Zamanı",copyCount:"Kopyalama Sayısı",copyNewName:"Varsayılan Yeni Ad",copyNewNamePlaceholder:"Varsayılan yeni görev adı",copyInterval:"Zaman Aralığı",copyIntervalUnit:"dakika",copyPreview:"Önizleme Listesi",deleteGroupConfirm:"Bu görev grubunu silmek istediğinizden emin misiniz? Gruptaki görevler silinmeyecektir.",noTasksInGroup:"Bu görev grubunda görev yok",batchPartialFailed:"{failed} görev işlemi başarısız"},media:{title:"Medya Yönetimi",list:"Dosya Listesi",upload:"Yükle",delete:"Sil",play:"Çal",download:"İndir",fileName:"Dosya Adı",fileSize:"Dosya Boyutu",fileType:"Dosya Türü",uploadTime:"Yükleme Zamanı",duration:"Süre",noFiles:"Henüz dosya yok",dropHint:"MP3 dosyalarını buraya sürükleyip bırakarak yükleyin",dropSub:"MP3 biçimi desteklenir, dosya başı maksimum 40MB",selectFiles:"Dosyaları Seç",selectFolder:"Klasör Seç",onlyMp3:"Sadece MP3 dosyaları desteklenir",fileTooLarge:"Dosya 40MB sınırını aşıyor",uploadFailed:"Yükleme başarısız",uploadSuccess:"{count} dosya başarıyla yüklendi",uploading:"Yükleniyor...",deleteSingleConfirm:"Silmek istediğinizden emin misiniz",deleteConfirm:"Seçili dosyaları silmek istiyor musunuz? Bu geri alınamaz",deleteSuccess:"Başarıyla silindi",deleteFailed:"Silinemedi",batchDelete:"Toplu Sil",batchDeleteSuccess:"{count} dosya başarıyla silindi",selectedCount:"{count} dosya seçildi",tts:"Text to Speech",ttsFileName:"File Name",ttsFileNamePlaceholder:"Enter file name",ttsVoice:"Voice",ttsSpeed:"Speed",ttsSpeedSlow:"Slow",ttsSpeedMedium:"Medium",ttsSpeedFast:"Fast",ttsText:"Text Input",ttsTextPlaceholder:"Enter text to convert",ttsTextTooShort:"Text must be at least 3 characters",ttsSuccess:"TTS file created",ttsFailed:"TTS generation failed",uploadDone:"Upload complete"},broadcast:{title:"Yayın Kontrolü",serverConfig:"Sunucu Yapılandırması",selectDevices:"Cihazları Seç",quickSelectGroup:"Hızlı Grup Seç",selectAllOnline:"Tüm Çevrimiçıları Seç",clearSelection:"Seçimi Temizle",selectedDevices:"{count} cihaz seçildi",noDevices:"Kullanılabilir cihaz yok",noMatch:"Eşleşen cihaz yok",broadcastControl:"Yayın Kontrolü",playLevel:"Çalma Önceliği",userLevel:"Kullanıcı Seviyesi",holdToTalk:"Konuşmak İçin Basılı Tutun",releaseToStop:"Durdurmak İçin Bırakın",broadcasting:"Yayın yapılıyor...",connected:"Bağlandı",notConnected:"Bağlı Değil",selectFiles:"Dosyaları Seç",startBroadcast:"Yayını Başlat",stopBroadcast:"Yayını Durdur",playbackMode:"Çalma Modu",interval:"Aralık",loop:"Döngü Sayısı",audioSource:"Ses Kaynağı",microphone:"Mikrofon",noAudioDevice:"Ses giriş cihazı algılanmadı",audioReady:"Ses Hazır",inputVolume:"Giriş Ses Seviyesi",enableMicrophone:"Mikrofonu Bağla",startPreview:"Önizlemeyi Başlat"},alarm:{title:"Alarm Sistemi",settings:"Alarm Ayarları",history:"Alarm Geçmişi",enable:"Etkinleştir",disable:"Devre Dışı Bırak",triggerCondition:"Tetikleme Koşulu",alarmFile:"Alarm Dosyası",linkage:"Bağlantı Cihazı",selectDevices:"Cihaz Seç",searchDevice:"Cihaz adı veya seri numarası ara",selectAllOnline:"Tüm Çevrimiçileri Seç",clearSelection:"Seçimi Temizle",selectedCount:"{count} cihaz seçildi",noDevices:"Cihaz yok",noMatch:"Eşleşen cihaz yok",alarmConfig:"Alarm Yapılandırması",alarmName:"Alarm Adı",alarmNamePlaceholder:"Alarm adını girin",audioSource:"Ses Kaynağı",selectFile:"Yüklenen dosyayı seç",inputUrl:"URL'yi manuel girin",selectFilePlaceholder:"Ses dosyası seçin",urlPlaceholder:"Ses dosyası URL'sini girin",registerAlarm:"Alarmı Kaydet",registering:"Kaydediliyor...",registerResult:"Kayıt Sonucu",registerSuccess:"Kayıt başarılı",registerFailed:"Kayıt başarısız",noDevicesSelected:"Lütfen en az bir cihaz seçin",noAudioConfigured:"Lütfen ses dosyası yapılandırın",online:"Çevrimiçi",offline:"Çevrimdışı",deviceSn:"Cihaz Seri Numarası",registeredList:"Kayıtlı Alarmlar",noRegistered:"Kayıtlı alarm yok",loadListFailed:"Alarm listesi yüklenemedi",deviceName:"Cihaz Adı",fileName:"Dosya Adı",refreshList:"Listeyi Yenile",unregisterAlarm:"Kaydı Sil",unregisterConfirm:"Bu alarmın kaydını silmek istediğinizden emin misiniz?",unregisterSuccess:"Kayıt silme başarılı",unregisterFailed:"Kayıt silme başarısız",linkageTitle:"Alarm Bağlantısı",linkageDesc:"A cihazı tetiklendiğinde, bağlantılı cihazlar (kendisi dahil) belirtilen sesi çalar",linkagePlanName:"Plan Adı",linkagePlanNamePlaceholder:"Plan adını girin",linkageDevices:"Bağlantılı Cihazlar",linkageDevicesHint:"Tetikleyici ve çalma cihazlarını seçin (tetikleyici cihazın kendisini içerebilir)",linkageAudio:"Ses Dosyası",addLinkagePlan:"Bağlantı Planı Ekle",adding:"Ekleniyor...",linkageList:"Bağlantı Planı Listesi",noLinkagePlans:"Bağlantı planı yok",linkageDeviceCount:"Cihaz Sayısı",addLinkageSuccess:"Bağlantı planı başarıyla eklendi",addLinkageFailed:"Bağlantı planı eklenemedi",linkagePlanNameRequired:"Lütfen plan adını girin",linkageNoDevices:"Lütfen en az bir cihaz seçin",linkageNoAudio:"Lütfen ses dosyası yapılandırın",linkageTriggerDevice:"Tetikleyici Cihaz",linkageTriggerDeviceHint:"Bu cihaz alarmı tetiklediğinde, bağlantılı cihazlar ses çalacak",linkageTriggerDevicePlaceholder:"Alarm tetikleyici cihazı seçin",linkageNoTriggerDevice:"Lütfen bir tetikleyici cihaz seçin",registerTrigger:"Kaydet",registerTriggerTitle:"Tetikleyici Cihazı Kaydet",registerTriggerSuccess:"Tetikleyici cihaz başarıyla kaydedildi",registerTriggerFailed:"Tetikleyici cihaz kaydedilemedi",loadLinkageFailed:"Bağlantı planları yüklenemedi",deleteLinkageConfirm:"Bağlantı planını silmek istediğinizden emin misiniz",deleteLinkageFailed:"Bağlantı planı silinemedi",forceUnregTitle:"Alarm Kaydını Zorla Sil",forceUnregHint:"Cihazın tüm alarm kayıtlarını zorla sil",forceUnregButton:"Alarm Kaydını Zorla Sil",forceUnregModalHint:"Tüm alarmları zorla silmek için bir cihaz seçin (bağımsız + bağlantılı)",forceUnregConfirm:"Silmeyi Onayla",forceUnregSuccess:"Alarm zorla silme başarılı",forceUnregFailed:"Alarm zorla silme başarısız"},account:{title:"Hesap Yönetimi",profile:"Profil",changePassword:"Şifre Değiştir",subAccounts:"Alt Hesaplar",logs:"İşlem Günlükleri",username:"Kullanıcı Adı",nickname:"Takma Ad",email:"E-posta",phone:"Telefon",role:"Rol",level:"Seviye",addSubUser:"Alt Hesap Ekle",usernamePlaceholder:"Kullanıcı adını girin",passwordPlaceholder:"Şifrenizi girin",nicknamePlaceholder:"Takma ad girin",beizhu:"Not",beizhuPlaceholder:"Not girin",password:"Şifre",levelLabel:"Seviye",levelPlaceholder:"Seviye seçin",mask:"İzin Maskesi",maskPlaceholder:"40-bit izin maskesi (0/1)",maskDefault:"00000000000000000000000000000000000000000000",permissions:"İzin Ayarları",permCreateSub:"Alt hesap oluşturabilir",permManageDevice:"Cihaz ekleyebilir/silebilir",permUploadFile:"Dosya yükleyebilir",addSuccess:"Alt hesap başarıyla eklendi",addFailed:"Alt hesap eklenemedi",listFailed:"Alt hesap listesi alınamadı",noSubUsers:"Henüz alt hesap yok",createTime:"Oluşturulma Tarihi",status:"Durum",statusNormal:"Normal",statusDisabled:"Devre Dışı",userLevel:"Kullanıcı Seviyesi",playLevel:"Çalma Seviyesi",passwordShow:"Şifre",refreshList:"Listeyi Yenile",usernameRequired:"Lütfen kullanıcı adını girin",passwordRequired:"Lütfen şifrenizi girin",permChangeFailed:"İzin değişikliği başarısız",adding:"Ekleniyor...",deleteConfirm:"{name} alt hesabını silmek istediğinizden emin misiniz? Bu geri alınamaz!",deleteSuccess:"Alt hesap başarıyla silindi",deleteFailed:"Alt hesap silinemedi",editDevices:"Cihazları Düzenle",editDevicesSuccess:"Cihazlar başarıyla güncellendi",editDevicesFailed:"Cihazlar güncellenemedi",loadDevicesFailed:"Cihaz listesi yüklenemedi",searchDevice:"Cihaz adı veya ID ara",noDevices:"Cihaz yok",resetToken:"Token Sıfırla",resetTokenConfirm:"{name} için token sıfırlamak istediğinizden emin misiniz?",resetTokenSuccess:"Token başarıyla sıfırlandı",resetTokenFailed:"Token sıfırlama başarısız",newToken:"Yeni Token"},settings:{title:"Ayarlar",language:"Dil",theme:"Tema",darkMode:"Karanlık Mod",lightMode:"Aydınlık Mod",diabloMode:"Diablo Modu",notification:"Bildirimler",sound:"Ses Ayarları",about:"Hakkında",version:"Sürüm"},language:{title:"Dil Seçin",chinese:"简体中文",english:"English",korean:"한국어",thai:"ไทย",vietnamese:"Tiếng Việt",arabic:"العربية",malay:"Bahasa Melayu",japanese:"日本語",russian:"Русский",french:"Français",spanish:"Español",portuguese:"Português",german:"Deutsch",indonesian:"Bahasa Indonesia",hindi:"हिन्दी",turkish:"Türkçe",italian:"Italiano",polish:"Polski",swahili:"Kiswahili"},messages:{deleteConfirm:"Silmek istediğinizden emin misiniz? Bu işlem geri alınamaz!",saveSuccess:"Başarıyla kaydedildi",deleteSuccess:"Başarıyla silindi",operationSuccess:"İşlem başarılı",operationFailed:"İşlem başarısız, lütfen tekrar deneyin",networkError:"Ağ hatası, lütfen bağlantınızı kontrol edin",serverError:"Sunucu hatası, lütfen daha sonra tekrar deneyin",noData:"Veri mevcut değil",loading:"Yükleniyor...",noPermission:"Erişim izni yok",tokenExpired:"Oturum süresi doldu, lütfen tekrar giriş yapın",operationTimeout:"İşlem zaman aşımına uğradı"},admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"Select Language",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data available",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",btnEnable:"Enable",btnDisable:"Disable",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully"},info:{title:"Select Language",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Announcement too short",saveSuccess:"Saved successfully",saveFailed:"Update failed"},upload:{title:"Select Language",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Select Language",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scrolling Notice",noData:"No data available",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"},billing:{title:"Select Language",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Slideshow",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"},gallery:{title:"Select Language",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No data available",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"}}},"ar-SA":{common:{appName:"نظام البث ST",loading:"جاري التحميل...",confirm:"تأكيد",cancel:"إلغاء",save:"حفظ",delete:"حذف",edit:"تعديل",add:"إضافة",search:"بحث",refresh:"تحديث",submit:"إرسال",reset:"إعادة تعيين",logout:"تسجيل الخروج",logoutConfirm:"هل أنت متأكد أنك تريد تسجيل الخروج؟",logoutTitle:"تأكيد تسجيل الخروج",back:"رجوع",success:"نجاح",error:"خطأ",warning:"تحذير",info:"معلومات",yes:"نعم",no:"لا",operation:"عملية",status:"الحالة",name:"الاسم",description:"الوصف",createTime:"وقت الإنشاء",updateTime:"وقت التحديث",close:"إغلاق",stop:"إيقاف",actions:"إجراءات",seconds:"ثواني",minutes:"دقائق",hours:"ساعات",moveUp:"نقل لأعلى",moveDown:"نقل لأسفل",quick:"سريع",unknown:"غير معروف",months:"mo",years:"yr",copy:"Copy",index:"Index",toggle:"Enable/Disable"},login:{title:"تسجيل الدخول",subtitle:"نظام البث الصوتي",username:"اسم المستخدم",password:"كلمة المرور",usernamePlaceholder:"أدخل اسم المستخدم",passwordPlaceholder:"أدخل كلمة المرور",rememberMe:"تذكرني",forgotPassword:"نسيت كلمة المرور؟",loginButton:"تسجيل الدخول Login",logging:"جاري تسجيل الدخول...",loginSuccess:"تم تسجيل الدخول بنجاح",loginFailed:"فشل تسجيل الدخول",usernameRequired:"يرجى إدخال اسم المستخدم",passwordRequired:"يرجى إدخال كلمة المرور",invalidCredentials:"اسم المستخدم أو كلمة المرور غير صحيحة"},dashboard:{title:"لوحة التحكم",welcome:"مرحبًا بعودتك",systemStatus:"النظام يعمل بشكل طبيعي",quickActions:"إجراءات سريعة",addDevice:"إضافة جهاز",createGroup:"إنشاء مجموعة",scheduleTask:"جدولة المهام",broadcastNow:"بث فوري"},menu:{dashboard:"لوحة التحكم",devices:"إدارة الأجهزة",groups:"إدارة المجموعات",tasks:"المهام المجدولة",media:"إدارة الوسائط",broadcast:"التحكم في البث",alarm:"نظام الإنذار",account:"إدارة الحساب",settings:"الإعدادات",apiTest:"اختبار API",home:"الرئيسية",mine:"حسابي"},devices:{title:"إدارة الأجهزة",list:"قائمة الأجهزة",online:"متصل",offline:"غير متصل",playing:"جاري التشغيل",volume:"مستوى الصوت",adjustVolume:"تعديل مستوى الصوت",addDevice:"إضافة جهاز",editDevice:"تعديل الجهاز",deleteDevice:"حذف الجهاز",deviceName:"اسم الجهاز",serialNumber:"الرقم التسلسلي",lastUpdate:"آخر تحديث",refreshList:"تحديث قائمة الأجهزة",batchVolume:"تعديل مستوى الصوت الجماعي",noDevices:"لا توجد أجهزة، انقر إضافة جهاز في الزاوية اليمنى العليا",unnamedDevice:"جهاز بدون اسم",debugSound:"صوت التصحيح",changeVolume:"تغيير مستوى الصوت",changeName:"تغيير الاسم",changeSerial:"تغيير الرقم التسلسلي",id:"المعرف",volumeNotSet:"غير محدد",neverOnline:"لم يتصل مطلقاً",expiredDisabled:"منتهي الصلاحية معطل",unknown:"غير معروف",openDebugSound:"فتح صوت التصحيح",closeDebugSound:"إغلاق صوت التصحيح",unknownStatus:"حالة غير معروفة",addDeviceTitle:"إضافة جهاز",deviceNameRequired:"اسم الجهاز",deviceSerialRequired:"رقم تسلسلي الجهاز",deviceKeyRequired:"مفتاح الجهاز",deviceNamePlaceholder:"أدخل اسم الجهاز",deviceSerialPlaceholder:"أدخل الرقم التسلسلي للجهاز",deviceKeyPlaceholder:"أدخل مفتاح تسجيل الجهاز",deviceKeyHint:"مفتاح التسجيل يستخدم لتسجيل الجهاز في النظام، يعادل كلمة مرور الجهاز",fillTestData:"ملء بيانات الاختبار",renameTitle:"تغيير اسم الجهاز",newDeviceNamePlaceholder:"أدخل اسم الجهاز الجديد",debugSoundTitle:"صوت التصحيح",selectDebugSoundStatus:"يرجى اختيار حالة صوت التصحيح",editSerialTitle:"تعديل الرقم التسلسلي للجهاز",currentSerial:"الرقم التسلسلي الحالي",currentSerialPlaceholder:"الرقم التسلسلي للجهاز الحالي",newSerial:"رقم تسلسلي جديد",newSerialPlaceholder:"أدخل رقم تسلسلي جديد مكون من 32 رقم",serialLengthHint:"يجب أن يكون طول الرقم التسلسلي 32 رقم",editDeviceTitle:"تعديل الجهاز",macAddress:"عنوان MAC",macAddressPlaceholder:"أدخل عنوان MAC",ipAddress:"عنوان IP",ipAddressPlaceholder:"أدخل عنوان IP",port:"المنفذ",portPlaceholder:"أدخل رقم المنفذ",adjustVolumeTitle:"تعديل مستوى الصوت",volumeRange:"المدى: 1-63",preciseSetting:"الإعداد الدقيق:",batchAdjustVolumeTitle:"تعديل مستوى الصوت الجماعي",selectedDevices:"الأجهزة المحددة:",devicesCount:"أجهزة",confirmAdjust:"تأكيد التعديل",adding:"جاري الإضافة...",saving:"جاري الحفظ...",adjusting:"جاري التعديل...",confirmButton:"تأكيد",cancelButton:"إلغاء",deviceNameValidationError:"يرجى إدخال اسم الجهاز",deviceSerialValidationError:"يرجى إدخال الرقم التسلسلي للجهاز",deviceKeyValidationError:"يرجى إدخال مفتاح الجهاز",newDeviceNameValidationError:"يرجى إدخال اسم الجهاز",deviceSerialLengthError:"يرجى إدخال الرقم التسلسلي للجهاز",newSerialLengthError:"يجب أن يكون طول الرقم التسلسلي 32 رقم",debugSoundSelectError:"يرجى اختيار فتح أو إغلاق صوت التصحيح",confirmOperation:"تأكيد العملية",confirmDelete:"هل أنت متأكد من حذف الجهاز",deleteCannotUndo:"? لا يمكن التراجع عن هذا الإجراء!",addDeviceSuccess:"تمت إضافة الجهاز بنجاح",addDeviceFailed:"فشل إضافة الجهاز",deviceRenameSuccess:"تم تغيير اسم الجهاز بنجاح",deviceRenameFailed:"فشل تغيير اسم الجهاز",deviceEditSuccess:"تم تعديل الجهاز بنجاح",deviceEditFailed:"فشل تعديل الجهاز",deviceSerialEditSuccess:"تم تعديل الرقم التسلسلي للجهاز بنجاح",deviceSerialEditFailed:"فشل تعديل الرقم التسلسلي للجهاز",debugSoundSuccess:"تم تعيين صوت التصحيح بنجاح",debugSoundFailed:"فشل تعيين صوت التصحيح",deleteDeviceSuccess:"تم حذف الجهاز بنجاح",deleteDeviceFailed:"فشل حذف الجهاز",adjustVolumeSuccess:"تم تعيين مستوى الصوت إلى",adjustVolumeFailed:"فشل تعديل مستوى الصوت",batchAdjustSuccess:"تم تعديل مستوى الصوت الجماعي بنجاح، إجمالي",batchAdjustFailed:"فشل تعديل مستوى الصوت الجماعي",volumeValidationError:"يجب أن يكون مستوى الصوت بين 1-63",selectDevicesFirst:"يرجى اختيار الأجهزة لتعديل مستوى الصوت أولاً",successfullyFetched:"تم جلب بنجاح",devicesUnit:"أجهزة",deviceListFormatError:"خطأ في تنسيق بيانات قائمة الأجهزة",fetchDeviceListFailed:"فشل جلب قائمة الأجهزة",searchPlaceholder:"ابحث عن اسم الجهاز أو الرقم التسلسلي...",unknownError:"خطأ غير معروف",listView:"عرض القائمة",cardView:"عرض البطاقة",scanDevices:"Scan Devices",deviceScan:"Device Scan",seed:"Device SEED",seedPlaceholder:"Enter 32-char hex SEED",scanButton:"Scan",scanning:"Scanning...",noDeviceFound:"No devices found",scanNotSupported:"Device scan only available in desktop client",autoIP:"Auto IP",warmMode:"Voice Prompt",mediaServer:"Media Server",mediaPort:"Media Port",gateway:"Gateway",subnetMask:"Subnet Mask",dns:"DNS",deviceIP:"Device IP",applyConfig:"Apply Config",clearDevice:"Clear Device",deviceConfigured:"Device config sent",deviceConfigureFailed:"Device config failed",deviceCleared:"Clear command sent",scanConfigTitle:"Device Network Config",scannedDevices:"Discovered Devices",scanHint:"Click scan to discover all devices on the local network",testComm:"Test Communication",testCommBtn:"Test",console:"Console",clearConsole:"Clear",consoleEmpty:"Waiting for communication...",invalidIP:"Invalid IP format",invalidMask:"Invalid subnet mask",invalidGateway:"Invalid gateway",invalidMediaIP:"Invalid media server IP",invalidPort:"Port range 1-65535",invalidDNS:"Invalid DNS format",dnsPlaceholder:"0.0.0.0 = System default",advanced:"Advanced",soundCard:"Sound Card",getAmixerStatus:"Get Status",amixerApply:"Apply",amixerGetting:"Getting...",amixerOn:"On",amixerOff:"Off",amixerDAC:"DAC Playback Volume",amixerHeadphoneVol:"Headphone Volume",amixerHeadphoneSwitch:"Headphone Switch",amixerHeadphoneRoute:"Headphone Source",amixerLineIn:"Line In Volume",amixerFMIn:"FM In Volume",amixerMicIn:"Mic In Volume",amixerMicBoost:"Mic Boost",amixerADCCapture:"ADC Capture Volume",amixerADCLeftFM:"Left FM Capture",amixerADCRightFM:"Right FM Capture",amixerADCLeftOut:"Left Out Capture",amixerADCRightOut:"Right Out Capture",amixerADCLineIn:"Line In Capture",amixerADCMic:"Mic Capture",amixerLeftFM:"Left FM",amixerLeftLeftDAC:"Left Left DAC",amixerLeftRightDAC:"Left Right DAC",amixerLeftLineIn:"Left Line In",amixerLeftMicIn:"Left Mic In",amixerRightFM:"Right FM",amixerRightLeftDAC:"Right Left DAC",amixerRightRightDAC:"Right Right DAC",amixerRightLineIn:"Right Line In",amixerRightMicIn:"Right Mic In",amixerGroupDecode:"Decode Output",amixerGroupCapture:"Capture Mixer Input",amixerGroupLeft:"Left Output Mixer",amixerGroupRight:"Right Output Mixer",amixerGroupGain:"Gain Config",amixerRouteDAC:"DAC",amixerRouteMixer:"Mixer",amixerGetSuccess:"Sound card status retrieved",amixerGetFailed:"Failed to get sound card status",amixerSetSuccess:"Setting sent",amixerSetFailed:"Setting failed"},groups:{title:"إدارة المجموعات",manage:"إدارة المجموعات",list:"قائمة المجموعات",deviceCount:"عدد الأجهزة",addGroup:"إضافة مجموعة",editGroup:"تعديل المجموعة",deleteGroup:"حذف المجموعة",groupName:"اسم المجموعة",inputName:"إدخال اسم المجموعة",add:"إضافة مجموعة",playMenu:"قائمة التشغيل",id:"المعرف",name:"الاسم",actions:"إجراءات",noGroups:"لا توجد مجموعات متاحة",untitled:"مجموعة بدون عنوان",editDevices:"تعديل الأجهزة",editVideo:"تعديل الفيديو",previewVideo:"معاينة الفيديو",groupPlay:"تشغيل المجموعة",allDevices:"جميع الأجهزة",selectedDevices:"الأجهزة المحددة",selectAtLeastOneDevice:"الرجاء تحديد جهاز واحد على الأقل",videoUrl:"رابط الفيديو",inputVideoUrl:"الرجاء إدخال رابط الفيديو",noVideoUrl:"لم يتم تعيين رابط الفيديو",noVideoUrlSet:"لم يتم تعيين رابط البث المباشر mu38u بعد",playSequence:"تسلسل التشغيل",fileInterval:"الفاصل بين الملفات",playCount:"عدد مرات التشغيل",noPlayingItems:"لا توجد تسلسلات قيد التشغيل حالياً",playList:"قائمة التشغيل",nameRequired:"اسم المجموعة لا يمكن أن يكون فارغاً",loadSuccess:"تم تحميل {count} مجموعات بنجاح",loadFailed:"فشل تحميل قائمة المجموعات",addSuccess:"تمت إضافة المجموعة بنجاح",addFailed:"فشل إضافة المجموعة",deleteConfirm:"هذه العملية ستحذف هذه المجموعة نهائياً. هل تريد المتابعة؟",deleteSuccess:"تم الحذف بنجاح",deleteFailed:"فشل الحذف",saveSuccess:"تم الحفظ بنجاح",saveFailed:"فشل الحفظ",loadDevicesFailed:"فشل تحميل قائمة الأجهزة",invalidGroupId:"معرف المجموعة غير صالح",unknownDevice:"جهاز غير معروف",playFeatureComingSoon:"ميزة تشغيل المجموعة قريباً",stopPlayFeatureComingSoon:"ميزة إيقاف التشغيل قريباً",playListFeatureComingSoon:"ميزة قائمة التشغيل قريباً",searchDevicePlaceholder:"أدخل اسم الجهاز أو المعرف للبحث...",searchResult:"تم العثور على {filtered} أجهزة (إجمالي {total})",totalDevices:"إجمالي {count} أجهزة",noSearchResult:"لم يتم العثور على أجهزة مطابقة",noSelectedDevices:"لم يتم تحديد أي أجهزة بعد",searchFilePlaceholder:"أدخل اسم الملف أو المعرف للبحث...",availableFiles:"الملفات المتاحة",selectedFiles:"الملفات المحددة",noSelectedFiles:"لم يتم تحديد أي ملفات بعد",doubleClickHint:"انقر نقراً مزدوجاً لإضافة ملفات مكررة",unknownFile:"ملف غير معروف",playMode:"وضع التشغيل",playMode1:"تشغيل تسلسلي 1x",playMode2:"تشغيل تسلسلي 2x",playMode3:"تشغيل تسلسلي 3x",totalDuration:"المدة الإجمالية المقدرة",durationFormula:"الحساب: (المدة الإجمالية + الفاصل) × عدد التكرارات",playModeHint:"عدد التكرارات، 1-99",intervalMaxHint:"أقصى فاصل 3 ساعات (10800 ثانية)",estimatedDuration:"المدة المقدرة",forceStopDuration:"مدة الإيقاف القسري (اختياري)",forceStopHint:"إيقاف تلقائي عند هذه المدة. يجب أن تكون أقل من المدة المقدرة. 0 يعني عدم الإيقاف القسري",selectAtLeastOneFile:"الرجاء تحديد ملف واحد على الأقل",loadFilesFailed:"فشل تحميل قائمة الملفات",groupHasNoDevices:"هذه المجموعة ليس لديها أجهزة",playStarted:"تم بدء التشغيل بنجاح",playFailed:"فشل بدء التشغيل",invalidPlayId:"معرف التشغيل غير صالح",stopPlayConfirm:"هل أنت متأكد من إيقاف التشغيل؟",stopPlayInProgress:"جاري إيقاف التشغيل، يرجى الانتظار...",stopPlaySuccess:"تم إيقاف التشغيل بنجاح",stopPlaySuccessAndClosed:"تم إيقاف التشغيل بنجاح، تم إغلاق قائمة التشغيل",stopPlayFailed:"فشل إيقاف التشغيل",selectGroupForPlay:"حدد مجموعة للتشغيل",devices:"أجهزة",devicesCount:"أجهزة",startPlay:"بدء التشغيل"},tasks:{title:"المهام المجدولة",list:"قائمة المهام",addTask:"إضافة مهمة",editTask:"تعديل المهمة",deleteTask:"حذف المهمة",taskName:"اسم المهمة",executeTime:"وقت التنفيذ",playMode:"وضع التشغيل",repeat:"تكرار",files:"الملفات",devices:"الأجهزة",advancedSettings:"إعدادات متقدمة",playSettings:"إعدادات التشغيل",forceStopDuration:"مدة الإيقاف القسري",forceStopHint:"إيقاف تلقائي عند هذا الوقت. 0 أو فارغ = بدون إيقاف قسري",durationRequired:"التشغيل العشوائي يتطلب تحديد المدة",durationFormula:"الصيغة: (المدة الإجمالية + الفاصل × الملفات) × عدد التكرار",dateHint:"ملاحظة: سيتم التشغيل في تاريخ البدء وتاريخ الانتهاء. إذا كان تاريخ البدء يساوي تاريخ الانتهاء، سيتم التشغيل في ذلك اليوم فقط. لا يمكن أن يكون تاريخ البدء بعد تاريخ الانتهاء.",dateRangeError:"لا يمكن أن يكون تاريخ البدء بعد تاريخ الانتهاء",batchDurationHint:"عند التشغيل المتسلسل: إذا كانت مدة قائمة التشغيل الإجمالية > الحد الأقصى للتشغيل، فسينتهي عند الوصول للحد؛ إذا كانت مدة قائمة التشغيل الإجمالية < الحد الأقصى للتشغيل، فسينتهي بعد انتهاء قائمة التشغيل",copyConfirm:"هل أنت متأكد من نسخ المهام المحددة؟ لا يمكن التراجع عن هذا الإجراء.",copySuccess:"تم نسخ المهام بنجاح",copyFailed:"فشل نسخ المهام",timeConflict:"تعارض الوقت",dateRange:"نطاق التاريخ",titleDescription:"Manage scheduled playback tasks with batch operations and task groups",allGroups:"All Task Groups",addTaskGroup:"Add Task Group",deleteTaskGroup:"Delete Task Group",disableTaskGroup:"Disable Task Group",enableTaskGroup:"Enable Task Group",taskGroup:"Task Group",taskGroupName:"Task Group Name",enterGroupName:"Enter task group name",applyTaskGroup:"Apply Task Group",task:"Task",selectGroup:"Select Task Group",startTime:"Start Time",duration:"Duration",loopCount:"Loop Count",startDate:"Start Date",endDate:"End Date",changeGroup:"Change Group",noGroup:"No Group",tryPlay:"Try Play",batchDisable:"Batch Disable",batchEnable:"Batch Enable",batchEditDevices:"Batch Edit Devices",batchEditFiles:"Batch Edit Files",batchApplyGroup:"Batch Apply Group",batchEditTime:"Batch Edit Time",batchEditLoopCount:"Batch Edit Loop Count",batchEditDuration:"Batch Edit Duration",batchDelete:"Batch Delete",batchCopy:"Batch Copy",noTasks:"No Tasks",selectedCount:"Selected {count} tasks",randomPlay:"Random Play",loopPlay:"Loop {count} times",selectDevices:"Select Devices to Play",selectFiles:"Select Audio Files",allDevices:"All Devices",selectedDevices:"Selected Devices",allFiles:"All Files",selectedFiles:"Selected Files",editTaskDevices:"Edit Task Devices",editTaskFiles:"Edit Task Files",taskDuration:"Task Duration",intervalDuration:"Interval Duration",timeRange:"Time Range",to:"to",playCount:"Play Count",sequentialPlay:"Sequential Play",randomPlayMode:"Random Play",playModeChange:"Play Mode Change",enableOtherLimit:"Other limits not required",enableStartDate:"Enable Start Date",enableEndDate:"Enable End Date",enterTaskName:"Enter task name",noTasksSelected:"No tasks selected",devicesRequired:"No devices selected",filesRequired:"No audio files selected",saveSuccess:"Save successful",saveFailed:"Save failed",deleteSuccess:"Delete successful",deleteFailed:"Delete failed",deleteConfirm:"This operation will permanently delete the task. Continue?",enableSuccess:"Task enabled",disableSuccess:"Task disabled",startPlaySuccess:"Play started",startPlayFailed:"Play start failed",stopPlaySuccess:"Play stopped",stopPlayFailed:"Play stop failed",groupNameRequired:"Task group name cannot be empty",addGroupSuccess:"Task group added successfully",addGroupFailed:"Failed to add task group",deleteGroupSuccess:"Task group deleted successfully",deleteGroupFailed:"Failed to delete task group",disableGroupSuccess:"Task group disabled successfully",disableGroupFailed:"Failed to disable task group",enableGroupSuccess:"Task group enabled successfully",enableGroupFailed:"Failed to enable task group",applyGroupSuccess:"Task group applied successfully",applyGroupFailed:"Failed to apply task group",selectGroupFirst:"Please select a task group first",batchDisableSuccess:"Batch disable successful",batchEnableSuccess:"Batch enable successful",unknownDevice:"Unknown Device",unknownFile:"Unknown File",calculate:"Calculate",monday:"الاثنين",tuesday:"الثلاثاء",wednesday:"الأربعاء",thursday:"الخميس",friday:"الجمعة",saturday:"السبت",sunday:"الأحد",index:"Index",weekdays:"Play Days",noLimit:"غير محدود",autoCalc:"Auto-calculated",taskNameRequired:"Task name is required",startTimeRequired:"Start time is required",cannotDeletePlaying:"Task is playing, please stop first",cannotDeleteEnabled:"Task is enabled, please disable first",cannotEditPlaying:"Task is playing, please stop first",disabled:"Disabled",enabled:"Enabled",enableTask:"Enable",disableTask:"Disable",noSelectedFiles:"No files selected yet",clickToAddHint:"Click files on the left to add",estimatedDuration:"Estimated Duration",endTime:"End Time",copyCount:"Copy Count",copyNewName:"Default New Name",copyNewNamePlaceholder:"Default new task name",copyInterval:"Time Interval",copyIntervalUnit:"minutes",copyPreview:"Preview List",deleteGroupConfirm:"Are you sure you want to delete this task group? Tasks in the group will not be deleted.",noTasksInGroup:"No tasks in this task group",batchPartialFailed:"{failed} task(s) operation failed"},media:{title:"إدارة الوسائط",list:"قائمة الملفات",upload:"رفع",delete:"حذف",play:"تشغيل",download:"تحميل",fileName:"اسم الملف",fileSize:"حجم الملف",fileType:"نوع الملف",uploadTime:"وقت الرفع",duration:"المدة",noFiles:"لا توجد ملفات",dropHint:"اسحب ملفات MP3 هنا للرفع",dropSub:"يدعم تنسيق MP3، بحد أقصى 40 ميجابايت لكل ملف",selectFiles:"اختر ملفات",selectFolder:"اختر مجلد",onlyMp3:"يتم دعم ملفات MP3 فقط",fileTooLarge:"الملف يتجاوز حد 40 ميجابايت",uploadFailed:"فشل الرفع",uploadSuccess:"تم رفع {count} ملف بنجاح",uploading:"جاري الرفع...",deleteSingleConfirm:"هل أنت متأكد من حذف",deleteConfirm:"حذف الملفات المحددة؟ لا يمكن التراجع",deleteSuccess:"تم الحذف بنجاح",deleteFailed:"فشل الحذف",batchDelete:"حذف متعدد",batchDeleteSuccess:"تم حذف {count} ملف بنجاح",selectedCount:"تم تحديد {count} ملف",tts:"Text to Speech",ttsFileName:"File Name",ttsFileNamePlaceholder:"Enter file name",ttsVoice:"Voice",ttsSpeed:"Speed",ttsSpeedSlow:"Slow",ttsSpeedMedium:"Medium",ttsSpeedFast:"Fast",ttsText:"Text Input",ttsTextPlaceholder:"Enter text to convert",ttsTextTooShort:"Text must be at least 3 characters",ttsSuccess:"TTS file created",ttsFailed:"TTS generation failed",uploadDone:"Upload complete"},broadcast:{title:"التحكم بالبث",serverConfig:"إعدادات الخادم",selectDevices:"اختر الأجهزة",quickSelectGroup:"اختيار سريع للمجموعة",selectAllOnline:"اختر كل المتصلين",clearSelection:"مسح الاختيار",selectedDevices:"تم اختيار {count} جهاز",noDevices:"لا توجد أجهزة",noMatch:"لا توجد أجهزة مطابقة",broadcastControl:"التحكم بالبث",playLevel:"أولوية التشغيل",userLevel:"مستوى المستخدم",holdToTalk:"اضغط للتحدث",releaseToStop:"اترك للتوقف",broadcasting:"جاري البث...",connected:"متصل",notConnected:"غير متصل",selectFiles:"اختر ملفات",startBroadcast:"بدء البث",stopBroadcast:"إيقاف البث",playbackMode:"وضع التشغيل",interval:"الفاصل الزمني",loop:"عدد التكرار",audioSource:"مصدر الصوت",microphone:"ميكروفون",noAudioDevice:"لم يتم اكتشاف جهاز إدخال صوت",audioReady:"الصوت جاهز",inputVolume:"Input Volume",enableMicrophone:"Connect Microphone",startPreview:"Start Preview"},alarm:{title:"نظام الإنذار",settings:"إعدادات الإنذار",history:"سجل الإنذارات",enable:"تفعيل",disable:"تعطيل",triggerCondition:"شرط التشغيل",alarmFile:"ملف الإنذار",linkage:"الجهاز المرتبط",selectDevices:"اختر الأجهزة",searchDevice:"بحث باسم الجهاز أو الرقم التسلسلي",selectAllOnline:"تحديد الكل متصل",clearSelection:"مسح التحديد",selectedCount:"{count} أجهزة محددة",noDevices:"لا توجد أجهزة",noMatch:"لا توجد أجهزة مطابقة",alarmConfig:"تكوين الإنذار",alarmName:"اسم الإنذار",alarmNamePlaceholder:"أدخل اسم الإنذار",audioSource:"مصدر الصوت",selectFile:"اختر ملف محمّل",inputUrl:"أدخل الرابط يدوياً",selectFilePlaceholder:"اختر ملف صوتي",urlPlaceholder:"أدخل رابط الملف الصوتي",registerAlarm:"تسجيل الإنذار",registering:"جارٍ التسجيل...",registerResult:"نتيجة التسجيل",registerSuccess:"تم التسجيل بنجاح",registerFailed:"فشل التسجيل",noDevicesSelected:"يرجى تحديد جهاز واحد على الأقل",noAudioConfigured:"يرجى تكوين ملف صوتي",online:"متصل",offline:"غير متصل",deviceSn:"الرقم التسلسلي للجهاز",registeredList:"الإنذارات المسجلة",noRegistered:"لا توجد إنذارات مسجلة",loadListFailed:"فشل تحميل قائمة الإنذارات",deviceName:"اسم الجهاز",fileName:"اسم الملف",refreshList:"تحديث القائمة",unregisterAlarm:"إلغاء التسجيل",unregisterConfirm:"هل أنت متأكد من إلغاء تسجيل هذا الإنذار؟",unregisterSuccess:"تم إلغاء التسجيل بنجاح",unregisterFailed:"فشل إلغاء التسجيل",linkageTitle:"ربط الإنذار",linkageDesc:"عند تشغيل الجهاز A، تشغل الأجهزة المرتبطة (بما فيها الجهاز نفسه) الصوت المحدد",linkagePlanName:"اسم الخطة",linkagePlanNamePlaceholder:"أدخل اسم الخطة",linkageDevices:"الأجهزة المرتبطة",linkageDevicesHint:"اختر أجهزة التشغيل والتشغيل (يمكن أن تشمل جهاز التشغيل نفسه)",linkageAudio:"ملف صوتي",addLinkagePlan:"إضافة خطة ربط",adding:"جارٍ الإضافة...",linkageList:"قائمة خطط الربط",noLinkagePlans:"لا توجد خطط ربط",linkageDeviceCount:"عدد الأجهزة",addLinkageSuccess:"تمت إضافة خطة الربط بنجاح",addLinkageFailed:"فشل إضافة خطة الربط",linkagePlanNameRequired:"يرجى إدخال اسم الخطة",linkageNoDevices:"يرجى تحديد جهاز واحد على الأقل",linkageNoAudio:"يرجى تكوين ملف صوتي",linkageTriggerDevice:"جهاز التشغيل",linkageTriggerDeviceHint:"عند تشغيل هذا الجهاز للإنذار، ستشغل الأجهزة المرتبطة الصوت",linkageTriggerDevicePlaceholder:"اختر جهاز تشغيل الإنذار",linkageNoTriggerDevice:"يرجى اختيار جهاز التشغيل",registerTrigger:"تسجيل",registerTriggerTitle:"تسجيل جهاز التشغيل",registerTriggerSuccess:"تم تسجيل جهاز التشغيل بنجاح",registerTriggerFailed:"فشل تسجيل جهاز التشغيل",loadLinkageFailed:"فشل تحميل خطط الربط",deleteLinkageConfirm:"هل أنت متأكد من حذف خطة الربط",deleteLinkageFailed:"فشل حذف خطة الربط",forceUnregTitle:"إلغاء تسجيل الإنذار بالقوة",forceUnregHint:"إلغاء تسجيل جميع الإنذارات للجهاز بغض النظر عن النوع",forceUnregButton:"إلغاء تسجيل الإنذار بالقوة",forceUnregModalHint:"اختر جهازاً لإلغاء تسجيل جميع الإنذارات (مستقل + مرتبط)",forceUnregConfirm:"تأكيد الإلغاء",forceUnregSuccess:"تم إلغاء تسجيل الإنذار بالقوة بنجاح",forceUnregFailed:"فشل إلغاء تسجيل الإنذار بالقوة"},account:{title:"إدارة الحساب",profile:"الملف الشخصي",changePassword:"تغيير كلمة المرور",subAccounts:"الحسابات الفرعية",logs:"سجل العمليات",username:"اسم المستخدم",nickname:"الاسم المستعار",email:"البريد الإلكتروني",phone:"رقم الهاتف",role:"الدور",level:"المستوى",addSubUser:"Add Sub Account",usernamePlaceholder:"Enter username",passwordPlaceholder:"Enter password",nicknamePlaceholder:"Enter nickname",beizhu:"Remark",beizhuPlaceholder:"Enter remark",password:"Password",levelLabel:"Level",levelPlaceholder:"Select level",mask:"Permission Mask",maskPlaceholder:"40-bit permission mask (0/1)",maskDefault:"00000000000000000000000000000000000000000000",permissions:"Permission Settings",permCreateSub:"Can create sub accounts",permManageDevice:"Can add/delete devices",permUploadFile:"Can upload files",addSuccess:"Sub account added successfully",addFailed:"Failed to add sub account",listFailed:"Failed to get sub account list",noSubUsers:"No sub accounts yet",createTime:"Create Time",status:"Status",statusNormal:"Normal",statusDisabled:"Disabled",userLevel:"User Level",playLevel:"Play Level",passwordShow:"Password",refreshList:"Refresh List",usernameRequired:"Please enter username",passwordRequired:"Please enter password",permChangeFailed:"Permission change failed",adding:"Adding...",deleteConfirm:"Are you sure to delete sub account {name}? This cannot be undone!",deleteSuccess:"Sub account deleted successfully",deleteFailed:"Failed to delete sub account",editDevices:"Edit Devices",editDevicesSuccess:"Devices updated successfully",editDevicesFailed:"Failed to update devices",loadDevicesFailed:"Failed to load device list",searchDevice:"Search device name or ID",noDevices:"No devices",resetToken:"Reset Token",resetTokenConfirm:"Are you sure to reset token for {name}?",resetTokenSuccess:"Token reset successfully",resetTokenFailed:"Token reset failed",newToken:"New Token"},admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"User & Permission Management",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully",btnEnable:"Enable",btnDisable:"Disable"},info:{title:"App Privacy Agreement",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Content too short, at least 3000 characters",saveSuccess:"Saved successfully",saveFailed:"Save failed"},upload:{title:"Avatar & Logo Upload",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Announcement Management",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scroll notice: ",noData:"No data",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"},billing:{title:"Billing Settings",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Device",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure to delete?"},gallery:{title:"Gallery Overview",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No gallery items",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"}},settings:{title:"الإعدادات",language:"اللغة",theme:"السمة",darkMode:"الوضع الداكن",lightMode:"الوضع الفاتح",diabloMode:"وضع ديابلو",notification:"الإشعارات",sound:"إعدادات الصوت",about:"حول",version:"الإصدار"},language:{title:"اختر اللغة",chinese:"简体中文",english:"English",korean:"한국어",thai:"ไทย",vietnamese:"Tiếng Việt",arabic:"العربية",malay:"Bahasa Melayu",japanese:"日本語",russian:"Русский",french:"Français",spanish:"Español",portuguese:"Português",german:"Deutsch",indonesian:"Bahasa Indonesia",hindi:"हिन्दी",turkish:"Türkçe",italian:"Italiano",polish:"Polski",swahili:"Kiswahili"},messages:{deleteConfirm:"هل أنت متأكد من الحذف؟ لا يمكن التراجع عن هذا الإجراء!",saveSuccess:"تم الحفظ بنجاح",deleteSuccess:"تم الحذف بنجاح",operationSuccess:"تمت العملية بنجاح",operationFailed:"فشلت العملية، يرجى المحاولة مرة أخرى",networkError:"خطأ في الشبكة، يرجى التحقق من الاتصال",serverError:"خطأ في الخادم، يرجى المحاولة لاحقاً",noData:"لا توجد بيانات",loading:"جاري التحميل...",noPermission:"ليس لديك صلاحية الوصول",tokenExpired:"انتهت الجلسة، يرجى تسجيل الدخول مرة أخرى",operationTimeout:"انتهت مهلة العملية"},clientLogin:{subtitle:"Client Edition",hostPlaceholder:"Server address, e.g. 192.168.1.100:12080",hostHint:"Enter server IP:port, http:// is optional",hostRequired:"Please enter server address"}},"pl-PL":{common:{appName:"System Nadawania ST",loading:"Ładowanie...",confirm:"Potwierdź",cancel:"Anuluj",save:"Zapisz",delete:"Usuń",edit:"Edytuj",add:"Dodaj",search:"Szukaj",refresh:"Odśwież",submit:"Prześlij",reset:"Resetuj",logout:"Wyloguj",logoutConfirm:"Czy na pewno chcesz się wylogować?",logoutTitle:"Potwierdź wylogowanie",back:"Wstecz",success:"Sukces",error:"Błąd",warning:"Ostrzeżenie",info:"Informacja",yes:"Tak",no:"Nie",operation:"Operacja",status:"Status",index:"Indeks",name:"Nazwa",description:"Opis",createTime:"Data Utworzenia",updateTime:"Data Aktualizacji",close:"Zamknij",stop:"Zatrzymaj",toggle:"Włącz/Wyłącz",actions:"Akcje",seconds:"sekundy",minutes:"minuty",hours:"godziny",moveUp:"Przesuń W Górę",moveDown:"Przesuń W Dół",quick:"Szybkie",unknown:"Nieznany",months:"mo",years:"yr",copy:"Copy"},login:{title:"Logowanie",subtitle:"SYSTEM TRANSMISJI",username:"Nazwa Użytkownika",password:"Hasło",usernamePlaceholder:"Wprowadź nazwę użytkownika",passwordPlaceholder:"Wprowadź hasło",rememberMe:"Zapamiętaj mnie",forgotPassword:"Zapomniałeś hasła?",loginButton:"Zaloguj",logging:"Logowanie...",loginSuccess:"Logowanie udane",loginFailed:"Logowanie nie powiodło się",usernameRequired:"Wprowadź nazwę użytkownika",passwordRequired:"Wprowadź hasło",invalidCredentials:"Nieprawidłowa nazwa użytkownika lub hasło"},clientLogin:{subtitle:"Wersja Klient",hostPlaceholder:"Adres serwera, np. 192.168.1.100:12080",hostHint:"Wprowadź IP:port serwera, http:// jest opcjonalne",hostRequired:"Wprowadź adres serwera"},dashboard:{title:"Panel Główny",welcome:"Witaj ponownie",systemStatus:"System działa normalnie",quickActions:"Szybkie Akcje",addDevice:"Dodaj Urządzenie",createGroup:"Utwórz Grupę",scheduleTask:"Zaplanuj Zadanie",broadcastNow:"Transmituj Teraz"},menu:{dashboard:"Panel Główny",devices:"Urządzenia",groups:"Grupy",tasks:"Zadania",media:"Media",broadcast:"Transmisja",alarm:"Alarm",account:"Konto",settings:"Ustawienia",apiTest:"Test API",home:"Strona główna",mine:"Moje konto"},admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"User & Permission Management",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully",btnEnable:"Enable",btnDisable:"Disable"},info:{title:"App Privacy Agreement",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Content too short, at least 3000 characters",saveSuccess:"Saved successfully",saveFailed:"Save failed"},upload:{title:"Avatar & Logo Upload",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Announcement Management",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scroll notice: ",noData:"No data",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"},billing:{title:"Billing Settings",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Device",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure to delete?"},gallery:{title:"Gallery Overview",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No gallery items",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"}},settings:{title:"Ustawienia",language:"Język",theme:"Motyw",darkMode:"Tryb Ciemny",lightMode:"Tryb Jasny",diabloMode:"Tryb Diablo",notification:"Powiadomienia",sound:"Ustawienia Dźwięku",about:"O Programie",version:"Wersja"},language:{title:"Wybierz Język",chinese:"简体中文",english:"English",korean:"한국어",thai:"ไทย",vietnamese:"Tiếng Việt",arabic:"العربية",malay:"Bahasa Melayu",japanese:"日本語",russian:"Русский",french:"Français",spanish:"Español",portuguese:"Português",german:"Deutsch",indonesian:"Bahasa Indonesia",hindi:"हिन्दी",turkish:"Türkçe",italian:"Italiano",polish:"Polski",swahili:"Kiswahili"},alarm:{title:"System alarmowy",settings:"Ustawienia alarmu",history:"Historia alarmów",enable:"Włącz",disable:"Wyłącz",triggerCondition:"Warunek wyzwolenia",alarmFile:"Plik alarmu",linkage:"Urządzenie powiązane",selectDevices:"Wybierz urządzenia",searchDevice:"Szukaj nazwy urządzenia lub numeru seryjnego",selectAllOnline:"Wybierz wszystkie online",clearSelection:"Wyczyść wybór",selectedCount:"Wybrano {count} urządzeń",noDevices:"Brak urządzeń",noMatch:"Brak pasujących urządzeń",alarmConfig:"Konfiguracja alarmu",alarmName:"Nazwa alarmu",alarmNamePlaceholder:"Wprowadź nazwę alarmu",audioSource:"Źródło dźwięku",selectFile:"Wybierz przesłany plik",inputUrl:"Wprowadź URL ręcznie",selectFilePlaceholder:"Wybierz plik audio",urlPlaceholder:"Wprowadź URL pliku audio",registerAlarm:"Zarejestruj alarm",registering:"Rejestracja...",registerResult:"Wynik rejestracji",registerSuccess:"Rejestracja udana",registerFailed:"Rejestracja nie powiodła się",noDevicesSelected:"Wybierz co najmniej jedno urządzenie",noAudioConfigured:"Skonfiguruj plik audio",online:"Online",offline:"Offline",deviceSn:"Numer seryjny urządzenia",registeredList:"Zarejestrowane alarmy",noRegistered:"Brak zarejestrowanych alarmów",loadListFailed:"Nie udało się załadować listy alarmów",deviceName:"Nazwa urządzenia",fileName:"Nazwa pliku",refreshList:"Odśwież listę",unregisterAlarm:"Wyrejestruj",unregisterConfirm:"Czy na pewno chcesz wyrejestrować ten alarm?",unregisterSuccess:"Wyrejestrowanie udane",unregisterFailed:"Wyrejestrowanie nie powiodło się",linkageTitle:"Powiązanie alarmu",linkageDesc:"Gdy urządzenie A zostanie wyzwolone, powiązane urządzenia (w tym samo urządzenie) odtworzą określony dźwięk",linkagePlanName:"Nazwa planu",linkagePlanNamePlaceholder:"Wprowadź nazwę planu",linkageDevices:"Urządzenia powiązane",linkageDevicesHint:"Wybierz urządzenia wyzwalające i odtwarzające (może zawierać samo urządzenie wyzwalające)",linkageAudio:"Plik audio",addLinkagePlan:"Dodaj plan powiązania",adding:"Dodawanie...",linkageList:"Lista planów powiązania",noLinkagePlans:"Brak planów powiązania",linkageDeviceCount:"Liczba urządzeń",addLinkageSuccess:"Plan powiązania dodany pomyślnie",addLinkageFailed:"Dodanie planu powiązania nie powiodło się",linkagePlanNameRequired:"Wprowadź nazwę planu",linkageNoDevices:"Wybierz co najmniej jedno urządzenie",linkageNoAudio:"Skonfiguruj plik audio",linkageTriggerDevice:"Urządzenie wyzwalające",linkageTriggerDeviceHint:"Gdy to urządzenie wyzwoli alarm, powiązane urządzenia odtworzą dźwięk",linkageTriggerDevicePlaceholder:"Wybierz urządzenie wyzwalające alarm",linkageNoTriggerDevice:"Wybierz urządzenie wyzwalające",registerTrigger:"Zarejestruj",registerTriggerTitle:"Zarejestruj urządzenie wyzwalające",registerTriggerSuccess:"Urządzenie wyzwalające zarejestrowane pomyślnie",registerTriggerFailed:"Rejestracja urządzenia wyzwalającego nie powiodła się",loadLinkageFailed:"Nie udało się załadować planów powiązania",deleteLinkageConfirm:"Czy na pewno chcesz usunąć plan powiązania",deleteLinkageFailed:"Usunięcie planu powiązania nie powiodło się",forceUnregTitle:"Wymuś wyrejestrowanie alarmu",forceUnregHint:"Wymuś wyrejestrowanie wszystkich rejestracji alarmów urządzenia",forceUnregButton:"Wymuś wyrejestrowanie alarmu",forceUnregModalHint:"Wybierz urządzenie, aby wymusić wyrejestrowanie wszystkich alarmów (autonomiczny + powiązany)",forceUnregConfirm:"Potwierdź wyrejestrowanie",forceUnregSuccess:"Wymuszone wyrejestrowanie alarmu udane",forceUnregFailed:"Wymuszone wyrejestrowanie alarmu nie powiodło się"},messages:{deleteConfirm:"Czy na pewno chcesz usunąć? Ta operacja jest nieodwracalna!",saveSuccess:"Zapisano pomyślnie",deleteSuccess:"Usunięto pomyślnie",operationSuccess:"Operacja udana",operationFailed:"Operacja nie powiodła się, spróbuj ponownie",networkError:"Błąd sieci, sprawdź połączenie",serverError:"Błąd serwera, spróbuj ponownie później",noData:"Brak dostępnych danych",loading:"Ładowanie...",noPermission:"Brak uprawnień dostępu",tokenExpired:"Sesja wygasła, zaloguj się ponownie",operationTimeout:"Limit czasu operacji"},devices:{title:"Device Management",list:"Device List",online:"Online",offline:"Offline",playing:"Playing",volume:"Volume",adjustVolume:"Adjust Volume",addDevice:"Add Device",editDevice:"Edit Device",deleteDevice:"Delete Device",deviceName:"Device Name",serialNumber:"Serial Number",lastUpdate:"Last Update",refreshList:"Refresh Device List",batchVolume:"Batch Adjust Volume",noDevices:"No devices available, click Add Device in top right",unnamedDevice:"Unnamed Device",debugSound:"Debug Sound",changeVolume:"Change Volume",changeName:"Change Name",changeSerial:"Change Serial",id:"ID",volumeNotSet:"Not Set",neverOnline:"Never Online",expiredDisabled:"Expired Disabled",unknown:"Unknown",openDebugSound:"Open Debug Sound",closeDebugSound:"Close Debug Sound",unknownStatus:"Unknown Status",addDeviceTitle:"Add Device",deviceNameRequired:"Device Name",deviceSerialRequired:"Device Serial",deviceKeyRequired:"Device Key",deviceNamePlaceholder:"Enter device name",deviceSerialPlaceholder:"Enter device serial",deviceKeyPlaceholder:"Enter device registration key",deviceKeyHint:"Registration key is used to register device to system, equivalent to device password",fillTestData:"Fill Test Data",renameTitle:"Rename Device",newDeviceNamePlaceholder:"Enter new device name",debugSoundTitle:"Debug Sound",selectDebugSoundStatus:"Select debug sound status",editSerialTitle:"Edit Device Serial",currentSerial:"Current Serial",currentSerialPlaceholder:"Current device serial",newSerial:"New Serial",newSerialPlaceholder:"Enter 32-digit new serial",serialLengthHint:"Serial number length must be 32 digits",editDeviceTitle:"Edit Device",macAddress:"MAC Address",macAddressPlaceholder:"Enter MAC address",ipAddress:"IP Address",ipAddressPlaceholder:"Enter IP address",port:"Port",portPlaceholder:"Enter port number",adjustVolumeTitle:"Adjust Volume",volumeRange:"Range: 1-63",preciseSetting:"Precise Setting:",batchAdjustVolumeTitle:"Batch Adjust Volume",selectedDevices:"Selected Devices:",devicesCount:"devices",confirmAdjust:"Confirm Adjust",adding:"Adding...",saving:"Saving...",adjusting:"Adjusting...",confirmButton:"Confirm",cancelButton:"Cancel",deviceNameValidationError:"Please enter device name",deviceSerialValidationError:"Please enter device serial",deviceKeyValidationError:"Please enter device key",newDeviceNameValidationError:"Please enter device name",deviceSerialLengthError:"Please enter device serial",newSerialLengthError:"Serial number length must be 32 digits",debugSoundSelectError:"Please select open or close debug sound",confirmOperation:"Confirm Operation",confirmDelete:"Are you sure to delete device",deleteCannotUndo:"? This action cannot be undone!",addDeviceSuccess:"Device added successfully",addDeviceFailed:"Failed to add device",deviceRenameSuccess:"Device renamed successfully",deviceRenameFailed:"Failed to rename device",deviceEditSuccess:"Device edited successfully",deviceEditFailed:"Failed to edit device",deviceSerialEditSuccess:"Device serial edited successfully",deviceSerialEditFailed:"Failed to edit device serial",debugSoundSuccess:"Debug sound set successfully",debugSoundFailed:"Failed to set debug sound",deleteDeviceSuccess:"Device deleted successfully",deleteDeviceFailed:"Failed to delete device",adjustVolumeSuccess:"Volume set to",adjustVolumeFailed:"Failed to adjust volume",batchAdjustSuccess:"Batch adjust volume successful, total",batchAdjustFailed:"Failed to batch adjust volume",volumeValidationError:"Volume must be between 1-63",selectDevicesFirst:"Please select devices to adjust volume first",successfullyFetched:"Successfully fetched",devicesUnit:"devices",deviceListFormatError:"Device list data format error",fetchDeviceListFailed:"Failed to fetch device list",searchPlaceholder:"Szukaj nazwy lub numeru seryjnego...",unknownError:"Unknown error",listView:"List View",cardView:"Card View",scanDevices:"Scan Devices",deviceScan:"Device Scan",seed:"Device SEED",seedPlaceholder:"Enter 32-char hex SEED",scanButton:"Scan",scanning:"Scanning...",noDeviceFound:"No devices found",scanNotSupported:"Device scan only available in desktop client",autoIP:"Auto IP",warmMode:"Voice Prompt",mediaServer:"Media Server",mediaPort:"Media Port",gateway:"Gateway",subnetMask:"Subnet Mask",dns:"DNS",deviceIP:"Device IP",applyConfig:"Apply Config",clearDevice:"Clear Device",deviceConfigured:"Device config sent",deviceConfigureFailed:"Device config failed",deviceCleared:"Clear command sent",scanConfigTitle:"Device Network Config",scannedDevices:"Discovered Devices",scanHint:"Click scan to discover all devices on the local network",testComm:"Test Communication",testCommBtn:"Test",console:"Console",clearConsole:"Clear",consoleEmpty:"Waiting for communication...",invalidIP:"Invalid IP format",invalidMask:"Invalid subnet mask",invalidGateway:"Invalid gateway",invalidMediaIP:"Invalid media server IP",invalidPort:"Port range 1-65535",invalidDNS:"Invalid DNS format",dnsPlaceholder:"0.0.0.0 = System default",advanced:"Advanced",soundCard:"Sound Card",getAmixerStatus:"Get Status",amixerApply:"Apply",amixerGetting:"Getting...",amixerOn:"On",amixerOff:"Off",amixerDAC:"DAC Playback Volume",amixerHeadphoneVol:"Headphone Volume",amixerHeadphoneSwitch:"Headphone Switch",amixerHeadphoneRoute:"Headphone Source",amixerLineIn:"Line In Volume",amixerFMIn:"FM In Volume",amixerMicIn:"Mic In Volume",amixerMicBoost:"Mic Boost",amixerADCCapture:"ADC Capture Volume",amixerADCLeftFM:"Left FM Capture",amixerADCRightFM:"Right FM Capture",amixerADCLeftOut:"Left Out Capture",amixerADCRightOut:"Right Out Capture",amixerADCLineIn:"Line In Capture",amixerADCMic:"Mic Capture",amixerLeftFM:"Left FM",amixerLeftLeftDAC:"Left Left DAC",amixerLeftRightDAC:"Left Right DAC",amixerLeftLineIn:"Left Line In",amixerLeftMicIn:"Left Mic In",amixerRightFM:"Right FM",amixerRightLeftDAC:"Right Left DAC",amixerRightRightDAC:"Right Right DAC",amixerRightLineIn:"Right Line In",amixerRightMicIn:"Right Mic In",amixerGroupDecode:"Decode Output",amixerGroupCapture:"Capture Mixer Input",amixerGroupLeft:"Left Output Mixer",amixerGroupRight:"Right Output Mixer",amixerGroupGain:"Gain Config",amixerRouteDAC:"DAC",amixerRouteMixer:"Mixer",amixerGetSuccess:"Sound card status retrieved",amixerGetFailed:"Failed to get sound card status",amixerSetSuccess:"Setting sent",amixerSetFailed:"Setting failed"},groups:{title:"Group Management",list:"Group List",deviceCount:"Device Count",addGroup:"Add Group",editGroup:"Edit Group",deleteGroup:"Delete Group",groupName:"Group Name",manage:"Group Management",inputName:"Input group name",add:"Add Group",playMenu:"Play Menu",id:"ID",name:"Name",actions:"Actions",noGroups:"No groups available",untitled:"Untitled Group",editDevices:"Edit Devices",editVideo:"Edit Video",previewVideo:"Preview Video",groupPlay:"Group Play",allDevices:"All Devices",selectedDevices:"Selected Devices",selectAtLeastOneDevice:"Please select at least one device",videoUrl:"Video URL",inputVideoUrl:"Please enter video URL",noVideoUrl:"No video URL set",noVideoUrlSet:"Mu38 live stream URL not set yet",playSequence:"Play Sequence",fileInterval:"File Interval",playCount:"Play Count",noPlayingItems:"No currently playing sequences",playList:"Play List",nameRequired:"Group name cannot be empty",loadSuccess:"Successfully loaded {count} groups",loadFailed:"Failed to load group list",addSuccess:"Group added successfully",addFailed:"Failed to add group",deleteConfirm:"This operation will permanently delete this group. Continue?",deleteSuccess:"Deleted successfully",deleteFailed:"Failed to delete",saveSuccess:"Saved successfully",saveFailed:"Failed to save",loadDevicesFailed:"Failed to load device list",invalidGroupId:"Invalid group ID",unknownDevice:"Unknown device",playFeatureComingSoon:"Group play feature coming soon",stopPlayFeatureComingSoon:"Stop play feature coming soon",playListFeatureComingSoon:"Play list feature coming soon",searchDevicePlaceholder:"Enter device name or ID to search...",searchResult:"Found {filtered} devices (total {total})",totalDevices:"Total {count} devices",noSearchResult:"No matching devices found",noSelectedDevices:"No devices selected yet",searchFilePlaceholder:"Enter file name or ID to search...",availableFiles:"Available Files",selectedFiles:"Selected Files",noSelectedFiles:"No files selected yet",doubleClickHint:"Double-click to add duplicate files",unknownFile:"Unknown file",playMode:"Play Mode",playMode1:"Sequential Play 1x",playMode2:"Sequential Play 2x",playMode3:"Sequential Play 3x",totalDuration:"Estimated Duration",durationFormula:"Calculation: (Total Duration + Interval) × Loop Count",playModeHint:"Loop count, 1-99",intervalMaxHint:"Maximum interval 3 hours (10800 seconds)",estimatedDuration:"Estimated Duration",forceStopDuration:"Force Stop Duration (Optional)",forceStopHint:"Auto-stop at this duration. Must be less than estimated duration. 0 means no force stop",selectAtLeastOneFile:"Please select at least one file",loadFilesFailed:"Failed to load file list",groupHasNoDevices:"This group has no devices",playStarted:"Play started successfully",playFailed:"Failed to start play",invalidPlayId:"Invalid play ID",stopPlayConfirm:"Are you sure you want to stop play?",stopPlayInProgress:"Stopping play, please wait...",stopPlaySuccess:"Play stopped successfully",stopPlaySuccessAndClosed:"Play stopped successfully, play list closed",stopPlayFailed:"Failed to stop play",selectGroupForPlay:"Select a group to play",devices:"devices",devicesCount:"devices",startPlay:"Start Play"},tasks:{title:"Scheduled Tasks",titleDescription:"Manage scheduled playback tasks with batch operations and task groups",list:"Task List",addTask:"Add Task",editTask:"Edit Task",deleteTask:"Delete Task",taskName:"Task Name",executeTime:"Execute Time",playMode:"Play Mode",repeat:"Repeat",files:"Files",devices:"Devices",allGroups:"All Task Groups",addTaskGroup:"Add Task Group",deleteTaskGroup:"Delete Task Group",disableTaskGroup:"Disable Task Group",enableTaskGroup:"Enable Task Group",taskGroup:"Task Group",taskGroupName:"Task Group Name",enterGroupName:"Enter task group name",applyTaskGroup:"Apply Task Group",task:"Task",selectGroup:"Select Task Group",startTime:"Start Time",duration:"Duration",loopCount:"Loop Count",startDate:"Start Date",endDate:"End Date",changeGroup:"Change Group",noGroup:"No Group",tryPlay:"Try Play",batchDisable:"Batch Disable",batchEnable:"Batch Enable",batchEditDevices:"Batch Edit Devices",batchEditFiles:"Batch Edit Files",batchApplyGroup:"Batch Apply Group",batchEditTime:"Batch Edit Time",batchEditLoopCount:"Batch Edit Loop Count",batchEditDuration:"Batch Edit Duration",batchDelete:"Batch Delete",batchCopy:"Batch Copy",noTasks:"No Tasks",selectedCount:"Selected {count} tasks",randomPlay:"Random Play",loopPlay:"Loop {count} times",selectDevices:"Select Devices to Play",selectFiles:"Select Audio Files",allDevices:"All Devices",selectedDevices:"Selected Devices",allFiles:"All Files",selectedFiles:"Selected Files",editTaskDevices:"Edit Task Devices",editTaskFiles:"Edit Task Files",taskDuration:"Task Duration",intervalDuration:"Interval Duration",timeRange:"Time Range",to:"to",playCount:"Play Count",sequentialPlay:"Sequential Play",randomPlayMode:"Random Play",playModeChange:"Play Mode Change",enableOtherLimit:"Other limits not required",enableStartDate:"Enable Start Date",enableEndDate:"Enable End Date",enterTaskName:"Enter task name",noTasksSelected:"No tasks selected",devicesRequired:"No devices selected",filesRequired:"No audio files selected",saveSuccess:"Save successful",saveFailed:"Save failed",deleteSuccess:"Delete successful",deleteFailed:"Delete failed",deleteConfirm:"This operation will permanently delete the task. Continue?",enableSuccess:"Task enabled",disableSuccess:"Task disabled",startPlaySuccess:"Play started",startPlayFailed:"Play start failed",stopPlaySuccess:"Play stopped",stopPlayFailed:"Play stop failed",groupNameRequired:"Task group name cannot be empty",addGroupSuccess:"Task group added successfully",addGroupFailed:"Failed to add task group",deleteGroupSuccess:"Task group deleted successfully",deleteGroupFailed:"Failed to delete task group",disableGroupSuccess:"Task group disabled successfully",disableGroupFailed:"Failed to disable task group",enableGroupSuccess:"Task group enabled successfully",enableGroupFailed:"Failed to enable task group",applyGroupSuccess:"Task group applied successfully",applyGroupFailed:"Failed to apply task group",selectGroupFirst:"Please select a task group first",batchDisableSuccess:"Batch disable successful",batchEnableSuccess:"Batch enable successful",unknownDevice:"Unknown Device",unknownFile:"Unknown File",calculate:"Calculate",monday:"Poniedziałek",tuesday:"Wtorek",wednesday:"Środa",thursday:"Czwartek",friday:"Piątek",saturday:"Sobota",sunday:"Niedziela",index:"Index",weekdays:"Play Days",noLimit:"Bez limitu",autoCalc:"Auto-calculated",taskNameRequired:"Task name is required",startTimeRequired:"Start time is required",cannotDeletePlaying:"Task is playing, please stop first",cannotDeleteEnabled:"Task is enabled, please disable first",cannotEditPlaying:"Task is playing, please stop first",disabled:"Disabled",enabled:"Enabled",enableTask:"Enable",disableTask:"Disable",noSelectedFiles:"No files selected yet",clickToAddHint:"Click files on the left to add",estimatedDuration:"Estimated Duration",advancedSettings:"Advanced Settings",playSettings:"Play Settings",forceStopDuration:"Force Stop Duration",forceStopHint:"If set, playback auto-stops at this time. Must be less than estimated duration. 0 or empty means no force stop",durationRequired:"Random play requires a duration",durationFormula:"Calculation: (Total Duration + Interval × File Count) × Loop Count",dateHint:"Note: Plays on the start date and also on the end date. If both dates are the same, plays only on that day. Start date cannot be later than end date.",dateRangeError:"Start date cannot be later than end date",batchDurationHint:"For sequential play: if playlist total duration > max duration, it stops when duration is reached; if playlist total duration < max duration, it stops when playlist finishes",copyConfirm:"Are you sure you want to copy the selected tasks? This action cannot be undone.",copySuccess:"Tasks copied successfully",copyFailed:"Failed to copy tasks",timeConflict:"Time Conflict",dateRange:"Date Range",endTime:"End Time",copyCount:"Copy Count",copyNewName:"Default New Name",copyNewNamePlaceholder:"Default new task name",copyInterval:"Time Interval",copyIntervalUnit:"minutes",copyPreview:"Preview List",deleteGroupConfirm:"Are you sure you want to delete this task group? Tasks in the group will not be deleted.",noTasksInGroup:"No tasks in this task group",batchPartialFailed:"{failed} task(s) operation failed"},media:{title:"Media Management",list:"File List",upload:"Upload",delete:"Delete",play:"Play",download:"Download",fileName:"File Name",fileSize:"File Size",fileType:"File Type",uploadTime:"Upload Time",duration:"Duration",noFiles:"No files yet",dropHint:"Drag & drop MP3 files here to upload",dropSub:"Supports MP3 format, max 40MB per file",selectFiles:"Select Files",selectFolder:"Select Folder",onlyMp3:"Only MP3 files are supported",fileTooLarge:"File exceeds 40MB limit",uploadFailed:"Upload failed",uploadSuccess:"Successfully uploaded {count} file(s)",uploadDone:"Upload complete",uploading:"Uploading...",deleteSingleConfirm:"Are you sure you want to delete",deleteConfirm:"Delete selected files? This cannot be undone",deleteSuccess:"Deleted successfully",deleteFailed:"Delete failed",batchDelete:"Batch Delete",batchDeleteSuccess:"Successfully deleted {count} file(s)",selectedCount:"{count} file(s) selected",tts:"Text to Speech",ttsFileName:"File Name",ttsFileNamePlaceholder:"Enter file name to save",ttsVoice:"Voice",ttsSpeed:"Speed",ttsSpeedSlow:"Slow",ttsSpeedMedium:"Medium",ttsSpeedFast:"Fast",ttsText:"Text Input",ttsTextPlaceholder:"Enter text to convert to speech",ttsTextTooShort:"Text must be at least 3 characters",ttsSuccess:"TTS file created successfully",ttsFailed:"TTS generation failed"},broadcast:{title:"Broadcast Control",serverConfig:"Server Configuration",selectDevices:"Select Devices",quickSelectGroup:"Quick Select Group",selectAllOnline:"Select All Online",clearSelection:"Clear Selection",selectedDevices:"{count} device(s) selected",noDevices:"No devices available",noMatch:"No matching devices",broadcastControl:"Broadcast Control",playLevel:"Play Priority",userLevel:"User Level",holdToTalk:"Hold to Talk",releaseToStop:"Release to Stop",broadcasting:"Broadcasting...",connected:"Connected",notConnected:"Not Connected",selectFiles:"Select Files",startBroadcast:"Start Broadcast",stopBroadcast:"Stop Broadcast",playbackMode:"Playback Mode",interval:"Interval",loop:"Loop Count",audioSource:"Audio Source",microphone:"Microphone",noAudioDevice:"No audio input device detected",audioReady:"Audio Ready",inputVolume:"Input Volume",enableMicrophone:"Connect Microphone",startPreview:"Start Preview"},account:{title:"Account Management",profile:"Profile",changePassword:"Change Password",subAccounts:"Sub Accounts",logs:"Operation Logs",username:"Username",nickname:"Nickname",email:"Email",phone:"Phone",role:"Role",level:"Level",addSubUser:"Add Sub Account",usernamePlaceholder:"Enter username",passwordPlaceholder:"Enter password",nicknamePlaceholder:"Enter nickname",beizhu:"Remark",beizhuPlaceholder:"Enter remark",password:"Password",levelLabel:"Level",levelPlaceholder:"Select level",mask:"Permission Mask",maskPlaceholder:"40-bit permission mask (0/1)",maskDefault:"00000000000000000000000000000000000000000000",permissions:"Permission Settings",permCreateSub:"Can create sub accounts",permManageDevice:"Can add/delete devices",permUploadFile:"Can upload files",addSuccess:"Sub account added successfully",addFailed:"Failed to add sub account",listFailed:"Failed to get sub account list",noSubUsers:"No sub accounts yet",createTime:"Create Time",status:"Status",statusNormal:"Normal",statusDisabled:"Disabled",userLevel:"User Level",playLevel:"Play Level",passwordShow:"Password",refreshList:"Refresh List",usernameRequired:"Please enter username",passwordRequired:"Please enter password",permChangeFailed:"Permission change failed",adding:"Adding...",deleteConfirm:"Are you sure to delete sub account {name}? This cannot be undone!",deleteSuccess:"Sub account deleted successfully",deleteFailed:"Failed to delete sub account",editDevices:"Edit Devices",editDevicesSuccess:"Devices updated successfully",editDevicesFailed:"Failed to update devices",loadDevicesFailed:"Failed to load device list",searchDevice:"Search device name or ID",noDevices:"No devices",resetToken:"Reset Token",resetTokenConfirm:"Are you sure to reset token for {name}?",resetTokenSuccess:"Token reset successfully",resetTokenFailed:"Token reset failed",newToken:"New Token"}},"sw-KE":{common:{appName:"Mfumo wa Utangazaji ST",loading:"Inapakia...",confirm:"Thibitisha",cancel:"Ghairi",save:"Hifadhi",delete:"Futa",edit:"Hariri",add:"Ongeza",search:"Tafuta",refresh:"Sasisha",submit:"Wasilisha",reset:"Weka upya",logout:"Toka",logoutConfirm:"Je, una uhakika unataka kutoka?",logoutTitle:"Thibitisha Kutoka",back:"Rudi",success:"Mafanikio",error:"Hitilafu",warning:"Onyo",info:"Taarifa",yes:"Ndiyo",no:"Hapana",operation:"Operesheni",status:"Hali",index:"Nambari",name:"Jina",description:"Maelezo",createTime:"Wakati wa Kuunda",updateTime:"Wakati wa Kubadilisha",close:"Funga",stop:"Simama",toggle:"Washa/Zima",actions:"Vitendo",seconds:"sekunde",minutes:"dakika",hours:"masaa",moveUp:"Sogea Juu",moveDown:"Sogea Chini",quick:"Haraka",unknown:"Haijulikani",months:"mo",years:"yr",copy:"Copy"},login:{title:"Ingia",subtitle:"MFUMO WA MATANGAZO",username:"Jina la Mtumiaji",password:"Nenosiri",usernamePlaceholder:"Ingiza jina la mtumiaji",passwordPlaceholder:"Ingiza nenosiri",rememberMe:"Nikumbuke",forgotPassword:"Umesahau nenosiri?",loginButton:"Ingia",logging:"Inaingia...",loginSuccess:"Umefanikiwa kuingia",loginFailed:"Imeshindwa kuingia",usernameRequired:"Tafadhali ingiza jina la mtumiaji",passwordRequired:"Tafadhali ingiza nenosiri",invalidCredentials:"Jina la mtumiaji au nenosiri si sahihi"},clientLogin:{subtitle:"Toleo la Mteja",hostPlaceholder:"Anwani ya seva, k.m. 192.168.1.100:12080",hostHint:"Ingiza IP:port ya seva, http:// ni hiari",hostRequired:"Tafadhali ingiza anwani ya seva"},dashboard:{title:"Dashibodi",welcome:"Karibu tena",systemStatus:"Mfumo unafanya kazi kwa kawaida",quickActions:"Vitendo vya Haraka",addDevice:"Ongeza Kifaa",createGroup:"Unda Kikundi",scheduleTask:"Panga Kazi",broadcastNow:"Tangaza Sasa"},menu:{dashboard:"Dashibodi",devices:"Vifaa",groups:"Vikundi",tasks:"Kazi",media:"Midia",broadcast:"Matangazo",alarm:"Tahadhari",account:"Akaunti",settings:"Mipangilio",apiTest:"Jaribio la API",home:"Nyumbani",mine:"Akaunti Yangu",admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"User & Permission Management",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully"},info:{title:"App Privacy Agreement",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Content too short, at least 3000 characters",saveSuccess:"Saved successfully",saveFailed:"Save failed"},upload:{title:"Avatar & Logo Upload",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Announcement Management",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scroll notice: ",noData:"No data",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"},billing:{title:"Billing Settings",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Device",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure to delete?"},gallery:{title:"Gallery Overview",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No gallery items",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure to delete this item?"}}},devices:{title:"Usimamizi wa Vifaa",list:"Orodha ya Vifaa",online:"Mtandaoni",offline:"Nje ya Mtandao",playing:"Inacheza",volume:"Sauti",adjustVolume:"Rekebisha Sauti",addDevice:"Ongeza Kifaa",editDevice:"Hariri Kifaa",deleteDevice:"Futa Kifaa",deviceName:"Jina la Kifaa",serialNumber:"Nambari ya Seriali",lastUpdate:"Masasisho ya Mwisho",refreshList:"Sasisha Orodha ya Vifaa",batchVolume:"Rekebisha Sauti kwa Wingi",noDevices:"Hakuna vifaa vinavyopatikana, bonyeza Ongeza Kifaa juu kulia",unnamedDevice:"Kifaa Kisichojulikana",debugSound:"Sauti ya Ubaguzi",changeVolume:"Badilisha Sauti",changeName:"Badilisha Jina",changeSerial:"Badilisha Seriali",id:"ID",volumeNotSet:"Haijawekwa",neverOnline:"Hajawahi Kuwa Mtandaoni",expiredDisabled:"Imeisha na Kuzimwa",unknown:"Haijulikani",openDebugSound:"Fungua Sauti ya Ubaguzi",closeDebugSound:"Funga Sauti ya Ubaguzi",unknownStatus:"Hali Isiyojulikana",addDeviceTitle:"Ongeza Kifaa",deviceNameRequired:"Jina la Kifaa",deviceSerialRequired:"Seriali ya Kifaa",deviceKeyRequired:"Ufunguo wa Kifaa",deviceNamePlaceholder:"Ingiza jina la kifaa",deviceSerialPlaceholder:"Ingiza seriali ya kifaa",deviceKeyPlaceholder:"Ingiza ufunguo wa usajili wa kifaa",deviceKeyHint:"Ufunguo wa usajili hutumika kusajili kifaa kwenye mfumo, sawa na nenosiri la kifaa",fillTestData:"Jaza Data ya Jaribio",renameTitle:"Badilisha Jina la Kifaa",newDeviceNamePlaceholder:"Ingiza jina jipya la kifaa",debugSoundTitle:"Sauti ya Ubaguzi",selectDebugSoundStatus:"Chagua hali ya sauti ya ubaguzi",editSerialTitle:"Hariri Seriali ya Kifaa",currentSerial:"Seriali ya Sasa",currentSerialPlaceholder:"Seriali ya sasa ya kifaa",newSerial:"Seriali Mpya",newSerialPlaceholder:"Ingiza seriali mpya ya tarakimu 32",serialLengthHint:"Nambari ya seriali lazima iwe na tarakimu 32",editDeviceTitle:"Hariri Kifaa",macAddress:"Anwani ya MAC",macAddressPlaceholder:"Ingiza anwani ya MAC",ipAddress:"Anwani ya IP",ipAddressPlaceholder:"Ingiza anwani ya IP",port:"Bandari",portPlaceholder:"Ingiza nambari ya bandari",adjustVolumeTitle:"Rekebisha Sauti",volumeRange:"Masafa: 1-63",preciseSetting:"Mipangilio sahihi:",batchAdjustVolumeTitle:"Rekebisha Sauti kwa Wingi",selectedDevices:"Vifaa Vilivyochaguliwa:",devicesCount:"vifaa",confirmAdjust:"Thibitisha Marekebisho",adding:"Inaongeza...",saving:"Inahifadhi...",adjusting:"Inarekebisha...",confirmButton:"Thibitisha",cancelButton:"Ghairi",deviceNameValidationError:"Tafadhali ingiza jina la kifaa",deviceSerialValidationError:"Tafadhali ingiza seriali ya kifaa",deviceKeyValidationError:"Tafadhali ingiza ufunguo wa kifaa",newDeviceNameValidationError:"Tafadhali ingiza jina la kifaa",deviceSerialLengthError:"Tafadhali ingiza seriali ya kifaa",newSerialLengthError:"Nambari ya seriali lazima iwe na tarakimu 32",debugSoundSelectError:"Tafadhali chagua kufungua au kufunga sauti ya ubaguzi",confirmOperation:"Thibitisha Operesheni",confirmDelete:"Je, una uhakika unataka kufuta kifaa",deleteCannotUndo:"? Hatua hii haiwezi kurudishwa!",addDeviceSuccess:"Kifaa kimeongezwa kwa mafanikio",addDeviceFailed:"Imeshindwa kuongeza kifaa",deviceRenameSuccess:"Jina la kifaa limebadilishwa kwa mafanikio",deviceRenameFailed:"Imeshindwa kubadilisha jina la kifaa",deviceEditSuccess:"Kifaa kimehaririwa kwa mafanikio",deviceEditFailed:"Imeshindwa kuhariri kifaa",deviceSerialEditSuccess:"Seriali ya kifaa imehaririwa kwa mafanikio",deviceSerialEditFailed:"Imeshindwa kuhariri seriali ya kifaa",debugSoundSuccess:"Sauti ya ubaguzi imewekwa kwa mafanikio",debugSoundFailed:"Imeshindwa kuweka sauti ya ubaguzi",deleteDeviceSuccess:"Kifaa kimefutwa kwa mafanikio",deleteDeviceFailed:"Imeshindwa kufuta kifaa",adjustVolumeSuccess:"Sauti imewekwa kwa",adjustVolumeFailed:"Imeshindwa kurekebisha sauti",batchAdjustSuccess:"Marekebisho ya sauti kwa wingi yamefanikiwa, jumla",batchAdjustFailed:"Imeshindwa kurekebisha sauti kwa wingi",volumeValidationError:"Sauti lazima iwe kati ya 1-63",selectDevicesFirst:"Tafadhali chagua vifaa kwanza kurekebisha sauti",successfullyFetched:"Imefanikiwa kupata",devicesUnit:"vifaa",deviceListFormatError:"Hitilafu katika muundo wa data ya orodha ya vifaa",fetchDeviceListFailed:"Imeshindwa kupata orodha ya vifaa",searchPlaceholder:"Tafuta jina la kifaa au nambari ya serial...",unknownError:"Hitilafu isiyojulikana",listView:"Maoni ya Orodha",cardView:"Maoni ya Kadi",scanDevices:"Scan Devices",deviceScan:"Device Scan",seed:"Device SEED",seedPlaceholder:"Enter 32-char hex SEED",scanButton:"Scan",scanning:"Scanning...",noDeviceFound:"No devices found",scanNotSupported:"Device scan only available in desktop client",autoIP:"Auto IP",warmMode:"Voice Prompt",mediaServer:"Media Server",mediaPort:"Media Port",gateway:"Gateway",subnetMask:"Subnet Mask",dns:"DNS",deviceIP:"Device IP",applyConfig:"Apply Config",clearDevice:"Clear Device",deviceConfigured:"Device config sent",deviceConfigureFailed:"Device config failed",deviceCleared:"Clear command sent",scanConfigTitle:"Device Network Config",scannedDevices:"Discovered Devices",scanHint:"Click scan to discover all devices on the local network",testComm:"Test Communication",testCommBtn:"Test",console:"Console",clearConsole:"Clear",consoleEmpty:"Waiting for communication...",invalidIP:"Invalid IP format",invalidMask:"Invalid subnet mask",invalidGateway:"Invalid gateway",invalidMediaIP:"Invalid media server IP",invalidPort:"Port range 1-65535",invalidDNS:"Invalid DNS format",dnsPlaceholder:"0.0.0.0 = System default",advanced:"Advanced",soundCard:"Sound Card",getAmixerStatus:"Get Status",amixerApply:"Apply",amixerGetting:"Getting...",amixerOn:"On",amixerOff:"Off",amixerDAC:"DAC Playback Volume",amixerHeadphoneVol:"Headphone Volume",amixerHeadphoneSwitch:"Headphone Switch",amixerHeadphoneRoute:"Headphone Source",amixerLineIn:"Line In Volume",amixerFMIn:"FM In Volume",amixerMicIn:"Mic In Volume",amixerMicBoost:"Mic Boost",amixerADCCapture:"ADC Capture Volume",amixerADCLeftFM:"Left FM Capture",amixerADCRightFM:"Right FM Capture",amixerADCLeftOut:"Left Out Capture",amixerADCRightOut:"Right Out Capture",amixerADCLineIn:"Line In Capture",amixerADCMic:"Mic Capture",amixerLeftFM:"Left FM",amixerLeftLeftDAC:"Left Left DAC",amixerLeftRightDAC:"Left Right DAC",amixerLeftLineIn:"Left Line In",amixerLeftMicIn:"Left Mic In",amixerRightFM:"Right FM",amixerRightLeftDAC:"Right Left DAC",amixerRightRightDAC:"Right Right DAC",amixerRightLineIn:"Right Line In",amixerRightMicIn:"Right Mic In",amixerGroupDecode:"Decode Output",amixerGroupCapture:"Capture Mixer Input",amixerGroupLeft:"Left Output Mixer",amixerGroupRight:"Right Output Mixer",amixerGroupGain:"Gain Config",amixerRouteDAC:"DAC",amixerRouteMixer:"Mixer",amixerGetSuccess:"Sound card status retrieved",amixerGetFailed:"Failed to get sound card status",amixerSetSuccess:"Setting sent",amixerSetFailed:"Setting failed"},groups:{title:"Usimamizi wa Vikundi",list:"Orodha ya Vikundi",deviceCount:"Idadi ya Vifaa",addGroup:"Ongeza Kikundi",editGroup:"Hariri Kikundi",deleteGroup:"Futa Kikundi",groupName:"Jina la Kikundi",manage:"Usimamizi wa Kikundi",inputName:"Ingiza jina la kikundi",add:"Ongeza Kikundi",playMenu:"Menyu ya Kucheza",id:"ID",name:"Jina",actions:"Vitendo",noGroups:"Hakuna vikundi vinavyopatikana",untitled:"Kikundi Kisichojulikana",editDevices:"Hariri Vifaa",editVideo:"Hariri Video",previewVideo:"Hakiki Video",groupPlay:"Kucheza kwa Kikundi",allDevices:"Vifaa Vyote",selectedDevices:"Vifaa Vilivyochaguliwa",selectAtLeastOneDevice:"Tafadhali chagua angalau kifaa kimoja",videoUrl:"URL ya Video",inputVideoUrl:"Tafadhali ingiza URL ya video",noVideoUrl:"Hakuna URL ya video iliyowekwa",noVideoUrlSet:"URL ya mtiririko wa Mu38 haijawekwa bado",playSequence:"Mfuatano wa Kucheza",fileInterval:"Muda kati ya Faili",playCount:"Idadi ya Kucheza",noPlayingItems:"Hakuna mfuatano unaochezwa kwa sasa",playList:"Orodha ya Kucheza",nameRequired:"Jina la kikundi haliwezi kuwa tupu",loadSuccess:"Imefanikiwa kupakia vikundi {count}",loadFailed:"Imeshindwa kupakia orodha ya vikundi",addSuccess:"Kikundi kimeongezwa kwa mafanikio",addFailed:"Imeshindwa kuongeza kikundi",deleteConfirm:"Hatua hii itafuta kikundi hiki kabisa. Endelea?",deleteSuccess:"Imefutwa kwa mafanikio",deleteFailed:"Imeshindwa kufuta",saveSuccess:"Imehifadhiwa kwa mafanikio",saveFailed:"Imeshindwa kuhifadhi",loadDevicesFailed:"Imeshindwa kupakia orodha ya vifaa",invalidGroupId:"ID ya kikundi si sahihi",unknownDevice:"Kifaa kisichojulikana",playFeatureComingSoon:"Kipengele cha kucheza kwa kikundi kinakuja hivi karibuni",stopPlayFeatureComingSoon:"Kipengele cha kuacha kucheza kinakuja hivi karibuni",playListFeatureComingSoon:"Kipengele cha orodha ya kucheza kinakuja hivi karibuni",searchDevicePlaceholder:"Ingiza jina la kifaa au ID kutafuta...",searchResult:"Imepatikana vifaa {filtered} (jumla {total})",totalDevices:"Jumla vifaa {count}",noSearchResult:"Hakuna vifaa vinavyolingana vilivyopatikana",noSelectedDevices:"Hakuna vifaa vilivyochaguliwa bado",searchFilePlaceholder:"Ingiza jina la faili au ID kutafuta...",availableFiles:"Faili Zinazopatikana",selectedFiles:"Faili Zilizochaguliwa",noSelectedFiles:"Hakuna faili zilizochaguliwa bado",doubleClickHint:"Bonyeza mara mbili kuongeza faili zilizorudiwa",unknownFile:"Faili isiyojulikana",playMode:"Hali ya Kucheza",playMode1:"Kucheza kwa Mfuatano 1x",playMode2:"Kucheza kwa Mfuatano 2x",playMode3:"Kucheza kwa Mfuatano 3x",totalDuration:"Muda Ulipimwa",durationFormula:"Mahesabu: (Jumla ya Muda + Mpangilio) × Idadi ya Marudio",playModeHint:"Idadi ya marudio, 1-99",intervalMaxHint:"Mpangilio wa juu zaidi masaa 3 (sekunde 10800)",estimatedDuration:"Muda Ulipimwa",forceStopDuration:"Muda wa Kusimamisha kwa Nguvu (Hiari)",forceStopHint:"Kusimama kiotomatiki kwa muda huu. Lazima iwe chini ya muda uliopimwa. 0 inamaanisha hakuna kusimamisha kwa nguvu",selectAtLeastOneFile:"Tafadhali chagua angalau faili moja",loadFilesFailed:"Imeshindwa kupakia orodha ya faili",groupHasNoDevices:"Kikundi hiki hakina vifaa",playStarted:"Kucheza kimeanza kwa mafanikio",playFailed:"Imeshindwa kuanza kucheza",invalidPlayId:"ID ya kucheza si sahihi",stopPlayConfirm:"Je, una uhakika unataka kusimamisha kucheza?",stopPlayInProgress:"Inasimamisha kucheza, tafadhali subiri...",stopPlaySuccess:"Kucheza kimesimamishwa kwa mafanikio",stopPlaySuccessAndClosed:"Kucheza kimesimamishwa kwa mafanikio, orodha ya kucheza imefungwa",stopPlayFailed:"Imeshindwa kusimamisha kucheza",selectGroupForPlay:"Chagua kikundi cha kucheza",devices:"vifaa",devicesCount:"vifaa",startPlay:"Anza Kucheza"},tasks:{title:"Kazi Zilizopangwa",titleDescription:"Simamia kazi za kucheza zilizopangwa kwa operesheni za wingi na vikundi vya kazi",list:"Orodha ya Kazi",addTask:"Ongeza Kazi",editTask:"Hariri Kazi",deleteTask:"Futa Kazi",taskName:"Jina la Kazi",executeTime:"Wakati wa Utekelezaji",playMode:"Hali ya Kucheza",repeat:"Rudia",files:"Faili",devices:"Vifaa",allGroups:"Vikundi Vyote vya Kazi",addTaskGroup:"Ongeza Kikundi cha Kazi",deleteTaskGroup:"Futa Kikundi cha Kazi",disableTaskGroup:"Zima Kikundi cha Kazi",enableTaskGroup:"Washa Kikundi cha Kazi",taskGroup:"Kikundi cha Kazi",taskGroupName:"Jina la Kikundi cha Kazi",enterGroupName:"Ingiza jina la kikundi cha kazi",applyTaskGroup:"Tumia Kikundi cha Kazi",task:"Kazi",selectGroup:"Chagua Kikundi cha Kazi",startTime:"Wakati wa Kuanza",duration:"Muda",loopCount:"Idadi ya Marudio",startDate:"Tarehe ya Kuanza",endDate:"Tarehe ya Kuisha",changeGroup:"Badilisha Kikundi",noGroup:"Hakuna Kikundi",tryPlay:"Jaribu Kucheza",batchDisable:"Zima kwa Wingi",batchEnable:"Washa kwa Wingi",batchEditDevices:"Hariri Vifaa kwa Wingi",batchEditFiles:"Hariri Faili kwa Wingi",batchApplyGroup:"Tumia Kikundi kwa Wingi",batchEditTime:"Hariri Wakati kwa Wingi",batchEditLoopCount:"Hariri Idadi ya Marudio kwa Wingi",batchEditDuration:"Hariri Muda kwa Wingi",batchDelete:"Futa kwa Wingi",batchCopy:"Nakili kwa Wingi",noTasks:"Hakuna Kazi",selectedCount:"Kazi {count} zimechaguliwa",randomPlay:"Kucheza kwa Bahati",loopPlay:"Rudia mara {count}",selectDevices:"Chagua Vifaa vya Kucheza",selectFiles:"Chagua Faili za Sauti",allDevices:"Vifaa Vyote",selectedDevices:"Vifaa Vilivyochaguliwa",allFiles:"Faili Zote",selectedFiles:"Faili Zilizochaguliwa",editTaskDevices:"Hariri Vifaa vya Kazi",editTaskFiles:"Hariri Faili za Kazi",taskDuration:"Muda wa Kazi",intervalDuration:"Muda wa Mpangilio",timeRange:"Masafa ya Wakati",to:"hadi",playCount:"Idadi ya Kucheza",sequentialPlay:"Kucheza kwa Mfuatano",randomPlayMode:"Kucheza kwa Bahati",playModeChange:"Mabadiliko ya Hali ya Kucheza",enableOtherLimit:"Vikwazo vingine havitahitajika",enableStartDate:"Washa Tarehe ya Kuanza",enableEndDate:"Washa Tarehe ya Kuisha",enterTaskName:"Ingiza jina la kazi",noTasksSelected:"Hakuna kazi zilizochaguliwa",devicesRequired:"Hakuna vifaa vilivyochaguliwa",filesRequired:"Hakuna faili za sauti zilizochaguliwa",saveSuccess:"Imehifadhiwa kwa mafanikio",saveFailed:"Imeshindwa kuhifadhi",deleteSuccess:"Imefutwa kwa mafanikio",deleteFailed:"Imeshindwa kufuta",deleteConfirm:"Hatua hii itafuta kazi kabisa. Endelea?",enableSuccess:"Kazi imewashwa",disableSuccess:"Kazi imezimwa",startPlaySuccess:"Kucheza kimeanza",startPlayFailed:"Kuanza kucheza kumeshindwa",stopPlaySuccess:"Kucheza kimesimama",stopPlayFailed:"Kusimamisha kucheza kumeshindwa",groupNameRequired:"Jina la kikundi cha kazi haliwezi kuwa tupu",addGroupSuccess:"Kikundi cha kazi kimeongezwa kwa mafanikio",addGroupFailed:"Imeshindwa kuongeza kikundi cha kazi",deleteGroupSuccess:"Kikundi cha kazi kimefutwa kwa mafanikio",deleteGroupFailed:"Imeshindwa kufuta kikundi cha kazi",disableGroupSuccess:"Kikundi cha kazi kimezimwa kwa mafanikio",disableGroupFailed:"Imeshindwa kuzima kikundi cha kazi",enableGroupSuccess:"Kikundi cha kazi kimewashwa kwa mafanikio",enableGroupFailed:"Imeshindwa kuwasha kikundi cha kazi",applyGroupSuccess:"Kikundi cha kazi kimetumika kwa mafanikio",applyGroupFailed:"Imeshindwa kutumia kikundi cha kazi",selectGroupFirst:"Tafadhali chagua kikundi cha kazi kwanza",batchDisableSuccess:"Kuzima kwa wingi kumefanikiwa",batchEnableSuccess:"Kuwasha kwa wingi kumefanikiwa",unknownDevice:"Kifaa Kisichojulikana",unknownFile:"Faili Isiyojulikana",calculate:"Hesabu",monday:"Jumatatu",tuesday:"Jumanne",wednesday:"Jumatano",thursday:"Alhamisi",friday:"Ijumaa",saturday:"Jumamosi",sunday:"Jumapili",index:"Nambari",weekdays:"Siku za Kucheza",noLimit:"Bila kikomo",autoCalc:"Imehesabiwa kiotomatiki",taskNameRequired:"Jina la kazi linahitajika",startTimeRequired:"Wakati wa kuanza unahitajika",cannotDeletePlaying:"Kazi inacheza, tafadhali simamisha kwanza",cannotDeleteEnabled:"Kazi imewashwa, tafadhali zima kwanza",cannotEditPlaying:"Kazi inacheza, tafadhali simamisha kwanza",disabled:"Imezimwa",enabled:"Imewashwa",enableTask:"Washa",disableTask:"Zima",noSelectedFiles:"Hakuna faili zilizochaguliwa bado",clickToAddHint:"Bonyeza faili kushoto kuongeza",estimatedDuration:"Muda Ulipimwa",advancedSettings:"Mipangilio ya Juu",playSettings:"Mipangilio ya Kucheza",forceStopDuration:"Muda wa Kusimamisha kwa Nguvu",forceStopHint:"Ikiwa imewekwa, kucheza kitasimama kiotomatiki wakati huu. Lazima kiwe chini ya muda uliopimwa. 0 au tupu inamaanisha hakuna kusimamisha kwa nguvu",durationRequired:"Kucheza kwa bahati kunahitaji muda",durationFormula:"Mahesabu: (Jumla ya Muda + Mpangilio × Idadi ya Faili) × Idadi ya Marudio",dateHint:"Kumbuka: Inacheza katika tarehe ya kuanza na pia tarehe ya kuisha. Ikiwa tarehe zote ni sawa, inacheza siku hiyo tu. Tarehe ya kuanza haiwezi kuwa baada ya tarehe ya kuisha.",dateRangeError:"Tarehe ya kuanza haiwezi kuwa baada ya tarehe ya kuisha",batchDurationHint:"Kwa kucheza kwa mfuatano: ikiwa jumla ya muda wa orodha ya kucheza > muda wa juu, inasimama wakati muda unapofikiwa; ikiwa jumla ya muda wa orodha ya kucheza < muda wa juu, inasimama wakati orodha ya kucheza inapomalizika",copyConfirm:"Je, una uhakika unataka kunakili kazi zilizochaguliwa? Hatua hii haiwezi kurudishwa.",copySuccess:"Kazi zimenakiliwa kwa mafanikio",copyFailed:"Imeshindwa kunakili kazi",timeConflict:"Mgongano wa Wakati",dateRange:"Masafa ya Tarehe",endTime:"Wakati wa Kuisha",copyCount:"Idadi ya Nakala",copyNewName:"Jina Jipya la Chaguo-msingi",copyNewNamePlaceholder:"Jina jipya la kazi la chaguo-msingi",copyInterval:"Mpangilio wa Wakati",copyIntervalUnit:"dakika",copyPreview:"Orodha ya Uhakiki",deleteGroupConfirm:"Je, una uhakika unataka kufuta kikundi hiki cha kazi? Kazi ndani ya kikundi hazitafutwa.",noTasksInGroup:"Hakuna kazi katika kikundi hiki cha kazi",batchPartialFailed:"Operesheni ya kazi {failed} imeshindwa"},media:{title:"Usimamizi wa Midia",list:"Orodha ya Faili",upload:"Pakia",delete:"Futa",play:"Cheza",download:"Pakua",fileName:"Jina la Faili",fileSize:"Ukubwa wa Faili",fileType:"Aina ya Faili",uploadTime:"Wakati wa Upakiaji",duration:"Muda",noFiles:"Hakuna faili bado",dropHint:"Buruta na udondoshe faili za MP3 hapa kupakia",dropSub:"Inaunga mkono muundo wa MP3, upeo wa 40MB kwa kila faili",selectFiles:"Chagua Faili",selectFolder:"Chagua Folda",onlyMp3:"Faili za MP3 tu ndizo zinazotumika",fileTooLarge:"Faili inazidi kikomo cha 40MB",uploadFailed:"Upakiaji umeshindwa",uploadSuccess:"Imefanikiwa kupakia faili {count}",uploading:"Inapakia...",deleteSingleConfirm:"Je, una uhakika unataka kufuta",deleteConfirm:"Futa faili zilizochaguliwa? Hii haiwezi kurudishwa",deleteSuccess:"Imefutwa kwa mafanikio",deleteFailed:"Imeshindwa kufuta",batchDelete:"Futa kwa Wingi",batchDeleteSuccess:"Imefanikiwa kufuta faili {count}",selectedCount:"Faili {count} zimechaguliwa",tts:"Text to Speech",ttsFileName:"File Name",ttsFileNamePlaceholder:"Enter file name",ttsVoice:"Voice",ttsSpeed:"Speed",ttsSpeedSlow:"Slow",ttsSpeedMedium:"Medium",ttsSpeedFast:"Fast",ttsText:"Text Input",ttsTextPlaceholder:"Enter text to convert",ttsTextTooShort:"Text must be at least 3 characters",ttsSuccess:"TTS file created",ttsFailed:"TTS generation failed",uploadDone:"Upload complete"},broadcast:{title:"Udhibiti wa Matangazo",serverConfig:"Usanidi wa Seva",selectDevices:"Chagua Vifaa",quickSelectGroup:"Chagua Kikundi kwa Haraka",selectAllOnline:"Chagua Vyote Mtandaoni",clearSelection:"Futa Uchaguzi",selectedDevices:"Vifaa {count} vimechaguliwa",noDevices:"Hakuna vifaa vinavyopatikana",noMatch:"Hakuna vifaa vinavyolingana",broadcastControl:"Udhibiti wa Matangazo",playLevel:"Kipaumbele cha Kucheza",userLevel:"Kiwango cha Mtumiaji",holdToTalk:"Shikilia ili Kuongea",releaseToStop:"Achilia ili Kusimama",broadcasting:"Inatangaza...",connected:"Imeunganishwa",notConnected:"Haijaunganishwa",selectFiles:"Chagua Faili",startBroadcast:"Anza Matangazo",stopBroadcast:"Simamisha Matangazo",playbackMode:"Hali ya Kucheza",interval:"Mpangilio",loop:"Idadi ya Marudio",audioSource:"Chanzo cha Sauti",microphone:"Maikofoni",noAudioDevice:"Hakuna kifaa cha sauti cha kuingiza kilichogunduliwa",audioReady:"Sauti Iko Tayari",inputVolume:"Sauti ya Kuingiza",enableMicrophone:"Unganisha Maikofoni",startPreview:"Anza Uhakiki"},alarm:{title:"Mfumo wa Tahadhari",settings:"Mipangilio ya Tahadhari",history:"Historia ya Tahadhari",enable:"Washa",disable:"Zima",triggerCondition:"Hali ya Kuchochea",alarmFile:"Faili ya Tahadhari",linkage:"Kifaa cha Kuunganisha",selectDevices:"Chagua Vifaa",searchDevice:"Tafuta jina la kifaa au nambari ya serial",selectAllOnline:"Chagua Wote Wapo Mtandaoni",clearSelection:"Futa Uchaguzi",selectedCount:"Vifaa {count} vimechaguliwa",noDevices:"Hakuna vifaa",noMatch:"Hakuna vifaa vinavyolingana",alarmConfig:"Usanidi wa Tahadhari",alarmName:"Jina la Tahadhari",alarmNamePlaceholder:"Ingiza jina la tahadhari",audioSource:"Chanzo cha Sauti",selectFile:"Chagua faili iliyopakiwa",inputUrl:"Ingiza URL kwa mikono",selectFilePlaceholder:"Chagua faili ya sauti",urlPlaceholder:"Ingiza URL ya faili ya sauti",registerAlarm:"Sajili Tahadhari",registering:"Inasajili...",registerResult:"Matokeo ya Usajili",registerSuccess:"Usajili umefanikiwa",registerFailed:"Usajili umeshindwa",noDevicesSelected:"Tafadhali chagua kifaa angalau kimoja",noAudioConfigured:"Tafadhali sanidi faili ya sauti",online:"Mtandaoni",offline:"Nje ya Mtandao",deviceSn:"Nambari ya Serial ya Kifaa",registeredList:"Tahadhari Zilizosajiliwa",noRegistered:"Hakuna tahadhari zilizosajiliwa",loadListFailed:"Imeshindwa kupakia orodha ya tahadhari",deviceName:"Jina la Kifaa",fileName:"Jina la Faili",refreshList:"Sasisha Orodha",unregisterAlarm:"Batilisha Usajili",unregisterConfirm:"Je, una uhakika unataka kubatilisha usajili wa tahadhari hii?",unregisterSuccess:"Kubatilisha usajili kumefanikiwa",unregisterFailed:"Kubatilisha usajili kumeshindwa",linkageTitle:"Unganishaji wa Tahadhari",linkageDesc:"Kifaa A kinapochochewa, vifaa vilivyounganishwa (pamoja na chenyewe) hucheza sauti iliyobainishwa",linkagePlanName:"Jina la Mpango",linkagePlanNamePlaceholder:"Ingiza jina la mpango",linkageDevices:"Vifaa vya Unganishaji",linkageDevicesHint:"Chagua vifaa vya kuchochea na kupiga sauti (inaweza kujumuisha kifaa cha kuchochea chenyewe)",linkageAudio:"Faili ya Sauti",addLinkagePlan:"Ongeza Mpango wa Unganishaji",adding:"Inaongeza...",linkageList:"Orodha ya Mikakati ya Unganishaji",noLinkagePlans:"Hakuna mikakati ya unganishaji",linkageDeviceCount:"Idadi ya Vifaa",addLinkageSuccess:"Mpango wa unganishaji umeongezwa kwa mafanikio",addLinkageFailed:"Imeshindwa kuongeza mpango wa unganishaji",linkagePlanNameRequired:"Tafadhali ingiza jina la mpango",linkageNoDevices:"Tafadhali chagua kifaa angalau kimoja",linkageNoAudio:"Tafadhali sanidi faili ya sauti",linkageTriggerDevice:"Kifaa cha Kuchochea",linkageTriggerDeviceHint:"Kifaa hiki kinapochochea tahadhari, vifaa vilivyounganishwa vitacheza sauti",linkageTriggerDevicePlaceholder:"Chagua kifaa cha kuchochea tahadhari",linkageNoTriggerDevice:"Tafadhali chagua kifaa cha kuchochea",registerTrigger:"Sajili",registerTriggerTitle:"Sajili Kifaa cha Kuchochea",registerTriggerSuccess:"Kifaa cha kuchochea kimesajiliwa kwa mafanikio",registerTriggerFailed:"Imeshindwa kusajili kifaa cha kuchochea",loadLinkageFailed:"Imeshindwa kupakia mikakati ya unganishaji",deleteLinkageConfirm:"Je, una uhakika unataka kufuta mpango wa unganishaji",deleteLinkageFailed:"Imeshindwa kufuta mpango wa unganishaji",forceUnregTitle:"Lazimisha Kubatilisha Tahadhari",forceUnregHint:"Lazimisha kubatilisha usajili wote wa tahadhari wa kifaa",forceUnregButton:"Lazimisha Kubatilisha Tahadhari",forceUnregModalHint:"Chagua kifaa kulazimisha kubatilisha tahadhari zote (binafsi + unganishaji)",forceUnregConfirm:"Thibitisha Kubatilisha",forceUnregSuccess:"Kulazimisha kubatilisha tahadhari kumefanikiwa",forceUnregFailed:"Kulazimisha kubatilisha tahadhari kumeshindwa"},account:{title:"Usimamizi wa Akaunti",profile:"Wasifu",changePassword:"Badilisha Nenosiri",subAccounts:"Akaunti Ndogo",logs:"Kumbukumbu za Operesheni",username:"Jina la Mtumiaji",nickname:"Jina la Utani",email:"Barua Pepe",phone:"Simu",role:"Jukumu",level:"Kiwango",addSubUser:"Ongeza Akaunti Ndogo",usernamePlaceholder:"Ingiza jina la mtumiaji",passwordPlaceholder:"Ingiza nenosiri",nicknamePlaceholder:"Ingiza jina la utani",beizhu:"Maoni",beizhuPlaceholder:"Ingiza maoni",password:"Nenosiri",levelLabel:"Kiwango",levelPlaceholder:"Chagua kiwango",mask:"Barakoa ya Ruhusa",maskPlaceholder:"Barakoa ya ruhusa ya biti 40 (0/1)",maskDefault:"00000000000000000000000000000000000000000000",permissions:"Mipangilio ya Ruhusa",permCreateSub:"Anaweza kuunda akaunti ndogo",permManageDevice:"Anaweza kuongeza/kufuta vifaa",permUploadFile:"Anaweza kupakia faili",addSuccess:"Akaunti ndogo imeongezwa kwa mafanikio",addFailed:"Imeshindwa kuongeza akaunti ndogo",listFailed:"Imeshindwa kupata orodha ya akaunti ndogo",noSubUsers:"Hakuna akaunti ndogo bado",createTime:"Wakati wa Kuunda",status:"Hali",statusNormal:"Kawaida",statusDisabled:"Imezimwa",userLevel:"Kiwango cha Mtumiaji",playLevel:"Kiwango cha Kucheza",passwordShow:"Nenosiri",refreshList:"Sasisha Orodha",usernameRequired:"Tafadhali ingiza jina la mtumiaji",passwordRequired:"Tafadhali ingiza nenosiri",permChangeFailed:"Mabadiliko ya ruhusa yameshindwa",adding:"Inaongeza...",deleteConfirm:"Je, una uhakika unataka kufuta akaunti ndogo {name}? Hii haiwezi kurudishwa!",deleteSuccess:"Akaunti ndogo imefutwa kwa mafanikio",deleteFailed:"Imeshindwa kufuta akaunti ndogo",editDevices:"Hariri Vifaa",editDevicesSuccess:"Vifaa vimesasishwa kwa mafanikio",editDevicesFailed:"Imeshindwa kusasisha vifaa",loadDevicesFailed:"Imeshindwa kupakia orodha ya vifaa",searchDevice:"Tafuta jina la kifaa au ID",noDevices:"Hakuna vifaa",resetToken:"Weka upya Token",resetTokenConfirm:"Je, una uhakika unataka kuweka upya Token kwa {name}?",resetTokenSuccess:"Token imewekwa upya kwa mafanikio",resetTokenFailed:"Kuweka upya Token kumeshindwa",newToken:"Token Mpya"},settings:{title:"Mipangilio",language:"Lugha",theme:"Mandhari",darkMode:"Hali ya Giza",lightMode:"Hali ya Mwanga",diabloMode:"Hali ya Diablo",notification:"Arifa",sound:"Mipangilio ya Sauti",about:"Kuhusu",version:"Toleo"},language:{title:"Chagua Lugha",chinese:"简体中文",english:"English",korean:"한국어",thai:"ไทย",vietnamese:"Tiếng Việt",arabic:"العربية",malay:"Bahasa Melayu",japanese:"日本語",russian:"Русский",french:"Français",spanish:"Español",portuguese:"Português",german:"Deutsch",indonesian:"Bahasa Indonesia",hindi:"हिन्दी",turkish:"Türkçe",italian:"Italiano",polish:"Polski",swahili:"Kiswahili"},messages:{deleteConfirm:"Je, una uhakika unataka kufuta? Hatua hii haiwezi kurudishwa!",saveSuccess:"Imehifadhiwa kwa mafanikio",deleteSuccess:"Imefutwa kwa mafanikio",operationSuccess:"Operesheni imefanikiwa",operationFailed:"Operesheni imeshindwa, tafadhali jaribu tena",networkError:"Hitilafu ya mtandao, tafadhali angalia muunganisho wako",serverError:"Hitilafu ya seva, tafadhali jaribu tena baadaye",noData:"Hakuna data inayopatikana",loading:"Inapakia...",noPermission:"Hakuna ruhusa ya kupata",tokenExpired:"Kipindi kimeisha, tafadhali ingia tena",operationTimeout:"Muda wa operesheni umeisha"},admin:{title:"Admin Panel",adminRole:"Administrator",navGroupUser:"User Data",navGroupSystem:"System Settings",navGroupGallery:"Gallery",navUsers:"Users & Permissions",navInfo:"Info Editor",navUpload:"Uploads",navAnnounce:"Announcements",navBilling:"Billing",navGallery:"Gallery Overview",copied:"Copied",users:{title:"Select Language",addUser:"Add User",toolRename:"Rename Account",toolRenameOld:"Current account number",toolRenameNew:"New account name",toolRenameBtn:"Confirm",toolQueryPwd:"Query Password",toolQueryAccount:"Account to query",toolQueryBtn:"Query",toolSearchSn:"Search Device Owner",toolSnPlaceholder:"Device serial (32 chars)",thId:"ID",thUsername:"Username",thNickname:"Nickname",thUserType:"Type",thLevel:"Level",thActions:"Actions",tagGm:"GM",tagUser:"USER",tagSub:"SUB",btnManage:"Manage",noData:"No data available",addUserTitle:"Add New User",usernamePlaceholder:"Username (min 6 chars)",passwordPlaceholder:"Password (min 6 chars)",detailTitle:"{name} - Permissions & Devices",permCanCreateSub:"Can create sub accounts",permCannotCreateSub:"Cannot create sub accounts",permCanAddDevice:"Can add devices",permCannotAddDevice:"Cannot add devices",permCanUpload:"Can upload files",permCannotUpload:"Cannot upload files",btnEnable:"Enable",btnDisable:"Disable",registeredDevices:"Registered Devices",devName:"Device Name",devSeed:"Serial",devStatus:"Status",devType:"Type",devIswarning:"B-type",devKind:"K-type",devSave:"Save",statusOnline:"Online",statusOffline:"Offline",statusPlaying:"Playing",statusDisabled:"Disabled",searchResultTitle:"Search Result",searchResultUser:"Username",searchResultPwd:"Password",addUserLengthError:"Username and password must be at least 6 characters",addFailed:"Failed to add",renameLengthError:"Invalid input",renameSuccess:"Renamed successfully",renameFailed:"Rename failed",queryLengthError:"Invalid input",queryFailed:"Query failed",snLengthError:"Serial must be 32 characters",maskSaveSuccess:"Saved successfully",saveSuccess:"Saved successfully"},info:{title:"Select Language",placeholder:"Enter privacy agreement content (min 3000 chars)",charCount:"{count} chars",saveBtn:"Save Privacy Agreement",tooShort:"Announcement too short",saveSuccess:"Saved successfully",saveFailed:"Update failed"},upload:{title:"Select Language",wxAvatar:"WX Avatar Upload",wxAvatarHint:"Recommended: 260x260 square, JPG, max 500KB",logo:"Logo Upload",logoHint:"Recommended: transparent 680x360, PNG, max 500KB",clickUpload:"Click to upload",sizeError:"Image must not exceed 500KB",uploadSuccess:"Upload successful",uploadFailed:"Upload failed"},announce:{title:"Select Language",scrollTitle:"Scrolling Announcement",scrollPlaceholder:"Enter announcement text",getCurrent:"Get Current",saveAnnounce:"Save Announcement",galleryTitle:"Slideshow",addGallery:"Add Slideshow",deleteGallery:"Delete",noticeLabel:"Scrolling Notice",noData:"No data available",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",tooShort:"Announcement too short",saved:"Announcement updated",saveFailed:"Update failed",uploadFailed:"Upload failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"},billing:{title:"Select Language",addDevice:"Add Device",refreshStatus:"Refresh Status",thId:"ID",thSn:"Device Serial",thExpiry:"Expiry Date",thStatus:"Status",thEnable:"Enable",thDisable:"Disable",thRenew:"Renew",thDelete:"Delete",thPay:"Monthly Fee",thIccid:"ICCID",tagNormal:"Active",tagExpired:"Expired",btn99y:"99yr",btnDisable:"Disable",btnDelete:"Delete",btnSave:"Save",noDevices:"No devices",addTitle:"Add Slideshow",snLabel:"Device Serial (32 chars)",snPlaceholder:"Device serial number",expiryLabel:"Expiry Date",snLengthError:"Serial must be 32 characters",expiryRequired:"Please select expiry date",addFailed:"Failed to add",editSuccess:"Updated successfully",editFailed:"Update failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"},gallery:{title:"Select Language",addGallery:"Add Slideshow",deleteBtn:"Delete",noticeLabel:"Scrolling Notice",noData:"No data available",addTitle:"Add Slideshow",titlePlaceholder:"Enter slideshow description (max 50 chars)",fileHint:"Select JPG image (max 2MB)",fillTitle:"Please enter a description",selectFile:"Please select an image",uploadFailed:"Upload failed",deleteConfirm:"Are you sure you want to delete? This action cannot be undone!"}}}}});!function(e){const a=yt.find(a=>a.code===e);(null==a?void 0:a.rtl)?(document.documentElement.setAttribute("dir","rtl"),document.documentElement.setAttribute("lang",e)):(document.documentElement.setAttribute("dir","ltr"),document.documentElement.setAttribute("lang",e))}(bt.global.locale.value);const Pt=n("app",()=>{const e=l(!1),a=l(!1),i=localStorage.getItem("theme"),t=l(i||"diablo");return{sidebarCollapsed:e,loading:a,theme:t,toggleSidebar:function(){e.value=!e.value},setLoading:function(e){a.value=e},toggleTheme:function(){t.value="diablo"===t.value?"light":"diablo",localStorage.setItem("theme",t.value)},setTheme:function(e){t.value=e,localStorage.setItem("theme",e)}}}),Ct=w(p({__name:"App",setup(e){const a=Pt();return(e,i)=>{const t=A("router-view");return F(),P("div",{class:C(`theme-${T(a).theme}`)},[D(t)],2)}}}));Ct.use(L()),Ct.use(z),Ct.use(bt),Ct.mount("#app"),"undefined"!=typeof window&&(null==(t=null==(i=window.Capacitor)?void 0:i.isNativePlatform)?void 0:t.call(i))&&(document.documentElement.classList.add("native-app"),document.body.classList.add("native-app"));export{G as _,I as a,Pt as b,yt as c,x as d,ht as u};
|