mirror of
https://github.com/RipMeApp/ripme.git
synced 2025-08-26 15:24:51 +02:00
Get supported languages dynamically
This commit is contained in:
@@ -139,10 +139,6 @@ public final class MainWindow implements Runnable, RipStatusHandler {
|
||||
|
||||
private static AbstractRipper ripper;
|
||||
|
||||
// All the langs ripme has been translated into
|
||||
private static String[] supportedLanges = new String[] { "de_DE", "ar_AR", "en_US", "es_ES", "fi_FI", "fr_CH",
|
||||
"in_ID", "it_IT", "kr_KR", "nl_NL", "pl_PL", "porrisavvo_FI", "pt_BR", "pt_PT", "ru_RU" };
|
||||
|
||||
private void updateQueue(DefaultListModel<Object> model) {
|
||||
if (model == null)
|
||||
model = queueListModel;
|
||||
@@ -483,7 +479,7 @@ public final class MainWindow implements Runnable, RipStatusHandler {
|
||||
queueListModel = new DefaultListModel();
|
||||
JList queueList = new JList(queueListModel);
|
||||
queueList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
|
||||
queueList.addMouseListener(queueMenuMouseListener = new QueueMenuMouseListener((model) -> updateQueue(model)));
|
||||
queueList.addMouseListener(queueMenuMouseListener = new QueueMenuMouseListener());
|
||||
JScrollPane queueListScroll = new JScrollPane(queueList, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
|
||||
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
|
||||
for (String item : Utils.getConfigList("queue")) {
|
||||
@@ -539,8 +535,8 @@ public final class MainWindow implements Runnable, RipStatusHandler {
|
||||
|
||||
configLogLevelCombobox = new JComboBox<>(
|
||||
new String[] { "Log level: Error", "Log level: Warn", "Log level: Info", "Log level: Debug" });
|
||||
configSelectLangComboBox = new JComboBox<>(supportedLanges);
|
||||
configSelectLangComboBox.setSelectedItem(Utils.getLanguage());
|
||||
configSelectLangComboBox = new JComboBox<>(Utils.getSupportedLanguages());
|
||||
configSelectLangComboBox.setSelectedItem(Utils.getSelectedLanguage());
|
||||
configLogLevelCombobox.setSelectedItem(Utils.getConfigString("log.level", "Log level: Debug"));
|
||||
setLogLevel(configLogLevelCombobox.getSelectedItem().toString());
|
||||
configSaveDirLabel = new JLabel();
|
||||
@@ -675,8 +671,6 @@ public final class MainWindow implements Runnable, RipStatusHandler {
|
||||
optionHistory.setText(Utils.getLocalizedString("History"));
|
||||
optionQueue.setText(Utils.getLocalizedString("queue"));
|
||||
optionConfiguration.setText(Utils.getLocalizedString("Configuration"));
|
||||
|
||||
queueMenuMouseListener.updateUI();
|
||||
}
|
||||
|
||||
private void setupHandlers() {
|
||||
|
@@ -2,6 +2,7 @@ package com.rarchives.ripme.utils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
@@ -21,6 +22,8 @@ import java.util.MissingResourceException;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.jar.JarEntry;
|
||||
import java.util.jar.JarFile;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import javax.sound.sampled.AudioSystem;
|
||||
import javax.sound.sampled.Clip;
|
||||
@@ -40,6 +43,7 @@ import org.apache.log4j.PropertyConfigurator;
|
||||
*/
|
||||
public class Utils {
|
||||
|
||||
private static final Pattern pattern = Pattern.compile("LabelsBundle_(?<lang>[A-Za-z_]+).properties");
|
||||
private static final String RIP_DIRECTORY = "rips";
|
||||
private static final String CONFIG_FILE = "rip.properties";
|
||||
private static final String OS = System.getProperty("os.name").toLowerCase();
|
||||
@@ -745,12 +749,38 @@ public class Utils {
|
||||
resourceBundle = getResourceBundle(langSelect);
|
||||
}
|
||||
|
||||
public static String getLanguage() {
|
||||
public static String getSelectedLanguage() {
|
||||
return resourceBundle.getLocale().toString();
|
||||
}
|
||||
|
||||
// All the langs ripme has been translated into
|
||||
public static String[] getSupportedLanguages() {
|
||||
File configFile = new File(Utils.class.getResource("/rip.properties").getFile());
|
||||
LOGGER.info("ConfigFile: " + configFile);
|
||||
LOGGER.info("Parent: " + new File(configFile.getParent()));
|
||||
File[] files = new File(configFile.getParent()).listFiles(new FilenameFilter() {
|
||||
|
||||
@Override
|
||||
public boolean accept(File dir, String name) {
|
||||
LOGGER.info("name: " + name);
|
||||
return name.startsWith("LabelsBundle_");
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
String[] langs = new String[files.length];
|
||||
for (int i = 0; i < files.length; i++) {
|
||||
Matcher matcher = pattern.matcher(files[i].getName());
|
||||
if (matcher.find())
|
||||
langs[i] = matcher.group("lang");
|
||||
}
|
||||
|
||||
return langs;
|
||||
}
|
||||
|
||||
public static String getLocalizedString(String key) {
|
||||
LOGGER.debug(String.format("Getting key %s in %s value %s",key, getLanguage(), resourceBundle.getString(key)));
|
||||
LOGGER.debug(String.format("Getting key %s in %s value %s", key, getSelectedLanguage(),
|
||||
resourceBundle.getString(key)));
|
||||
return resourceBundle.getString(key);
|
||||
}
|
||||
|
||||
|
@@ -0,0 +1,95 @@
|
||||
package com.rarchives.ripme.tst.ui;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
import java.nio.file.FileSystem;
|
||||
import java.nio.file.FileSystems;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.rarchives.ripme.utils.Utils;
|
||||
|
||||
import org.apache.log4j.ConsoleAppender;
|
||||
import org.apache.log4j.Level;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class LabelsBundlesTest {
|
||||
|
||||
private Logger logger = Logger.getLogger(Utils.class);
|
||||
|
||||
@Test
|
||||
void testKeyCount() {
|
||||
((ConsoleAppender) Logger.getRootLogger().getAppender("stdout")).setThreshold(Level.DEBUG);
|
||||
File f = new File("E:\\Downloads\\_Isaaku\\dev\\ripme-1.7.86-jar-with-dependencies.jar");
|
||||
File[] files = f.listFiles(new FilenameFilter() {
|
||||
|
||||
@Override
|
||||
public boolean accept(File dir, String name) {
|
||||
logger.info("name: " + name);
|
||||
return name.startsWith("LabelsBundle_");
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
for (String s : getResourcesNames("\\**")) {
|
||||
logger.info(s);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public String[] getResourcesNames(String path) {
|
||||
Class loader = getClassLoader();
|
||||
/*URL u = loader.getResource("/rip.properties");
|
||||
path = u.getFile();
|
||||
path = new File(path).getParent();*/
|
||||
|
||||
try {
|
||||
URL url = loader.getResource(path);
|
||||
if (url == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
URI uri = url.toURI();
|
||||
if (uri.getScheme().equals("jar")) { // Run from jar
|
||||
try (FileSystem fileSystem = FileSystems.newFileSystem(uri, Collections.emptyMap())) {
|
||||
Path resourcePath = fileSystem.getPath(path);
|
||||
|
||||
// Get all contents of a resource (skip resource itself), if entry is a
|
||||
// directory remove trailing /
|
||||
List<String> resourcesNames = Files.walk(resourcePath, 1).skip(1).map(p -> {
|
||||
String name = p.getFileName().toString();
|
||||
if (name.endsWith("/")) {
|
||||
name = name.substring(0, name.length() - 1);
|
||||
}
|
||||
return name;
|
||||
}).sorted().collect(Collectors.toList());
|
||||
|
||||
return resourcesNames.toArray(new String[resourcesNames.size()]);
|
||||
}
|
||||
} else { // Run from IDE
|
||||
File resource = new File(uri);
|
||||
return resource.list();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
return null;
|
||||
} catch (URISyntaxException e) {
|
||||
// TODO Auto-generated catch block
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private Class getClassLoader() {
|
||||
return Utils.class;
|
||||
//return Thread.currentThread().getContextClassLoader();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user