diff --git a/src/main/java/com/platformio/ESP32PartitionToolStandalone.java b/src/main/java/com/platformio/ESP32PartitionToolStandalone.java index 530c0a2..a0ddd9e 100644 --- a/src/main/java/com/platformio/ESP32PartitionToolStandalone.java +++ b/src/main/java/com/platformio/ESP32PartitionToolStandalone.java @@ -43,8 +43,6 @@ of this software and associated documentation files (the "Software"), to deal import com.serifpersia.esp32partitiontool.UI; import com.serifpersia.esp32partitiontool.UIController; -//import javax.swing.ImageIcon; - // local implementation of rounded borders to overwrite global styles @SuppressWarnings("serial") final class CustomBorder extends AbstractBorder { diff --git a/src/main/java/com/serifpersia/esp32partitiontool/FSPanel.java b/src/main/java/com/serifpersia/esp32partitiontool/FSPanel.java index cf8c594..d98164b 100644 --- a/src/main/java/com/serifpersia/esp32partitiontool/FSPanel.java +++ b/src/main/java/com/serifpersia/esp32partitiontool/FSPanel.java @@ -49,7 +49,7 @@ public FSPanel() { public void updatePartitionFlashTypeLabel() { FSGenLabel.setText( getPartitionFlashTypes().getSelectedItem().toString() ); - FSUploadButton.setText( "Upload " + getPartitionFlashTypes().getSelectedItem().toString() ); + FSUploadButton.setText( l10n.getString("fsPanel.uploadButtonLabel") +" " + getPartitionFlashTypes().getSelectedItem().toString() ); } public JComboBox getPartitionFlashTypes() { @@ -91,10 +91,10 @@ public JPanel wrapButton( JButton button ) { public void initComponents() { consoleGBC = new GridBagConstraints(); FSInnerLayout = new GridLayout(0, 2); - FSGenLabel = new JLabel("SPIFFS"); - mergeBoxLabel = new JLabel("Merge"); - FSComboLabel = new JLabel("Filesystem:"); - blockSizeLabel = new JLabel("Block Size:"); + FSGenLabel = new JLabel(); + mergeBoxLabel = new JLabel(l10n.getString("fsPanel.mergeBoxLabel")); + FSComboLabel = new JLabel(l10n.getString("fsPanel.comboLabel")+":"); + blockSizeLabel = new JLabel(l10n.getString("fsPanel.blockSizeLabel")+":"); FSGenInnerPanel = new UI.JTransparentPanel( /*Color.MAGENTA*/ ); FSInnerPanel = new UI.JTransparentPanel(); FSGenPanel = new UI.JTransparentPanel(); @@ -105,10 +105,10 @@ public void initComponents() { mergeButtonsWrapper = new UI.JTransparentPanel(); FSTypesComboBox = new JComboBox<>(new String[] { "SPIFFS", "LittleFS", "FatFS" }); FSBlockSize = new JTextField("4096"); - FSUploadButton = new JButton("Upload SPIFFS"); - mergeBinButton = new JButton("Merge Binary"); - uploadMergedBinButton = new JButton("Merge Binary & Upload"); - cleanLogsButton = new UI.JButtonIcon("Clear logs", "/clear.png"); + FSUploadButton = new JButton(l10n.getString("fsPanel.uploadButtonLabel")); + mergeBinButton = new JButton(l10n.getString("fsPanel.mergeBinButtonLabel")); + uploadMergedBinButton = new JButton(l10n.getString("fsPanel.uploadMergedBinButtonLabel")); + cleanLogsButton = new UI.JButtonIcon(l10n.getString("fsPanel.cleanLogsButtonLabel"), "/clear.png"); consoleLogPanel = new JPanel(); consoleScrollPanel = new JScrollPane(consoleLogPanel); progressBar = new JProgressBar(0, 100); diff --git a/src/main/java/com/serifpersia/esp32partitiontool/FileManager.java b/src/main/java/com/serifpersia/esp32partitiontool/FileManager.java index c225f0b..3c215d7 100644 --- a/src/main/java/com/serifpersia/esp32partitiontool/FileManager.java +++ b/src/main/java/com/serifpersia/esp32partitiontool/FileManager.java @@ -100,7 +100,7 @@ public void importCSV(String fileName) { String directory; if (fileName == null) { // show a dialog - FileDialog filedialog = new FileDialog(ui.getFrame(), "Select CSV file to import", FileDialog.LOAD); + FileDialog filedialog = new FileDialog(ui.getFrame(), l10n.getString("importCsv.dialogTitle"), FileDialog.LOAD); FilenameFilter csvFilter = new FilenameFilter() { @Override public boolean accept(File dir, String name) { @@ -303,7 +303,7 @@ public boolean accept(File dir, String name) { csvName = "partitions.csv"; } - FileDialog filedialog = new FileDialog(ui.getFrame(), "Export as CSV", FileDialog.SAVE); + FileDialog filedialog = new FileDialog(ui.getFrame(), l10n.getString("exportCsv.dialogTitle"), FileDialog.SAVE); filedialog.setDirectory(sketchDir); filedialog.setFile(csvName); filedialog.setFilenameFilter(csvFilter); diff --git a/src/main/java/com/serifpersia/esp32partitiontool/HelpPanel.java b/src/main/java/com/serifpersia/esp32partitiontool/HelpPanel.java index 9658d0f..bca4ca1 100644 --- a/src/main/java/com/serifpersia/esp32partitiontool/HelpPanel.java +++ b/src/main/java/com/serifpersia/esp32partitiontool/HelpPanel.java @@ -15,12 +15,14 @@ public class HelpPanel extends JPanel { private ImageIcon infoIcon; private int helpTipIndex = 0; - private String[] helpTips = { "The default export path for partitions.csv is the sketch directory.", - "If no partitions.csv file is found is the sketch directory, then the partition selected under Tools > Partition schemes will be used.", - "Partitions like nvs or any other small partitions before the app partition need their value to be a multiple of 4.", - "Partitions before the first app partition should have a total of 28 kB so the offset for the first app partition will always be correct at 0x10000 offset. Any other configuration will cause the ESP32 board to not function properly.", - "The app partition needs to be at 0x10000, and following partitions have to be a multiple of 64.", - "The app partition needs to be a minimum of 1024 kB in size." }; + private String[] helpTips = { + l10n.getString("helpPanel.tip1"), + l10n.getString("helpPanel.tip2"), + l10n.getString("helpPanel.tip3"), + l10n.getString("helpPanel.tip4"), + l10n.getString("helpPanel.tip5"), + l10n.getString("helpPanel.tip6") + }; public HelpPanel() { createPanel(); @@ -85,7 +87,7 @@ private void creatHelpPanel() { } private void createNextButton() { - nextButton = new JButton(" Next tip >> "); + nextButton = new JButton(" " + l10n.getString("helpPanel.nextTip") + " >> "); nextButton.setAlignmentX(JComponent.CENTER_ALIGNMENT); nextButton.addActionListener(new ActionListener() { @Override diff --git a/src/main/java/com/serifpersia/esp32partitiontool/UI.java b/src/main/java/com/serifpersia/esp32partitiontool/UI.java index 2286130..479726d 100644 --- a/src/main/java/com/serifpersia/esp32partitiontool/UI.java +++ b/src/main/java/com/serifpersia/esp32partitiontool/UI.java @@ -75,6 +75,7 @@ public void setFrameTitleNeedsSaving(boolean needs_saving) { } } + private l10n lang = new l10n(); private UIController controller; public AppSettings settings; @@ -136,6 +137,7 @@ private Font loadFont(String fontBaseName, int defaultSize, int fallbackType) { } public UI(JFrame frame, String title) { + // Show tool tips immediately ToolTipManager.sharedInstance().setInitialDelay(0); @@ -284,7 +286,15 @@ public JPanel getTitleCSVRow() { JPanel partitionTitlePanel = new JTransparentPanel(); partitionTitlePanel.setLayout(new BorderLayout()); - String labels[] = { "Enable", "Name", "Type", "SubType", "Size(kB)", "Size(hex)", "Offset(hex)" }; + String labels[] = { + l10n.getString("columnTitle.enable"), + l10n.getString("columnTitle.name"), + l10n.getString("columnTitle.type"), + l10n.getString("columnTitle.subtype"), + l10n.getString("columnTitle.sizekb"), + l10n.getString("columnTitle.sizehex"), + l10n.getString("columnTitle.offset") + }; JLabel enableLabel = new JLabel(labels[0]); enableLabel.setFont( condensedFont.deriveFont(Font.BOLD, 13)); @@ -322,7 +332,7 @@ private void createPanels() { csvGenPanel.setLayout(new BorderLayout(0, 0)); csvGenPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 0)); - csvGenLabel = new JLabel("Partitions"); + csvGenLabel = new JLabel(l10n.getString("csvGenLabel.defaultLabel")); csvGenLabel.setOpaque(false); csvGenLabel.setFont(defaultFont.deriveFont(Font.PLAIN, 20)); csvGenLabel.setHorizontalAlignment(SwingConstants.CENTER); @@ -363,20 +373,20 @@ private void createPanels() { actionButtonsPanel.setAlignmentY(Component.CENTER_ALIGNMENT); actionButtonsPanel.setAlignmentX(Component.CENTER_ALIGNMENT); actionButtonsPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); - importCsvBtn = new JButtonIcon("Import CSV", "/import.png"); + importCsvBtn = new JButtonIcon(l10n.getString("importCsvButton.label"), "/import.png"); actionButtonsPanel.add(importCsvBtn); - saveCsvBtn = new JButtonIcon("Save CSV", "/save.png"); + saveCsvBtn = new JButtonIcon(l10n.getString("saveCsvButton.label"), "/save.png"); actionButtonsPanel.add(saveCsvBtn); - exporCsvBtn = new JButtonIcon("Export CSV", "/export2.png"); + exporCsvBtn = new JButtonIcon(l10n.getString("exportCsvButton.label"), "/export2.png"); actionButtonsPanel.add(exporCsvBtn); - helpButton = new JButtonIcon("Help", "/help.png"); + helpButton = new JButtonIcon(l10n.getString("helpButton.label"), "/help.png"); actionButtonsPanel.add(helpButton); - aboutBtn = new JButtonIcon("About", "/about.png"); + aboutBtn = new JButtonIcon(l10n.getString("aboutButton.label"), "/about.png"); actionButtonsPanel.add(aboutBtn); csvBottomPanel.add(actionButtonsPanel, BorderLayout.WEST); flashSizeFieldSetPanel = new JTransparentPanel(); - flashSizeLabel = new JLabel("Flash Size: MB"); + flashSizeLabel = new JLabel(l10n.getString("flashSize.label")+" (MB):"); flashSizeLabel.setFont(defaultFont.deriveFont(Font.PLAIN, 13)); flashSizeLabel.setHorizontalAlignment(SwingConstants.CENTER); flashSizeFieldSetPanel.add(flashSizeLabel); @@ -386,7 +396,7 @@ private void createPanels() { partitionsUtilButtonsPanel.add(flashSizeFieldSetPanel, BorderLayout.CENTER); // free space box - partitionFlashFreeSpace = new JLabel("Free Space: not set"); + partitionFlashFreeSpace = new JLabel(l10n.getString("flash.freeSpace") + ": ..."); partitionFlashFreeSpace.setFont(defaultFont.deriveFont(Font.PLAIN, 13)); partitionsUtilButtonsPanel.add(partitionFlashFreeSpace, BorderLayout.EAST); @@ -431,7 +441,7 @@ public void calculateSizeHex() { } // Update the free space label - getFlashFreeLabel().setText("Free Space: " + FlashSizeBytes / 1024 + " KB"); + getFlashFreeLabel().setText(l10n.getString("flash.freeSpace") + ": " + FlashSizeBytes / 1024 + " KB"); getFlashFreeLabel().setForeground(FlashSizeBytes >= 0 ? Color.BLACK : Color.RED); // Convert partition sizes to hexadecimal strings @@ -614,7 +624,7 @@ public void updatePartitionFlashVisual() { unusedSpacePanel.setBackground(new Color(130, 135, 145)); gbc.weightx = (double) remainingSpace / (FLASH_SIZE - RESERVED_SPACE); // Set the text color to white - JLabel label = new JLabel("Free Space"); + JLabel label = new JLabel(l10n.getString("flash.freeSpace")); label.setForeground(Color.BLACK); label.setFont(monotypeBoldFont.deriveFont(Font.PLAIN, 12)); unusedSpacePanel.add(label); @@ -814,7 +824,7 @@ public String getSpiffsOffset() { String partitionOffset = getPartitionOffsets(spiffsIndex).getText(); result = "0x" + partitionOffset; } else { - result = "SPIFFS partition not found."; + result = l10n.getString("spiffs.partitionNotFound"); } return result; } diff --git a/src/main/java/com/serifpersia/esp32partitiontool/UIController.java b/src/main/java/com/serifpersia/esp32partitiontool/UIController.java index 1315bdc..63e876a 100644 --- a/src/main/java/com/serifpersia/esp32partitiontool/UIController.java +++ b/src/main/java/com/serifpersia/esp32partitiontool/UIController.java @@ -148,13 +148,13 @@ private void handleComboBoxAction(JComboBox comboBox) { private void handleAboutButton() { // modal dialog with icon ImageIcon icon = new ImageIcon(getClass().getResource("/logo.png")); - JOptionPane.showConfirmDialog(null, ui.aboutPanel, "About ESP32PartitionTool", JOptionPane.DEFAULT_OPTION, + JOptionPane.showConfirmDialog(null, ui.aboutPanel, l10n.getString("aboutPanel.title"), JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, icon); } public void handleHelpButton() { // modal dialog with minimal decoration - final JDialog dialog = new JDialog((Frame) null, "Help Tips", true); + final JDialog dialog = new JDialog((Frame) null, l10n.getString("helpPanel.title"), true); dialog.add(ui.helpPanel); dialog.pack(); dialog.setLocationRelativeTo(null); diff --git a/src/main/java/com/serifpersia/esp32partitiontool/l10n.java b/src/main/java/com/serifpersia/esp32partitiontool/l10n.java new file mode 100644 index 0000000..b276dff --- /dev/null +++ b/src/main/java/com/serifpersia/esp32partitiontool/l10n.java @@ -0,0 +1,211 @@ +package com.serifpersia.esp32partitiontool; + +//import java.util.ResourceBundle; +import java.util.*; +import java.util.Map.Entry; +import java.net.URL; +import java.net.URLDecoder; +import java.net.URISyntaxException; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; + + +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Paths; + + +@SuppressWarnings("serial") + +public class l10n { + + public static Map resourceBundles = new HashMap(); + public static ResourceBundle defaultBundle; + public static ResourceBundle currentBundle; + + private static final String l10nPath = "l10n/"; // subfolder name in resources dir, needs trailing slash + private static final String filterExtension = "properties"; + private static final String filterFileName = "label"; + private static final String defaultLang = "en"; // iso-639-2 + private static String currentLang; // iso-639-2 + + public static ArrayList languages = new ArrayList(); + + public l10n() { + resourceBundles.clear(); + l10n.loadBundles(); + l10n.loadBundle( Locale.getDefault().getLanguage() ); + System.out.println("Selected l10n: " + Locale.getDefault().getLanguage() ); + } + + + public static String getString( String key ) { + if( currentBundle == null ) { + return key; + } + String label = currentBundle.getString( key ); + + if( currentLang != defaultLang && label == null ) { + label = defaultBundle.getString( key ); + } + + if( label == null ) { + return key; + } + + try { + return new String(label.getBytes("ISO-8859-1"), "UTF-8"); + } catch (UnsupportedEncodingException e) { + return label; // unencoded + } + } + + + + public static boolean loadBundle( String lang ) { + String l10nFileName = lang.equals(defaultLang) ? "labels" : "labels_"+lang; + String l10nRelFilePath = l10nPath + l10nFileName + "." + filterExtension; + + //System.out.println("Will attempt to load " + lang + " bundle at: " + l10nRelFilePath ); + + try { + InputStream is = l10n.class.getClassLoader().getResourceAsStream(l10nRelFilePath); + if( is == null ) { + System.out.println("l10n file not found: " + l10nRelFilePath); + return false; + } + currentBundle = new PropertyResourceBundle(is); + is.close(); + return true; + } catch( IOException e ) { + System.out.println("Unable to access l10n resource " + l10nRelFilePath ); + return false; + } + } + + + public static boolean loadBundles() { + resourceBundles.clear(); + + String[] languageFiles; + + try { + languageFiles = getL10nResources(); + } catch(Exception e) { + System.out.println( "failed to load l10n resources" ); + return false; + } + + if( !loadBundle(defaultLang) ) { + System.out.println( "Missing default bundle" ); + return false; + } + + defaultBundle = currentBundle; + resourceBundles.put(defaultLang, defaultBundle); + + for(String fileName : languageFiles) { + String[] fileNameParts = fileName.split("\\."); + if( fileNameParts.length <= 1 ) continue; + String[] l10nParts = fileNameParts[0].split("_"); + String lang = defaultLang; + if( l10nParts.length == 2 ) lang = l10nParts[1]; + + //System.out.printf("added lang: %s\n", lang); + languages.add(lang); + resourceBundles.put(lang, currentBundle); + } + + if( ! setLang(defaultLang) ) { + System.out.println("failed to set default lang"); + return false; + } + + return languages.size()>0; + } + + + + public static boolean setLang( String lang ) { + ResourceBundle langBundle = resourceBundles.get(lang); + if( langBundle !=null ) { + currentBundle = langBundle; + currentLang = lang; + return true; + } + + if( !loadBundle(lang) ) { + if (lang.equals(defaultLang) || !loadBundle(defaultLang)) { + System.out.println("Default lang not found"); + return false; + } + currentLang = defaultLang; + //System.out.println("Default lang selected"); + } else { + //System.out.println("Lang selected: " + lang); + currentLang = lang; + } + return true; + } + + + private static String[] getL10nResources() throws URISyntaxException, IOException { + + FilenameFilter textFilefilter = new FilenameFilter(){ + public boolean accept(File dir, String name) { + String lowercaseName = name.toLowerCase(); + if (lowercaseName.endsWith(filterExtension)) { + return true; + } else { + return false; + } + } + }; + + URL dirURL = l10n.class.getClassLoader().getResource(l10nPath); + if (dirURL != null && dirURL.getProtocol().equals("file")) { + return new File(dirURL.toURI()).list(textFilefilter); + } + + + String me = l10n.class.getName().replace(".", "/")+".class"; + dirURL = l10n.class.getClassLoader().getResource(me); + + if (dirURL.getProtocol().equals("jar")) { + String jarPath = dirURL.getPath().substring(5, dirURL.getPath().indexOf("!")); //strip out only the JAR file + JarFile jar = new JarFile(URLDecoder.decode(jarPath, "UTF-8")); + Enumeration entries = jar.entries(); //gives ALL entries in jar + Set result = new HashSet(); //avoid duplicates in case it is a subdirectory + while(entries.hasMoreElements()) { + String name = entries.nextElement().getName(); + if (name.startsWith(l10nPath) && name.endsWith(filterExtension)) { //filter according to the path and extension + System.out.println(name); + String entry = name.substring(l10nPath.length()); + int checkSubdir = entry.indexOf("/"); + if (checkSubdir >= 0) { + // if it is a subdirectory, we just return the directory name + entry = entry.substring(0, checkSubdir); + } + if( entry.startsWith(filterFileName) ) { + result.add(entry); + }else { + //System.out.println("ignoring: " + entry ); + } + } else { + //System.out.println("ignoring: " + name ); + } + } + return result.toArray(new String[result.size()]); + } else { + //System.out.println("dirURL protocol is not jar: " + dirURL ); + } + + throw new UnsupportedOperationException("Cannot list files for URL "+dirURL); + } + + + + +} + + diff --git a/src/main/resources/l10n/labels.properties b/src/main/resources/l10n/labels.properties new file mode 100644 index 0000000..aa84a12 --- /dev/null +++ b/src/main/resources/l10n/labels.properties @@ -0,0 +1,48 @@ +lang=en +lang.name=English + +aboutPanel.title=About ESP32PartitionTool + +helpPanel.title=Help Tips +helpPanel.nextTip=Next tip +helpPanel.tip1=The default export path for partitions.csv is the sketch directory. +helpPanel.tip2=If no partitions.csv file is found is the sketch directory, then the partition selected under Tools > Partition schemes will be used. +helpPanel.tip3=Partitions like nvs or any other small partitions before the app partition need their value to be a multiple of 4. +helpPanel.tip4=Partitions before the first app partition should have a total of 28 kB so the offset for the first app partition will always be correct at 0x10000 offset. Any other configuration will cause the ESP32 board to not function properly. +helpPanel.tip5=The app partition needs to be at 0x10000, and following partitions have to be a multiple of 64. +helpPanel.tip6=The app partition needs to be a minimum of 1024 kB in size. + +fsPanel.uploadButtonLabel=Upload +fsPanel.mergeBoxLabel=Merge +fsPanel.comboLabel=Filesystem +fsPanel.blockSizeLabel=Block Size +fsPanel.uploadButtonLabel=Upload SPIFFS +fsPanel.mergeBinButtonLabel=Merge Binary +fsPanel.uploadMergedBinButtonLabel=Merge Binary & Upload +fsPanel.cleanLogsButtonLabel=Clear logs + +spiffs.partitionNotFound=SPIFFS partition not found. + +flash.freeSpace=Free Space +flashSize.label=Flash Size + +helpButton.label=Help +aboutButton.label=About + +importCsvButton.label=Import CSV +importCsv.dialogTitle=Select CSV file to import + +exportCsvButton.label=Export CSV +exportCsv.dialogTitle=Export as CSV + +saveCsvButton.label=Save CSV + +csvGenLabel.defaultLabel=Partitions + +columnTitle.enable=Enable +columnTitle.name=Name +columnTitle.type=Type +columnTitle.subtype=SubType +columnTitle.sizekb=Size(kB) +columnTitle.sizehex=Size(hex) +columnTitle.offset=Offset(hex) diff --git a/src/main/resources/l10n/labels_ar.properties b/src/main/resources/l10n/labels_ar.properties new file mode 100644 index 0000000..ca60146 --- /dev/null +++ b/src/main/resources/l10n/labels_ar.properties @@ -0,0 +1,48 @@ +lang=ar +lang.name=العربية + +aboutPanel.title=عن ESP32PartitionTool + +helpPanel.title=نصائح ومساعدة +helpPanel.nextTip=النصيحة التالية +helpPanel.tip1=المسار الافتراضي لتصدير partitions.csv هو دليل الرسم. +helpPanel.tip2=إذا لم يتم العثور على ملف partitions.csv في دليل الرسم، سيتم استخدام القسم المحدد تحت الأدوات > مخططات القسم. +helpPanel.tip3=يجب أن تكون الأقسام مثل nvs أو أي أقسام صغيرة أخرى قبل قسم التطبيق قيمتها مضاعفًا للرقم 4. +helpPanel.tip4=يجب أن تكون الأقسام قبل الجزء الأول من التطبيق بمجموع 28 كيلوبايت حتى يكون الإزاحة للجزء الأول من التطبيق دائمًا صحيحة في الإزاحة 0x10000. أي تكوين آخر سيؤدي إلى عدم عمل لوحة ESP32 بشكل صحيح. +helpPanel.tip5=يجب أن يكون قسم التطبيق في موضع 0x10000، ويجب أن تكون الأقسام التالية مضاعفة للرقم 64. +helpPanel.tip6=يجب أن يكون قسم التطبيق بحد أدنى 1024 كيلوبايت في الحجم. + +fsPanel.uploadButtonLabel=تحميل +fsPanel.mergeBoxLabel=دمج +fsPanel.comboLabel=نظام الملفات +fsPanel.blockSizeLabel=حجم الكتلة +fsPanel.uploadButtonLabel=تحميل SPIFFS +fsPanel.mergeBinButtonLabel=دمج الثنائي +fsPanel.uploadMergedBinButtonLabel=دمج الثنائي وتحميل +fsPanel.cleanLogsButtonLabel=مسح السجلات + +spiffs.partitionNotFound=القسم SPIFFS غير موجود. + +flash.freeSpace=المساحة الفارغة +flashSize.label=حجم الفلاش + +helpButton.label=مساعدة +aboutButton.label=حول + +importCsvButton.label=استيراد CSV +importCsv.dialogTitle=حدد ملف CSV للاستيراد + +exportCsvButton.label=تصدير CSV +exportCsv.dialogTitle=تصدير كملف CSV + +saveCsvButton.label=حفظ CSV + +csvGenLabel.defaultLabel=الأقسام + +columnTitle.enable=تمكين +columnTitle.name=الاسم +columnTitle.type=النوع +columnTitle.subtype=النوع الفرعي +columnTitle.sizekb=الحجم (كيلوبايت) +columnTitle.sizehex=الحجم (16 تكس) +columnTitle.offset=الإزاحة (16 تكس) diff --git a/src/main/resources/l10n/labels_de.properties b/src/main/resources/l10n/labels_de.properties new file mode 100644 index 0000000..f8927c6 --- /dev/null +++ b/src/main/resources/l10n/labels_de.properties @@ -0,0 +1,48 @@ +lang=de +lang.name=Deutsch + +aboutPanel.title=Über ESP32PartitionTool + +helpPanel.title=Hilfe-Tipps +helpPanel.nextTip=Nächster Tipp +helpPanel.tip1=Der Standardspeicherort der Exportdatei partitions.csv ist der Sketch-Ordner. +helpPanel.tip2=Falls keine partitions.csv-Datei im Sketch-Ordner gefunden wurde, wird die unter Werkzeuge > Partitionsschema gewählte Partition verwendet. +helpPanel.tip3=Partitionen wie nvs oder andere kleine Partitionen vor der App-Partition müssen einen Wert aufweisen, der ein Vielfaches von 4 ist. +helpPanel.tip4=Partitionen vor der ersten App-Partition sollten insgesamt 28 kB groß sein, sodass der Offset für die erste App-Partition immer korrekt bei 0x10000 liegt. Jede andere Konfiguration führt dazu, dass das ESP32-Modul nicht richtig funktioniert. +helpPanel.tip5=Die App-Partition muss bei 0x10000 liegen, und die nachfolgenden Partitionen müssen ein Vielfaches von 64 sein. +helpPanel.tip6=Die Größe der App-Partition muss mindestens 1024 kB betragen. + +fsPanel.uploadButtonLabel=Hochladen +fsPanel.mergeBoxLabel=Zusammenführen +fsPanel.comboLabel=Dateisystem +fsPanel.blockSizeLabel=Blockgröße +fsPanel.uploadButtonLabel=SPIFFS hochladen +fsPanel.mergeBinButtonLabel=Binärdatei zusammenführen +fsPanel.uploadMergedBinButtonLabel=Binärdatei zusammenführen & hochladen +fsPanel.cleanLogsButtonLabel=Logs löschen + +spiffs.partitionNotFound=SPIFFS-Partition nicht gefunden. + +flash.freeSpace=Freier Speicherplatz +flashSize.label=Flash-Größe + +helpButton.label=Hilfe +aboutButton.label=Info + +importCsvButton.label=CSV importieren +importCsv.dialogTitle=Wählen Sie die zu importierende CSV-Datei + +exportCsvButton.label=CSV exportieren +exportCsv.dialogTitle=Als CSV exportieren + +saveCsvButton.label=CSV speichern + +csvGenLabel.defaultLabel=Partitionen + +columnTitle.enable=Aktivieren +columnTitle.name=Name +columnTitle.type=Typ +columnTitle.subtype=Untertyp +columnTitle.sizekb=Größe (kB) +columnTitle.sizehex=Größe (hex) +columnTitle.offset=Offset (hex) diff --git a/src/main/resources/l10n/labels_es.properties b/src/main/resources/l10n/labels_es.properties new file mode 100644 index 0000000..a277f1e --- /dev/null +++ b/src/main/resources/l10n/labels_es.properties @@ -0,0 +1,48 @@ +lang=es +lang.name=Español + +aboutPanel.title=Acerca de ESP32PartitionTool + +helpPanel.title=Ayuda y consejos +helpPanel.nextTip=Siguiente consejo +helpPanel.tip1=La ruta de exportación predeterminada para partitions.csv es el directorio del esquema. +helpPanel.tip2=Si no se encuentra el archivo partitions.csv en el directorio del esquema, se utilizará la partición seleccionada en Herramientas > Esquemas de partición. +helpPanel.tip3=Las particiones como nvs u otras particiones pequeñas antes de la partición de la aplicación deben tener un valor que sea múltiplo de 4. +helpPanel.tip4=Las particiones antes de la primera partición de la aplicación deben tener un total de 28 kB para que el desplazamiento para la primera partición de la aplicación siempre sea correcto en el desplazamiento de 0x10000. Cualquier otra configuración hará que la placa ESP32 no funcione correctamente. +helpPanel.tip5=La partición de la aplicación debe estar en 0x10000, y las particiones siguientes deben ser múltiplos de 64. +helpPanel.tip6=La partición de la aplicación debe tener como mínimo 1024 kB de tamaño. + +fsPanel.uploadButtonLabel=Subir +fsPanel.mergeBoxLabel=Combinar +fsPanel.comboLabel=Sistema de archivos +fsPanel.blockSizeLabel=Tamaño de bloque +fsPanel.uploadButtonLabel=Subir SPIFFS +fsPanel.mergeBinButtonLabel=Combinar binario +fsPanel.uploadMergedBinButtonLabel=Combinar binario y subir +fsPanel.cleanLogsButtonLabel=Limpiar registros + +spiffs.partitionNotFound=Partición SPIFFS no encontrada. + +flash.freeSpace=Espacio libre +flashSize.label=Tamaño de Flash + +helpButton.label=Ayuda +aboutButton.label=Acerca de + +importCsvButton.label=Importar CSV +importCsv.dialogTitle=Seleccionar archivo CSV para importar + +exportCsvButton.label=Exportar CSV +exportCsv.dialogTitle=Exportar como CSV + +saveCsvButton.label=Guardar CSV + +csvGenLabel.defaultLabel=Particiones + +columnTitle.enable=Habilitar +columnTitle.name=Nombre +columnTitle.type=Tipo +columnTitle.subtype=Subtipo +columnTitle.sizekb=Tamaño (kB) +columnTitle.sizehex=Tamaño (hex) +columnTitle.offset=Desplazamiento (hex) diff --git a/src/main/resources/l10n/labels_fr.properties b/src/main/resources/l10n/labels_fr.properties new file mode 100644 index 0000000..be3b104 --- /dev/null +++ b/src/main/resources/l10n/labels_fr.properties @@ -0,0 +1,48 @@ +lang=fr +lang.name=Français + +aboutPanel.title=À propos de ESP32PartitionTool + +helpPanel.title=Trucs & astuces +helpPanel.nextTip=Suivant +helpPanel.tip1=Le chemin d'export par défaut pour partitions.csv est celui du croquis. +helpPanel.tip2=Si aucun fichier partitions.csv n'est trouvé dans le dossier du croquis, c'est la partition sélectionnée dans Outils > Partition Scheme qui sera utilisée. +helpPanel.tip3=Certains types de partitions tels que NVS placés avant la partition app doivent avoir une valeur multiple de 4. +helpPanel.tip4=Le total de toutes les partitions placées avant la partition app (ex: NVS+otadata) doit toujours être égal à 28KB afin que l'offset de la première partition de type application soit toujours 0x10000. Toute autre configuration provoquera un dysfonctionnement de l'ESP32. +helpPanel.tip5=La première partition de type application doit être à l'offset 0x10000, et les partitions suivantes doivent avoir une valeur qui est un multiple de 64. +helpPanel.tip6=La taille minimale d'une partition est de 1024KB. + +fsPanel.uploadButtonLabel=Téléverser +fsPanel.mergeBoxLabel=Fusionner +fsPanel.comboLabel=Système de fichiers +fsPanel.blockSizeLabel=Taille des blocs +fsPanel.mergeBinButtonLabel=Fusionner Binaire +fsPanel.uploadMergedBinButtonLabel=Fusionner Binaire & Téléverser +fsPanel.cleanLogsButtonLabel=Effacer les logs + +spiffs.partitionNotFound=Partition SPIFFS non trouvée. + +flash.freeSpace=Espace libre +flashSize.label=Taille Flash + +helpButton.label=Aide +aboutButton.label=À propos + +importCsvButton.label=Importer CSV +importCsv.dialogTitle=Sélectionner le fichier CSV à importer + +exportCsvButton.label=Exporter CSV +exportCsv.dialogTitle=Exporter en tant que CSV + +saveCsvButton.label=Enregistrer CSV + +csvGenLabel.defaultLabel=Partitions + +columnTitle.enable=Actif +columnTitle.name=Nom +columnTitle.type=Type +columnTitle.subtype=Catégorie +columnTitle.sizekb=Taille(Kb) +columnTitle.sizehex=Taille(hex) +columnTitle.offset=Offset(hex) + diff --git a/src/main/resources/l10n/labels_hr.properties b/src/main/resources/l10n/labels_hr.properties new file mode 100644 index 0000000..59351a0 --- /dev/null +++ b/src/main/resources/l10n/labels_hr.properties @@ -0,0 +1,48 @@ +lang=hr +lang.name=Hrvatski + +aboutPanel.title=O ESP32PartitionToolu + +helpPanel.title=Korisni savjeti +helpPanel.nextTip=Sljedeći savjet +helpPanel.tip1=Zadani put za izvoz datoteke partitions.csv je direktorij skice. +helpPanel.tip2=Ako datoteka partitions.csv nije pronađena u direktoriju skice, bit će korištena odabrana particija pod Alati > Sheme particija. +helpPanel.tip3=Particije poput nvs ili bilo koje druge male particije prije aplikacijske particije moraju imati vrijednost koja je višekratnik broja 4. +helpPanel.tip4=Particije prije prve aplikacijske particije trebaju imati ukupno 28 kB kako bi se offset za prvu aplikacijsku particiju uvijek ispravno postavio na 0x10000 offset. Svaka druga konfiguracija će rezultirati nepravilnim radom ESP32 ploče. +helpPanel.tip5=Aplikacijska particija mora biti na 0x10000, a sljedeće particije moraju biti višekratnik broja 64. +helpPanel.tip6=Aplikacijska particija mora imati minimalnu veličinu od 1024 kB. + +fsPanel.uploadButtonLabel=Učitaj +fsPanel.mergeBoxLabel=Spoji +fsPanel.comboLabel=Datotečni sustav +fsPanel.blockSizeLabel=Veličina bloka +fsPanel.uploadButtonLabel=Učitaj SPIFFS +fsPanel.mergeBinButtonLabel=Spoji Binarno +fsPanel.uploadMergedBinButtonLabel=Spoji Binarno & Učitaj +fsPanel.cleanLogsButtonLabel=Očisti zapise + +spiffs.partitionNotFound=SPIFFS particija nije pronađena. + +flash.freeSpace=Slobodni prostor +flashSize.label=Veličina Flash memorije + +helpButton.label=Pomoć +aboutButton.label=O programu + +importCsvButton.label=Uvezi CSV +importCsv.dialogTitle=Odaberite CSV datoteku za uvoz + +exportCsvButton.label=Izvezi CSV +exportCsv.dialogTitle=Izvezi kao CSV + +saveCsvButton.label=Spremi CSV + +csvGenLabel.defaultLabel=Particije + +columnTitle.enable=Omogući +columnTitle.name=Ime +columnTitle.type=Tip +columnTitle.subtype=Podtip +columnTitle.sizekb=Veličina (kB) +columnTitle.sizehex=Veličina (heksadecimalno) +columnTitle.offset=Offset (heksadecimalno) diff --git a/src/main/resources/l10n/labels_hu.properties b/src/main/resources/l10n/labels_hu.properties new file mode 100644 index 0000000..ced33a3 --- /dev/null +++ b/src/main/resources/l10n/labels_hu.properties @@ -0,0 +1,48 @@ +lang=hu +lang.name=Magyar + +aboutPanel.title=Az ESP32PartitionTool névjegye + +helpPanel.title=Segítség és tippek +helpPanel.nextTip=Következő tipp +helpPanel.tip1=A partíciók.csv fájl alapértelmezett exportálási útvonala a szkiccmappában található. +helpPanel.tip2=Ha a partíciók.csv fájl nem található a szkiccmappában, akkor a Eszközök > Partícióséma alatt kiválasztott partíció lesz használatban. +helpPanel.tip3=A nvs vagy más kis partíciók az alkalmazás partíciója előttnek kell lenniük, és értéküknek 4 többszörösének kell lenniük. +helpPanel.tip4=Az első alkalmazás partíciója előtti partícióknak 28 kB-nek kell lenniük, hogy az első alkalmazás partíció offsetje mindig helyes legyen a 0x10000 offseten. Bármilyen más konfiguráció miatt az ESP32 lapka nem fog megfelelően működni. +helpPanel.tip5=Az alkalmazás partíciója 0x10000 helyen kell, hogy legyen, és a következő partícióknak 64 többszöröseinek kell lenniük. +helpPanel.tip6=Az alkalmazás partíciója legalább 1024 kB méretű kell legyen. + +fsPanel.uploadButtonLabel=Feltöltés +fsPanel.mergeBoxLabel=Összevonás +fsPanel.comboLabel=Fájlrendszer +fsPanel.blockSizeLabel=Blokkméret +fsPanel.uploadButtonLabel=Feltöltés SPIFFS +fsPanel.mergeBinButtonLabel=Bináris összevonása +fsPanel.uploadMergedBinButtonLabel=Bináris összevonása és feltöltése +fsPanel.cleanLogsButtonLabel=Naplók törlése + +spiffs.partitionNotFound=SPIFFS partíció nem található. + +flash.freeSpace=Szabad hely +flashSize.label=Flash Méret + +helpButton.label=Súgó +aboutButton.label=Névjegy + +importCsvButton.label=CSV Importálása +importCsv.dialogTitle=Importálni kívánt CSV fájl kiválasztása + +exportCsvButton.label=CSV Exportálása +exportCsv.dialogTitle=CSV-ként exportálás + +saveCsvButton.label=CSV Mentése + +csvGenLabel.defaultLabel=Partíciók + +columnTitle.enable=Engedélyezés +columnTitle.name=Név +columnTitle.type=Típus +columnTitle.subtype=Altipus +columnTitle.sizekb=Méret (kB) +columnTitle.sizehex=Méret (hexadecimális) +columnTitle.offset=Offset (hexadecimális) diff --git a/src/main/resources/l10n/labels_it.properties b/src/main/resources/l10n/labels_it.properties new file mode 100644 index 0000000..f65f4b4 --- /dev/null +++ b/src/main/resources/l10n/labels_it.properties @@ -0,0 +1,48 @@ +lang=it +lang.name=Italiano + +aboutPanel.title=Informazioni su ESP32PartitionTool + +helpPanel.title=Suggerimenti Utili +helpPanel.nextTip=Prossimo suggerimento +helpPanel.tip1=Il percorso predefinito per l'esportazione di partitions.csv è la directory dello sketch. +helpPanel.tip2=Se non viene trovato alcun file partitions.csv nella directory dello sketch, verrà utilizzata la partizione selezionata in Strumenti > Schemi di partizione. +helpPanel.tip3=Le partizioni come nvs o qualsiasi altra partizione di piccole dimensioni prima della partizione dell'applicazione devono avere un valore multiplo di 4. +helpPanel.tip4=Le partizioni prima della prima partizione dell'applicazione devono avere un totale di 28 kB in modo che l'offset per la prima partizione dell'applicazione sia sempre corretto a un offset di 0x10000. Qualsiasi altra configurazione farà sì che la scheda ESP32 non funzioni correttamente. +helpPanel.tip5=La partizione dell'applicazione deve essere a 0x10000, e le partizioni successive devono essere un multiplo di 64. +helpPanel.tip6=La partizione dell'applicazione deve essere di almeno 1024 kB di dimensione. + +fsPanel.uploadButtonLabel=Carica +fsPanel.mergeBoxLabel=Unisci +fsPanel.comboLabel=Filesystem +fsPanel.blockSizeLabel=Dimensione del blocco +fsPanel.uploadButtonLabel=Carica SPIFFS +fsPanel.mergeBinButtonLabel=Unisci Binario +fsPanel.uploadMergedBinButtonLabel=Unisci Binario & Carica +fsPanel.cleanLogsButtonLabel=Pulisci log + +spiffs.partitionNotFound=Partizione SPIFFS non trovata. + +flash.freeSpace=Spazio Libero +flashSize.label=Dimensione Flash + +helpButton.label=Aiuto +aboutButton.label=Informazioni + +importCsvButton.label=Importa CSV +importCsv.dialogTitle=Seleziona file CSV da importare + +exportCsvButton.label=Esporta CSV +exportCsv.dialogTitle=Esporta come CSV + +saveCsvButton.label=Salva CSV + +csvGenLabel.defaultLabel=Partizioni + +columnTitle.enable=Abilita +columnTitle.name=Nome +columnTitle.type=Tipo +columnTitle.subtype=Sottotipo +columnTitle.sizekb=Dimensione (kB) +columnTitle.sizehex=Dimensione (esadecimale) +columnTitle.offset=Offset (esadecimale) diff --git a/src/main/resources/l10n/labels_ja.properties b/src/main/resources/l10n/labels_ja.properties new file mode 100644 index 0000000..2bbd2b2 --- /dev/null +++ b/src/main/resources/l10n/labels_ja.properties @@ -0,0 +1,48 @@ +lang=ja +lang.name=日本語 + +aboutPanel.title=ESP32PartitionToolについて + +helpPanel.title=ヘルプとヒント +helpPanel.nextTip=次のヒント +helpPanel.tip1=partitions.csvファイルのデフォルトのエクスポートパスは、スケッチディレクトリです。 +helpPanel.tip2=スケッチディレクトリ内にpartitions.csvファイルが見つからない場合、ツール > パーティションスキームで選択されたパーティションが使用されます。 +helpPanel.tip3=nvsなど、アプリケーションパーティションの前にある他の小さなパーティションは、その値が4の倍数である必要があります。 +helpPanel.tip4=アプリケーションパーティションの前にあるパーティションは、最初のアプリケーションパーティションのオフセットが常に正しい位置0x10000オフセットになるように、合計28 kBである必要があります。 それ以外の設定では、ESP32ボードが正常に機能しなくなります。 +helpPanel.tip5=アプリケーションパーティションは0x10000に配置する必要があり、後続のパーティションは64の倍数である必要があります。 +helpPanel.tip6=アプリケーションパーティションは最低でも1024 kBのサイズである必要があります。 + +fsPanel.uploadButtonLabel=アップロード +fsPanel.mergeBoxLabel=マージ +fsPanel.comboLabel=ファイルシステム +fsPanel.blockSizeLabel=ブロックサイズ +fsPanel.uploadButtonLabel=SPIFFSをアップロード +fsPanel.mergeBinButtonLabel=バイナリをマージ +fsPanel.uploadMergedBinButtonLabel=バイナリをマージしてアップロード +fsPanel.cleanLogsButtonLabel=ログをクリア + +spiffs.partitionNotFound=SPIFFSパーティションが見つかりません。 + +flash.freeSpace=空き容量 +flashSize.label=フラッシュサイズ + +helpButton.label=ヘルプ +aboutButton.label=このツールについて + +importCsvButton.label=CSVをインポート +importCsv.dialogTitle=インポートするCSVファイルを選択してください + +exportCsvButton.label=CSVをエクスポート +exportCsv.dialogTitle=CSVとしてエクスポート + +saveCsvButton.label=CSVを保存 + +csvGenLabel.defaultLabel=パーティション + +columnTitle.enable=有効にする +columnTitle.name=名前 +columnTitle.type=タイプ +columnTitle.subtype=サブタイプ +columnTitle.sizekb=サイズ(kB) +columnTitle.sizehex=サイズ(16進数) +columnTitle.offset=オフセット(16進数) diff --git a/src/main/resources/l10n/labels_ko.properties b/src/main/resources/l10n/labels_ko.properties new file mode 100644 index 0000000..8327dce --- /dev/null +++ b/src/main/resources/l10n/labels_ko.properties @@ -0,0 +1,48 @@ +lang=ko +lang.name=한국어 + +aboutPanel.title=ESP32PartitionTool 정보 + +helpPanel.title=도움말과 팁 +helpPanel.nextTip=다음 팁 +helpPanel.tip1=partitions.csv 파일의 기본 내보내기 경로는 스케치 디렉터리입니다. +helpPanel.tip2=스케치 디렉터리에 partitions.csv 파일이 없으면 도구 > 파티션 스키마에서 선택한 파티션이 사용됩니다. +helpPanel.tip3=nvs 또는 응용 프로그램 파티션 이전의 다른 작은 파티션과 같은 파티션은 4의 배수 여야 합니다. +helpPanel.tip4=첫 번째 응용 프로그램 파티션 이전의 파티션은 항상 오프셋이 0x10000 오프셋에서 올바르게 설정되므로 총 28 KB여야 합니다. 다른 구성은 ESP32 보드가 올바르게 작동하지 않도록합니다. +helpPanel.tip5=응용 프로그램 파티션은 0x10000에 있어야하며 다음 파티션은 64의 배수 여야합니다. +helpPanel.tip6=응용 프로그램 파티션은 최소 1024 KB 이상이어야합니다. + +fsPanel.uploadButtonLabel=업로드 +fsPanel.mergeBoxLabel=병합 +fsPanel.comboLabel=파일 시스템 +fsPanel.blockSizeLabel=블록 크기 +fsPanel.uploadButtonLabel=SPIFFS 업로드 +fsPanel.mergeBinButtonLabel=바이너리 병합 +fsPanel.uploadMergedBinButtonLabel=바이너리 병합 및 업로드 +fsPanel.cleanLogsButtonLabel=로그 지우기 + +spiffs.partitionNotFound=SPIFFS 파티션이 없습니다. + +flash.freeSpace=여유 공간 +flashSize.label=플래시 크기 + +helpButton.label=도움말 +aboutButton.label=정보 + +importCsvButton.label=CSV 가져오기 +importCsv.dialogTitle=가져올 CSV 파일 선택 + +exportCsvButton.label=CSV 내보내기 +exportCsv.dialogTitle=CSV로 내보내기 + +saveCsvButton.label=CSV 저장 + +csvGenLabel.defaultLabel=파티션 + +columnTitle.enable=활성화 +columnTitle.name=이름 +columnTitle.type=유형 +columnTitle.subtype=서브유형 +columnTitle.sizekb=크기(kB) +columnTitle.sizehex=크기(16진수) +columnTitle.offset=오프셋(16진수) diff --git a/src/main/resources/l10n/labels_pl.properties b/src/main/resources/l10n/labels_pl.properties new file mode 100644 index 0000000..e69c37b --- /dev/null +++ b/src/main/resources/l10n/labels_pl.properties @@ -0,0 +1,48 @@ +lang=pl +lang.name=Polski + +aboutPanel.title=O programie ESP32PartitionTool + +helpPanel.title=Porady pomocy +helpPanel.nextTip=Następna porada +helpPanel.tip1=Domyślna ścieżka eksportu dla partitions.csv to katalog szkicu. +helpPanel.tip2=Jeśli w katalogu szkicu nie znaleziono pliku partitions.csv, użyta zostanie partycja wybrana w menu Narzędzia > Schemat partycji. +helpPanel.tip3=Rozmiar partycji takich jak nvs lub innych małych partycji przed partycją aplikacji musi być wielokrotnością 4. +helpPanel.tip4=Rozmiar partycji przed pierwszą partycją aplikacji powinien wynosić łącznie 28 kB, aby przesunięcie pierwszej partycji aplikacji było zawsze prawidłowe i wynosiło 0x10000. Każda inna konfiguracja spowoduje nieprawidłowe działanie modułu ESP32. +helpPanel.tip5=Partycja aplikacji musi znajdować się pod adresem 0x10000, a kolejne partycje muszą być wielokrotnością 64. +helpPanel.tip6=Minimalny rozmiar partycji aplikacji musi wynosić 1024 kB. + +fsPanel.uploadButtonLabel=Prześlij +fsPanel.mergeBoxLabel=Scal +fsPanel.comboLabel=System plików +fsPanel.blockSizeLabel=Rozmiar bloku +fsPanel.uploadButtonLabel=Prześlij SPIFFS +fsPanel.mergeBinButtonLabel=Scal plik binarny +fsPanel.uploadMergedBinButtonLabel=Scal plik binarny i prześlij +fsPanel.cleanLogsButtonLabel=Wyczyść logi + +spiffs.partitionNotFound=Nie znaleziono partycji SPIFFS. + +flash.freeSpace=Wolne miejsce +flashSize.label=Rozmiar pamięci Flash + +helpButton.label=Pomoc +aboutButton.label=Informacje + +importCsvButton.label=Importuj CSV +importCsv.dialogTitle=Wybierz plik CSV do importu + +exportCsvButton.label=Eksportuj CSV +exportCsv.dialogTitle=Eksportuj jako CSV + +saveCsvButton.label=Zapisz CSV + +csvGenLabel.defaultLabel=Partycje + +columnTitle.enable=Włącz +columnTitle.name=Nazwa +columnTitle.type=Typ +columnTitle.subtype=Podtyp +columnTitle.sizekb=Rozmiar (kB) +columnTitle.sizehex=Rozmiar (hex) +columnTitle.offset=Przesunięcie (hex) diff --git a/src/main/resources/l10n/labels_ru.properties b/src/main/resources/l10n/labels_ru.properties new file mode 100644 index 0000000..c27fc83 --- /dev/null +++ b/src/main/resources/l10n/labels_ru.properties @@ -0,0 +1,48 @@ +lang=ru +lang.name=Русский + +aboutPanel.title=О программе ESP32PartitionTool + +helpPanel.title=Советы и подсказки +helpPanel.nextTip=Следующая подсказка +helpPanel.tip1=Путь экспорта по умолчанию для partitions.csv - это каталог скетча. +helpPanel.tip2=Если файл partitions.csv не найден в каталоге скетча, будет использована выбранная раздел в меню Инструменты > Схемы раздела. +helpPanel.tip3=Разделы типа nvs или другие небольшие разделы перед разделом приложения должны иметь значение, кратное 4. +helpPanel.tip4=Разделы перед первым разделом приложения должны иметь общий размер 28 КБ, чтобы смещение для первого раздела приложения всегда было корректным с смещением 0x10000. Любая другая конфигурация приведет к неправильной работе платы ESP32. +helpPanel.tip5=Раздел приложения должен находиться на позиции 0x10000, а следующие разделы должны быть кратны 64. +helpPanel.tip6=Раздел приложения должен быть не менее 1024 КБ по размеру. + +fsPanel.uploadButtonLabel=Загрузить +fsPanel.mergeBoxLabel=Объединить +fsPanel.comboLabel=Файловая система +fsPanel.blockSizeLabel=Размер блока +fsPanel.uploadButtonLabel=Загрузить SPIFFS +fsPanel.mergeBinButtonLabel=Объединить бинарник +fsPanel.uploadMergedBinButtonLabel=Объединить бинарник и загрузить +fsPanel.cleanLogsButtonLabel=Очистить логи + +spiffs.partitionNotFound=Раздел SPIFFS не найден. + +flash.freeSpace=Свободное место +flashSize.label=Размер флеш-памяти + +helpButton.label=Справка +aboutButton.label=О программе + +importCsvButton.label=Импорт CSV +importCsv.dialogTitle=Выберите файл CSV для импорта + +exportCsvButton.label=Экспорт CSV +exportCsv.dialogTitle=Экспортировать в CSV + +saveCsvButton.label=Сохранить CSV + +csvGenLabel.defaultLabel=Разделы + +columnTitle.enable=Включить +columnTitle.name=Имя +columnTitle.type=Тип +columnTitle.subtype=Подтип +columnTitle.sizekb=Размер (кБ) +columnTitle.sizehex=Размер (шестнадцатеричный) +columnTitle.offset=Смещение (шестнадцатеричное) diff --git a/src/main/resources/l10n/labels_zh.properties b/src/main/resources/l10n/labels_zh.properties new file mode 100644 index 0000000..20e1ce8 --- /dev/null +++ b/src/main/resources/l10n/labels_zh.properties @@ -0,0 +1,48 @@ +lang=zh +lang.name=简体中文 + +aboutPanel.title=关于 ESP32PartitionTool + +helpPanel.title=帮助与提示 +helpPanel.nextTip=下一个提示 +helpPanel.tip1=partitions.csv 文件的默认导出路径为Sketch目录。 +helpPanel.tip2=如果在Sketch目录中找不到partitions.csv文件,则将使用工具 > 分区方案下选择的分区。 +helpPanel.tip3=nvs或任何其他小型应用分区之前的分区必须以4的倍数为值。 +helpPanel.tip4=应用程序分区之前的第一个分区应该总共有28 kB,这样第一个应用程序分区的偏移量始终正确为0x10000偏移量。任何其他配置都将导致ESP32板无法正常工作。 +helpPanel.tip5=应用程序分区必须位于0x10000处,后续分区必须为64的倍数。 +helpPanel.tip6=应用程序分区的大小必须至少为1024 kB。 + +fsPanel.uploadButtonLabel=上传 +fsPanel.mergeBoxLabel=合并 +fsPanel.comboLabel=文件系统 +fsPanel.blockSizeLabel=块大小 +fsPanel.uploadButtonLabel=上传 SPIFFS +fsPanel.mergeBinButtonLabel=合并二进制 +fsPanel.uploadMergedBinButtonLabel=合并二进制并上传 +fsPanel.cleanLogsButtonLabel=清除日志 + +spiffs.partitionNotFound=未找到SPIFFS分区。 + +flash.freeSpace=剩余空间 +flashSize.label=Flash 大小 + +helpButton.label=帮助 +aboutButton.label=关于 + +importCsvButton.label=导入 CSV +importCsv.dialogTitle=选择要导入的 CSV 文件 + +exportCsvButton.label=导出 CSV +exportCsv.dialogTitle=导出为 CSV + +saveCsvButton.label=保存 CSV + +csvGenLabel.defaultLabel=分区 + +columnTitle.enable=启用 +columnTitle.name=名称 +columnTitle.type=类型 +columnTitle.subtype=子类型 +columnTitle.sizekb=大小(kB) +columnTitle.sizehex=大小(十六进制) +columnTitle.offset=偏移(十六进制)