Skip to content

T3code/port backend phrases json#920

Open
tchoi-rs wants to merge 46 commits into
mainfrom
t3code/port-backend-phrases-json
Open

T3code/port backend phrases json#920
tchoi-rs wants to merge 46 commits into
mainfrom
t3code/port-backend-phrases-json

Conversation

@tchoi-rs

@tchoi-rs tchoi-rs commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Description

Migrates all backend phrases to the new JSON i18n format, and wire locale-aware handling to all parts of the backend:

  • REST API now accepts a Accept-Language header for clients to hint to the server which locale it accepts, which is then used by the server to generate localised error messages, although the recommendation is for clients to consume error codes where available. In a future PR, servers will also be able to broadcast, in API responses, which locales it can emit phrases in.
  • Email and notification handling is now locale-aware and will render in the recipient's locale.

The locale is currently fixed as en-US. Due to there not being a locale switcher in the UI at the moment, a new deployment.properties property is added to allow translators to temporarily switch to another locale.

Review Guide (via AI)

Most of this diff is mechanical (key replacements in JSPs/JS, catalogue JSON, test updates). The files below contain real design decisions or behavior changes.

New i18n infrastructure (read these first)

File What to look at
service/JsonMessageSource.java The core of the change: a MessageSource that reads the frontend's i18next JSON files. It overrides getMessageInternal instead of the usual resolveCode so it can use ICU4J formatting — the Javadoc explains why. Frontend namespaces are exposed as common:/inventory: keys. Check the locale fallback order and how single quotes are handled when there are no arguments.
service/UserLocaleService.java The one place the app decides which locale to use. Reads the experimental deployment.experimental.locale property; falls back to en-US if blank or invalid.
webapp/filter/LocaleFilter.java Sets the thread locale, JSTL locale, and request.getLocale() for every request. The dead ?locale= parameter handling is gone.
service/LocaleBoundMessages.java, impl/LocaleAwareDateTool.java, service/ListFormatUtils.java Helpers used by Velocity templates: $msg tied to the recipient's locale, locale-correct dates, and list joining. Small files, but every email and export goes through them.
service/PrefixedMessageProvider.java + taglib/I18nMessagesTag.java Injects the legacyjs.* messages into pages as a JSON object (RS.i18n). The interface exists because ServiceLoggerAspct wraps every service bean in a proxy, and a proxy fails instanceof checks against the concrete class — see the comment. Also check the </script> escaping.
taglib/NotificationTypeLabelTag.java + service/NotificationTypeMessages.java Translated labels for the NotificationType enum. The enum itself is untouched (it's persisted and lives in rspace-core-model). keyFor throws if a new enum constant has no mapping; a test checks every constant.
model/record/init/BuiltinContentMessages.java A ResourceBundle wrapper around JsonMessageSource, used when creating the built-in forms and templates.

Behavior changes to watch for

File What to look at
webapp/WEB-INF/web.xml + applicationContext-resources.xml The old .properties bundles and their wiring are deleted. Everything resolves through JsonMessageSource now — there is no fallback.
service/impl/EmailBroadcastImp.java, StrictEmailContentGenerator.java, RequestNotificationMessageGenerator.java Emails now render in the recipient's locale instead of the server's. New method overloads were added; check that no caller still uses the old default path by mistake.
service/impl/AutoshareManagerImpl.java Notification text used to be built with string ternaries; now each verb combination has its own key. Worth checking each combination reads correctly.
api/v1/controller/InventoryRecordValidator.java, SampleApiPostFullValidator.java Validation errors with empty codes and hard-coded English now use real keys. Redundant English fallback messages were replaced with null, so a missing key shows up as the raw key (on purpose — it makes the bug visible). API note: some inventory error codes are sent raw in bulk-operation responses, so renaming errors.inventory.move.*/container.* changed those strings — ui/src/util/alerts.tsx was updated to match.
webapp/controller/GroupController.java, StructuredDocumentController.java, SysAdminUserRegistrationController.java, userimport/UserImporterFromCSV.java + UserLineParserFromCSV.java The biggest batches of hard-coded strings moved into the catalogue. Mostly mechanical, but a few messages were reworded, and CSV import errors changed shape.
export/pdf/PdfHtmlGenerator.java, csvexport/InventoryItemCsvExporter.java, AuditTrailSearchResultCsvGenerator.java Export headers and labels now come from the catalogue. Constants became methods (which is why tests switched from CSV_COMMENT_HEADER to getCsvCommentHeader()). PDF comment lines use the export.pdf.comments.line key instead of string concatenation.
model/record/init/{RtPCR,Elisa,Experiment,LabProtocol}.java Resource keys were built by concatenation ("form.rtpcr." + fieldKey); now they're full literal strings, so you can grep for them. Elisa's choice1..choice14 loop is now a plain array. Field order and content should be identical — BuiltInsCreatedProperlyTest checks creation but not order.
velocityTemplates/slack/slackNotification.vm (deleted) Nothing in the code renders it. Please confirm nothing external uses it either.
properties/PropertyHolder.java New getWebappVersion()/getCopyrightYear(). The copyright year is now computed at runtime instead of stored in the catalogue; footer JSPs read both from RS_DEPLOY_PROPS.
deployments/defaultDeployment.properties New deployment.experimental.locale property (temporary, until the language switcher exists).

Regression fixes worth double-checking (commit 8ecb660)

The key-compression pass accidentally rewrote code that only looked like catalogue keys. These are the repairs:

  • WEB-INF/pages/userform.jsp — seven data bindings restored (${user.username} etc.)
  • scripts/pages/system/batchUserRegistration.js, scripts/global.js — broken JavaScript identifiers fixed
  • dao/hibernate/UserDaoHibernate.java — HQL property user.accountLocked restored
  • service/impl/DeveloperGroupSetup.java + defaultDeployment.properties — the default.user.password property matched up again on both sides

The fast test suite doesn't run JSPs or JavaScript, so the best manual check is a dev-stack look at the profile page, batch user registration, and any Apprise dialog (global.js).

New tests

JsonMessageSourceTest (includes a guard against the same key appearing in two files), four Email*TemplateI18nTest classes (render real templates and check no keys leak through), NotificationTypeMessagesTest (covers every enum constant), plus unit tests for each new class above.

@github-actions

github-actions Bot commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Bundle Stats — Frontend bundle size change

Hey there, this message comes from a GitHub action that helps you and reviewers to understand how these changes affect the size of this project's bundle.

As this PR is updated, I'll keep you updated on how the bundle size is impacted.

Total

Files count Total bundle size % Changed
507 → 529 30.19 MB → 30.39 MB (+211.05 kB)
11.08 MB → 11.14 MB (gzip)
+0.68%
Changeset
File Δ Size
src/modules/common/i18n/legacyI18n.ts 🆕 +62.93 kB 0 B → 62.93 kB
chunks/server.legacyJs-[hash].js 🆕 +44.2 kB 0 B → 44.2 kB
chunks/server.system-[hash].js 🆕 +20.58 kB 0 B → 20.58 kB
chunks/server.workspace-[hash].js 🆕 +12.82 kB 0 B → 12.82 kB
chunks/server.ApplicationResources-[hash].js 🆕 +10.19 kB 0 B → 10.19 kB
chunks/server.apps-[hash].js 🆕 +10.12 kB 0 B → 10.12 kB
chunks/server.inventory-[hash].js 🆕 +8.62 kB 0 B → 8.62 kB
chunks/server.email.account-[hash].js 🆕 +5.22 kB 0 B → 5.22 kB
chunks/server.public-[hash].js 🆕 +4.89 kB 0 B → 4.89 kB
chunks/server.groups-[hash].js 🆕 +4.72 kB 0 B → 4.72 kB
chunks/server.admin-[hash].js 🆕 +4.31 kB 0 B → 4.31 kB
chunks/server.email.notifications-[hash].js 🆕 +3.65 kB 0 B → 3.65 kB
chunks/server.email.cloud-[hash].js 🆕 +3.16 kB 0 B → 3.16 kB
chunks/server.export-[hash].js 🆕 +3.12 kB 0 B → 3.12 kB
chunks/server.gallery.netfiles-[hash].js 🆕 +2.49 kB 0 B → 2.49 kB
chunks/server.email-[hash].js 🆕 +1.97 kB 0 B → 1.97 kB
chunks/server.admin.community-[hash].js 🆕 +1.39 kB 0 B → 1.39 kB
chunks/server.email.admin-[hash].js 🆕 +1.27 kB 0 B → 1.27 kB
chunks/server.system.community-[hash].js 🆕 +898 B 0 B → 898 B
chunks/server.workspace.editor-[hash].js 🆕 +882 B 0 B → 882 B
chunks/server.dashboard-[hash].js 🆕 +832 B 0 B → 832 B
useIsTextWiderThanField.ts 🆕 +743 B 0 B → 743 B
chunks/server.gallery-[hash].js 🆕 +574 B 0 B → 574 B
rspace/other/index.ts 🆕 +262 B 0 B → 262 B
react-select-creatable.esm.js 🆕 +94 B 0 B → 94 B
src/modules/common/i18n/index.ts 📈 +2.29 kB (+183.06%) 1.25 kB → 3.54 kB
state.js 📈 +1.23 kB (+63.90%) 1.92 kB → 3.15 kB
alerts.tsx 📈 +14 B (+0.48%) 2.85 kB → 2.87 kB
src/my-rspace/directory/groups/GroupEditBar.tsx 📉 -15 B (-0.32%) 4.53 kB → 4.51 kB
state/state.js 🔥 -3.15 kB (-100%) 3.15 kB → 0 B
hooks/ui/useIsTextWiderThanField.ts 🔥 -743 B (-100%) 743 B → 0 B
assets/branding/rspace/other/index.ts 🔥 -262 B (-100%) 262 B → 0 B
creatable/dist/react-select-creatable.esm.js 🔥 -94 B (-100%) 94 B → 0 B
View detailed bundle breakdown

Added

Asset File Size % Changed
legacyI18n-[hash].js 0 B → 62.93 kB (+62.93 kB)
0 B → 14.72 kB (gzip)
-
chunks/server.legacyJs-[hash].js 0 B → 44.2 kB (+44.2 kB)
0 B → 13.64 kB (gzip)
-
chunks/server.system-[hash].js 0 B → 20.58 kB (+20.58 kB)
0 B → 6.66 kB (gzip)
-
chunks/server.workspace-[hash].js 0 B → 12.82 kB (+12.82 kB)
0 B → 4.85 kB (gzip)
-
chunks/server.ApplicationResources-[hash].js 0 B → 10.19 kB (+10.19 kB)
0 B → 4.25 kB (gzip)
-
chunks/server.apps-[hash].js 0 B → 10.12 kB (+10.12 kB)
0 B → 3.31 kB (gzip)
-
chunks/server.inventory-[hash].js 0 B → 8.62 kB (+8.62 kB)
0 B → 2.97 kB (gzip)
-
chunks/server.email.account-[hash].js 0 B → 5.22 kB (+5.22 kB)
0 B → 1.94 kB (gzip)
-
chunks/server.public-[hash].js 0 B → 4.89 kB (+4.89 kB)
0 B → 1.98 kB (gzip)
-
chunks/server.groups-[hash].js 0 B → 4.72 kB (+4.72 kB)
0 B → 1.81 kB (gzip)
-
chunks/server.admin-[hash].js 0 B → 4.31 kB (+4.31 kB)
0 B → 1.75 kB (gzip)
-
chunks/server.email.notifications-[hash].js 0 B → 3.65 kB (+3.65 kB)
0 B → 1.42 kB (gzip)
-
chunks/server.email.cloud-[hash].js 0 B → 3.16 kB (+3.16 kB)
0 B → 1.01 kB (gzip)
-
chunks/server.export-[hash].js 0 B → 3.12 kB (+3.12 kB)
0 B → 1.43 kB (gzip)
-
chunks/server.gallery.netfiles-[hash].js 0 B → 2.49 kB (+2.49 kB)
0 B → 1.07 kB (gzip)
-
chunks/server.email-[hash].js 0 B → 1.97 kB (+1.97 kB)
0 B → 951 B (gzip)
-
chunks/server.admin.community-[hash].js 0 B → 1.39 kB (+1.39 kB)
0 B → 697 B (gzip)
-
chunks/server.email.admin-[hash].js 0 B → 1.27 kB (+1.27 kB)
0 B → 672 B (gzip)
-
chunks/server.system.community-[hash].js 0 B → 898 B (+898 B)
0 B → 447 B (gzip)
-
chunks/server.workspace.editor-[hash].js 0 B → 882 B (+882 B)
0 B → 503 B (gzip)
-
chunks/server.dashboard-[hash].js 0 B → 832 B (+832 B)
0 B → 472 B (gzip)
-
chunks/server.gallery-[hash].js 0 B → 574 B (+574 B)
0 B → 372 B (gzip)
-

Removed

No assets were removed

Bigger

Asset File Size % Changed
chunks/i18n-[hash].js 82.01 kB → 84.3 kB (+2.29 kB)
26.91 kB → 27.27 kB (gzip)
+2.79%
chunks/use-stores-[hash].js 252.96 kB → 252.97 kB (+14 B)
79.5 kB → 79.5 kB (gzip)
+0.01%

Smaller

Asset File Size % Changed
groupEditBar-[hash].js 5.73 kB → 5.71 kB (-15 B)
2.16 kB → 2.16 kB (gzip)
-0.26%

@tchoi-rs
tchoi-rs force-pushed the t3code/port-backend-phrases-json branch from 135757c to 68f48f1 Compare July 7, 2026 13:24
@tchoi-rs
tchoi-rs marked this pull request as ready for review July 7, 2026 15:30
@greptile-apps

greptile-apps Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR moves backend and legacy UI phrases into JSON-backed i18n catalogs. The main changes are:

  • New JsonMessageSource and helper services for backend phrase lookup.
  • Classpath packaging for server.*.json locale files.
  • JSP injection of legacy JavaScript messages.
  • Java, Velocity, JSP, and legacy JS call sites updated to use message keys.
  • Tests for message resolution, locale handling, emails, exports, and validators.

Confidence Score: 4/5

The legacy tools dialog can show a raw message key on its error path.

The main backend message-source path has legacy fallback coverage, and decorated JSP pages receive the new legacy JavaScript dictionary.

A static TinyMCE tools page can call RS.msg without that dictionary: src/main/webapp/scripts/externalTinymcePlugins/tools/js/dialog.js

T-Rex T-Rex Logs

What T-Rex did

  • I reproduced the static TinyMCE Tools dialog against the real page with real dependencies and observed an empty RS.i18n dictionary, a 503 failure on /labtools/tools/categories, and the dialog showing the raw i18n key instead of human text.
  • I produced a formal proof for the posted P1 finding and linked it to the corresponding review comment for details.
  • I ran the i18n equivalence harness and i18n:check after the changes; the harness reported exit code 1 with TOTAL_FAILURES=94 and anchored mismatches to specific changed source lines such as server.system.json:5 and server.workspace.json:110.
  • I reviewed and linked the most relevant artifacts from the repro and i18n validation to support the findings, including the generated i18n equivalence validator, the after-run logs, and the static dialog repro assets.

View all artifacts

T-Rex Ran code and verified through T-Rex

Important Files Changed

Filename Overview
src/main/java/com/researchspace/service/JsonMessageSource.java Adds JSON-backed Spring message resolution with fallback to the legacy message source.
src/main/java/com/axiope/webapp/taglib/I18nMessagesTag.java Adds a JSP tag that serializes prefixed messages for legacy JavaScript pages.
src/main/webapp/scripts/global.js Adds RS.msg, a legacy message dictionary, and client-side ICU-style formatting.
src/main/webapp/scripts/externalTinymcePlugins/tools/js/dialog.js Updates labtools error labels to use RS.msg, with one static-dialog fallback issue.
pom.xml Adds ICU4J and copies server JSON locale catalogs into the application classpath.

Comments Outside Diff (1)

  1. General comment

    P1 Server JSON migration drops required spaces at properties continuation boundaries

    • Bug
      • Several migrated JSON messages concatenate words or sentences where the source .properties value uses a line continuation. For example, src/main/resources/bundles/system/system.properties defines errors.deletesysadminuser as remaining active, enabled..., but src/main/webapp/ui/src/modules/common/i18n/locales/en-US/server.system.json contains remainingactive, enabled.... Similarly, importExport.export.selection.help1 in server.workspace.json renders exported.Then instead of exported. Then. These are user-visible phrase regressions in changed server JSON resources.
    • Cause
      • The migration appears to have removed the separating whitespace that Java .properties continuation lines contribute when the next physical line begins with spaces, instead concatenating the adjacent text directly in some JSON values.
    • Fix
      • Regenerate or correct the affected JSON bundle values using Java .properties continuation semantics, preserving at least one intended separator where continuation lines join text. Add an equivalence check for .properties to server JSON migration output so these regressions are caught automatically.

    T-Rex Ran code and verified through T-Rex

Fix All in Claude Code Fix All in Codex

Reviews (1): Last reviewed commit: "Merge branch 't3code/frontend-i18n-syste..." | Re-trigger Greptile

Comment thread src/main/webapp/scripts/externalTinymcePlugins/tools/js/dialog.js Outdated

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of files (300). Try reducing the number of changed files and requesting a review from Copilot again.

Base automatically changed from t3code/frontend-i18n-system to main July 8, 2026 16:04
@tchoi-rs
tchoi-rs force-pushed the t3code/port-backend-phrases-json branch from 203527e to fb8065d Compare July 8, 2026 21:23
tchoi-rs and others added 20 commits July 14, 2026 15:35
Design note describing how to localise the remaining hard-coded strings in the
legacy vanilla-JS layer (global.js, scripts/tags/*.js) by reusing the existing
server MessageSource catalogue: inject an RS.i18n dictionary via the SiteMesh
decorator and consume it through an RS.msg helper, rather than adding a second
client i18n runtime or coupling to the React i18next instance.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds JsonMessageSource, a Spring MessageSource that reads the frontend
i18next JSON off the classpath (Maven copies the locales tree), flattening
nested JSON to dotted keys and resolving via positional MessageFormat.
Wired as the primary messageSource bean with the legacy .properties bundles
as a fallback parent.

- Ports 1208 .properties keys to flat-key server.*.json (flat storage is
  required: 34 keys are both leaf and parent, e.g. button.login).
- Ports ~50 Velocity email templates + their subjects to $msg lookups;
  StrictEmailContentGenerator injects $msg centrally.
- MessageSourceUtils gains explicit-locale overloads for upcoming per-user
  locale (emails/PDFs/async run outside a request thread).
- Tests: JsonMessageSource, byte-equivalence vs legacy bundle, email render,
  and locale overloads (all -Dfast=true).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…nalization

Backend: introduces a single en-US locale seam (UserLocaleService) used by
the email pipeline, export layer (PDF/Word/HTML archive/CSV), and Velocity
templates; switches JsonMessageSource to ICU MessageFormat so the JSON
catalogue supports plural/select; externalizes remaining hard-coded
user-facing Java strings and grammar (welded fragments, verb ternaries,
"(s)" plurals) into the i18next JSON catalogue; migrates all ~227
<fmt:message> JSP/tag usages to <spring:message> (dropping now-redundant
<fmt:bundle> wrappers) so every JSP resolves through JsonMessageSource,
and removes the now-dead JSTL localizationContext wiring.

Frontend-adjacent: externalizes legacy (non-React) JavaScript strings via
RS.msg()/server.legacyJs.json, backed by a new I18nMessagesTag that exposes
the flattened JSON catalogue to legacy scripts as RS.i18n.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Executes the low-priority findings from the backend phrases cleanup scan
(findings 3 and 8 required no action):

- Finding 4: rename the doubled server.<module>.<module>.json files to
  server.<module>.json (filenames are cosmetic to JsonMessageSource, which
  flattens every file into one keyspace by dotted key). Regenerate
  resources.d.ts. Add a guardrail test asserting no dotted key is defined
  in more than one server.*.json file, since the merge has no collision
  check otherwise.
- Finding 5: rename the 12 snake_case keys to camelCase (errors.*,
  group.members.*, gallery.api.*, system.property.description.*) in both
  the JSON catalogue and the .properties fallback, and update the 5 call
  sites. Left the sibling system-property/HTML-id literals (e.g.
  self_service_labgroups) untouched, since those aren't i18n keys.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Matches the frontend catalogue convention (nested objects, keySeparator
'.') instead of flat dotted keys. JsonMessageSource already flattens
nesting into dotted keys, so runtime lookups are unchanged — verified by
a scripted round-trip (flatten(nested) byte-equal to the previous flat
map for all 21 files) and by JsonMessageSourceEquivalenceTest still
checking the same 1214 ported keys against the .properties bundles.

Keys that are both a leaf and a prefix of deeper keys (100 cases, e.g.
button.login vs button.login.with.google) cannot nest fully; the
conflicting remainder stays as a dotted sibling key at that level, which
flattens identically. JsonMessageSourceEquivalenceTest now flattens the
nested files rather than reading them as flat maps, with a floor
assertion so it can never again silently pass by iterating top-level
segments only.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Some keys were both a leaf value and a dotted prefix of deeper keys
(e.g. button.login vs button.login.with.google), so the previous nesting
pass had to leave a dotted sibling at that level. Renamed each such leaf
to a proper child of its own object:

- .label for category/field/button/menu headings that have their own
  value-options or sub-items as children (e.g. button.login.label,
  menu.admin.label, the netfilesystem details.* field labels).
- .default for the generic/base variant of a message that has a more
  specific sibling (e.g. errors.emptyString.default vs .polite,
  errors.invalidusername.default vs .relaxed).
- .text for the one description paragraph (apps.description.msteams
  .general.text) whose "child" is an unrelated nested link message.

Updated every call site alongside the catalogue (Java getText/getMessage
calls, spring:message JSPs, Velocity $msg calls, legacy RS.msg() in
global.js, and the parallel .properties fallback keys). icon.email/
icon.information/icon.warning, menu.admin, menu.templates, and
apps.description.msteams.general were confirmed dead (no call site
anywhere in Java/JSP/JS/TS) before renaming, so only the catalogue and
.properties needed touching for those. errors.email was similarly dead
(the "{errors.email.format}" Bean Validation key elsewhere is unrelated).

All 21 server.*.json files are now fully nested with zero dotted-segment
keys. Verified via JsonMessageSourceEquivalenceTest (still 1214 keys,
byte-identical), the collision guardrail test, the full fast suite, and
i18n:check/tsc.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Wires up the existing rsResolvedLocale request attribute (set per-request
by LocaleFilter) to every reachable <html> tag's lang attribute, using
the same fn:replace(locale, '_', '-') pattern already used for
RS.i18nLocale, so it renders as a proper BCP-47 tag (e.g. "en-US")
rather than Java's underscore form.

Covers: the two SiteMesh decorators (default.jsp, externalPages.jsp,
which together decorate the vast majority of pages including login/
signup/404/403), the 4 standalone full-page entrypoints excluded from
decoration (about, inventory start, apps, gallery) plus
identifierPublicPage and apiDocs, the 5 externalTinymcePlugins dialog
pages, and both error.jsp fallback pages (which needed the fn taglib
added since they don't include the shared taglibs.jsp).

Left logout.jsp, createCloudGroupForm/Success.jsp, and
oneDriveRedirect.jsp untouched: their own <html> tags are dead markup
(confirmed via their controller mappings and decorators.xml) since
SiteMesh's default decorator actually renders their output, which this
change already covers.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Design notes belong in .claude/ (gitignored), not committed to DevDocs.
tchoi-rs and others added 15 commits July 14, 2026 15:37
The key-compression pass text-replaced old catalogue keys inside code
that merely looked like those keys, corrupting live references:

- userform.jsp: EL data bindings ${user.username/firstName/lastName/
  enabled/usernameAlias} were rewritten to message-key EL that renders
  nothing
- batchUserRegistration.js / global.js: JS identifiers (user.username,
  user.password, button.addClass) clobbered into invalid syntax
- UserDaoHibernate: HQL property user.accountLocked renamed to a
  nonexistent user.locked, breaking the query
- DeveloperGroupSetup + defaultDeployment.properties: the
  default.user.password property was renamed differently on each side,
  which would fail bean initialisation at boot

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The rebase onto origin/main linearized away the earlier merge commit,
losing its conflict-resolution content: the three identifier error
messages upstream added to the deleted .properties bundle (ownership
check on identifier delete, bulk IGSN allocation limits) need their
keys renamed to this branch's camelCase convention and added to
server.inventory.json.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@tchoi-rs
tchoi-rs force-pushed the t3code/port-backend-phrases-json branch from 2288d27 to 4c2274d Compare July 14, 2026 13:46
tchoi-rs added 11 commits July 14, 2026 22:57
…hrases-json

# Conflicts:
#	src/main/resources/bundles/ApplicationResources.properties
…hrases-json

# Conflicts:
#	src/main/java/com/axiope/userimport/NotifyUserPostUserCreate.java
#	src/main/java/com/researchspace/service/impl/EmailBroadcastImpl.java
#	src/main/java/com/researchspace/service/impl/StrictEmailContentGenerator.java
#	src/main/java/com/researchspace/webapp/controller/SysAdminSupportController.java
#	src/main/java/com/researchspace/webapp/filter/LocaleFilter.java
#	src/test/java/com/axiope/service/cfg/EmailBroadcasterConfigTest.java
#	src/test/java/com/researchspace/service/impl/EmailBroadcastTest.java
#	src/test/java/com/researchspace/service/impl/EmailBroadcastVanillaJunit.java
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants