@Override
	public void translate(Program program, List<ProgramLocation> stringLocations,
			TranslateOptions options) {
		TaskLauncher.launchModal("Yeehaw-ify strings", monitor -> {

			int id = program.startTransaction("Yeehaw-ify strings");
			try {
				for (ProgramLocation progLoc : stringLocations) {
					Data data = DataUtilities.getDataAtLocation(progLoc);
					StringDataInstance str = StringDataInstance.getStringDataInstance(data);
					String s = str.getStringValue();

					if (s != null) {
						//
						// This is where a real translation should occur
						//
						String translatedValue = s.replaceAll("([ _,;:.])", "$1YEEHAW!$1");
						if (translatedValue.length() == s.length()) {
							translatedValue = s + " !WOOT!";
						}
						TRANSLATION.setTranslatedValue(data, translatedValue);
						TRANSLATION.setShowTranslated(data, true);
					}
				}
			}
			finally {
				program.endTransaction(id, true);
			}
		});
	}
Example / toy string translation service.
<p>
When creating your own string translation service plugin, your class's name must end with the
substring "Plugin".
<p>
If done correctly, your plugin will automatically be listed in the Ghidra plugin config
screen.
Ghidra/Extensions/sample/src/main/java/ghidra/examples/SampleStringTranslationPlugin.java