Updated: 17/10/2011 6:07pm
When Translatable is enabled in SilverStripe, Batch Actions won't work on secondary languages.
Batch Actions fail to include the current site locale in any URL they call - neither in a GET nor in a POST parameter. That means SilverStripe will always revert to the default en_US locale and DataObject::get() will never find any pages in a secunday language when it filters on the default locale...
Find a way to add the right locale. There are two files involved in what is in fact a hack, and could maybe be a bugfix, when it proves to be solid. For now a simple hack beats publishing hundreds of pages by hand. So far it works fine for me (v2.4.5), but anyone encountering weird things, please let me know.
Find the form with id="batchactionsforms" (around line 69) and add a new hidden field for the locale. Save, and do a ?flush=1
<form class="actionparams" style="border:0" id="batchactions_options" action=""> $BatchActionParameters ... <input type="hidden" name="locale" id='batchactions_options_locale' value="$Locale" />
Find the following line of code (around line 461):
var applicablePagesURL = $('choose_batch_action').value + '/applicablepages?csvIDs=' + ids.join(',');
And add the locale to the end of the URL:
var applicablePagesURL = $('choose_batch_action').value + '/applicablepages?csvIDs=' + ids.join(',') + "&locale=" + $('batchactions_options_locale').value;
That should do it...