Вообще-то QTranslator::load("trans.xx_XX"); проверяет наличие
"trans_xx_XX.qm" и ежели не находит, то пытается подгрузить
"trans_xx.qm".
Так что
QString locale = QLocale::system().name();
QTranslator translator;
translator.load("trans_") + locale);
app.installTranslator(&translator);
должна автоматом подгрузить trans_ru.qm, даже если locale равна "ru_RU".
По крайне мере под виндой это так.
В линуксе разве по другому?
Сдается мне что и в нем должно работать.