Object.assign(window.MESSAGES.en,{username:'Username',password:'Password',connect:'Sign in to Frame Flow',UNAUTHORIZED:'Invalid credentials or expired session',tokenHint:'Sign in with your account. Remember me keeps the session for 30 days; sign out on shared devices.',logout:'Sign out',noToken:'Sign in to manage frames',formEditor:'Form editor',advanced:'Advanced JSON',resetTemplate:'Reset template',resetConfirm:'Remove saved settings and restore built-in defaults?',eventsHelp:'One event per line',photo:'Family photo',noPhoto:'Use photo placeholder',changePassword:'Change password',currentPassword:'Current password',newPassword:'New password (at least 8 characters)',passwordChanged:'Password changed. Sign in again.',saveTemplate:'Save template settings'});
Object.assign(window.MESSAGES.zh,{currentContent:'敶枏��曄內��捆',currentTemplate:'敶枏�璅⊥踎',sourceUnknown:'�交��芰䰻嚗朞�撘惩㦛��𧊋�朞� Frame Flow ���嚗諹挽憭� API 銝齿�靘𥟇芋�踵㺭�柴��',editCurrent:'霂餃�敶枏�璅⊥踎撟嗥�颲�',sourceKnown:'Frame Flow 撌脰扇敶閙䔉皞�',weatherSettings:'憭拇��交�',location:'雿滨蔭�滨妍',latitude:'蝥砍漲',longitude:'蝏誩漲',weatherPreview:'霂餃�憭拇�',forecast:'�芣䔉銝匧予憭拇�',weatherUnavailable:'憭拇�����舐鍂',weatherAttribution:'憭拇��交�嚗鐾pen-Meteo嚗㇃C BY 4.0嚗�',searchImages:'�𦦵揣��辣�齿��曄� ID',sortNewest:'���唬���',sortOldest:'���拐���',sortName:'�匧�蝘�',download:'銝贝蝸�曄�',continueEdit:'蝏抒賒蝻𤥁�璅⊥踎',details:'�亦�霂行�',runNow:'蝡见朖�扯�',runConfirm:'�啣銁�扯�甇支遙�∪��孵��餅��曄內嚗峕糓�衣誧蝏哨�',jobPreview:'憸��隞餃𦛚',temporaryDisplay:'銝湔𧒄�曄內',displayOptions:'�曄內�厰★',sourceType:'��捆蝐餃�',templateFields:'璅⊥踎�唳旿',imageChoice:'�㗇𥋘�曄�',imageURL:'�曄� URL',restoreSource:'�W�銝𠹺�撘�',weatherMock:'憭拇�瞍𠉛內',weatherReal:'摰墧𧒄憭拇�',stale:'�唳旿餈��',apply:'摨𠉛鍂'});
Object.assign(window.MESSAGES.en,{currentContent:'Currently displayed content',currentTemplate:'Current template',sourceUnknown:'Unknown source: this image was not generated by Frame Flow. The device API provides no template data.',editCurrent:'Load current template for editing',sourceKnown:'Source recorded by Frame Flow',weatherSettings:'Weather provider',location:'Location name',latitude:'Latitude',longitude:'Longitude',weatherPreview:'Read weather',forecast:'Three-day forecast',weatherUnavailable:'Weather unavailable',weatherAttribution:'Weather: Open-Meteo (CC BY 4.0)',searchImages:'Search filename or image ID',sortNewest:'Newest first',sortOldest:'Oldest first',sortName:'By name',download:'Download image',continueEdit:'Edit this template',details:'Details',runNow:'Run now',runConfirm:'Running this task will change the frame display. Continue?',jobPreview:'Preview task',temporaryDisplay:'Temporary display',displayOptions:'Display options',sourceType:'Content type',templateFields:'Template data',imageChoice:'Select image',imageURL:'Image URL',restoreSource:'Restore previous image',weatherMock:'Mock weather',weatherReal:'Live weather',stale:'Stale data',apply:'Apply'});
window.MESSAGES.zh.templateHint='����鞾�閫���漤�㗇𥋘�曄內�孵���予瘞娍䔉皞𣂼虾�刻挽蝵桐葉�滨蔭��';window.MESSAGES.en.templateHint='Render a preview, then choose display options. Configure weather in Settings.';
Object.assign(window.MESSAGES.zh,{allowedHosts:'��捂銝贝蝸�曄�����㵪�瘥讛�銝�銝迎�',urlHint:'�芸�霈� HTTPS �諹挽蝵桐葉�𡒊&��捂����㵪�����啣�憪讠�蝳�迫��',uploadURL:'隞𡡞曎�亙紡��',urlSettings:'�曄� URL 摰匧�霈曄蔭'});Object.assign(window.MESSAGES.en,{allowedHosts:'Allowed image hostnames (one per line)',urlHint:'HTTPS and explicitly allowed hosts only. Private network addresses are blocked.',uploadURL:'Import URL',urlSettings:'Image URL security'});
Object.assign(window.MESSAGES.zh,{poetryNotice:'Frame Flow 瘥𤩺𠯫霂𡑒�嚗𡁜�蝵桀𧂈�貉�霂㵪��劐�瘚瑟𠯫���憭拇揢銝�擐硔��𡠺蝡衤�摰䀹䲮撠讐�摨讐�霈a�嚗���寡恥��挽蝵格�瘜閖�朞��砍� API 霂餃��碶耨�嫘��',poemChoice:'�㗇𥋘霂𡑒�',dailyAutomatic:'瘥𤩺𠯫�芸𢆡�㕑�',poetryCatalog:'��蔭蝭�㺭嚗�',dailyPoetryJob:'瘥𤩺𠯫銝�擐𤥁�霂�',poetryScheduleHint:'瘥誩予�劐�瘚瑟𧒄�箇��𣂼�憭抵�霂滚僎�曄內����臭遙�∪�隡𡁏��嗆㺿�条𤫇獢�遬蝷箝��',poem_title:'霂堒�',poem_author:'雿𡏭��',poem_lines:'霂𡑒�甇��'});Object.assign(window.MESSAGES.en,{poetryNotice:'Frame Flow Daily Poetry selects a classical poem by Shanghai date. It is independent of the official mini-app subscription, whose settings are not exposed by the public API.',poemChoice:'Choose poem',dailyAutomatic:'Automatic daily selection',poetryCatalog:'Catalog size: ',dailyPoetryJob:'A poem every day',poetryScheduleHint:'Generate and display the daily poem in Shanghai time. Enabling this job will change the frame on schedule.',poem_title:'Poem title',poem_author:'Poet',poem_lines:'Poem text'});
Object.assign(MESSAGES.en,{officialContentTitle:'KoKonna official widgets and subscriptions',officialContentDescription:'Content types listed in official product materials; managed separately from Frame Flow templates.',officialCalendarWeather:'Calendar and local weather',officialWordAlmanacTravel:'Word of the day, traditional almanac and global travel recommendations',officialNews:'Daily news',officialCreative:'AI voice / text / sketch / photo-to-art; photo rotation',officialSubscriptionUnavailable:'Public OpenAPI does not list subscription discovery, current subscription, subscribe or unsubscribe endpoints. Manage official subscriptions in the official mini-program. Frame Flow cannot read or modify these settings. Your daily-poetry subscription is mini-program content; its complete catalog cannot currently be verified through public API.',officialProductDocs:'Official content overview ��',officialAPIDocs:'Official OpenAPI ��'});
Object.assign(MESSAGES.en,{photoSources:'Photo sources',sourceHint:'Choose photos from a read-only NAS folder or WebDAV. Preview does not change the frame.',addSource:'Add source',browse:'Browse photos',randomPreview:'Preview random photo',sourceJob:'Schedule random photos',noSources:'No photos yet. Add a source or check the folder.',sourceKind:'Source type',nasDirectory:'NAS local folder',sourceLocation:'Folder / WebDAV URL',sourceLocationHint:'Local: relative folder under the mounted photo root, e.g. . or family. WebDAV: HTTPS directory URL; allow its hostname in Settings first.',sourceCredential:'WebDAV credential environment name',sourceCredentialHint:'Enter a variable name, never a password. Admin configures JSON username/password via environment or Secret.',sourceRecursive:'Include subfolders (local)',sourceImages:'Available photos',sourceBrowseHint:'Catalog loaded on demand. Click a filename to preview; originals are not downloaded in bulk.',previousPage:'Previous page',nextPage:'Next page',sourcePreviewHint:'Display uses this exact previewed photo.',randomPhoto:'Random photo',sourceJobHint:'Choose a fresh random photo each run. Paused by default; enabling changes the frame on schedule.'});