pentaho/pentaho-kettle · error · KettleFileException
i18n.Log.UnableToGetFiles
Error message
i18n.Log.UnableToGetFiles
What it means
Translator2 (the newer Translator UI) wraps any exception thrown while scanning rootDirectories for i18n files and locale key sets into a KettleFileException, with the directory list rendered from the localized message i18n.Log.UnableToGetFiles. It signals that the locale/file inventory for the configured source folders could not be built.
Solutions
- Check the directories listed in the error exist and are readable; fix the Translator2 configuration (loadConfiguration configFile / sourceFolder).
- Re-run loadConfiguration with the correct root source folder of the PDI project.
- Fix permissions on the source tree.
- Inspect the chained cause 'e' for the underlying exception type and file.
Example fix
// before // configFile points to /home/olduser/pdi-ui/src (deleted) translator2.readFiles(); // KettleFileException // after // update config to current checkout translator2.loadConfiguration( configFile, "/home/dev/pentaho-kettle/ui/src" ); translator2.readFiles();
Defensive patterns
Strategy: validation
Validate before calling
for ( String dir : rootDirectories ) {
if ( !new File( dir ).isDirectory() ) {
throw new IllegalStateException( "Configured i18n root missing: " + dir );
}
} Try / catch
try {
translator2.readFiles();
} catch ( KettleFileException e ) {
log.error( "Check rootDirectories from the Translator2 config: " + e.getMessage(), e );
} Prevention
- Keep the Translator2 config file's source folders machine-local and existing
- Re-run loadConfiguration after moving or re-cloning the workspace
- Verify read permissions before opening the tool
When it happens
Trigger: readFiles() (called by open()/reload()) fails because a configured root directory does not exist or is unreadable, or processing a discovered locale file throws (parse/IO error).
Common situations: Translator2 config file points at source folders from a different machine or deleted checkout; the chosen source folder has no messages files; permissions issues after a workspace move.
Related errors
- Unable to get all files from directory [
- the i18, directive need 3 parameters: i18n, the package…
- : Unable to load file [
- A connection of type PALO is expected
- A connection of type PALO is expected
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/99f81312261abcb7.
Report an issue: GitHub.
Appendix: source
Thrown at ui/src/main/java/org/pentaho/di/ui/i18n/editor/Translator2.java:252
locales[j] = locales[j + 1];
locales[j + 1] = l;
}
}
}
for ( int i = 0; i < locales.length; i++ ) {
double donePct = 100 * (double) keyCounts[i] / nrKeys;
int missingKeys = nrKeys - keyCounts[i];
String statusKeys =
"# "
+ nrFormat.format( i + 1L ) + " : " + locales[i] + " : " + pctFormat.format( donePct ) + "% "
+ BaseMessages.getString( PKG, "i18n.Log.CompleteKeys", keyCounts[i] )
+ ( missingKeys != 0 ? BaseMessages.getString( PKG, "i18n.Log.MissingKeys", missingKeys ) : EMPTY_STRING );
System.out.println( statusKeys );
}
}
} catch ( Exception e ) {
throw new KettleFileException( BaseMessages.getString( PKG, "i18n.Log.UnableToGetFiles", rootDirectories
.toString() ), e );
}
}
public void loadConfiguration( String configFile, String sourceFolder ) throws Exception {
// What are the locale to handle?
//
localeList = new ArrayList<>();
rootDirectories = new ArrayList<>();
filesToAvoid = new ArrayList<>();
xmlFolders = new ArrayList<>();
FileObject file = KettleVFS.getInstance( DefaultBowl.getInstance() ).getFileObject( configFile );
if ( file.exists() ) {
try {
Document doc = XMLHandler.loadXMLFile( file );
Node configNode = XMLHandler.getSubNode( doc, "translator-config" );
View on GitHub (pinned to f3058517a1)