![見出し画像](https://assets.st-note.com/production/uploads/images/143977614/rectangle_large_type_2_b61ee64867d8090a77d59f855815bb68.png?width=800)
1行で翻訳機能を追加できる Translation API #WWDC24
WWDC24のセッション "Meet the Translation API" を見たメモ
⚠️ 本記事の画像、引用部分は基本的に同セッションからの引用です。
アプリに翻訳機能を入れられますよ、というもの。iOS, iPadOS, macOSで利用可能。
![](https://assets.st-note.com/img/1718319479479-vmat0zp79o.png?width=800)
フレームワークのドキュメントはこちら:
2つのオプション
アプリ内で翻訳を提供するための選択肢として、以下の2つがある:
Simple overlay
Flexible translation
1行で書けるオーバーレイ翻訳
![](https://assets.st-note.com/img/1718319744583-OjENhF8mkg.png?width=800)
たった1行 `translationPresentation` メソッドを呼ぶだけで、引数に指定したテキストが翻訳されたものが表示されるようになる。
ボタンを押すだけで、
![](https://assets.st-note.com/img/1718320565333-JCH42ehEDz.png?width=800)
翻訳がオーバーレイされる:
![](https://assets.st-note.com/img/1718320589343-S6uiE7dfbE.png?width=800)
ターゲット言語を変更するオプションもある:
![](https://assets.st-note.com/img/1718320624919-TzeaZW70P0.png?width=800)
こちらはiOS 17.4で追加されたもので、iOS 18を待たずとも今すぐ利用できる。
柔軟なテキスト翻訳
さすがにシンプル過ぎるので、多くのユースケースではもうちょっと実装をコントロールできるAPIが必要だと思う。
たとえばこんな感じで、原文を上書きするんじゃなくて、同時に表示したいケース:
![](https://assets.st-note.com/img/1718321693290-3U0a15XlO7.png?width=800)
TranslationSession
翻訳結果のUIでの見せ方をカスタマイズしたいetc.の柔軟にやりたい場合に使うのが `TranslationSession` クラス。
![](https://assets.st-note.com/img/1718320652408-wGs8EUJim2.png?width=800)
一度に複数の文字列を翻訳可能
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に結果を表示する:
![](https://assets.st-note.com/img/1718321045211-ZhLYMp2d9q.png?width=800)
翻訳が発生するタイミングをコントロールする
`TranslationSession.Configuration` を利用するらしい。
![](https://assets.st-note.com/img/1718321365575-nUnV9Zs4Pm.png?width=800)
このクロージャはコンフィギュレーションが変更されるたびに実行されます。最初に翻訳をトリガーするには、コンフィギュレーションをnil以外の値に設定します。翻訳を再びトリガーする必要がある場合、SwiftUIがクロージャを再び実行することを認識するように設定を変更する必要があります。新しいテキストを翻訳したいのであれば、ソースもしくはターゲット言語を変更するか、設定に対してinvalidateを呼び出すことでできます。
サポートしている言語
日本語もサポート。
![](https://assets.st-note.com/img/1718322350721-wl7k6tJOSl.png?width=800)
オンデバイス翻訳/言語モデルのダウンロード
![](https://assets.st-note.com/img/1718321946824-lyWVj8Jk1P.png?width=800)
各言語のモデルはダウンロードされ、`TranslationSession` はオンデバイスで翻訳処理を行うという話。
ここでの重要な点は2点
これらのモデルは、システム上のすべてのアプリで共有される
だいたいフレームワークがいい感じにやってくれる
APIが詳細を処理します。あなたのアプリが翻訳するとき、フレームワークは言語がまだインストールされていない場合にのみダウンロード許可を求めます。また、ダウンロード中にユーザーに進捗状況を表示するのもAPIが行います。そして、ユーザーがこのシートを解除しても、あるいはアプリから完全に離れても、これらのダウンロードはバックグラウンドで継続されます。
その他解説されていること
言語の選択方法
バッチ翻訳(一度に複数の文字列を翻訳)
ベストプラクティス
ここから先は
![](https://assets.st-note.com/production/uploads/images/30546/profile_06a075ed16533f7e4dbf64e4f60f99be.jpg?fit=bounds&format=jpeg&quality=85&width=330)
#WWDC24 の勉強メモ
WWDC 2024やiOS 18, visionOS 2についてセッションやサンプルを見つつ勉強したことを記事にしていくマガジンです。 …
最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/