语言检测:动态多语言支持
本文解释我们如何自动检测并以用户首选语言提供内容。
问题:服务全球用户
用户来自不同国家,使用不同语言:
-
印度:印地语、孟加拉语、泰米尔语、泰卢固语、古吉拉特语、马拉地语、卡纳达语、马拉雅拉姆语、旁遮普语、乌尔都语
-
欧洲:德语、法语、西班牙语、意大利语、葡萄牙语、俄语
-
亚洲:日语、韩语、中文
我们需要检测他们的语言偏好并自动提供翻译内容。
检测优先级
我们按顺序检查多个来源:
1. URL参数 (?lang=hi)
2. 会话 (首次检测后存储)
3. Cookie (translation_lang 或 lang)
4. 浏览器Accept-Language头部 (未来)
5. 默认 (英语)
为何采用此顺序?
URL参数优先:允许显式语言切换
会话第二:在浏览会话期间持久化
Cookie第三:跨会话持久化(30天)
默认最后:新用户的回退方案
实现
def get_locale():
# 1. 检查URL参数
lang_param = request.args.get("lang")
if lang_param in valid_langs:
return lang_param
# 2. 检查会话
if "translation_lang" in session:
return session["translation_lang"]
# 3. 检查cookie
# ... (实现细节省略)
语言切换
用户可通过URL切换语言:
/p/Treo-N100-8-256?lang=hi
这会触发:
1. 设置会话:session["translation_lang"] = "hi"
2. 设置cookie:translation_lang=hi; Max-Age=2592000 (30天)
3. 重定向:从URL中移除lang参数
优势:语言选择后URL更简洁
支持的语言
我们支持20种语言:
印度语言 (10种):
-
印地语 (hi)
-
孟加拉语 (bn)
-
泰米尔语 (ta)
-
泰卢固语 (te)
-
古吉拉特语 (gu)
-
马拉地语 (mr)
-
卡纳达语 (kn)
-
马拉雅拉姆语 (ml)
-
旁遮普语 (pa)
-
乌尔都语 (ur)
欧洲语言 (7种):
-
德语 (de)
-
法语 (fr)
-
西班牙语 (es)
-
意大利语 (it)
-
葡萄牙语 (pt)
-
俄语 (ru)
亚洲语言 (3种):
-
日语 (ja)
-
韩语 (ko)
-
中文 (zh)
内容翻译
不同类型的内容使用不同的翻译方法:
静态模板 (Flask-Babel)
导航、按钮、标签通过.po文件翻译:
{{ _('Add to Cart') }} → "कार्ट में जोड़ें" (印地语)
动态内容 (TranslationManager)
产品名称、功能通过短语表翻译:
"Mini PC" → "मिनी पीसी" (印地语)
长内容 (DeepSeek AI)
产品描述、文章通过AI翻译:
"Compact office computer..." → "कॉम्पैक्ट ऑफिस कंप्यूटर..." (印地语)
参见:翻译系统了解详情
区域格式化
语言选择也影响格式化:
数字格式
英语:1,234.56
欧洲:1.234,56 (分隔符反转)
印度:1,23,456 (十万/千万分组)
日期格式
英语:Feb 18, 2026
欧洲:18.02.2026
印度:18/02/2026
货币
英语:₹1,234
欧洲:€1.234
国际:$1,234
语言选择器UI
用户可通过下拉菜单切换语言:
位置:顶部导航栏
显示:国旗图标 + 语言名称
行为:使用?lang=<代码>重新加载页面
SEO考虑
URL结构
我们使用单一URL支持所有语言(无/hi/、/de/前缀):
优势:架构更简单,无重复内容问题
权衡:每种语言的SEO价值较低
Hreflang标签
我们添加替代语言链接:
<link rel="alternate" hreflang="en" href="https://www.thinvent.in/p/Treo-N100">
<link rel="alternate" hreflang="hi" href="https://www.thinvent.in/p/Treo-N100?lang=hi">
<link rel="alternate" hreflang="de" href="https://www.thinvent.in/p/Treo-N100?lang=de">
优势:Google知道显示哪个语言版本
回退策略
如果选定语言缺少翻译:
1. 尝试英语:大多数内容有英语版本
2. 显示原文:总比没有好
3. 加入翻译队列:添加到翻译队列进行批处理
性能
缓存
翻译内容缓存在内存中:
短语表:启动时加载一次
AI翻译:缓存在数据库中
优势:每个请求无翻译开销
懒加载
仅在需要时加载翻译:
产品描述:在产品页面查看时加载
查询页面内容:在查询页面查看时加载
优势:初始页面加载更快
参考资料
技术概念
库
-
Flask-Babel - 模板翻译
-
Babel - 国际化库
相关文章
总结
语言检测使用优先级系统:
检测顺序:
-
✅ URL参数 (
?lang=hi) -
✅ 会话 (浏览期间)
-
✅ Cookie (30天)
-
✅ 默认 (英语)
支持功能:
-
✅ 20种语言 (10种印度语言,7种欧洲语言,3种亚洲语言)
-
✅ 区域格式化 (数字、日期、货币)
-
✅ SEO hreflang标签
翻译方法:
-
✅ Flask-Babel (静态模板)
-
✅ TranslationManager (产品名称、功能)
-
✅ DeepSeek AI (描述、文章)
性能:
-
✅ 内存缓存
-
✅ 懒加载
-
✅ AI翻译的数据库缓存
这实现了自动语言检测和无缝的多语言体验。