ナレッジベース
相手の言語で送る
自分の言語で書き、受信者の言語で届ける。
詳細
- 依頼するまで何も翻訳されず、自分で読むまでは何も送信されない。コンポーザーで言語を構えるだけでは費用は発生しない。モデルが呼ばれるのはプレビューを開いたときで、そこには書いた内容と受信者が受け取る内容が上下に並ぶ。1 回の送信には 3 回の呼び出しがかかる。本文、件名、そして何語で書かれたかの判定である。
- 翻訳は、送信前に自分で編集できる。プレーンなボックスではなくリッチテキストのボックスに入るので、リンクや箇条書き、太字の行は修正しても壊れず、翻訳された件名もその横で編集できる。承認したものが一字一句そのまま出ていく。承認後にメッセージへ手を加えると、承認は古いまま送られるのではなく破棄される。また、言語を構えたままプレビューしていないメッセージで送信を押すと、推測する代わりにプレビューが開く。
- 言語は勝手に決められるのではなく、提案される。1 つ目の提案は返信しようとしているメッセージから来る。その言語は返信を開いたときに判定されるが、これは Settings → General で翻訳先の言語を指定してからの話で、それ以前の推測は字種だけに基づくため、キリル文字とラテン文字は分けられてもフランス語とドイツ語は分けられない。もう 1 つは、この受信者に最後に書いたときの言語から来る。どちらもピッカーの先頭に並ぶ提案であって、決定ではない。誰に最後にデンマーク語で書いたかはブラウザが覚えているので、2 台目のマシンには付いてこない。
- 自分が書いた内容は翻訳の下に、罫線をはさみ、受信者の言語で “Ursprüngliche Nachricht (English)” のようにキャプションを付けて置かれる。そのため、読む人は不自然に感じた文を確かめられる。これがなければ、どちらも出力を見られないモデルを信用しろと求めることになる。これはトグルで、既定ではオンである。
- 可能性の高い十数言語ではなく、すべての言語。200 行あり、リーダー側が翻訳に使うのと同じ表を、コード、英語名、その言語自身の名前で検索できる。各行には旗が付くが、旗は識別子ではなく目で探すための補助である。旗は国であり、国は言語ではないからだ。行の意味を表すのはその言語自身の名前であり、旗はひと目で見つけやすくするだけのものである。
- 右から左に書く言語は、右から左に組まれる。翻訳は右から左のブロックで包まれ、その下の原文は自身の方向を保つ。左から右にレイアウトされたアラビア語の本文は、ほとんどのクライアントで読めないからだ。方向はメッセージとともに運ばれる。
dirは送信時のサニタイザが残す数少ない属性の 1 つであり、これを落とすのは見た目の問題ではなく正しさのバグだ、という理由による。左から右にレイアウトされたアラビア語の本文は、単にスタイルが崩れているのではなく、読めない。 - 翻訳されるのは自分が書いた内容だけである。返信の下に引用された履歴は、届いたときの言語のまま残る。それは他人のメッセージであり、翻訳すればその人が使っていない言葉で引用し返すことになるからだ。署名は翻訳のあとに、自分が書いた言語のまま付く。
- メッセージ間でキャッシュは行われない。送信ごとに個別に翻訳されるので、同じ段落を 20 人に 20 通の別々のメッセージとして送れば、翻訳は 20 回、費用も 20 倍になる。20 人の受信者に 1 通なら 1 回である。フレーズの記憶はなく、昨日送ったメッセージから再利用されるものもない。
- 翻訳して送ったスレッドは記憶される。そのため、それへの返信は、自分の読めない言語だと気づくのを待つまでもなく、最初から自分の言語に翻訳された状態で開く。これはスレッド内の、自分以外の人から届いた最新のメッセージに対して発動し、Settings → General でオフにできる。抜けているのは自分が始めた会話である。新規の翻訳付きメッセージは、それが作るスレッドに対して記録されないので、そうしたメッセージへの最初の返信の翻訳は、自分で依頼する必要がある。
- 同じオプションはプログラムからの送信にもあり、どこでも任意である。POST /emails の
translate: { to, from?, subject?, includeOriginal? }(100 件のバッチのうち最大 10 件まで指定できる。翻訳は 1 通あたり複数回のモデル呼び出しを要するため、バッチ自体の上限より低く抑えてある)、SDK のemails.translate()とlanguages.list()、MCP サーバーの sendEmail のtranslateToと、その隣のpreviewTranslationである。コードからの送信にプレビューはなく、プレビュー用の呼び出しはそのためにある。また、翻訳を生成できない場合は、書いた言語のまま投函するのではなく、送信を拒否する。