快速開始

Hono

本頁示範 Intor 在 Hono 專案中的最小整合流程。


安裝

本範例依照 Hono 官方流程建立,並選擇 cloudflare-workers 作為執行環境。
相關設定請參考:Hono

安裝 Intor:

npm install intor
yarn add intor
pnpm add intor
bun add intor

專案結構

index.json
U

index.json
U

index.ts
M
intor-config.ts
U

整合步驟

♯1 翻譯內容

在專案中建立 messages 資料夾,並依語系建立子資料夾,每個語系提供一個 index.json

index.json
U

index.json
U
{
  "hello": "Hello, {name}",
  "rich": "A <tag>text</tag>."
}
{
  "hello": "Bonjour, {name}",
  "rich": "Un <tag>texte</tag>."
}

♯2 設定檔

src/ 下建立 intor-config.ts
本範例採用最基本的翻譯內容載入方式,直接將 messages 定義於設定檔中。

詳見:載入翻譯內容

intor-config.ts
U
import { defineIntorConfig } from "intor";
import EN from "../messages/en/index.json";
import FR from "../messages/fr/index.json";

export const intorConfig = defineIntorConfig({
  defaultLocale: "en",
  supportedLocales: ["en", "fr"],
  messages: {
    en: EN,
    fr: FR,
  },
});

♯3 初始化

將 Intor 的 request handler 註冊至 Hono。

index.ts
M
import { Hono } from "hono";
import { createIntorHandler } from "intor/hono";
import { intorConfig } from "./intor-config";

const app = new Hono();

app.use(createIntorHandler(intorConfig));

export default app;

使用範例

透過 getTranslator 取得翻譯相關能力:

  • t:取得對應文字
  • tRich:渲染包含語意 tag 的結構化翻譯內容
index.ts
M
import { getTranslator } from "intor/hono";

// ...

app.get("/", async (c) => {
  const { t, tRich } = await getTranslator(intorConfig, c);

  return c.json({
    hello: t("hello", { name: "Intor" }),
    rich: tRich("rich", { tag: (children) => `<b>${children}</b>` }),
  });
});

// ...

作為便利方式,翻譯能力亦可直接自 c 取得,但此方式下型別推導能力有限。

app.get("/", async (c) => {
  return c.json({
    hello: c.get("t")("hello", { name: "Intor" }),
    rich: c.get("tRich")("rich", { tag: (children) => `<b>${children}</b>` }),
  });
});