区域检测¶
KanjiIQ自动检测用户所在区域,并展示与其区域相关的语言子集。这避免了让用户面对51种语言的下拉菜单,同时仍保持所有语言可访问。
检测链¶
graph TD
A[New User Visit] --> B[Read device locale<br/>Platform.localeName]
B --> C[Extract locale code<br/>e.g., pt-BR, en-US, ja-JP]
C --> D{Cached config<br/>available?}
D -->|Yes, < 7 days| E[Use cached config]
D -->|No| F[API call:<br/>GET /api/v1/config/locale/:locale]
F --> G{Locale<br/>recognized?}
G -->|Yes| H[Return locale config<br/>7-17 languages]
G -->|No| I[Return default config<br/>12 major languages]
H --> J[Cache in SharedPreferences<br/>TTL: 7 days]
I --> J
J --> K[Display language selector]
优先级顺序¶
区域检测器按以下顺序解析用户区域:
- 账户区域 — 如果用户有保存的偏好
- 设备区域 —
Platform.localeName(例如pt_BR) - 浏览器语言 —
navigator.language(仅Web端) - 回退 — 英语(
en)
预配置区域¶
locale_configs数据库表存储了30个预配置的区域映射:
| 区域 | 默认语言 | 总可用数 |
|---|---|---|
pt-BR |
葡萄牙语、英语、西班牙语 | 7 |
ja-JP |
日语、英语、简体中文、韩语 | 17 |
en-US |
英语、西班牙语、法语 | 12 |
fr-FR |
法语、英语、西班牙语、德语 | 10 |
de-DE |
德语、英语、法语、荷兰语 | 10 |
ar-SA |
阿拉伯语、英语、法语 | 8 |
hi-IN |
印地语、英语、孟加拉语、泰米尔语、泰卢固语、旁遮普语 | 12 |
| ... | ... | ... |
每个区域定义了:
- 默认语言:初始显示(3-5种最相关的语言)
- 可用语言:完整的区域语言集(7-17种语言)
"显示全部语言"开关¶
用户可以随时覆盖区域检测:
- 标记为"显示全部51种语言"的开关可将语言选择器扩展为完整列表
- 此偏好保存在
SharedPreferences中 - 一旦启用,将覆盖该设备的基于区域的过滤
API端点¶
响应:
{
"locale": "pt-BR",
"defaultLanguages": ["pt", "en", "es"],
"availableLanguages": ["pt", "en", "es", "fr", "it", "de", "ca"],
"showAllOption": true
}
管理后台管理¶
区域配置通过管理后台进行管理:
- 随着用户需求出现添加新区域
- 根据区域分析数据调整语言列表
- 查看区域流量以识别服务不足的区域
详见管理API POST /api/v1/admin/locales 了解配置管理。