Infinity 25 deprecates pyGenerics for localization.
Historically, pyGenerics was used to extend categories like MESSAGES, PULSE, and similar keys. Teams relied on it to add custom messages, and Pulse filters.
Here’s the problem with that approach.
When a client overrides pyGenerics, in their ruleset their rule always took precedence due to rule resolution. Any new labels or updates delivered by the platform were silently ignored. Over time, this led to missing messages, and painful merges during upgrades.
Infinity 25 fixes this by introducing override localization bundles.
Instead of replacing the platform bundle, overrides are merged with the base bundle generated from the application. The merge happens at the end of the base bundle creation, and only the overridden keys take precedence. Everything else continues to flow in from the platform.
This gives you the best of both worlds:
-
Platform updates are preserved
-
Client-specific labels override only what they need to
How Override Localization Bundles Work
At runtime:
-
The platform generates the base localization bundle
-
Your override bundle is merged on top
-
In case of conflicts, the override bundle wins
No more shadowing the entire bundle just to add one label.
Creating an Override Localization Bundle
Step 1: Create the localization rule
-
Create a new Localization rule
-
Set Context to
overrides -
Set Applies To as
@baseclass -
The label can be anything meaningful
Step 2: Add your labels
Define only what you want to add or change.
Example:
{
"MESSAGES": {
"msg 1": "msg 1"
}
}
Avoid copying existing platform keys unless you actually want to override them.
Step 3: Attach the override to the application
-
Open Application Definition
-
Scroll to localization configuration section
-
In the Overrides for localization dropdown, select your newly created override bundle from the list, list will be shown when you click down arrow.
-
Save the application definition
This step is mandatory. Without it, the override bundle is ignored.
Step 4: Generate language packs
-
Go to Application Studio
-
Regenerate the language packs
Your overrides will now be merged correctly with the base bundle.
What This Really Means
If you’re still carrying forward a pyGenerics override in Infinity 25, you’re blocking platform improvements without realizing it.
Override bundles are not just a replacement. They’re a safer, upgrade-friendly model that aligns localization with how modern platforms evolve.
Use them. Your future upgrades will thank you.
Use Cases:
Customising Component Static Labels
One common use case for localization bundle overrides is changing static labels that are shipped as part of Constellation components.
For example, if you want to change the Create label displayed in the App Shell, this label is not user-provided data but a static component label.
As a general rule, if a label is not coming from user input, field configuration, or case data, there is a high chance that it is defined as a static component localization entry.
Finding Component Localization Keys
All static component labels are available through the Constellation CDN.
-
Launch your Constellation portal.
-
Open the browser Developer Tools and reload the page.
-
Navigate to the Network tab.
-
Select any JavaScript request and inspect the Request URL from the request headers.
You will typically find a URL similar to:
https://release.constellation.pega.com/25.1.2-HFIX-20260618162429/25.1.2-397/react/prod/pega-bootstrap-component.js?v=2512HFIX20260618162429
Replace the file name with:
components/componentslocalization.json
Resulting in:
https://release.constellation.pega.com/25.1.2-HFIX-20260618162429/25.1.2-397/react/prod/components/componentslocalization.json
Opening this URL returns a JSON document containing all static localization entries used by Constellation components.
Sample response looks like below:
Identifying the Required Key
Search within the JSON for the label that you want to customize. Once located, note both the localization key and its parent object hierarchy.
For example, the App Shell Create button is represented as:
{
"CosmosFields": {
....
"app_shell_create": "Create"
....
}
}
To override this label, add the following entry to your localization override bundle:
{
"CosmosFields": {
"app_shell_create": "Your Custom String"
}
}
Important: Preserve the JSON hierarchy exactly as defined in componentslocalization.json. In this example, app_shell_create is nested under CosmosFields; therefore, the override must maintain the same structure.
After applying the override, the App Shell button will display Your Custom String instead of Create.
Additional Notes
This technique can be used to customize many other Constellation-provided static labels without modifying the underlying component implementation. Any localization entry present in componentslocalization.json can potentially be overridden through localization bundles.
Caution: During Infinity upgrades or hotfix updates, always review the latest componentslocalization.json file. Localization keys may be renamed, moved to different parent objects, or reorganized as part of component changes. If the JSON structure changes, existing overrides may stop working and need to be updated accordingly.
Upgrade Recommendation: Include validation of localization overrides as part of your Constellation upgrade checklist. Verify that:
The localization key still exists.
The parent hierarchy remains unchanged.
The label still belongs to the same component namespace.
Performing this validation proactively can prevent unexpected fallback labels or missing translations after an upgrade.
Constellation 101 Series
Enjoyed this article? See more similar articles in Constellation 101 series.


