apple_native_translate 0.1.1
apple_native_translate: ^0.1.1 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.
apple_native_translate #
Apple の Translation framework(iOS 18 以降)を Flutter から呼びます。 端末の中だけで訳すので 通信も料金も発生しません。品質は iPhone 標準の翻訳アプリと同じです。
使えない場面 #
- iOS 18 未満
- iOS 以外(Android・Web など)
- シミュレータ(実機が必要です)
- 対応していない言語の組み合わせ
これらの場合は例外を投げず、false か null を返します。呼び出し側でそのまま別の翻訳へ切り替えてください。
使い方 #
import 'package:apple_native_translate/apple_native_translate.dart';
// 1. この端末で使えるか
if (!await AppleNativeTranslate.isAvailable()) {
// iOS 18 未満。別の翻訳を使ってください。
}
// 2. その組み合わせが使えるか
final status = await AppleNativeTranslate.status(source: 'ja', target: 'en');
// installed / supported / unsupported / unavailable
// 3. まとめて訳す(入れた順で、同じ件数が返ります)
final out = await AppleNativeTranslate.translate(
texts: ['秘伝の手羽先', '鳥の唐揚げ'],
source: 'ja',
target: 'en',
);
// out == null なら失敗。別の翻訳へ落としてください。
言語がまだ端末に入っていないときは、初回の translate(または prepare)で
Apple の取り込みの確認が画面に出ます。承諾すると、以後はオフラインで動きます。
言語コード #
BCP-47 で渡します。中国語は zh ではなく zh-Hans / zh-Hant を使ってください。
仕組み #
iOS 18〜25 では TranslationSession を UI 無しで作れません
(UI 無しの初期化子 init(installedSource:target:) は iOS 26 以降です)。
そのため、見えない 1×1 の SwiftUI ビューを一時的に貼り、その .translationTask から
セッションを受け取ります。貼ったビューは終了時に必ず外します。
Apple は Bundle ID と言語の組み合わせを利用統計として集めますが、 訳す文章そのものは送信されません。