apple_native_translate 0.1.7
apple_native_translate: ^0.1.7 copied to clipboard
On-device text translation using Apple's Translation framework on iOS 18 and later, exposed to Flutter with a simple batch API and a safe fallback.
0.1.7 #
- iOS 26 以降では、翻訳のときに SwiftUI のビューをまったく使わなく
なりました。
TranslationSession(installedSource:target:)で直接 セッションを作ります。 - 0.1.6 で「入っていない組み合わせでは貼らない」ようにしましたが、 それでも1回だけ画面が出ていました。入っている組み合わせでも、 1x1 のビューを貼った瞬間にシステム側の翻訳 UI が立ち上がるためです。 iOS 18〜25 には UI 無しの初期化子が無く、貼るしかありませんでした。 iOS 26 で初期化子が入ったので、そちらを使います。
- iOS 18〜25 では、これまで通りビューを貼ります。この範囲では 公開 API の中に他の手がありません。
prepare(取り込みそのものを頼む呼び出し)は、どの版でも これまで通りビューを貼って確認画面を出します。
0.1.6 #
- ふつうの翻訳では、端末に入っていない組み合わせのとき、SwiftUI の
ビューも
TranslationSession.Configurationも作らなくしました。 そのまま失敗を返します。 - 0.1.5 では
prepareTranslation()を呼ばないようにしましたが、 それだけでは足りませんでした。呼ばなくても、入っていない組み合わせで.translationTaskを貼った時点でシステム側の取り込み画面が 立ち上がります。アプリを更新した直後はLanguageAvailabilityが 一時的に.supportedを返すため、そこで貼ってしまい、画面が一瞬 出ていました。組み合わせが2つあれば2回続けて出ます。 - 貼らなければ出ません。呼んだ側は失敗を受けて別の翻訳(ML Kit)に 切り替えるので、訳は普通に出ます。
prepare(取り込みそのものを頼む呼び出し)は、これまで通り必要なら 確認画面を出します。ここが唯一の入口になりました。
0.1.5 #
- ふつうの翻訳では
prepareTranslation()を一切呼ばなくしました。 Apple の取り込み確認が出るのはこの呼び出しだけです。呼ぶのは、 取り込みそのものを頼まれたとき(prepare)に限りました。 - 0.1.4 の「一度でも入っていた組み合わせを覚える」方式では足りません
でした。覚えは
.installedを一度読めて初めて入るので、アプリを 更新した直後の1回目にLanguageAvailabilityが一時的に.supportedを返すと、覚えが空のまま確認画面が出ます。組み合わせが2つあれば 2回続けて出ます。覚えの仕組みは取り除きました。 - 入っていない組み合わせで翻訳を頼まれた場合は、その1回が失敗します。 呼ぶ側が ML Kit に切り替えるので、訳は出ます。
0.1.4 #
- 0.1.2 と 0.1.3 の「ビューを貼りっぱなしにする」書き換えを取り消しました。
.translationTaskが二度目以降に動かないことがあり、返事が来ないまま 待ち続けて、訳が出なくなっていました。0.1.1 と同じ、必要なときだけ 貼って終わったら剥がす方式に戻しています。 - アプリを更新した直後に Apple の取り込み確認が一瞬だけ出る問題は、
別の方法で直しました。一度でも
.installedだった言語の組み合わせをUserDefaultsに覚え、ふつうの翻訳では二度とprepareTranslation()を呼びません。覚えはアプリを更新しても残ります。 prepare(取り込みそのものを頼む呼び出し)は、これまで通り必要なら 確認画面を出します。- 覚えている組み合わせで実際に訳せなかったときは、覚えを消して次に備えます。
- ふつうの翻訳の打ち切りを 180 秒から 15 秒に縮めました。Apple が返さなく ても、すぐ ML Kit に切り替わります。取り込みの待ち時間は 180 秒のままです。
0.1.1 #
- すでに端末に入っている言語で、Apple の取り込み画面が一瞬だけ出てしまう
問題を直しました。呼び出しの前に取り込み状況を調べ、入っているときは
prepareTranslation()を呼びません。 - 取り込みだけを頼んだ(
prepare)ときにすでに入っていれば、 画面を貼らずにそのまま返します。 - 対応していない言語の組み合わせは、その場で失敗を返すようになりました。
0.1.0 #
- 初版。iOS 18 以降で Apple の Translation framework を使って端末内で翻訳します。
isAvailable/status/prepare/translateの4つを用意しました。- iOS 18 未満と iOS 以外では、呼んでも安全に失敗します(例外は投げません)。