<#-- Locale Header Check - TEMPORARY DIAGNOSTIC FRAGMENT Contains NO #assign statements. FreeMarker only emits raw header values into data- attributes using parenthesised chained defaults: (request.getHeader("X"))!((themeDisplay.getRequest().getHeader("X"))!"__ABSENT__") The parentheses make the ! default cover the ENTIRE expression, so a missing `request` object or an uncallable getHeader both fall through to the next accessor instead of throwing. All parsing, the rewrite decision and rendering happen in main.js. The raw Cookie header is deliberately NOT emitted - it contains the HttpOnly session id. main.js reads document.cookie instead, which exposes GUEST_LANGUAGE_ID (what we need) but never JSESSIONID. Delete this fragment and its page once the question is settled. --> <#if ((request.getParameter("diag"))!((themeDisplay.getRequest().getParameter("diag"))!"")) == ((configuration.diagKey)!"dh-locale-check") || (themeDisplay.isSignedIn())!false || ((layoutMode)!"view") != "view">

Diagnostic · mobile-prelogin locale

Locale header check

Open this page from inside the Dubai Health mobile app, once for each language combination in the test matrix, then send the report back.

Server would serve

reading…

Sent by the app server side

Accept-Language
reading…
Primary tag
reading…
X-App-Language
reading…
User-Agent
reading…
Referer
reading…
X-Forwarded-For
reading…

Resolved by Liferay

themeDisplay locale
reading…
GUEST_LANGUAGE_ID cookie
reading…

Reported by the browser client side

navigator.language
reading…
navigator.languages
reading…
Intl resolved locale
reading…
document lang / dir
reading…
Current URL
reading…

Cookies present values hidden except locale