# `naisi_accept_language_parse`

解析浏览器 HTTP Accept-Language，返回优先级最高的一个合法语言标签。

按 RFC 9110 解析 q 权重：忽略非法标签、非法权重、q=0 和通配符，权重相同时保留
原始顺序最靠前的一项。与 URL 标签校验函数共用 BCP 47 / IANA 标准化规则。
显示名称采用 CLDR，英文语言名不足时采用 IANA Description；缺少译名不影响优先级。
现有记录缺失的显示译名已在补充数据源中填入原英文名称；私用标签无名称资料时仍为空字符串。
无完整 Locale 名称时使用基础语言名称，仍保留原标签明确给出的地区；不猜国家。
HTTP 语法允许的空格和制表符仅作为列表分隔空白处理。

## 函数签名

```php
function naisi_accept_language_parse(string $accept_language): ?array
```

## 调用前提

应用入口先调用 [naisi_is_ext_license_valid](/web/developers/naisilib/naisi-is-ext-license-valid) 并确认返回 `true`。只验证同一请求内已有的有效 FULL/BASIC 证明；没有证明或证明失效时立即返回失败值，不现场补做完整校验。

授权类别：`LICENSE`；执行模式：`PROOF`。许可不代替登录、租户或权限上下文；身份与数据要求见本页参数及用途说明。

## 参数

### `$accept_language`

- 类型：`string`
- 必填：是
- 默认值：无
- 方向：输入参数。

完整 Accept-Language 字段值，例如 zh-CN,zh;q=0.9,en-US;q=0.8。

## 返回值

类型：`array{tag:string,language:string,region:string,numeric:string,name_en:string,name_zh:string,name_native:string}|null`

有合法标签时返回最高优先级语言信息；没有合法标签或未授权时整体返回 null。
缺失标量子项均为空字符串，包括无资料的显示名；不返回 null 子项。
本函数不决定站点启用的语言，调用方使用自己的语言路由表匹配 tag。
numeric 为标签中明确地区对应的三位 ISO 3166-1 数字代码字符串，保留前导零。
标签未指定地区时 region 为空字符串；无 ISO 国家/地区映射（如 es-419）时 numeric 为空字符串。
语言地区标签不代表用户实际所在国家，也不能用于推断货币。

## 调用示例

当前请求须满足上方调用前提；请检查实际返回值和引用输出，随机结果及数据包内容以运行环境为准。

```php
$accept_language = 'zh-TW;q=1,en-US;q=0.001';

$result = naisi_accept_language_parse($accept_language);
var_export($result);
```

## 版本信息

- 自版本：`1.0.6`
- 实现模块：`language`
- 授权类别：`LICENSE` / `PROOF`
- 失败回退：`null`
- 文档同步：`2026-10-18`
