The Vue SPA had been reading from frontend/src/locales/*.json while the Go binary still loaded web/translation/translate.*.toml — and a sync-locales.mjs pre-build step kept the two in lockstep, with TOML as the source of truth. Now that go-i18n v2.6.1 already flattens nested JSON via recGetMessages/addChildMessages, both runtimes can share one file per locale. - Move the 13 nested-JSON locale files to web/translation/<lang>.json so they live alongside the Go //go:embed translation/* directive. - Switch web/locale/locale.go from toml.Unmarshal to json.Unmarshal (and drop the pelletier/go-toml import — it's now indirect-only). Confirmed via a smoke test that pages.index.cpu, subscription.title, tgbot.commands.help, and menu.settings all resolve in en-US, fa-IR, ru-RU, and zh-CN. - Repoint Vue's i18n loader at the new path (../../../web/translation/ *.json glob) and drop the moved-here pathDelimiter comment that no longer applies. - Delete the 13 legacy translate.*.toml files and the sync-locales.mjs script + its npm pre-script hooks (predev/prebuild/i18n:sync). The Telegram bot and subscription page still get their messages because they were reading the same MessageIDs the JSON files now produce. - Update copilot-instructions.md so the next contributor knows where the canonical translation files live. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| src | ||
| .gitignore | ||
| inbounds.html | ||
| index.html | ||
| login.html | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| settings.html | ||
| vite.config.js | ||
| xray.html | ||
3x-ui frontend
Vue 3 + Ant Design Vue 4 + Vite. Builds into ../web/dist/, which the
Go binary will embed via embed.FS once the migration reaches the page
handlers (Phase 4+).
This directory exists alongside the legacy web/html/ Vue 2 templates
during the migration. Pages will move over one at a time on the
vue3-migration branch.
Dev
cd frontend
npm install
npm run dev
The dev server runs on http://localhost:5173/ and proxies API calls to
the Go panel at http://localhost:2053/ — start the Go panel first
(go run main.go), then start Vite.
Production build
npm run build
Outputs to ../web/dist/. The Go binary picks it up at compile time via
embed.FS.
Where things live
src/main.js— app entrypoint (createApp, install Antd, mount)src/App.vue— root component (currently a smoke-test placeholder)vite.config.js— build + dev-server configindex.html— Vite HTML template
Adding new pages
For each legacy page being migrated, add an entry to
vite.config.js rollupOptions.input. Each entry produces its own
HTML file in web/dist/, which the Go panel route handler will serve.