diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties
index c770f3471..5d4fa8555 100644
--- a/core/resources/l10n/messages.properties
+++ b/core/resources/l10n/messages.properties
@@ -90,12 +90,13 @@ dlg.but.cancel = Cancel
dlg.but.close = Close
! General file type names
-filetypes.pdf = PDF files (*.pdf)
-BasicFrame.SimpleFileFilter1 = All rocket designs (*.ork; *.rkt)
-BasicFrame.SimpleFileFilter2 = OpenRocket designs (*.ork)
-BasicFrame.SimpleFileFilter3 = RockSim designs (*.rkt)
-BasicFrame.SimpleFileFilter4 = OpenRocket presets (*.orc)
-filetypes.images = Image files
+FileHelper.CSV_FILTER = Comma Separated Files (*.csv)
+FileHelper.PDF_FILTER = PDF files (*.pdf)
+FileHelper.ALL_DESIGNS_FILTER = All rocket designs (*.ork; *.rkt)
+FileHelper.OPENROCKET_DESIGN_FILTER = OpenRocket designs (*.ork)
+FileHelper.ROCKSIM_DESIGN_FILTER = RockSim designs (*.rkt)
+FileHelper.OPEN_ROCKET_COMPONENT_FILTER = OpenRocket presets (*.orc)
+FileHelper.IMAGES = Image files
! About Dialog
@@ -515,7 +516,6 @@ RK4SimulationStepper.error.valuesTooLarge = Simulation values exceeded limits.
SimulationModifierTree.OptimizationParameters = Optimization Parameters
! SimulationExportPanel
-SimExpPan.desc = Comma Separated Files (*.csv)
SimExpPan.border.Vartoexport = Variables to export
SimExpPan.border.Stage = Stage to export
SimExpPan.but.Selectall = Select all
@@ -948,6 +948,7 @@ FreeformFinSetConfig.lbl.doubleClick2 = to edit
FreeformFinSetConfig.lbl.clickDrag = Click+drag: Add and move points
FreeformFinSetConfig.lbl.ctrlClick = Ctrl+click: Remove point
FreeformFinSetConfig.lbl.scaleFin = Scale Fin
+FreeformFinSetConfig.lbl.exportCSV = Export CSV
!TubeFinSetConfig
TubeFinSetCfg.lbl.Nbroffins = Number of fins:
diff --git a/core/resources/l10n/messages_cs.properties b/core/resources/l10n/messages_cs.properties
index 535fe403d..021da8d54 100644
--- a/core/resources/l10n/messages_cs.properties
+++ b/core/resources/l10n/messages_cs.properties
@@ -57,9 +57,10 @@ RocketPanel.lbl.infoMessage = Stiskni k oznacen
! BasicFrame
-BasicFrame.SimpleFileFilter1 = V\u0161echny návrhy raket (*.ork; *.rkt)
-BasicFrame.SimpleFileFilter2 = Návrhy OpenRocket (*.ork)
-BasicFrame.SimpleFileFilter3 = Návrhy RockSim (*.rkt)
+FileHelper.ALL_DESIGNS_FILTER = V\u0161echny návrhy raket (*.ork; *.rkt)
+FileHelper.OPENROCKET_DESIGN_FILTER = Návrhy OpenRocket (*.ork)
+FileHelper.ROCKSIM_DESIGN_FILTER = Návrhy RockSim (*.rkt)
+FileHelper.CSV_FILTER = Soubory s cárkovým oddelovacem (*.csv)
BasicFrame.tab.Rocketdesign = Návrh rakety
BasicFrame.tab.Flightsim = Letová simulace
BasicFrame.title.Addnewcomp = Pridej novou komponentu
@@ -94,7 +95,7 @@ dlg.but.close = Zavr
! General file type names
-filetypes.pdf = Soubory PDF
+FileHelper.PDF_FILTER = Soubory PDF
! About Dialog
@@ -410,7 +411,6 @@ RK4SimulationStepper.error.valuesTooLarge = Hodnoty simulace prekrocily limity.
! SimulationExportPanel
-SimExpPan.desc = Soubory s cárkovým oddelovacem (*.csv)
SimExpPan.border.Vartoexport = Promenné k exportu
SimExpPan.but.Selectall = Oznac v\u0161e
SimExpPan.but.Selectnone = Nic neoznacuj
diff --git a/core/resources/l10n/messages_de.properties b/core/resources/l10n/messages_de.properties
index 93456531b..7e7f12c24 100644
--- a/core/resources/l10n/messages_de.properties
+++ b/core/resources/l10n/messages_de.properties
@@ -90,12 +90,13 @@ dlg.but.close = Schlie
! General file type names
-filetypes.pdf = PDF files
-BasicFrame.SimpleFileFilter1 = Alle Raketendesigns (*.ork; *.rkt)
-BasicFrame.SimpleFileFilter2 = OpenRocket Designs (*.ork)
-BasicFrame.SimpleFileFilter3 = RockSim Designs (*.rkt)
-BasicFrame.SimpleFileFilter4 = OpenRocket presets (*.orc)
-filetypes.images = Image files
+FileHelper.PDF_FILTER = PDF files
+FileHelper.ALL_DESIGNS_FILTER = Alle Raketendesigns (*.ork; *.rkt)
+FileHelper.OPENROCKET_DESIGN_FILTER = OpenRocket Designs (*.ork)
+FileHelper.ROCKSIM_DESIGN_FILTER = RockSim Designs (*.rkt)
+FileHelper.OPEN_ROCKET_COMPONENT_FILTER = OpenRocket presets (*.orc)
+FileHelper.IMAGES = Image files
+FileHelper.CSV_FILTER = Komma getrennte Werte (*.csv)
! About Dialog
@@ -413,7 +414,6 @@ RK4SimulationStepper.error.valuesTooLarge = Simulationswerte
! SimulationExportPanel
-SimExpPan.desc = Komma getrennte Werte (*.csv)
SimExpPan.border.Vartoexport = zu exportierende Variablen
SimExpPan.but.Selectall = Alle auswählen
SimExpPan.but.Selectnone = Keine auswählen
diff --git a/core/resources/l10n/messages_es.properties b/core/resources/l10n/messages_es.properties
index 15416c61d..a171e1850 100644
--- a/core/resources/l10n/messages_es.properties
+++ b/core/resources/l10n/messages_es.properties
@@ -42,10 +42,11 @@ AppearanceCfg.lbl.texture.repeat = Aspecto:
AppearanceCfg.lbl.texture.rotation = Rotaci\u00f3n:
AppearanceCfg.lbl.texture.scale = Escala:
-BasicFrame.SimpleFileFilter1 = Todos los dise\u00f1os de cohete(*.ork; *.rkt)
-BasicFrame.SimpleFileFilter2 = Dise\u00f1os OpenRocket (*.ork)
-BasicFrame.SimpleFileFilter3 = Dise\u00f1os RockSim (*.rkt)
-BasicFrame.SimpleFileFilter4 = Preajustes OpenRocket (*.orc)
+FileHelper.ALL_DESIGNS_FILTER = Todos los dise\u00f1os de cohete(*.ork; *.rkt)
+FileHelper.OPENROCKET_DESIGN_FILTER = Dise\u00f1os OpenRocket (*.ork)
+FileHelper.ROCKSIM_DESIGN_FILTER = Dise\u00f1os RockSim (*.rkt)
+FileHelper.OPEN_ROCKET_COMPONENT_FILTER = Preajustes OpenRocket (*.orc)
+FileHelper.CSV_FILTER = Documentos separados por comas (*.csv)
BasicFrame.StageName.Sustainer = Etapa principal
BasicFrame.WarningDialog.title = Alertas al abrir el archivo
BasicFrame.WarningDialog.txt1 = Mientras se abr\u00eda el archivo, se encontraron los siguiente problemas
@@ -991,7 +992,6 @@ SimExpPan.checkbox.ttip.Incflightevents = Incluye una l\u00ednea de comentario
SimExpPan.checkbox.ttip.Includefielddesc = Incluye una l\u00ednea de comentario con las descripciones de las variables exportadas.
SimExpPan.checkbox.ttip.Includesimudesc = Incluye un comentario en el inicio del documento describiendo la simulaci\u00f3n.
! SimulationExportPanel
-SimExpPan.desc = Documentos separados por comas (*.csv)
SimExpPan.lbl.Commentchar = Caracter de comentario:
SimExpPan.lbl.Fieldsepstr = Caracter separador de campo:
SimExpPan.lbl.longA1 = Caracter para separar campos en el documento exportado.
@@ -1422,9 +1422,9 @@ exdesigndlg.lbl.Examplesnotfound = Ejemplos no encontrados
exdesigndlg.lbl.Openexampledesign = Abrir un dise\u00f1o de ejemplo
exdesigndlg.lbl.Selectexample = Dise\u00f1os de ejemplo:
-filetypes.images = Archivos de imagen
+FileHelper.IMAGES = Archivos de imagen
! General file type names
-filetypes.pdf = Archivos PDF
+FileHelper.PDF_FILTER = Archivos PDF
main.menu.analyze = Analizar
main.menu.analyze.componentAnalysis = An\u00e1lisis de los componentes
diff --git a/core/resources/l10n/messages_fr.properties b/core/resources/l10n/messages_fr.properties
index 181838f72..30c1ef398 100644
--- a/core/resources/l10n/messages_fr.properties
+++ b/core/resources/l10n/messages_fr.properties
@@ -39,10 +39,11 @@ AppearanceCfg.lbl.texture.repeat = R\u00E9p\u00E9ter:
AppearanceCfg.lbl.texture.rotation = Rotation:
AppearanceCfg.lbl.texture.scale = Echelle:
-BasicFrame.SimpleFileFilter1 = Tous les fichiers fus\u00E9e (*.ork; *.rkt)
-BasicFrame.SimpleFileFilter2 = Fichiers OpenRocket (*.ork)
-BasicFrame.SimpleFileFilter3 = Fichiers RockSim (*.rkt)
-BasicFrame.SimpleFileFilter4 = Pi\u00E8ces OpenRocket pr\u00E9configur\u00E9es (*.orc)
+FileHelper.ALL_DESIGNS_FILTER = Tous les fichiers fus\u00E9e (*.ork; *.rkt)
+FileHelper.OPENROCKET_DESIGN_FILTER = Fichiers OpenRocket (*.ork)
+FileHelper.ROCKSIM_DESIGN_FILTER = Fichiers RockSim (*.rkt)
+FileHelper.OPEN_ROCKET_COMPONENT_FILTER = Pi\u00E8ces OpenRocket pr\u00E9configur\u00E9es (*.orc)
+FileHelper.CSV_FILTER = Fichiers dont les donn\u00E9es sont s\u00E9par\u00E9es par une virgule (*.csv)
BasicFrame.StageName.Sustainer = Sustainer
BasicFrame.WarningDialog.title = Avertissement lors de l'ouverture du fichier
BasicFrame.WarningDialog.txt1 = Les probl\u00E8mes suivant sont survenus lors de l'ouverture de
@@ -983,7 +984,6 @@ SimExpPan.checkbox.ttip.Incflightevents = Inclure une ligne de commentaire pour
SimExpPan.checkbox.ttip.Includefielddesc = Inclure une ligne de commentaire avec la description des variables export\u00E9es.
SimExpPan.checkbox.ttip.Includesimudesc = Inclure un commentaire au d\u00E9but du fichier pour d\u00E9crire la simulation.
! SimulationExportPanel
-SimExpPan.desc = Fichiers dont les donn\u00E9es sont s\u00E9par\u00E9es par une virgule (*.csv)
SimExpPan.lbl.Commentchar = Symbole pour les commentaires:
SimExpPan.lbl.Fieldsepstr = S\u00E9parateur de champ:
SimExpPan.lbl.longA1 = La cha\u00EEne utilis\u00E9e pour s\u00E9parer les champs dans le fichier export\u00E9.
@@ -1416,9 +1416,9 @@ exdesigndlg.lbl.Examplesnotfound = Exemples non trouv\u00E9s
exdesigndlg.lbl.Openexampledesign = Ouvrir un exemple de projet
exdesigndlg.lbl.Selectexample = Choisir l'exemple de projet \u00E0 ouvrir:
-filetypes.images = Fichiers Image
+FileHelper.IMAGES = Fichiers Image
! General file type names
-filetypes.pdf = fichier PDF
+FileHelper.PDF_FILTER = fichier PDF
main.menu.analyze = Analyse
main.menu.analyze.componentAnalysis = Analyse des Pi\u00E8ces
diff --git a/core/resources/l10n/messages_it.properties b/core/resources/l10n/messages_it.properties
index 99c664f0d..98acccd7c 100644
--- a/core/resources/l10n/messages_it.properties
+++ b/core/resources/l10n/messages_it.properties
@@ -92,12 +92,13 @@ dlg.but.close = Chiudi
! General file type names
-filetypes.pdf = PDF files
-BasicFrame.SimpleFileFilter1 = Tutti i disegni di razzi (*.ork; *.rkt)
-BasicFrame.SimpleFileFilter2 = Disegni di OpenRocket (*.ork)
-BasicFrame.SimpleFileFilter3 = Disegni di RockSim (*.rkt)
-BasicFrame.SimpleFileFilter4 = OpenRocket presets (*.orc)
-filetypes.images = Image files
+FileHelper.PDF_FILTER = PDF files
+FileHelper.ALL_DESIGNS_FILTER = Tutti i disegni di razzi (*.ork; *.rkt)
+FileHelper.OPENROCKET_DESIGN_FILTER = Disegni di OpenRocket (*.ork)
+FileHelper.ROCKSIM_DESIGN_FILTER = Disegni di RockSim (*.rkt)
+FileHelper.OPEN_ROCKET_COMPONENT_FILTER = OpenRocket presets (*.orc)
+FileHelper.IMAGES = Image files
+FileHelper.CSV_FILTER = Valori separati da virgola (*.csv)
! About Dialog
@@ -415,7 +416,6 @@ RK4SimulationStepper.error.valuesTooLarge = I valori di simulazione anno eccedut
! SimulationExportPanel
-SimExpPan.desc = Valori separati da virgola (*.csv)
SimExpPan.border.Vartoexport = Variabili da esportare
SimExpPan.but.Selectall = Seleziona tutto
SimExpPan.but.Selectnone = Deseleziona tutto
diff --git a/core/resources/l10n/messages_ja.properties b/core/resources/l10n/messages_ja.properties
index 09c788dc7..0ccbdab22 100644
--- a/core/resources/l10n/messages_ja.properties
+++ b/core/resources/l10n/messages_ja.properties
@@ -86,12 +86,13 @@ dlg.but.cancel = \u30AD\u30E3\u30F3\u30BB\u30EB
dlg.but.close = \u9589\u3058\u308B
! General file type names
-filetypes.pdf = PDF files (*.pdf)
-BasicFrame.SimpleFileFilter1 = All rocket designs (*.ork; *.rkt)
-BasicFrame.SimpleFileFilter2 = OpenRocket designs (*.ork)
-BasicFrame.SimpleFileFilter3 = RockSim designs (*.rkt)
-BasicFrame.SimpleFileFilter4 = OpenRocket presets (*.orc)
-filetypes.images = \u753B\u50CF\u30D5\u30A1\u30A4\u30EB
+FileHelper.PDF_FILTER = PDF files (*.pdf)
+FileHelper.ALL_DESIGNS_FILTER = All rocket designs (*.ork; *.rkt)
+FileHelper.OPENROCKET_DESIGN_FILTER = OpenRocket designs (*.ork)
+FileHelper.ROCKSIM_DESIGN_FILTER = RockSim designs (*.rkt)
+FileHelper.OPEN_ROCKET_COMPONENT_FILTER = OpenRocket presets (*.orc)
+FileHelper.IMAGES = \u753B\u50CF\u30D5\u30A1\u30A4\u30EB
+FileHelper.CSV_FILTER = Comma Separated Files (*.csv)
! About Dialog
@@ -421,7 +422,6 @@ RK4SimulationStepper.error.valuesTooLarge = \u30B7\u30DF\u30E5\u30EC\u30FC\u30B
SimulationModifierTree.OptimizationParameters = \u6700\u9069\u5316\u30D1\u30E9\u30E1\u30FC\u30BF
! SimulationExportPanel
-SimExpPan.desc = Comma Separated Files (*.csv)
SimExpPan.border.Vartoexport = \u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3059\u308B\u5909\u6570
SimExpPan.but.Selectall = \u5168\u3066\u9078\u629E
SimExpPan.but.Selectnone = \u5168\u3066\u975E\u9078\u629E
diff --git a/core/resources/l10n/messages_nl.properties b/core/resources/l10n/messages_nl.properties
index 8d1555bb0..ab364d108 100644
--- a/core/resources/l10n/messages_nl.properties
+++ b/core/resources/l10n/messages_nl.properties
@@ -92,12 +92,13 @@ dlg.but.cancel = Annuleer
dlg.but.close = Sluit
! General file type names
-filetypes.pdf = PDF-bestanden (*.pdf)
-BasicFrame.SimpleFileFilter1 = Alle raketontwerpen (*.ork; *.rkt)
-BasicFrame.SimpleFileFilter2 = OpenRocket-ontwerpen (*.ork)
-BasicFrame.SimpleFileFilter3 = RockSim-ontwerpen (*.rkt)
-BasicFrame.SimpleFileFilter4 = OpenRocket-presets (*.orc)
-filetypes.images = Afbeelding-bestanden
+FileHelper.PDF_FILTER = PDF-bestanden (*.pdf)
+FileHelper.ALL_DESIGNS_FILTER = Alle raketontwerpen (*.ork; *.rkt)
+FileHelper.OPENROCKET_DESIGN_FILTER = OpenRocket-ontwerpen (*.ork)
+FileHelper.ROCKSIM_DESIGN_FILTER = RockSim-ontwerpen (*.rkt)
+FileHelper.OPEN_ROCKET_COMPONENT_FILTER = OpenRocket-presets (*.orc)
+FileHelper.IMAGES = Afbeelding-bestanden
+FileHelper.CSV_FILTER = Komma-gescheiden bestanden (*.csv)
! About Dialog
@@ -513,7 +514,6 @@ RK4SimulationStepper.error.valuesTooLarge = Simulatiewaarden overschreden limiet
SimulationModifierTree.OptimizationParameters = Optimalisatieparameters
! SimulationExportPanel
-SimExpPan.desc = Komma-gescheiden bestanden (*.csv)
SimExpPan.border.Vartoexport = Variabelen om te exporteren
SimExpPan.border.Stage = Trap om te exporteren
SimExpPan.but.Selectall = Selecteer alles
diff --git a/core/resources/l10n/messages_pl.properties b/core/resources/l10n/messages_pl.properties
index ac5384fa1..9a1611b55 100644
--- a/core/resources/l10n/messages_pl.properties
+++ b/core/resources/l10n/messages_pl.properties
@@ -91,12 +91,13 @@
! General file type names
- filetypes.pdf = Pliki PDF (*.pdf)
- BasicFrame.SimpleFileFilter1 = Wszystkie projekty rakiet (*.ork; *.rkt)
- BasicFrame.SimpleFileFilter2 = Projekty OpenRocket (*.ork; *.rkt)
- BasicFrame.SimpleFileFilter3 = Projekty RockSim (*.rkt)
- BasicFrame.SimpleFileFilter4 = Ustawienia OpenRocket (*.orc)
- filetypes.images = Pliki obrazów
+ FileHelper.PDF_FILTER = Pliki PDF (*.pdf)
+ FileHelper.ALL_DESIGNS_FILTER = Wszystkie projekty rakiet (*.ork; *.rkt)
+ FileHelper.OPENROCKET_DESIGN_FILTER = Projekty OpenRocket (*.ork; *.rkt)
+ FileHelper.ROCKSIM_DESIGN_FILTER = Projekty RockSim (*.rkt)
+ FileHelper.OPEN_ROCKET_COMPONENT_FILTER = Ustawienia OpenRocket (*.orc)
+ FileHelper.IMAGES = Pliki obrazów
+ FileHelper.CSV_FILTER = Pliki rozdzielone przecinkiem (*.csv)
! About Dialog
@@ -412,7 +413,6 @@
! SimulationExportPanel
- SimExpPan.desc = Pliki rozdzielone przecinkiem (*.csv)
SimExpPan.border.Vartoexport = Zmienne do wyeksportowania
SimExpPan.but.Selectall = Wybierz wszystko
SimExpPan.but.Selectnone = Odznacz wszystko
diff --git a/core/resources/l10n/messages_pt.properties b/core/resources/l10n/messages_pt.properties
index fc1d3e0d4..2de3dcb2f 100644
--- a/core/resources/l10n/messages_pt.properties
+++ b/core/resources/l10n/messages_pt.properties
@@ -33,10 +33,11 @@ AppearanceCfg.lbl.texture.repeat = Repetir:
AppearanceCfg.lbl.texture.rotation = Rota\u00e7\u00e3o:
AppearanceCfg.lbl.texture.scale = Escala:
-BasicFrame.SimpleFileFilter1 = Todos os projetos dos foguetes (*.ork; *.rtk)
-BasicFrame.SimpleFileFilter2 = Projetos OpenRocket (*.ork)
-BasicFrame.SimpleFileFilter3 = Desenhos RockSim (*.rtk)
-BasicFrame.SimpleFileFilter4 = Pr\u00e9-defini\u00e7\u00f5es OpenRocket (*.orc)
+FileHelper.ALL_DESIGNS_FILTER = Todos os projetos dos foguetes (*.ork; *.rtk)
+FileHelper.OPENROCKET_DESIGN_FILTER = Projetos OpenRocket (*.ork)
+FileHelper.ROCKSIM_DESIGN_FILTER = Desenhos RockSim (*.rtk)
+FileHelper.OPEN_ROCKET_COMPONENT_FILTER = Pr\u00e9-defini\u00e7\u00f5es OpenRocket (*.orc)
+FileHelper.CSV_FILTER = Arquivos Separados por V\u00edrgulas (*.csv)
BasicFrame.StageName.Sustainer = Sustentador
BasicFrame.WarningDialog.title = Avisos ao abrir arquivo
BasicFrame.WarningDialog.txt1 = Os seguintes problemas foram encontrados durante a abertura
@@ -966,7 +967,6 @@ SimExpPan.checkbox.ttip.Incflightevents = Incluir uma linha de coment\u00e1rio
SimExpPan.checkbox.ttip.Includefielddesc = Incluir uma linha de coment\u00e1rio com as descri\u00e7\u00f5es das vari\u00e1veis exportadas.
SimExpPan.checkbox.ttip.Includesimudesc = Incluir um coment\u00e1rio no come\u00e7o do arquivo descrevendo a simula\u00e7\u00e3o.
# SimulationExportPanel
-SimExpPan.desc = Arquivos Separados por V\u00edrgulas (*.csv)
SimExpPan.lbl.Commentchar = Caracter de coment\u00e1rio:
SimExpPan.lbl.Fieldsepstr = Caracteres separadores de campo:
SimExpPan.lbl.longA1 = Cadeia de caracteres utilizada para separar os campos no arquivo exportado.
@@ -1378,9 +1378,9 @@ exdesigndlg.lbl.Examplesnotfound = Exemplos n\u00e3o encontrados
exdesigndlg.lbl.Openexampledesign = Abrir exemplo de projeto
exdesigndlg.lbl.Selectexample = Selecione projeto de exemplo para abrir:
-filetypes.images = Arquivos de imagem
+FileHelper.IMAGES = Arquivos de imagem
# General file type names
-filetypes.pdf = Arquivos PDF (*.pdf)
+FileHelper.PDF_FILTER = Arquivos PDF (*.pdf)
main.menu.analyze = Analisar
main.menu.analyze.componentAnalysis = An\u00e1lise dos componentes
diff --git a/core/resources/l10n/messages_ru.properties b/core/resources/l10n/messages_ru.properties
index a60b361d5..0ba2f19e3 100644
--- a/core/resources/l10n/messages_ru.properties
+++ b/core/resources/l10n/messages_ru.properties
@@ -91,12 +91,13 @@ dlg.but.cancel = \u041e\u0442\u043c\u0435\u043d\u0430
dlg.but.close = \u0417\u0430\u043a\u0440\u044b\u0442\u044c
! General file type names
-filetypes.pdf = \u0424\u0430\u0439\u043b\u044b PDF (*.pdf)
-BasicFrame.SimpleFileFilter1 = \u0412\u0441\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0440\u0430\u043a\u0435\u0442 (*.ork; *.rkt)
-BasicFrame.SimpleFileFilter2 = \u0424\u0430\u0439\u043b\u044b OpenRocket (*.ork)
-BasicFrame.SimpleFileFilter3 = \u0424\u0430\u0439\u043b\u044b RockSim (*.rkt)
-BasicFrame.SimpleFileFilter4 = \u0417\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0438 OpenRocket (*.orc)
-filetypes.images = \u0424\u0430\u0439\u043b\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439
+FileHelper.PDF_FILTER = \u0424\u0430\u0439\u043b\u044b PDF (*.pdf)
+FileHelper.ALL_DESIGNS_FILTER = \u0412\u0441\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0440\u0430\u043a\u0435\u0442 (*.ork; *.rkt)
+FileHelper.OPENROCKET_DESIGN_FILTER = \u0424\u0430\u0439\u043b\u044b OpenRocket (*.ork)
+FileHelper.ROCKSIM_DESIGN_FILTER = \u0424\u0430\u0439\u043b\u044b RockSim (*.rkt)
+FileHelper.OPEN_ROCKET_COMPONENT_FILTER = \u0417\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0438 OpenRocket (*.orc)
+FileHelper.IMAGES = \u0424\u0430\u0439\u043b\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439
+FileHelper.CSV_FILTER = \u0422\u0435\u043a\u0441\u0442, \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u044f\u0442\u044b\u043c\u0438 (*.csv)
! About Dialog
@@ -465,7 +466,6 @@ RK4SimulationStepper.error.valuesTooLarge = \u0417\u043d\u0430\u0447\u0435\u043d
SimulationModifierTree.OptimizationParameters = \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b
! SimulationExportPanel
-SimExpPan.desc = \u0422\u0435\u043a\u0441\u0442, \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u044f\u0442\u044b\u043c\u0438 (*.csv)
SimExpPan.border.Vartoexport = \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435
SimExpPan.border.Stage = \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0443\u043f\u0435\u043d\u044c
SimExpPan.but.Selectall = \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435
diff --git a/core/resources/l10n/messages_tr.properties b/core/resources/l10n/messages_tr.properties
index 309e09e9e..52788be42 100644
--- a/core/resources/l10n/messages_tr.properties
+++ b/core/resources/l10n/messages_tr.properties
@@ -99,12 +99,12 @@ dlg.but.ok = Tamam
dlg.but.cancel = \u00c7\u0131k\u0131\u015f
dlg.but.close = Kapat
! General file type names
-filetypes.pdf = PDF files (*.pdf)
-BasicFrame.SimpleFileFilter1 = All rocket designs (*.ork; *.rkt)
-BasicFrame.SimpleFileFilter2 = OpenRocket designs (*.ork)
-BasicFrame.SimpleFileFilter3 = RockSim designs (*.rkt)
-BasicFrame.SimpleFileFilter4 = OpenRocket presets (*.orc)
-filetypes.images = Resim Dosyalar\u0131
+FileHelper.PDF_FILTER = PDF files (*.pdf)
+FileHelper.ALL_DESIGNS_FILTER = All rocket designs (*.ork; *.rkt)
+FileHelper.OPENROCKET_DESIGN_FILTER = OpenRocket designs (*.ork)
+FileHelper.ROCKSIM_DESIGN_FILTER = RockSim designs (*.rkt)
+FileHelper.OPEN_ROCKET_COMPONENT_FILTER = OpenRocket presets (*.orc)
+FileHelper.IMAGES = Resim Dosyalar\u0131
! Diyolog Hakk\u0131nda
diff --git a/core/resources/l10n/messages_uk_UA.properties b/core/resources/l10n/messages_uk_UA.properties
index ed4b301c9..f7a21cc54 100644
--- a/core/resources/l10n/messages_uk_UA.properties
+++ b/core/resources/l10n/messages_uk_UA.properties
@@ -93,12 +93,13 @@ dlg.but.cancel = Cancel
dlg.but.close = Close
! General file type names
-filetypes.pdf = PDF files (*.pdf)
-BasicFrame.SimpleFileFilter1 = All rocket designs (*.ork; *.rkt)
-BasicFrame.SimpleFileFilter2 = OpenRocket designs (*.ork)
-BasicFrame.SimpleFileFilter3 = RockSim designs (*.rkt)
-BasicFrame.SimpleFileFilter4 = OpenRocket presets (*.orc)
-filetypes.images = Image files
+FileHelper.PDF_FILTER = PDF files (*.pdf)
+FileHelper.ALL_DESIGNS_FILTER = All rocket designs (*.ork; *.rkt)
+FileHelper.OPENROCKET_DESIGN_FILTER = OpenRocket designs (*.ork)
+FileHelper.ROCKSIM_DESIGN_FILTER = RockSim designs (*.rkt)
+FileHelper.OPEN_ROCKET_COMPONENT_FILTER = OpenRocket presets (*.orc)
+FileHelper.IMAGES = Image files
+FileHelper.CSV_FILTER = Comma Separated Files (*.csv)
! About Dialog
@@ -469,7 +470,6 @@ RK4SimulationStepper.error.valuesTooLarge = Simulation values exceeded limits.
SimulationModifierTree.OptimizationParameters = Optimization Parameters
! SimulationExportPanel
-SimExpPan.desc = Comma Separated Files (*.csv)
SimExpPan.border.Vartoexport = Variables to export
SimExpPan.border.Stage = Stage to export
SimExpPan.but.Selectall = Select all
diff --git a/core/resources/l10n/messages_zh_CN.properties b/core/resources/l10n/messages_zh_CN.properties
index 26b7181a4..dde63f3e9 100644
--- a/core/resources/l10n/messages_zh_CN.properties
+++ b/core/resources/l10n/messages_zh_CN.properties
@@ -47,10 +47,11 @@ BasicEventSimulationEngine.error.earlyMotorBurnout = \u53D1\u52A8\u673A\u8D77\u9
BasicEventSimulationEngine.error.noIgnition = \u53D1\u52A8\u673A\u672A\u70B9\u706B
BasicEventSimulationEngine.error.noMotorsDefined = \u53D1\u52A8\u673A\u672A\u5B9A\u4E49
-BasicFrame.SimpleFileFilter1 = \u652F\u6301\u7684\u706B\u7BAD\u8BBE\u8BA1\u7A3F(*.ork; *.rkt)
-BasicFrame.SimpleFileFilter2 = OpenRocket\u8BBE\u8BA1\u7A3F(*.ork)
-BasicFrame.SimpleFileFilter3 = RockSim\u8BBE\u8BA1\u7A3F(*.rkt)
-BasicFrame.SimpleFileFilter4 = OpenRocket\u914D\u7F6E(*.orc)
+FileHelper.ALL_DESIGNS_FILTER = \u652F\u6301\u7684\u706B\u7BAD\u8BBE\u8BA1\u7A3F(*.ork; *.rkt)
+FileHelper.OPENROCKET_DESIGN_FILTER = OpenRocket\u8BBE\u8BA1\u7A3F(*.ork)
+FileHelper.ROCKSIM_DESIGN_FILTER = RockSim\u8BBE\u8BA1\u7A3F(*.rkt)
+FileHelper.OPEN_ROCKET_COMPONENT_FILTER = OpenRocket\u914D\u7F6E(*.orc)
+FileHelper.CSV_FILTER = CSV\u6570\u636E\u6587\u4EF6 (*.csv)
BasicFrame.StageName.Sustainer = \u4E3B\u53D1\u52A8\u673A
BasicFrame.WarningDialog.title = \u6253\u5F00\u6587\u4EF6\u65F6\u8B66\u544A
BasicFrame.WarningDialog.txt1 = \u6253\u5F00\u8BBE\u8BA1\u7A3F\u65F6\u9047\u5230\u4EE5\u4E0B\u95EE\u9898
@@ -1047,7 +1048,6 @@ SimExpPan.checkbox.ttip.Incflightevents = \u6CE8\u91CA\u884C\u7528\u4E8E\u63CF\
SimExpPan.checkbox.ttip.Includefielddesc = \u6CE8\u91CA\u884C\u7528\u4E8E\u63CF\u8FF0\u8F93\u51FA\u53D8\u91CF.
SimExpPan.checkbox.ttip.Includesimudesc = \u5728\u6587\u4EF6\u5934\u52A0\u4E0A\u6CE8\u91CA\u884C\u7528\u4E8E\u63CF\u8FF0\u4EFF\u771F\u5185\u5BB9.
! SimulationExportPanel
-SimExpPan.desc = CSV\u6570\u636E\u6587\u4EF6 (*.csv)
SimExpPan.lbl.Commentchar = \u6CE8\u91CA\u6807\u8BC6\u7B26:
SimExpPan.lbl.Fieldsepstr = \u6570\u636E\u5206\u9694\u5B57\u7B26\u4E32:
SimExpPan.lbl.longA1 = \u5B57\u7B26\u4E32\u7528\u4E8E\u5206\u9694\u8F93\u51FA\u6587\u4EF6\u4E2D\u7684\u6570\u636E\u57DF.
@@ -1497,9 +1497,9 @@ exdesigndlg.lbl.Examplesnotfound = \u8303\u4F8B\u672A\u627E\u5230
exdesigndlg.lbl.Openexampledesign = \u6253\u5F00\u8303\u4F8B\u8BBE\u8BA1\u7A3F
exdesigndlg.lbl.Selectexample = \u9009\u62E9\u8303\u4F8B\u8BBE\u8BA1\u7A3F:
-filetypes.images = \u56FE\u50CF\u6587\u4EF6
+FileHelper.IMAGES = \u56FE\u50CF\u6587\u4EF6
! General file type names
-filetypes.pdf = PDF \u6587\u4EF6 (*.pdf)
+FileHelper.PDF_FILTER = PDF \u6587\u4EF6 (*.pdf)
generalprefs.languages.default = \u7CFB\u7EDF\u9ED8\u8BA4
generalprefs.lbl.language = \u754C\u9762\u8BED\u8A00
diff --git a/swing/src/net/sf/openrocket/gui/components/SimulationExportPanel.java b/swing/src/net/sf/openrocket/gui/components/SimulationExportPanel.java
index b65159cf6..4d2c54bff 100644
--- a/swing/src/net/sf/openrocket/gui/components/SimulationExportPanel.java
+++ b/swing/src/net/sf/openrocket/gui/components/SimulationExportPanel.java
@@ -194,7 +194,7 @@ public class SimulationExportPanel extends JPanel {
private void doExport() {
JFileChooser chooser = new JFileChooser();
- chooser.setFileFilter(FileHelper.CSV_FILE_FILTER);
+ chooser.setFileFilter(FileHelper.CSV_FILTER);
chooser.setCurrentDirectory(((SwingPreferences) Application.getPreferences()).getDefaultDirectory());
if (chooser.showSaveDialog(this) != JFileChooser.APPROVE_OPTION)
@@ -204,7 +204,7 @@ public class SimulationExportPanel extends JPanel {
if (file == null)
return;
- file = FileHelper.ensureExtension(file, "csv");
+ file = FileHelper.forceExtension(file, "csv");
if (!FileHelper.confirmWrite(file, this)) {
return;
}
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/FreeformFinSetConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/FreeformFinSetConfig.java
index 2886ff7a7..3b7da656d 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/FreeformFinSetConfig.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/FreeformFinSetConfig.java
@@ -1,6 +1,5 @@
package net.sf.openrocket.gui.configdialog;
-import java.awt.Dimension;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
@@ -18,7 +17,6 @@ import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.EventObject;
-import java.util.List;
import javax.swing.JButton;
import javax.swing.JComboBox;
@@ -35,7 +33,6 @@ import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.table.AbstractTableModel;
-import net.sf.openrocket.util.MathUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -253,17 +250,22 @@ public class FreeformFinSetConfig extends FinSetConfig {
// panel.add(new JLabel("Coordinates:"), "aligny bottom, alignx 50%");
// panel.add(new JLabel(" View:"), "wrap, aligny bottom");
- JButton exportCsvButton = new SelectColorButton("Export CSV");
+ JButton exportCsvButton = new SelectColorButton(trans.get("FreeformFinSetConfig.lbl.exportCSV"));
exportCsvButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
log.info(Markers.USER_MARKER, "Export CSV free-form fin");
JFileChooser chooser = new JFileChooser();
- // Demonstrate "Save" dialog:
+ chooser.setFileFilter(FileHelper.CSV_FILTER);
+ chooser.setCurrentDirectory(((SwingPreferences) Application.getPreferences()).getDefaultDirectory());
if (JFileChooser.APPROVE_OPTION == chooser.showSaveDialog(FreeformFinSetConfig.this)){
File selectedFile= chooser.getSelectedFile();
+ selectedFile = FileHelper.forceExtension(selectedFile, "csv");
+ if (!FileHelper.confirmWrite(selectedFile, panel)) {
+ return;
+ }
FreeformFinSetConfig.writeCSVFile(table, selectedFile);
}
diff --git a/swing/src/net/sf/openrocket/gui/dialogs/PrintDialog.java b/swing/src/net/sf/openrocket/gui/dialogs/PrintDialog.java
index 4442af1cd..1e107363f 100644
--- a/swing/src/net/sf/openrocket/gui/dialogs/PrintDialog.java
+++ b/swing/src/net/sf/openrocket/gui/dialogs/PrintDialog.java
@@ -380,7 +380,7 @@ public class PrintDialog extends JDialog implements TreeSelectionListener {
File file = chooser.getSelectedFile();
if (returnVal == JFileChooser.APPROVE_OPTION && file != null) {
- file = FileHelper.ensureExtension(file, "pdf");
+ file = FileHelper.forceExtension(file, "pdf");
if (!FileHelper.confirmWrite(file, this)) {
return false;
}
diff --git a/swing/src/net/sf/openrocket/gui/dialogs/optimization/GeneralOptimizationDialog.java b/swing/src/net/sf/openrocket/gui/dialogs/optimization/GeneralOptimizationDialog.java
index 39cd6932f..5408cc53c 100644
--- a/swing/src/net/sf/openrocket/gui/dialogs/optimization/GeneralOptimizationDialog.java
+++ b/swing/src/net/sf/openrocket/gui/dialogs/optimization/GeneralOptimizationDialog.java
@@ -48,8 +48,6 @@ import javax.swing.table.TableColumnModel;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
-import net.sf.openrocket.optimization.rocketoptimization.modifiers.GenericComponentModifier;
-import net.sf.openrocket.rocketcomponent.FinSet;
import net.sf.openrocket.rocketcomponent.FlightConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -1112,7 +1110,7 @@ public class GeneralOptimizationDialog extends JDialog {
JFileChooser chooser = new JFileChooser();
- chooser.setFileFilter(FileHelper.CSV_FILE_FILTER);
+ chooser.setFileFilter(FileHelper.CSV_FILTER);
chooser.setCurrentDirectory(((SwingPreferences) Application.getPreferences()).getDefaultDirectory());
chooser.setAccessory(csvOptions);
@@ -1123,7 +1121,7 @@ public class GeneralOptimizationDialog extends JDialog {
if (file == null)
return;
- file = FileHelper.ensureExtension(file, "csv");
+ file = FileHelper.forceExtension(file, "csv");
if (!FileHelper.confirmWrite(file, this)) {
return;
}
diff --git a/swing/src/net/sf/openrocket/gui/simulation/SimulationExportPanel.java b/swing/src/net/sf/openrocket/gui/simulation/SimulationExportPanel.java
index fa60e0984..f6236b5aa 100644
--- a/swing/src/net/sf/openrocket/gui/simulation/SimulationExportPanel.java
+++ b/swing/src/net/sf/openrocket/gui/simulation/SimulationExportPanel.java
@@ -220,7 +220,7 @@ public class SimulationExportPanel extends JPanel {
public boolean doExport() {
JFileChooser chooser = new JFileChooser();
- chooser.setFileFilter(FileHelper.CSV_FILE_FILTER);
+ chooser.setFileFilter(FileHelper.CSV_FILTER);
chooser.setCurrentDirectory(((SwingPreferences) Application.getPreferences()).getDefaultDirectory());
if (chooser.showSaveDialog(this) != JFileChooser.APPROVE_OPTION)
@@ -230,7 +230,7 @@ public class SimulationExportPanel extends JPanel {
if (file == null)
return false;
- file = FileHelper.ensureExtension(file, "csv");
+ file = FileHelper.forceExtension(file, "csv");
if (!FileHelper.confirmWrite(file, this)) {
return false;
}
diff --git a/swing/src/net/sf/openrocket/gui/util/FileHelper.java b/swing/src/net/sf/openrocket/gui/util/FileHelper.java
index d43ceffec..c88b99a58 100644
--- a/swing/src/net/sf/openrocket/gui/util/FileHelper.java
+++ b/swing/src/net/sf/openrocket/gui/util/FileHelper.java
@@ -29,33 +29,32 @@ public final class FileHelper {
private static final Logger log = LoggerFactory.getLogger(FileHelper.class);
private static final Translator trans = Application.getTranslator();
-
- // TODO: HIGH: Rename translation keys
+
/** File filter for any rocket designs (*.ork, *.rkt) */
public static final FileFilter ALL_DESIGNS_FILTER =
- new SimpleFileFilter(trans.get("BasicFrame.SimpleFileFilter1"),
+ new SimpleFileFilter(trans.get("FileHelper.ALL_DESIGNS_FILTER"),
".ork", ".ork.gz", ".rkt", ".rkt.gz");
/** File filter for OpenRocket designs (*.ork) */
public static final FileFilter OPENROCKET_DESIGN_FILTER =
- new SimpleFileFilter(trans.get("BasicFrame.SimpleFileFilter2"), ".ork", ".ork.gz");
+ new SimpleFileFilter(trans.get("FileHelper.OPENROCKET_DESIGN_FILTER"), ".ork", ".ork.gz");
/** File filter for RockSim designs (*.rkt) */
public static final FileFilter ROCKSIM_DESIGN_FILTER =
- new SimpleFileFilter(trans.get("BasicFrame.SimpleFileFilter3"), ".rkt", ".rkt.gz");
+ new SimpleFileFilter(trans.get("FileHelper.ROCKSIM_DESIGN_FILTER"), ".rkt", ".rkt.gz");
/** File filter for OpenRocket components and presets (*.orc) */
public static final FileFilter OPEN_ROCKET_COMPONENT_FILTER =
- new SimpleFileFilter(trans.get("BasicFrame.SimpleFileFilter4"), ".orc", ".orc.gz");
+ new SimpleFileFilter(trans.get("FileHelper.OPEN_ROCKET_COMPONENT_FILTER"), ".orc", ".orc.gz");
/** File filter for PDF files (*.pdf) */
public static final FileFilter PDF_FILTER =
- new SimpleFileFilter(trans.get("filetypes.pdf"), ".pdf");
+ new SimpleFileFilter(trans.get("FileHelper.PDF_FILTER"), ".pdf");
/** File filter for CSV files (*.csv) */
- public static final FileFilter CSV_FILE_FILTER =
- new SimpleFileFilter(trans.get("SimExpPan.desc"), ".csv");
+ public static final FileFilter CSV_FILTER =
+ new SimpleFileFilter(trans.get("FileHelper.CSV_FILTER"), ".csv");
@@ -73,7 +72,7 @@ public final class FileHelper {
Arrays.sort(extensions);
StringBuilder sb = new StringBuilder();
- sb.append(trans.get("filetypes.images"));
+ sb.append(trans.get("FileHelper.IMAGES"));
sb.append(" (");
for (int i = 0; i < extensions.length; i++) {
sb.append("*.").append(extensions[i]);
@@ -120,7 +119,12 @@ public final class FileHelper {
if ( original == null ) {
return null;
}
- if (!original.getName().toLowerCase(Locale.ENGLISH).endsWith(extension.toLowerCase(Locale.ENGLISH))) {
+ int index = original.getName().lastIndexOf('.');
+ String original_extension = "";
+ if (index > 0) {
+ original_extension = original.getName().substring(index + 1);
+ }
+ if (!original_extension.toLowerCase(Locale.ENGLISH).equals(extension.toLowerCase(Locale.ENGLISH))) {
log.debug("File name does not contain extension, adding '" + extension + "'");
String name = original.getAbsolutePath();
if (extension.startsWith(".")) {
diff --git a/swing/src/net/sf/openrocket/utils/ComponentPresetEditor.java b/swing/src/net/sf/openrocket/utils/ComponentPresetEditor.java
index b0c1913c7..b2c771551 100644
--- a/swing/src/net/sf/openrocket/utils/ComponentPresetEditor.java
+++ b/swing/src/net/sf/openrocket/utils/ComponentPresetEditor.java
@@ -325,7 +325,7 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene
private boolean openComponentFile() {
final JFileChooser chooser = new JFileChooser();
chooser.addChoosableFileFilter(FileHelper.OPEN_ROCKET_COMPONENT_FILTER);
- chooser.addChoosableFileFilter(FileHelper.CSV_FILE_FILTER);
+ chooser.addChoosableFileFilter(FileHelper.CSV_FILTER);
chooser.setFileFilter(FileHelper.OPEN_ROCKET_COMPONENT_FILTER);
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
if (editContext.getLastDirectory() != null) {