すべてのユーザーが すべての投稿を読む。

API一回の呼び出しで30以上の言語に対応します。出力はその言語のネイティブが実際に書くような自然な文章で、2010年頃の翻訳ツールにありがちな不自然さはありません。ソウルやサンパウロのユーザーも、ロンドンのユーザーと同じプロダクトを、それぞれの言語で見られます。

リクエスト
curl https://auto18n.com/api/v1/translate \
  -H "X-API-Key: $AUTO18N_KEY" \
  -d '{
    "text": "You have 3 new messages.",
    "targetLanguage": "ja"
  }'
1回目の呼び出し
{
  "translatedText":
    "新しいメッセージが3件あります。",
  "detectedLanguage": "en",
  "cached": false,
  "usage": {
    "inputTokens": 152,
    "outputTokens": 23,
    "cost": 0.000055
  }
}
同じ呼び出しをもう一度
{
  "translatedText":
    "新しいメッセージが3件あります。",
  "detectedLanguage": "en",
  "cached": true,
  "usage": {
    "inputTokens": 0,
    "outputTokens": 0,
    "cost": 0
  }
}

実際のAPI呼び出しをそのまま掲載しています。2回目はcacheヒット:コスト0、約100msで返ります。

$0.28
翻訳100万文字あたり
Google翻訳は$20
33
言語をひとつのエンドポイントで
$0
繰り返しの文字列は無料 — cacheヒットに課金はありません
2 min
登録から最初の翻訳まで

試してみる

ユーザーが見る画面

デフォルトではあなたの言語で表示されます。実際に書かれた文を見たいときは、どれかの「原文を表示」を押せば切り替わり、もう一度押せば戻ります。再読み込みは発生しません。

田中 美咲@misaka_t
2h

今日のランチは渋谷の新しいラーメン屋に行ってきた。味噌ラーメンが絶品だった!並ぶ価値あり。

原文: 日本語
C
Carlos Mendes@carlosdev
4h

バックエンドをRustに移行したら、レイテンシが4分の1になった。この手のサービスでNodeに戻ることはもうない。

原文: ポルトガル語
L
Léa Dubois@lea_dbs
6h

下のパン屋のクロワッサンがおいしすぎて、他のところで朝ごはんを食べなくなった。

原文: フランス語
S
Sofía Ramírez@sofiruns
9h

たった今、人生初のフルマラソンを走り終えた。これのために2年間練習してきた。まだ実感が湧かない。

原文: スペイン語
김 지후@jihoo_k
12h

チーム全員がフルリモートになって半年。生産性はむしろ上がって、退職者もゼロ。オフィスって何のためにあったんだろう。

原文: 韓国語
M
Markus Weber@mweber_dev
1d

金曜の夕方5時にデプロイ。まあ、大丈夫でしょ。

原文: ドイツ語

投稿を1回の呼び出しで翻訳

ユーザーが書いた文章を送れば、読む人の言語で返ってきます。読まれるそばからその場で翻訳することも、これまでの投稿をまとめて埋めることもできます。

TypeScript SDK

投稿やチャットの描画処理に差し込むだけ。依存ゼロ、型付きエラー、Node 18+とedgeランタイム対応。

npm install auto18n

import Auto18n from "auto18n";

const a18n = new Auto18n({
  apiKey: process.env.AUTO18N_API_KEY,
});

// translate a post into the reader's language
const { translatedText } = await a18n.translate({
  text: post.body,
  targetLanguage: reader.locale,
});

素のHTTP

投稿やメッセージごとにPOST1回。ヘッダーで認証、JSONを送ってJSONが返ります。

curl https://auto18n.com/api/v1/translate \
  -H "X-API-Key: $AUTO18N_KEY" \
  -d '{
    "text": "lol that's so real",
    "targetLanguage": "fr"
  }'

まとめて埋める

何年分もの投稿がすでにある?バックグラウンドで送れば、アーカイブの処理が終わったときにwebhookで通知します。

// backfill old posts, 200 at a time
const { jobId } = await a18n.translateBulk({
  items: batch.map((p) => ({
    text: p.body,
    targetLanguage: "es",
  })),
});

ローカライズチームを抱えなくても、プロダクト全体をどの言語でも動かせます。

UGC、プロダクトコピー、通知、サポートチケットなど、何を投げても同じエンドポイントで処理します。最初のリクエストでモデルに問い合わせ、結果をcacheに保存し、それ以降の同じ文字列のリクエストはすべてcacheから返します。再翻訳は走りません。社内に翻訳者を置く必要も、日常的な文字列をレビューする担当を置く必要もありません。

出力は2015年頃のGoogle翻訳のようには聞こえません。カジュアルな投稿は翻訳後もカジュアルなまま、フォーマルな通知はフォーマルな調子を保ちます。モデルは1文ずつ独立して扱うのではなく、周辺の文脈から文体を読み取ります。

cacheがあるので、支払いは一度だけ

文字列を一度翻訳すれば、私たちが保持します。同じ文字列への以降のリクエストは翻訳費用がかからず、ストレージ行の料金だけが発生します。1エントリあたり月にコンマ数セント程度です。

すでにあるものを全部埋める

何年分もの投稿やメッセージがすでにDBにある?1ジョブにつき最大200件までまとめて送れます。処理はバックグラウンドで走り、完了したらwebhookに通知します。バルクジョブは全体が10%割引で、すでにcacheにあるものは再翻訳ではなくスキップされます。

テストは無料、本番から課金

テストキー(sk_test_*)は本物のモデルにアクセスして本物の出力を返しますが、課金はされません。テストキーで統合を組み終えてから、リリース直前に本番キーに差し替えるだけです。

チーム前提の設計

API keyは作成した個人ではなく、チームに紐づきます。キーのローテーションや課金変更を誰がやるかはロールで制御でき、エンジニア組織全体を、各自がアカウントを作らなくても1つのアカウントに招待できます。

頭に入るシンプルな料金

トークン単位の従量課金、プリペイド方式、月額最低料金なし。テストキーは無料で、本物のモデルを使えます。

入力$0.225 / 1M tokens
出力$0.90 / 1M tokens
バルクジョブ−10%
BYOKプラットフォーム手数料$0.10 / 1M tokens
cacheからの繰り返し$0

一般的なトークン比率なら100万文字あたり約$0.28。同じ100万文字にGoogle翻訳は$20かかります。

料金の詳細 →

最初の翻訳まで2分

アカウントを作って、ドキュメントからcurlのスニペットをコピーすれば、それで終わりです。実質ステップ3はありません。