1行で翻訳機能を追加できる Translation API #WWDC24
WWDC24のセッション "Meet the Translation API" を見たメモ
アプリに翻訳機能を入れられますよ、というもの。iOS, iPadOS, macOSで利用可能。
フレームワークのドキュメントはこちら:
2つのオプション
アプリ内で翻訳を提供するための選択肢として、以下の2つがある:
Simple overlay
Flexible translation
1行で書けるオーバーレイ翻訳
たった1行 `translationPresentation` メソッドを呼ぶだけで、引数に指定したテキストが翻訳されたものが表示されるようになる。
ボタンを押すだけで、
翻訳がオーバーレイされる:
ターゲット言語を変更するオプションもある:
こちらはiOS 17.4で追加されたもので、iOS 18を待たずとも今すぐ利用できる。
柔軟なテキスト翻訳
さすがにシンプル過ぎるので、多くのユースケースではもうちょっと実装をコントロールできるAPIが必要だと思う。
たとえばこんな感じで、原文を上書きするんじゃなくて、同時に表示したいケース:
TranslationSession
翻訳結果のUIでの見せ方をカスタマイズしたいetc.の柔軟にやりたい場合に使うのが `TranslationSession` クラス。
一度に複数の文字列を翻訳可能
Swift Concurrencyを使用して結果を取得できる
こちらはiOS 18以降で利用可能。
最小実装コード:
let session: TranslationSession
let inputStrings: [String] = ...
let requests: [TranslationSession.Request] = inputStrings.map { init(sourceText: $0) }
for response in try? await session. translations (from: requests) {
handle (response: response)
}
`TranslationSession` のインスタンスを自分でつくることはないらしい。こんな感じで `.translationTask` を用いてクロージャ経由でインスタンスを取得し、UIに結果を表示する:
翻訳が発生するタイミングをコントロールする
`TranslationSession.Configuration` を利用するらしい。
サポートしている言語
日本語もサポート。
オンデバイス翻訳/言語モデルのダウンロード
各言語のモデルはダウンロードされ、`TranslationSession` はオンデバイスで翻訳処理を行うという話。
ここでの重要な点は2点
これらのモデルは、システム上のすべてのアプリで共有される
だいたいフレームワークがいい感じにやってくれる
その他解説されていること
言語の選択方法
バッチ翻訳(一度に複数の文字列を翻訳)
ベストプラクティス
最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/