Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin
Include Page
spaceKeyGrouper
pageTitleNavigation

Text in the Grouper UI can change in the 2.2 redesign.

Currently we use resource bundles, but we could switch to the new config overlays instead of Java resource bundles.

The UI text would be externalized and internationalized.

The config files are similar to the project config files, in that they have configurable overlays. These config files are refereshed every so often, so they can be edited (or patched) on the server without a restart.

For example, the default english/US text config file is on the classpath in: grouperText/grouperUi.text.en.us.base.properties

You should not edit the base text file, you should edit the overlay. In this case the overlay is specified in the config file

Code Block
text.config.hierarchy = classpath:grouperText/grouperUi.text.en.us.base.properties, classpath:grouperText/grouperUi.text.en.us.properties

So the file you should edit is: grouperUi.text.en.us.properties. Any text item in the base can be overridden here.
Example of text override
In the base (grouperUi.text.en.us.base.properties), is:

Code Block
# Name of the username
groupCapitalized = Group

At Penn, this is called a PennGroup, so in the grouperUi.text.en.us.properties, we could have:

Code Block
# Name of the username
groupCapitalized = PennGroup

Referencing text in other text. You can do a quick reference of another text item in a text item like this:

Code Block
# service name with first letter cap
serviceNameCap = Grouper
############################################
## Index page: grouperIndex.jsp
############################################
# title in browser on index page
indexTitle = $$serviceNameCap$$ index
# subheader in bold if user is opted in
indexSettingsSubheader = $$serviceNameCap$$ settings

Dynamic data in text

When text is calculated for a user, all of the text references are resolved for the HTTP request at once. Each time a text item is used, if there is an EL scriptlet, it will be calculated only for that text item call. Here is an example:

Code Block
# Success message when members added to group.  The number of members is in ${grouperRequestContainer.addMemberContainer.numberOfUsers}, the uigroup is ${grouperRequestContainer.addMemberContainer.uiGroup}
addMembersSuccess = ${grouperRequestContainer.addMemberContainer.numberOfUsers} were added to ${grouperUtil.escapeXml(grouperRequestContainer.addMemberContainer.uiGroup.name)}

Using text in JSP

There are a few calls to use text in JSP. The default one needs no escaping:

Code Block
<div class="formLabel"><b>${textContainer.text['profileEmailLabel']}</b></div>

If you want HTML escaped, you can call

Code Block
<a href="../../grouperUnprotectedUi/UiMainUnprotected.logout">${textContainer.textEscapeXml['buttonLogOut']}</a>

If you want double quotes escaped for HTML use:

Code Block
<input value="${textContainer.textEscapeDouble['buttonManageSettings']}" class="grouperBlueButton" type="submit" />

If you want single quotes escaped for javascript use textEscapeSingle, but most likely in that case you want single and double quotes escaped:

Code Block
onclick="return confirm('${textContainer.textEscapeSingleDouble['adminUntrustConfirm']}');" />

Using text in Java

To use text in Java, call the following. Note, if there are variables needed in the text, set those in the request container first.

Code Block
grouperRequestContainer.getAddMemberContainer().setNumberOfUsers(GrouperUtil.length(users));
grouperRequestContainer.getAddMemberContainer().setUiGroup(uiGroup);
String error = TextContainer.retrieveFromRequest().getText().get("addMembersSuccess");
grouperRequestContainer.setError(error);