语言检测:动态多语言支持

本文解释我们如何自动检测并以用户首选语言提供内容。

问题:服务全球用户

用户来自不同国家,使用不同语言:

  • 印度:印地语、孟加拉语、泰米尔语、泰卢固语、古吉拉特语、马拉地语、卡纳达语、马拉雅拉姆语、旁遮普语、乌尔都语

  • 欧洲:德语、法语、西班牙语、意大利语、葡萄牙语、俄语

  • 亚洲:日语、韩语、中文

我们需要检测他们的语言偏好并自动提供翻译内容。

检测优先级

我们按顺序检查多个来源:

1. URL参数 (?lang=hi)

2. 会话 (首次检测后存储)

3. Cookie (translation_langlang)

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. 设置cookietranslation_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翻译:缓存在数据库中

优势:每个请求无翻译开销

懒加载

仅在需要时加载翻译:

产品描述:在产品页面查看时加载

查询页面内容:在查询页面查看时加载

优势:初始页面加载更快

参考资料

技术概念

相关文章

总结

语言检测使用优先级系统:

检测顺序

  • ✅ URL参数 (?lang=hi)

  • ✅ 会话 (浏览期间)

  • ✅ Cookie (30天)

  • ✅ 默认 (英语)

支持功能

  • ✅ 20种语言 (10种印度语言,7种欧洲语言,3种亚洲语言)

  • ✅ 区域格式化 (数字、日期、货币)

  • ✅ SEO hreflang标签

翻译方法

  • ✅ Flask-Babel (静态模板)

  • ✅ TranslationManager (产品名称、功能)

  • ✅ DeepSeek AI (描述、文章)

性能

  • ✅ 内存缓存

  • ✅ 懒加载

  • ✅ AI翻译的数据库缓存

这实现了自动语言检测和无缝的多语言体验。


← 返回文档索引