Ошибка тривиальная для новичков. И если посмотреть на код повнимательнее, то она становится очевидной. Смотрите.
В методе Handle::changeLanguage создаётся объект translator. Затем в него грузится файл (кстати, надо проверять успешность, не зря же метод что-то возвращает). Далее транслятор инсталлируется. А что происходит в следующей строчке, где находится закрывающая фигурная скобка метода? Многие думают, что ничего. Но это не так! И если зайти в дизассемблированный код, то мы увидим, что там происходит очень много интересного! Например, разрушаются локальные переменные...
Опа! Вот где ошибка! При выходе из метода объект translator благополучно похеривается! И при этом (он же потомок QObject) шлёт в QCoreApplication сигнал destroyed. Что же делает QCoreApplication? Правильно, убирает ссылку на транслятор. То есть транслятора у нас снова нет!
Выход? "Элементарно, Ватсон!" (C) Шерлок Холмс.
static QTranslator translator;