i18n 是 internationalization 的縮寫,意思是國際化,也就是支援多國語言。
在開發 Bot 時,我們會希望能夠支援多國語言,這樣才能讓更多的人使用我們的 Bot,而不是只有一個語言的使用者。
因為 Discord 的社群是全球的,所以我們需要讓使用者能夠自行設定語言,這樣才能讓不同語言的使用者能夠選擇自己想要的語言。
因此,我們可以在 guild
user
兩個層級實作語言設定。
如果使用者個人有設定語言,則使用個人的設定,否則使用 guild
的語言設定。
那我們應該會需要 !lang
和 !channel lang
指令來讓使用者設定語言。
我們在使用模組時,需要給定一個 fallback
語言,這樣當使用者沒有設定語言(或設定的語言沒有相對應詞語)時,我們就能夠使用 fallback
語言來顯示。
另外,我們還需提供一個 table
,來儲存所有的語言對應的詞語,那如果放進去的是一個回傳字串的函式呢?就代表我們會使用呼叫時傳入的參數來產生字串,這樣就能夠讓我們顯示的語言更有彈性。
在使用時,我們可以從模組在 ctx
中添加的 .t
屬性來取得翻譯後的字串。
async messageCreate(
args: [message: Message<boolean>],
ctx: StoreContext & StoreSubContext,
next: CallNextModule,
): Promise<void> {
const [message] = args;
await message.reply(ctx.t("hello"));
// 或是
await message.reply(ctx.t("time", { time: new Date() }));
}
以 2022/09/28 20:00 ~ 2022/09/29 20:00 文章觀看數增加值排名
誤差: 1 小時
+1064
D01 - 沒時間解釋了,快上車!
+1010
D10 - 讓前後端接上線
+1009
D09 - NestJS 是啥?好吃嗎?
+991
D08 - 載入就應該要有載入的樣子
+988
D11 - 開房間!開派對!♪( ◜ω◝و(و
+981
D02 - 來打個草稿吧
+978
D06 - 打造遊戲選單按鈕
+973
D04 - 門面怎麼可以沒有背景
+967
D03 - 建立專案
+957
D05 - 飄吧!多邊形!
+956
D12 - 歡迎光臨遊戲大廳
+956
D13 - 來布置一下吧
+952
D07 - 開趴前先 loading 一下
+950
D14 - 裝飾大廳細節
+326
「全端挑戰」 express用法 建立Api schema CRUD 的練習與熟悉 part1
+281
React白話文運動10-React Props
+273
React白話文運動01-介紹
+272
React白話文運動05-高階函式(Higher-order function)
+271
終究都要學 React 何不現在學呢? - React 基礎 - React 是什麼? - (1)
+271
React白話文運動12-React Hook-useState 01
因為今天內容有點無聊,所以... 今天排行榜買一送一!