跳转至

区域检测

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]

优先级顺序

区域检测器按以下顺序解析用户区域:

  1. 账户区域 — 如果用户有保存的偏好
  2. 设备区域Platform.localeName(例如pt_BR
  3. 浏览器语言navigator.language(仅Web端)
  4. 回退 — 英语(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端点

GET /api/v1/config/locale/:locale

响应:

{
  "locale": "pt-BR",
  "defaultLanguages": ["pt", "en", "es"],
  "availableLanguages": ["pt", "en", "es", "fr", "it", "de", "ca"],
  "showAllOption": true
}

管理后台管理

区域配置通过管理后台进行管理:

  • 随着用户需求出现添加新区域
  • 根据区域分析数据调整语言列表
  • 查看区域流量以识别服务不足的区域

详见管理API POST /api/v1/admin/locales 了解配置管理。