Blog (auf Englisch)Dieser Artikel ist nur auf Englisch verfügbar.

Why we built our own translator

On macOS 26, translating anything to or from Ukrainian through Apple’s built-in translation crashed the system translation service. This week we stopped depending on it: the app now translates with its own models, on your Mac.

What broke

We traced it on August 12. On macOS 26 (we checked 26.5.2) any translation with Ukrainian on one side makes the system service, translationd, abort. macOS then refuses to restart it for up to 20 minutes. During that time no language pair translates, in any app on the machine, Russian and English included. You can trigger it without our app at all: select text, right-click, choose Translate.

The same translation works on macOS Sequoia 15, so it is a regression in macOS 26, not one unlucky Mac. It also reproduced on another person’s Mac. We checked the usual suspects: the Ukrainian model files are intact, and clearing caches, rebooting and switching the translation strategy changed nothing. We sent a report to Apple, but Ukrainian is central to what this app does, so we could not wait.

The worst part is the side effect. Ukrainian already did not work, but one Ukrainian attempt also switched off Russian and English for twenty minutes.

What we did instead

We added our own translator. It uses open translation models, run by an engine that sits inside the app. The first version covers English, Russian and Ukrainian, and the storage is ready for ten languages.

Dictionaries are downloaded per direction, only for the languages you pick, from cdn.verbaide.com. One direction ships inside the app, so translation works from the first launch: Russian and Ukrainian to English. Every other direction, including English back to Russian and Ukrainian, downloads on request.

Some pairs have no direct model. Ukrainian to Russian is one of them. For those we go through English, and only when no direct route exists, because every extra hop can damage the meaning.

What we measured

We tried a smaller, lighter model class first. Out of 20 test translations it spoiled 8, and six of those dropped whole sentences. From “Привет, как дела? Сегодня хорошая погода, и я хочу пойти на прогулку” only “як справи? і я хочу піти на прогулянку” was left. That is lost text, not a trade between speed and quality, so we rejected it. The larger class dropped no sentences.

On this Mac our translator took 153 ms per phrase against 176 ms for Apple’s. That is one machine, not a benchmark of everything, but it means the switch costs nothing in speed.

Apple’s translator stays in the app as a fallback for the languages where it works. Ukrainian never goes through it. Details on languages and downloads are in languages and models.

Mehr aus dem Blog