← Alle Beitrage

Apples Translation Framework: kostenlos, direkt auf dem Gerät und schärfer, als es aussieht

Apples Translation Framework übersetzt Text direkt auf dem Gerät, kostenlos, ohne API-Schlüssel und ohne Netzwerkaufruf, sobald die Sprache installiert ist1. Es baut auf Core-ML-Modellen auf, ist Teil des Systems und stellt einer App dieselbe Übersetzungsmaschine zur Verfügung, die auch die Übersetzen-App nutzt. Was für mehrsprachige Funktionen früher eine Cloud-Rechnung und eine Datenschutzfrage bedeutete, kostet damit erneut praktisch nichts. Und wie beim Foundation Models Framework6 liegt das Interessante nicht im Idealfall, sondern in den Ecken und Kanten, die Demos überspringen: dem Sprachdownload, der Ihre erste Übersetzung blockiert, dem Simulator, der stillschweigend den Dienst verweigert, und der reinen SwiftUI-Oberfläche, die vorgibt, wie Sie das Framework überhaupt einbinden.

TL;DR

  • Zwei Oberflächen, zwei iOS-Versionen. translationPresentation zeigt Apples eingebautes Übersetzungs-Popover (ab iOS 17.4). TranslationSession, erreichbar über den Modifier translationTask, übersetzt programmatisch in Ihrer eigenen UI (ab iOS 18)2.
  • Programmatische Übersetzung läuft async. Innerhalb der translationTask-Closure erhalten Sie eine TranslationSession; damit übersetzen Sie einen einzelnen String oder einen ganzen Stapel3.
  • Stapelverarbeitung ist vollwertig. Übersetzen Sie eine Liste in einer einzigen Anfrage, wobei jedes Ergebnis seiner Eingabe zugeordnet bleibt, statt in einer Schleife eines nach dem anderen abzuwarten3.
  • Die Übersetzungs-UI gibt es nur für SwiftUI, und sie läuft nicht im iOS-Simulator. Beides lernt man leicht auf die harte Tour; gestalten und testen Sie entsprechend4.
  • Offline heißt: erst herunterladen. Die erste Übersetzung eines Sprachpaars lädt Sprachpakete herunter — ein echter UX-Moment, den Sie gestalten müssen, keine Nebensächlichkeit5.
  • Die Kombination, die man kennen sollte: Nutzereingaben mit Translation übersetzen, anschließend mit Foundation Models darüber schlussfolgern — schon funktioniert eine einsprachig gebaute Agentenfunktion auf dem Gerät in jeder Sprache, die sich installieren lässt.

Zwei Oberflächen: das System-Popover und Ihre eigene UI

Das Framework bietet zwei klar getrennte Wege zu übersetzen, und die richtige Wahl macht bereits den größten Teil der Entscheidung aus.

Der leichte Weg ist translationPresentation, verfügbar seit iOS 17.4. Sie hängen ihn an eine View, binden ein isPresented-Flag ein und übergeben den Text; sobald das Flag auf true umschlägt, schiebt das System sein eigenes Übersetzungs-Popover über Ihren Inhalt2:

.translationPresentation(isPresented: $showTranslation, text: selectedText)

Sie schreiben keinerlei Übersetzungslogik und bekommen das Ergebnis nicht zu sehen; UI und Interaktion gehören Apple. Für „lassen Sie den Nutzer diesen Abschnitt übersetzen“ ist das die komplette Funktion, und zu etwas Aufwendigerem zu greifen, wäre vergeudete Arbeit.

Die programmatische Oberfläche ist TranslationSession, verfügbar seit iOS 18, erreichbar über den Modifier translationTask. Der Modifier führt eine asynchrone Closure aus und übergibt Ihnen eine Sitzung, die Sie selbst aufrufen — der übersetzte Text landet also in Ihrem Code, und Sie stellen ihn nach Ihren Vorstellungen dar2:

.translationTask(configuration) { session in
    let response = try await session.translate("Good morning")
    await MainActor.run { translated = response.targetText }
}

Die Trennlinie ist sauber. translationPresentation zeigt dem Nutzer eine Übersetzung in Apples UI. TranslationSession bringt übersetzten Text in Ihre Daten und Ihre Views. Die meisten Apps, die mehr wollen als ein einmaliges „übersetze das“, greifen zur Sitzung.

Stapelübersetzung: die Liste übersetzen, nicht die Schleife

Was eine geschmeidige Funktion von einer ruckeligen unterscheidet, ist die Stapelverarbeitung. Wenn Sie eine Liste übersetzen müssen (Chatnachrichten, Katalogeinträge, einen Satz Beschriftungen), warten Sie nicht in einer Schleife jede Übersetzung einzeln per await ab. TranslationSession nimmt einen Stapel Anfragen entgegen und liefert die Antworten in einem Durchgang zurück, jede ihrer Anfrage zugeordnet3:

.translationTask(configuration) { session in
    let requests = items.map { TranslationSession.Request(sourceText: $0.text, clientIdentifier: $0.id) }
    for try await response in session.translate(batch: requests) {
        store[response.clientIdentifier] = response.targetText
    }
}

Entscheidend ist der clientIdentifier: Er kommt mit der Antwort zurück, sodass Sie jede Übersetzung der zugehörigen Zeile zuordnen können, ohne sich auf die Reihenfolge verlassen zu müssen. Zudem kann das Framework die Arbeit effizient einplanen, statt über eine Schleife hinweg den Overhead jedes Einzelaufrufs zu bezahlen. Für alles jenseits eines einzelnen Strings gilt: stapeln.

Die Offline-Realität, von der niemand einen Screenshot macht

Hier liegt der Stolperstein, der aus einer sauberen Demo ein Support-Ticket macht. Die Übersetzung läuft auf dem Gerät, aber die Sprache muss erst einmal auf dem Gerät sein. Wenn Ihre App zum ersten Mal ein bestimmtes Quell-Ziel-Paar übersetzt, lädt das System die Sprachpakete herunter, und dieser Download braucht Zeit und eine Netzwerkverbindung5. Stoßen Sie eine Übersetzung an und zeigen das Ergebnis ohne jede Behandlung des Downloads, wirkt Ihre Funktion bei jeder neuen Sprache beim ersten Aufruf wie eingefroren.

Behandeln Sie das bewusst. Das Framework erlaubt es, die Sprachverfügbarkeit zu prüfen und ein Paar vorzubereiten (herunterzuladen), bevor Sie es brauchen — so können Sie einen Zustand „Übersetzung wird vorbereitet“ anzeigen oder in einem ruhigeren Moment vorab laden, statt mitten in der Interaktion zu stocken5. Das passende Denkmodell: Behandeln Sie die erste Übersetzung eines Sprachpaars wie einen einmaligen Asset-Download, denn genau das ist sie. Planen Sie die UX von vornherein um den Download herum, dann kommt der Vorteil „offline und kostenlos“ auch an; ignorieren Sie ihn, versteckt sich der Vorteil hinter einer scheinbar eingefrorenen App.

Zwei weitere Tatsachen, die einen Nachmittag kosten, wenn man sie zu spät erfährt. Die Oberflächen der Übersetzungs-UI sind SwiftUI-Modifier, ein UIKit-Screen bettet also eine SwiftUI-View ein (über UIHostingController), um sie zu erreichen — für Arbeit ohne UI lässt sich eine TranslationSession allerdings auch direkt konstruieren4. Und das Framework läuft weder im iOS- noch im iPadOS-Simulator; Übersetzung testen Sie auf echter Hardware4. Beides steht nirgends laut in der Dokumentation, und in beides rennt man leicht ungebremst hinein.

Translation mit Foundation Models kombinieren

Die eigentliche Erkenntnis verbindet dieses Framework mit dem übrigen On-Device-Stack. Die meiste Sprachverarbeitung auf dem Gerät setzt voraus, dass die Eingabe in einer Sprache vorliegt, mit der Ihre Logik und das Systemmodell gut umgehen. Echte Nutzer spielen da nicht mit. Das Translation Framework schließt diese Lücke: Übersetzen Sie die Nutzereingabe in die Sprache, in der Ihre Funktion denkt, lassen Sie die Foundation Models-Arbeit auf dem übersetzten Text laufen und übersetzen Sie das Ergebnis anschließend zurück.

Die Form ist eine Klammer: hinein übersetzen, schlussfolgern, hinaus übersetzen.

// 1. translate the user's text into English (session configured for their language -> en)
let english = try await inboundSession.translate(userText).targetText
// 2. reason on-device, monolingually, in English
let summary = try await LanguageModelSession()
    .respond(to: "Summarize in one line: \(english)").content
// 3. translate the result back (a session configured for en -> their language)
let localized = try await outboundSession.translate(summary).targetText

Eine Funktion zur Support-Triage, ein Notizen-Zusammenfasser, ein Absichtserkenner: Jede lässt sich einmal einsprachig schreiben und funktioniert in jeder Sprache, die das Gerät installieren kann — indem Sie den Foundation-Models-Aufruf in Translation einklammern. Die beiden Richtungen nutzen zwei Sitzungskonfigurationen (ihre Sprache nach Englisch, dann Englisch zurück), denn eine Sitzung ist für genau ein Sprachpaar konfiguriert. Beide Schichten laufen auf dem Gerät, beide sind kostenlos, und nichts verlässt das Telefon; die mehrsprachige Fassung kostet also weder Privatsphäre noch Cloud-Rechnung, die die einsprachige nicht schon gekostet hätte. Genau diese Komposition — hinein übersetzen, schlussfolgern, hinaus übersetzen — macht aus einer kleinen Funktion auf dem Gerät eine wirklich globale, und sie ist nur möglich, weil beide Hälften lokal und kostenlos laufen.

Wann Sie es nicht einsetzen sollten

Übersetzung auf dem Gerät ist kostenlos und privat, was sie zur richtigen Voreinstellung für Übersetzung innerhalb einer App macht. In ein paar ehrlichen Fällen ist sie das falsche Werkzeug.

  • Sie brauchen die bestmögliche Übersetzungsqualität oder die größte Sprachabdeckung. Die Modelle auf dem Gerät sind gut, aber nicht die besten, die es gibt, und der installierbare Sprachumfang ist endlich. Bei Übersetzungen, bei denen viel auf dem Spiel steht (juristisch, medizinisch, veröffentlichte Inhalte), gewinnt ein dedizierter Cloud-Übersetzungsdienst weiterhin bei Qualität und Breite.
  • Sie können den Download beim ersten Gebrauch nicht in Kauf nehmen. Bei einer Funktion, die schon beim ersten Start ohne Netz sofort laufen muss, kann allein die Download-Anforderung Übersetzung auf dem Gerät ausschließen — es sei denn, Sie laden während des Onboardings vor.
  • Ihre App ist UIKit ohne Platz für einen SwiftUI-Host, oder Ihr Ablauf muss im Simulator laufen (etwa ein automatisierter UI-Test). Die Beschränkungen „nur SwiftUI“ und „kein Simulator“ sind hart, nicht bloß empfohlen.

Das Framework gehört zu den leiseren Gewinnen im On-Device-Werkzeugkasten: eine wirklich kostenlose, private Übersetzungsmaschine, die die meisten Apps an einem Nachmittag übernehmen könnten. Gefragt ist dasselbe Können, das dieser Stack insgesamt belohnt. Wissen, welche Oberfläche passt (System-Popover oder eigene Sitzung), bei einer Liste stapeln und für den Download gestalten, statt so zu tun, als gäbe es ihn nicht. Wer das tut, für den ist Übersetzung keine Cloud-Abhängigkeit mehr, sondern eine lokale Fähigkeit, die sich mit allem anderen kombinieren lässt, was das Gerät kostenlos erledigt.

FAQ

Ist Apples Translation Framework kostenlos und läuft auf dem Gerät?

Ja. Die Übersetzung läuft auf dem Gerät und ist kostenlos, nichts verlässt dabei das Telefon — deshalb ist sie die richtige Voreinstellung für Übersetzung innerhalb einer App. Der Preis dafür: Qualität und Sprachabdeckung sind gut, aber nicht Spitzenklasse, weshalb bei Aufgaben, bei denen viel auf dem Spiel steht, weiterhin ein Cloud-Dienst die bessere Wahl sein kann.

Warum hängt die erste Übersetzung oder braucht sie einen Download?

Die Übersetzung läuft auf dem Gerät, doch das Sprachpaar muss zuerst dort vorhanden sein. Beim ersten Übersetzen eines bestimmten Quell-Ziel-Paars lädt das System die Sprachpakete herunter, was Zeit und eine Netzwerkverbindung braucht5. Prüfen Sie die Verfügbarkeit und bereiten Sie das Paar vor (laden Sie es vorab), bevor Sie es brauchen — dann können Sie einen „wird vorbereitet“-Zustand zeigen, statt mitten in der Interaktion zu stocken.

Welche zwei Wege gibt es, Übersetzung in eine App einzubauen?

Das System-Popover über einen SwiftUI-Presentation-Modifier, oder Ihre eigene UI, angetrieben von einer direkt konstruierten TranslationSession für Arbeit ohne UI4. Da die Oberflächen SwiftUI-Modifier sind, erreicht ein UIKit-Screen sie, indem er über UIHostingController eine SwiftUI-View einbettet.

Funktioniert Apples Translation Framework im Simulator?

Nein. Das Framework läuft weder im iOS- noch im iPadOS-Simulator, Übersetzung testen Sie also auf echter Hardware4. Diese Beschränkung ist hart, nicht bloß empfohlen, und sie schließt Übersetzung in automatisierten UI-Tests im Simulator ebenfalls aus.

Wie bringe ich eine Foundation-Models-Funktion dazu, in jeder Sprache zu funktionieren?

Klammern Sie sie ein: Übersetzen Sie die Nutzereingabe in die Sprache, in der Ihre Logik denkt, lassen Sie die Foundation Models-Arbeit auf dem übersetzten Text laufen und übersetzen Sie das Ergebnis zurück. Die beiden Richtungen nutzen zwei TranslationSession-Konfigurationen (ihre Sprache nach Englisch, dann Englisch zurück), denn eine Sitzung ist für genau ein Sprachpaar konfiguriert. Beide Schichten laufen auf dem Gerät und sind kostenlos, die mehrsprachige Fassung kostet also weder Privatsphäre noch Cloud-Rechnung.

Wann sollte ich Übersetzung auf dem Gerät nicht einsetzen?

Wenn Sie bestmögliche Qualität oder die größte Sprachabdeckung brauchen (juristisch, medizinisch, veröffentlichte Inhalte), wenn eine Funktion beim ersten Start ohne Netz sofort laufen muss und Sie nicht vorab laden können, oder wenn Ihr Ablauf im Simulator laufen muss beziehungsweise Ihre App UIKit ohne Platz für einen SwiftUI-Host ist. Die letzten Beschränkungen sind harte Grenzen.



  1. Apple Developer, „Translation“-Framework. Ein hauseigenes Framework für systemseitige Übersetzung auf dem Gerät, aufgebaut auf Core-ML-Modellen; es übersetzt lokal und ohne Netzwerkaufruf, sobald die Sprachdaten installiert sind. 

  2. Apple Developer, “translationPresentation(isPresented:text:attachmentAnchor:arrowEdge:replacementAction:)” (ab iOS 17.4) zeigt die eingebaute Übersetzungs-UI des Systems über einer View; “translationTask(_:action:)” (ab iOS 18) führt eine asynchrone Closure aus, die eine TranslationSession für programmatische Übersetzung in Ihrer eigenen Oberfläche bereitstellt. 

  3. Apple Developer, TranslationSession und TranslationSession.Request. translate(_:) verarbeitet einen einzelnen String; die Stapel-API nimmt ein Array von Anfragen entgegen, von denen jede einen clientIdentifier trägt, der mit der passenden Antwort zurückkommt — so lassen sich Ergebnisse unabhängig von der Reihenfolge wieder ihren Eingaben zuordnen. 

  4. Die Übersetzungs-APIs des Translation Frameworks werden über SwiftUI-View-Modifier bereitgestellt (translationTask, translationPresentation) und haben keinen UIKit-Einstiegspunkt; ein UIKit-Screen bettet eine SwiftUI-View ein (etwa über UIHostingController), um sie zu nutzen. Außerdem verlangt das Framework ein physisches Gerät und funktioniert nicht im iOS-Simulator. Siehe die Dokumentation zum Translation Framework und “Translating text within your app”

  5. Apple Developer, “Translating text within your app” und LanguageAvailability. Die erste Übersetzung eines Quell-Ziel-Sprachpaars lädt die benötigten Sprachdaten herunter; das Framework bietet Prüfungen der Sprachverfügbarkeit sowie einen Weg, ein Paar vorab vorzubereiten (herunterzuladen), damit Apps den Download-Moment steuern können, statt beim ersten Gebrauch zu stocken. 

  6. Verwandte Analysen des Autors zur Komposition von Fähigkeiten auf dem Gerät: Apple Foundation Models: Das On-Device-LLM-Framework, On-Device-LLMs mit Apples Foundation Models und Writing Tools: API-Einbindung. Das Muster „hinein übersetzen, schlussfolgern, hinaus übersetzen“ klammert einen einsprachigen Foundation-Models-Aufruf in Translation ein und macht eine Funktion auf dem Gerät mehrsprachig, ohne dass Daten das Gerät verlassen. 

Verwandte Beiträge

Genmoji und NSAdaptiveImageGlyph: Inline-Emoji unter iOS 18+

Genmoji steckt als NSAdaptiveImageGlyph im attributierten Text. UITextView und TextKit 2 brauchen supportsAdaptiveImageG…

8 Min. Lesezeit

Image Playground API: SwiftUI Sheet, programmatischer Image Creator und Stilsteuerung

Image Playground bietet Apps zwei Wege: den SwiftUI-Modifier imagePlaygroundSheet und die programmatische ImageCreator-A…

9 Min. Lesezeit

Claude Code Auto Mode Is Not a Security Boundary

Anthropic closed a working auto-mode bypass as Informative: the classifier is best-effort, not a guarantee. What actuall…

10 Min. Lesezeit