diff --git a/src/main/java/com/marginallyclever/robotoverlord/swing/actions/AboutAction.java b/src/main/java/com/marginallyclever/robotoverlord/swing/actions/AboutAction.java index 23f302fe5..fb45181d0 100644 --- a/src/main/java/com/marginallyclever/robotoverlord/swing/actions/AboutAction.java +++ b/src/main/java/com/marginallyclever/robotoverlord/swing/actions/AboutAction.java @@ -28,19 +28,10 @@ public AboutAction(Component parent) { */ @Override public void actionPerformed(ActionEvent e) { + Window ancestor = parent==null? null : SwingUtilities.getWindowAncestor(parent); JOptionPane.showMessageDialog( - SwingUtilities.getWindowAncestor(parent), - "" - +"

"+RobotOverlord.APP_TITLE+" "+RobotOverlord.VERSION+"

" - +"

http://www.marginallyclever.com/

" - +"

Created by

" - +"

Dan Royer (dan@marginallyclever.com).

" - +"

Testers

" - +"

Omar al rafei (Arc robotics)

" - +"

More info

" - +"

To get the latest version please visit
"+RobotOverlord.APP_URL+"


" - +"

This program is open source and free. If this was helpful
to you, please buy me a thank you beer through Paypal.

" - +""); + ancestor, + Translator.get("AboutAction.message",RobotOverlord.VERSION)); } /** @@ -48,6 +39,7 @@ public void actionPerformed(ActionEvent e) { * @param args ignored */ public static void main(String[] args) { + Translator.start(); new AboutAction(null).actionPerformed(null); } } diff --git a/src/main/java/com/marginallyclever/robotoverlord/swing/edits/ColorParameterEdit.java b/src/main/java/com/marginallyclever/robotoverlord/swing/edits/ColorParameterEdit.java index 29d81f050..d411b938f 100644 --- a/src/main/java/com/marginallyclever/robotoverlord/swing/edits/ColorParameterEdit.java +++ b/src/main/java/com/marginallyclever/robotoverlord/swing/edits/ColorParameterEdit.java @@ -33,7 +33,7 @@ public ColorParameterEdit(ColorParameter entity, double [] newValue) { @Override public String getPresentationName() { - return Translator.get("change ")+entity.getName(); + return Translator.get("Change",entity.getName()); } @Override diff --git a/src/main/java/com/marginallyclever/robotoverlord/swing/edits/ComboBoxEdit.java b/src/main/java/com/marginallyclever/robotoverlord/swing/edits/ComboBoxEdit.java index c1701b7af..0e8efa011 100644 --- a/src/main/java/com/marginallyclever/robotoverlord/swing/edits/ComboBoxEdit.java +++ b/src/main/java/com/marginallyclever/robotoverlord/swing/edits/ComboBoxEdit.java @@ -32,7 +32,7 @@ public ComboBoxEdit(IntParameter e, String label, int newValue) { @Override public String getPresentationName() { - return Translator.get("change ")+label; + return Translator.get("Change",label); } @Override diff --git a/src/main/java/com/marginallyclever/robotoverlord/swing/edits/ComponentAddEdit.java b/src/main/java/com/marginallyclever/robotoverlord/swing/edits/ComponentAddEdit.java index 1db20e313..e7dce0126 100644 --- a/src/main/java/com/marginallyclever/robotoverlord/swing/edits/ComponentAddEdit.java +++ b/src/main/java/com/marginallyclever/robotoverlord/swing/edits/ComponentAddEdit.java @@ -18,9 +18,6 @@ * */ public class ComponentAddEdit extends AbstractUndoableEdit { - @Serial - private static final long serialVersionUID = 1L; - private final Entity entity; private final Component component; private final List existingDependencies = new ArrayList<>(); @@ -40,7 +37,7 @@ public ComponentAddEdit(ComponentManagerPanel componentManagerPanel, Entity enti @Override public String getPresentationName() { - return Translator.get("Add ")+entity.getName(); + return Translator.get("Add",entity.getName()); } @Override diff --git a/src/main/java/com/marginallyclever/robotoverlord/swing/edits/EntityAddEdit.java b/src/main/java/com/marginallyclever/robotoverlord/swing/edits/EntityAddEdit.java index 2800e8570..a313d6e4a 100644 --- a/src/main/java/com/marginallyclever/robotoverlord/swing/edits/EntityAddEdit.java +++ b/src/main/java/com/marginallyclever/robotoverlord/swing/edits/EntityAddEdit.java @@ -32,7 +32,7 @@ public EntityAddEdit(EntityManager entityManager, Entity parent, Entity child) { @Override public String getPresentationName() { - return Translator.get("Add ")+ child.getName(); + return Translator.get("Add",child.getName()); } @Override diff --git a/src/main/java/com/marginallyclever/robotoverlord/swing/translator/TranslatorLanguage.java b/src/main/java/com/marginallyclever/robotoverlord/swing/translator/TranslatorLanguage.java index 2e1dff6ee..5a54dd6a7 100644 --- a/src/main/java/com/marginallyclever/robotoverlord/swing/translator/TranslatorLanguage.java +++ b/src/main/java/com/marginallyclever/robotoverlord/swing/translator/TranslatorLanguage.java @@ -14,6 +14,7 @@ import java.io.InputStream; import java.util.HashMap; import java.util.Map; +import java.util.Set; /** * A collection of strings for a single translation of the application. @@ -149,4 +150,9 @@ public String getName() { public String getAuthor() { return author; } + + public Set getKeys() { + // return a copy of strings + return strings.keySet(); + } } diff --git a/src/main/resources/languages/english.xml b/src/main/resources/languages/english.xml index 6e77c539b..fe6b2edeb 100644 --- a/src/main/resources/languages/english.xml +++ b/src/main/resources/languages/english.xml @@ -6,273 +6,43 @@ Dan Royer (dan@marginallyclever.com) - DXFScaleOnLoadScale image to fit paper - DXFInfillOnLoadFill in closed areas - - ChangeChange - AddAdd - RemoveRemove - MoveMove - ChooseChoose + ChangeChange %1 + AddAdd %1 + SelectSelect CancelCancel SaveSave - LoadLoad - CouldNotFindCould not find - - MachineWidthMachine width - MachineHeightMachine height - - PaperWidthPaper width - PaperHeightPaper height - isLandscapeIs landscape? - GoPaperBorderBorder - - InvertLeftInvert left - InvertRightInvert right - ToolTypeTool type - - PaperSizePaper Size - AdjustPulleySizePulley diameter - AdjustAccelerationAcceleration - - LeftLeft - RightRight - Millimetersmm - - ConnectingToConnecting to - PortNotConfiguredPort could not be configured: - PortOpenedPort opened. - TitlePrefixMakelangelo - TitlePostfix connected - - LineSegments line segments. - Centimeterscm - - EstimatedTimeEstimated draw time: - - LoadErrorFile could not be loaded: - SaveErrorFile could not be saved: - - ConversionOptionsConversion options - FlipForGlassFlip for glass - - StartStart - - PaperMarginMargin (%) - ConvertingConverting - FinishedCompleted - CancelledCancelled - FailedFailed: - ConversionStyleConversion style - - OpeningFileOpening - UnknownFileTypeUnknown file type - SetPaperSizePlease set a paper size before importing an image. - - FileTypeGCodeGCODE (ngc) - FileTypeImageImage (jpg/bmp/png/gif) - FileTypeDXFDXF R12 for map data (dxf) - FileTypeSVGScaleable Vector Graphics 1.1 (svg) - - MenuDriveControlsManual Driving - MenuCreativeControlCreative control - MenuAnimateAnimation control - MenuSoundsTitleSounds MenuSoundsConnectConnect MenuSoundsDisconnectDisconnect MenuSoundsFinishConvertFinish converting MenuSoundsFinishDrawFinish drawing - MenuGraphicsTitleGraphics - MenuGraphicsPenUpShow pen up moves - MenuGraphicsAntialiasAntialias lines - MenuGraphicsSpeedVSQualitySpeed over quality - MenuGraphicsDrawWhileRunningShow entire image while drawing - - MenuResetMachinePreferencesReset Preferences - MenuLanguageTitleLanguage - - InvalidToolRequested invalid tool # - ChangeToolPrefixPlease prepare - ChangeToolPostfix and click any button to continue. - - StartAtStart at - StartAtLineStart at line # - - PausePause - UnpauseUnpause - - SetHomeSet home - GoHomeGo home - FindHomeFind home - - TopTop - BottomBottom - PenUpPen up - PenDownPen down - - SetSet - SpeedSpeed: - Ratesteps/min - - JogMotorsMotors - JogInIN - JogOutOUT - InvertInvert - - UpdateNoticeA new version of this software is available.
Please visit https://www.marginallyclever.com/products/robot-overlord/ to get the new hotness.]]>
- UpToDateThis software is up to date. - UpdateCheckFailedSorry, I failed. Please visit http://www.marginallyclever.com/to check yourself. - - SendSend - TitleNotConnected not connected - MenuMakelangeloMakelangelo - MenuPreferencesPreferences - MenuLogLog - MenuUpdateCheck for updates QuitAction.nameQuit QuitAction.shortDescriptionGracefully terminate this app MenuConnectConnect - ButtonConnectConnect - ButtonDisconnectDisconnect - MenuRescanRescan - MenuDisconnectDisconnect - - MenuLoadMachineConfigLoad settings for... - - MenuSettingsSettings - MenuSettingsMachineMachine - MenuAdjustPaperPaper - MenuAdjustPulleysPulley size - MenuJogMotorsJog Motors - - MenuSelectToolSelect active tool - MenuAdjustToolPen - - MenuGCODEConvert - MenuTextToGCODEYour message here - MenuConvertImageOpen Recent... - MenuOpenFileOpen File... - MenuReopenFileReopen last file - MenuSaveGCODEAsSave as... - - MenuDrawDraw - HaltHalt - - MenuPreviewView - ZoomInZoom + - ZoomOutZoom - - ZoomFitZoom to fit - ShowLogShow Log - HideLogHide Log - mmNoticeAll values in mm. - penToolAdjustPen - penToolDiameterDiameter - penToolMaxFeedRateMax speed - penToolUpUp - penToolDownDown - penToolLiftSpeedLift delay - penToolTestTest - - spraypaintToolDiameterDot size - spraypaintToolMaxFeedRatemax speed - spraypaintToolUpOff - spraypaintToolDownOn - spraypaintToolLiftSpeedOn/off speed - spraypaintToolTestMake a dot - - voronoiStipplingNameVoronoi stipples - voronoiStipplingCellCountNumber of Cells - voronoiStipplingGenCountNumber of Generations - voronoiStipplingDotMaxMax dot size - voronoiStipplingDotMinMin dot size - - BoxGeneratorNameBoxxy - CrosshatchNameCrosshatch - HilbertCurveNameHilbert Curve - HilbertCurveSizeSize - HilbertCurveOrderOrder - MazeNameMaze - MazeRowsRows - MazeColumnsColumns - - PulseLineNamePulse Line - ZigZagNameBig zig zag - YourMsgHereNameYour message here - SpiralNameSpiral - ScanlineNameScanline - RGBNameRed Green Blue - - StatusSoFarTime running: - StatusRemainingEstimated time left: - - DisengageMotorsDisengage - EngageMotorsEngage - - AboutHTML - -

Robot Overlord %VERSION%

-

- https://www.marginallyclever.com/products/robot-overlord/ -

-

Created by Dan Royer.

-

Additional software and hardware contributions by
- Joseph Cottam, Peter Colapietro,
- Mark Raynsford, and
-
Kington Chu.

- - - ]]>
+ AboutAction.message +

Robot Overlord %1

+

https://www.marginallyclever.com/products/robot-overlord/

+

Created by Dan Royer.

+

Additional software and hardware contributions by + Joseph Cottam, Peter Colapietro, + Mark Raynsford, and Kington Chu.

+

Testers

+

Omar al rafei (Arc robotics)

+ ]]>
- MenuSettingsRegisterRegister - PleaseRegisterRegister your robot with your Marginally Clever user account to Unlock features and show your support.

]]>
- PleaseRegisterCreateAccountButtonCreate an account - PleaseRegisterUsernameUser name - PleaseRegisterPasswordPassword - - MachineNumberMachine # - - MenuResetMachinePreferencesWarningAre you sure you want to erase all your preferences? - - MenuGenerateGenerate art - MenuNewFileNew - - LimitTestNameLimit Test - - ClickAndDragClick & Drag - configureMachineSettings - ServoLengthNeededServo wire length: - StepperLengthNeededStepper wire length (each): - BeltLengthNeededTiming belt length (each): - - firmwareVersionBadTitleFirmware update - HardwareVersionModel: - firmwareVersionBadMessageThe firmware (code in the brain of your robot) is not the version I expect. I found v%VERSION%.
Please visit https://www.marginallyclever.com/product/makelangelo-firmware/
for the latest firmware.
Please visit https://www.marginallyclever.com/product/makelangelo-software/ for the latest software.]]>
- - Add EntityAdd Entity - Rename EntityRename Entity - Remove EntityRemove Entity ComponentAddAction.nameAdd Component ComponentAddAction.shortDescriptionAdd a Component to an Entity - NewNew OpenOpen CloseClose - Save asSave as... - QuitQuit - RobotOverlord.SaveAsSave As... - - ControlsControls - Online helpOnline help - Check for updateCheck for update + AboutAction.nameAbout - ConnectConnect LocalLocal RemoteLocal @@ -290,25 +60,15 @@ SceneImportAction.namePreselected%1 SceneImportAction.shortDescriptionCopy a entityManager into the current entityManager. - AddChildEntity.nameAdd Entity EntityRenameAction.nameRename Entity EntityAddChildAction.nameAdd Entity ComponentDeleteAction.nameDelete ComponentDeleteAction.shortDescriptionDelete a Component from an Entity DemoAction.shortDescriptionOpens a procedurally built demo - are you sure?are you sure? - RobotOverlord.quitTitleAre you sure you want to quit? RobotOverlord.quitConfirmAre you sure you want to quit? - WarningWarning - - ProjectSaveAction.doesNotContainAllAssetsProject folder does not contain all assets. - - Scene.AssetPathNotInScenePathWarningTitleAsset path warning - Scene.AssetPathNotInScenePathWarningAsset \n%1\nis not in entityManager path\n%2\nConsider moving your asset into the entityManager path for easier sharing with others. - Are you sure?Are you sure? UndoAction.nameUndo @@ -319,7 +79,6 @@ ComponentPasteAction.namePaste ComponentPasteAction.shortDescriptionPaste a Component to an Entity - SelectSelect Select.oneSelect %1 Select.nothingSelect nothing Select.many%1 items @@ -367,7 +126,6 @@ ComponentRenameEdit.nameRename %1 RobotROSystem.controlPanelControl panel - RobotROSystem.DHTableDH Table EditPreferencesAction.nameEdit Preferences EditPreferencesAction.shortDescriptionEdit Preferences diff --git a/src/test/java/com/marginallyclever/robotoverlord/swing/translator/LanguagesXmlValidationForNoDupKeyTest.java b/src/test/java/com/marginallyclever/robotoverlord/swing/translator/LanguagesXmlValidationForNoDupKeyTest.java index 36c43e9fd..a7c987f70 100644 --- a/src/test/java/com/marginallyclever/robotoverlord/swing/translator/LanguagesXmlValidationForNoDupKeyTest.java +++ b/src/test/java/com/marginallyclever/robotoverlord/swing/translator/LanguagesXmlValidationForNoDupKeyTest.java @@ -19,7 +19,7 @@ import java.util.ArrayList; import java.util.List; -import static com.marginallyclever.robotoverlord.swing.translator.MissingTranslationTest.listFiles; +import static com.marginallyclever.robotoverlord.swing.translator.TranslationsMissingTest.listFiles; import static org.junit.jupiter.api.Assertions.*; public class LanguagesXmlValidationForNoDupKeyTest { diff --git a/src/test/java/com/marginallyclever/robotoverlord/swing/translator/MissingTranslationTest.java b/src/test/java/com/marginallyclever/robotoverlord/swing/translator/TranslationsMissingTest.java similarity index 66% rename from src/test/java/com/marginallyclever/robotoverlord/swing/translator/MissingTranslationTest.java rename to src/test/java/com/marginallyclever/robotoverlord/swing/translator/TranslationsMissingTest.java index a96b7b724..00850b57c 100644 --- a/src/test/java/com/marginallyclever/robotoverlord/swing/translator/MissingTranslationTest.java +++ b/src/test/java/com/marginallyclever/robotoverlord/swing/translator/TranslationsMissingTest.java @@ -1,5 +1,6 @@ package com.marginallyclever.robotoverlord.swing.translator; +import com.marginallyclever.util.PreferencesHelper; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.slf4j.Logger; @@ -13,6 +14,7 @@ import java.nio.file.Path; import java.util.ArrayList; import java.util.List; +import java.util.function.Consumer; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -20,12 +22,23 @@ import static org.junit.jupiter.api.Assertions.*; -public class MissingTranslationTest { +public class TranslationsMissingTest { - private static final Logger logger = LoggerFactory.getLogger(MissingTranslationTest.class); + private static final Logger logger = LoggerFactory.getLogger(TranslationsMissingTest.class); private final Pattern patternComment = Pattern.compile("^\\s*//.*"); - private final Pattern patternTranslator = Pattern.compile("Translator\\s*\\.\\s*get\\s*\\(\"(?[^)]*)\"\\)"); + private final Pattern patternTranslator = Pattern.compile("Translator\\s*\\.\\s*get\\s*\\(\\s*\"(?[^)]*)\"\\s*[,\\)]"); + + public static class TranslationFileSearcher { + public final String key; + public final File file; + public final int lineNumber; + TranslationFileSearcher(String k,File f,int line) { + key=k; + file=f; + lineNumber=line; + } + } @BeforeAll public static void init() { @@ -35,15 +48,15 @@ public static void init() { @Test public void findMissingTranslations() throws IOException { List results = new ArrayList<>(); - File srcDir = new File("src" + File.separator + "main" + File.separator + "java"); - List files = listFiles(srcDir.toPath(), ".java"); - // search in the files ... - files.forEach(file -> { - try { - searchInAFile(file, results); - } catch (IOException e) { - logger.warn("Can read file {}", file, e); + searchAllSourceFiles((e)->{ + String trans = Translator.get(e.key); + if (trans.startsWith(Translator.MISSING)) { + try { + results.add(String.format("file://%s:%s: %s", e.file.getCanonicalPath(), e.lineNumber, e.key)); + } catch (IOException ex) { + throw new RuntimeException(ex); + } } }); @@ -56,29 +69,52 @@ public void findMissingTranslations() throws IOException { assertEquals(0, results.size(), "Some translations are missing, see previous logs for details"); } + public void searchAllSourceFiles(Consumer consumer) throws IOException { + File srcDir = new File("src" + File.separator + "main" + File.separator + "java"); + List files = listFiles(srcDir.toPath(), ".java"); + files.forEach(file -> { + try { + searchInAFile(file, consumer); + } catch (IOException e) { + logger.warn("Can read file {}", file, e); + } + }); + } + @Test public void verifyThatMatcherWorks_results() throws IOException { List results = new ArrayList<>(); // matches.txt contains few entries with translation and one without. The list should not be empty - searchInAFile(new File(this.getClass().getResource("matches.txt").getFile()), results); + searchInAFile(new File(getClass().getResource("matches.txt").getFile()), e->{ + String trans = Translator.get(e.key); + if (trans.startsWith(Translator.MISSING)) { + try { + results.add(String.format("file://%s:%s: %s", e.file.getCanonicalPath(), e.lineNumber, e.key)); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + }); assertNotNull(results); - assertEquals(1, results.size()); + assertEquals(2, results.size()); assertTrue(results.get(0).contains("matches.txt:4: unknownKey")); + assertTrue(results.get(1).contains("matches.txt:8: valueToBeFilledIn")); } @Test public void verifyThatMatcherWorks_noResult() throws IOException { List results = new ArrayList<>(); - searchInAFile(new File(this.getClass().getResource("no-match.txt").getFile()), results); + ; + searchInAFile(new File(getClass().getResource("no-match.txt").getFile()), e->results.add(e.key)); // no-match does not contains any code matching the translator. The list must be empty assertEquals(0, results.size()); } - public void searchInAFile(File file, List results) throws IOException { + public void searchInAFile(File file, Consumer consumer) throws IOException { int lineNb = 1; try (BufferedReader bufferedReader = new BufferedReader(new FileReader(file))) { String line; @@ -88,10 +124,7 @@ public void searchInAFile(File file, List results) throws IOException { m = patternTranslator.matcher(line); while (m.find()) { String key = m.group("key"); - String trans = Translator.get(key); - if (trans.startsWith(Translator.MISSING)) { - results.add(String.format("file://%s:%s: %s", file.getCanonicalPath(), lineNb, key)); - } + consumer.accept(new TranslationFileSearcher(key, file, lineNb)); } } lineNb++; diff --git a/src/test/java/com/marginallyclever/robotoverlord/swing/translator/TranslationsUnusedTest.java b/src/test/java/com/marginallyclever/robotoverlord/swing/translator/TranslationsUnusedTest.java new file mode 100644 index 000000000..0105ff03f --- /dev/null +++ b/src/test/java/com/marginallyclever/robotoverlord/swing/translator/TranslationsUnusedTest.java @@ -0,0 +1,46 @@ +package com.marginallyclever.robotoverlord.swing.translator; + +import org.apache.commons.io.FilenameUtils; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.util.HashSet; +import java.util.Set; + +public class TranslationsUnusedTest { + private InputStream getInputStream(String filename) throws FileNotFoundException { + String nameInsideJar = Translator.LANGUAGES_DIRECTORY+"/"+ FilenameUtils.getName(filename); + InputStream stream = Translator.class.getClassLoader().getResourceAsStream(nameInsideJar); + String actualFilename = "Jar:"+nameInsideJar; + File externalFile = new File(filename); + if(externalFile.exists()) { + stream = new FileInputStream(filename); + actualFilename = filename; + } + if( stream == null ) throw new FileNotFoundException(actualFilename); + return stream; + } + + @Test + public void findUnusedTranslations() throws Exception { + TranslatorLanguage english = new TranslatorLanguage(); + english.loadFromInputStream(getInputStream("target/classes/languages/english.xml")); + Set keys = english.getKeys(); + Set found = new HashSet<>(); + + TranslationsMissingTest search = new TranslationsMissingTest(); + search.searchAllSourceFiles((e)->{ + found.add(e.key); + }); + keys.removeAll(found); + System.out.println("Unused translations:"); + for(String key : keys) { + System.out.println(key); + } + Assertions.assertEquals(0,keys.size(),"Unused translations found: "+ keys); + } +} diff --git a/src/test/java/com/marginallyclever/robotoverlord/systems/camerastreamservice/CameraStreamServicePanelTest.java b/src/test/java/com/marginallyclever/robotoverlord/systems/camerastreamservice/CameraStreamServicePanelTest.java index d35071e46..cb67453ff 100644 --- a/src/test/java/com/marginallyclever/robotoverlord/systems/camerastreamservice/CameraStreamServicePanelTest.java +++ b/src/test/java/com/marginallyclever/robotoverlord/systems/camerastreamservice/CameraStreamServicePanelTest.java @@ -1,5 +1,6 @@ package com.marginallyclever.robotoverlord.systems.camerastreamservice; +import com.marginallyclever.robotoverlord.swing.translator.Translator; import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable; import javax.swing.*; @@ -8,6 +9,7 @@ @DisabledIfEnvironmentVariable(named = "CI", matches = "true", disabledReason = "headless environment") public class CameraStreamServicePanelTest { public static void main(String[] args) { + Translator.start(); CameraStreamService service = new CameraStreamService(); CameraStreamServicePanel panel = new CameraStreamServicePanel(service); @@ -25,7 +27,7 @@ public static void main(String[] args) { while(true) { service.update(0); try { - Thread.sleep(1000/30); + Thread.sleep((int)(1000.0f/30.0f)); } catch (InterruptedException e) { throw new RuntimeException(e); } diff --git a/src/test/resources/com/marginallyclever/robotoverlord/swing/translator/matches.txt b/src/test/resources/com/marginallyclever/robotoverlord/swing/translator/matches.txt index 118a994c7..950460254 100644 --- a/src/test/resources/com/marginallyclever/robotoverlord/swing/translator/matches.txt +++ b/src/test/resources/com/marginallyclever/robotoverlord/swing/translator/matches.txt @@ -5,4 +5,5 @@ JTabbedPane tabbedPane = new JTabbedPane(); CollapsiblePanel collapsiblePanel = new CollapsiblePanel(parentWindow, Translator.get("RobotPanel.Program"), DIMENSION_COLLAPSIBLE_HEIGHT); collapsiblePanel.add(tabbedPane); + Translator . get ( "valueToBeFilledIn" , "aValue"); // st = Translator.get("unknownKeyInAComment") + " - ";