round out dns check, dns server check, port forward check, and gateway port forwards

This commit is contained in:
Matt Hill
2026-02-17 23:31:47 -07:00
parent a22707c1cb
commit 485fced691
37 changed files with 1228 additions and 252 deletions

View File

@@ -78,6 +78,15 @@ Form controls live in `ui/src/app/routes/portal/components/form/controls/` — e
- **Dictionaries** live in `shared/src/i18n/dictionaries/` (en, es, de, fr, pl).
- Usage in templates: `{{ 'Some English Text' | i18n }}`
### How dictionaries work
- **`en.ts`** is the source of truth. Keys are English strings; values are numeric IDs (e.g. `'Domain Health': 748`).
- **Other language files** (`de.ts`, `es.ts`, `fr.ts`, `pl.ts`) use those same numeric IDs as keys, mapping to translated strings (e.g. `748: 'Santé du domaine'`).
- When adding a new i18n key:
1. Add the English string and next available numeric ID to `en.ts`.
2. Add the same numeric ID with a proper translation to every other language file.
3. Always provide real translations, not empty strings.
## Services & State
Services often extend `Observable` and expose reactive streams via DI: