* docs(settings): clarify Sub Port/Sub Domain double as subscription-link fallback
subPort/subDomain are documented purely as the subscription service's own
listen address, but when "Reverse Proxy URI" is empty, GetDefaultSettings
silently reuses them (with the admin API request's own Host header as the
domain fallback) to build the subscription link/QR shown in the panel.
Behind a reverse proxy where the sub service listens on an internal port
and is exposed externally on a different port/domain, this produces a
broken link even though "Reverse Proxy URI" already solves it - nothing
in the UI text pointed to it. Clarify all locales.
* docs(settings): fix wording nits from review (punctuation, CJK parens, es-ES field name)
- en-US/id-ID/pt-BR/tr-TR/uk-UA/ar-EG: add terminating punctuation before
the appended sentence so it doesn't run on directly after the closing
parenthesis.
- zh-CN/zh-TW/ja-JP: restore full-width CJK parentheses around the
pre-existing parenthetical, matching the rest of each file.
- es-ES: subURIDesc referenced "Dominio/Puerto de escucha", but the
actual field labels in this locale are "Dominio de Escucha" and
"Puerto de Suscripción".
---------
Co-authored-by: Volov <volovdata@google.com>
xray-core accepts both `target` and `dest` for the REALITY destination
(infra/conf/transport_internet.go: REALITYConfig has json:"target" and
json:"dest"). The frontend schema only knows `target`, so an inbound whose
realitySettings use `dest` — older panel builds, external tools, or the
panel's own /panel/api/inbounds API — loads with an empty (required) Target
field even though xray is running fine. Re-saving then serializes the blank
`target` and drops the working `dest`, breaking REALITY on the next restart.
Normalize `dest` -> `target` on parse (z.preprocess) when `target` is
absent/empty, matching xray-core's alias behavior. Add unit tests covering
the schema directly and through the security discriminated union.
Co-authored-by: Volov <volovdata@google.com>