@alxia/ 语言
请求的语言 阿尔克夏, (中文(简体) ), 键入为您支持的语言 —— 从来不是客户端构成的字符串 。 没有 依赖性.
bun add @alxia/language @alxia/core
bun add -d typescript
使用量
import { alxia } from '@alxia/core';
import { language } from '@alxia/language';
const supported = ['en', 'fr', 'pt-BR'] as const;
const greetings: Record<(typeof supported)[number], string> = { en: 'Hello', fr: 'Bonjour', 'pt-BR': 'Olá' };
const app = alxia()
.use(language({ supported, fallback: 'en' }))
.get('/', ({ language, reply }) => reply(200, greetings[language])); // 'en' | 'fr' | 'pt-BR'
app.listen(3000);
它读取,在 order数字 :
| 来源 | |
|---|---|
query | ?lang=fr |
cookie | language=fr |
path | /fr/products时 pathIndex |
header | Accept-Language,按重量: de, fr-CA;q=0.8 实值 fr |
接下来 resolve(ctx) ——用户节省了偏好——然后 fallback标签
以基本语言比对任何情况(fr-CA 页:1 fr)或由a
区域pt 页:1 pt-BR) (中文(简体) ). languageSource 说哪个消息来源决定了.
每个回复都说 Content-Language,以及 Vary 以它所读的信头盟誓.
与 persist,在饼干中保留一个名为查询的语言。 给
use 在应用程序上,它运行 在每一个请求: 404说 Content-Language 我也一样.
阅读应用程序的上下文
注释 resolve由早期的中件添加什么来决定的参数——
签名用户保存的语言。 中间软件需要它:一个应用程序
不给 user 在它无法使用之前.
import { alxia, type BaseContext } from '@alxia/core';
import { language } from '@alxia/language';
const byUser = language({
supported: ['en', 'fr'],
fallback: 'en',
order: ['query', 'cookie'],
resolve: ({ user }: BaseContext & { user: { language: string } | null }) => user?.language,
});
alxia().plugin(auth).use(byUser); // auth derives user
alxia().use(byUser); // a compile error: this app gives no `user`
A 类 resolve 附加说明 any 所以中间的软件被拒绝了
在每一个应用程序上:注释其内容,或者不附加说明.
选项
| 选项 | 默认 | |
|---|---|---|
supported | 所需经费 | 语文: language类型 |
fallback | 所需经费 | 其中之一; 类型拒绝另一个 |
order | ['query', 'cookie', 'header'] | |
query, (中文(简体) ), cookie | lang, (中文(简体) ), language | 他们的名字 |
pathIndex | 0 个 | |
persist | false | true,或 { maxAge, secure } |
contentLanguage | true | |
resolve | 无 | (ctx) => string | undefined; 注释 ctx 读取早先的中间软件添加的内容 |
vary | 无 | 标题 resolve 读取,添加到 Vary |
API 密码
| 导出 | |
|---|---|
language(options) | 中间件, 交给 app.use: 它添加 language 财务报告和审定财务报表 languageSource |
LanguageOptions | 其选项: supported, (中文(简体) ), fallback, (中文(简体) ), order, (中文(简体) ), query, (中文(简体) ), cookie, (中文(简体) ), pathIndex, (中文(简体) ), persist, (中文(简体) ), contentLanguage, (中文(简体) ), resolve, (中文(简体) ), vary |
negotiate(header, supported) | 支持的语言 Accept-Language 首选 |
parseAcceptLanguage(header), (中文(简体) ), match(tag, supported) | 编 次 |
LanguageContext, (中文(简体) ), LanguageSource, (中文(简体) ), Accepted | 类型 |
LanguageMiddleware<L, Requires> | 什麽 language() 返回: 中间软件添加 LanguageContext<L>,要求应用程序什么 resolve 读取 |