Venho desenvolvendo uma classe de Internacionalização que é capaz de determinar os Locales implementados pelos ResourceBundles da aplicação. Para isso, dou uma olhada no nome dos arquivos, utilizando o seguinte algorítmo:
private static void addLocaleListFromJar(List<Locale> locales) throws IOException {
// Obter uma URL para o Jar
URL packageUrl = I18n.class.getProtectionDomain().getCodeSource().getLocation(); // Retorna "rsrc:./" - O quê isso significa?
JarInputStream jar = new JarInputStream(packageUrl.openStream());
while (true) {
JarEntry entry = jar.getNextJarEntry();
if (entry == null) {
break;
}
String name = entry.getName();
if (resourceBundlePattern.matcher(name).matches()) {
addLocaleFromResourceBundle(name, locales);
}
}
}
Atualmente, esse algoritmo está falhando - jar.getNextJarEntry() sempre retorna null logo de cara.
Fiz uma pergunta no StackOverflow sobre este mesmo problema, a resposta que obti me levou ao algoritmo acima. O cara que respondeu testou meu código e, curiosamente, funcionou com ele, mas não comigo.
Alguem sabe resolver isso?