Citrix NetScaler: Label Changes not reflected? Here’s the Fix!

When customizing the logon schema in Citrix NetScaler, it's common to change label texts for a better user experience. For example, replacing the default label "Passcode" with something more descriptive like "PIN + Token".

 

These label texts are controlled via language-specific JSON files, such as strings.en.json, strings.de.json, strings.fr.json, etc.

These files reside in the following directory on the appliance:  /var/netscaler/logon/LogonPoint/custom/

 

 

However, a frustrating issue arises:
If the language file (e.g., strings.de.json) is already cached by the NetScaler, updates to it will not be reflected in the UI.
This can be confusing during development or when rolling out updated UI text, as your changes simply don't appear — even though the file on disk is correct.

The Cause

NetScaler caches the JSON language files aggressively. Once cached, it does not re-fetch the file unless explicitly told to — which is not the default behavior. This results in the old, outdated labels continuing to display even after your changes are in place.

The Workaround

The good news: there’s a simple and clean workaround.

Within the custom folder, you typically have two important files:

  • strings.<lang>.json – the actual translations

  • strings.<lang>.js – a small JavaScript loader that defines where the JSON file should be fetched from

 

Inside the JS file, you’ll find a line like this:

url: "/logon/LogonPoint/custom/strings.de.json",

 

To force the NetScaler to reload the updated JSON, simply modify the line to include a version query string:

url: "/logon/LogonPoint/custom/strings.de.json?v=1",

 

Whenever you make a change to the JSON, just increment the version number:

url: "/logon/LogonPoint/custom/strings.de.json?v=2",

 

 

This ensures that the browser and NetScaler treat it as a new file and reload it accordingly.

 

Why This Works

Appending a version parameter (?v=1) tricks the caching mechanism into thinking it's a new request. Since the URL is technically different, the system doesn't serve the cached file. This is a well-known web development technique to bypass aggressive caching, and it works perfectly in this case.

 

⚠️ Note: This change does not negatively affect NetScaler’s functionality. The JSON is still processed normally, and the only effect is that your changes are reliably picked up.

Summary

If you're modifying language labels in Citrix NetScaler and not seeing the changes reflected, you're likely hitting the cache issue. By adjusting the loader JS file and adding a version tag to the JSON file path, you can force the system to reload the latest version.

 

It's a small change — but it makes a big difference when customizing the login experience.