Skip to content

网站自动切换中英文/货币?IP定位帮你搞定本地化

做过海外业务的朋友都知道,用户第一次访问你的站,弹个"请选择语言"的框,是件很劝退的事。好的体验是:访客一进来,网站就自动用他的语言和他打招呼

做到这个,靠的就是IP定位。

思路一句话

访问者IP → 查归属地国家 → 根据国家决定默认语言、货币、时区 → 前端自动应用。

不用用户手动选,一切自动。用户如果有偏好,再手动切,并记住选择。

实现步骤

1. 查国家

python
def detect_country(ip):
    r = requests.get(f"https://ip9.com.cn/get?ip={ip}", timeout=3)
    d = r.json()
    if d.get("ret") == 200:
        return d["data"].get("country_code")  # 如 "us"、"cn"
    return None

country_code(标准ISO简码)来判断,最靠谱。

2. 国家 → 语言/货币映射

python
LOCALE_MAP = {
    "cn": {"lang": "zh-CN", "currency": "CNY", "timezone": "Asia/Shanghai"},
    "us": {"lang": "en-US", "currency": "USD", "timezone": "America/New_York"},
    "jp": {"lang": "ja-JP", "currency": "JPY", "timezone": "Asia/Tokyo"},
    # ...
}
DEFAULT_LOCALE = {"lang": "en", "currency": "USD", "timezone": "UTC"}

def get_locale(country_code):
    return LOCALE_MAP.get(country_code, DEFAULT_LOCALE)

3. 前端自动应用

后端把检测结果放在Cookie里(或者放进页面初始化的JS变量),前端加载时读取:

javascript
// 页面加载时读取后端给的 locale
const locale = window.__INITIAL_LOCALE__;

// 简单示例:切换语言文案
const dict = {
  'zh-CN': { 'welcome': '欢迎光临' },
  'en-US': { 'welcome': 'Welcome' },
  'ja-JP': { 'welcome': 'いらっしゃいませ' }
};
document.getElementById('welcome').textContent = dict[locale.lang].welcome;

价格显示也同理,按货币格式化:

javascript
const price = 99.9;
document.getElementById('price').textContent =
  new Intl.NumberFormat(locale.lang, {
    style: 'currency', currency: locale.currency
  }).format(price);

一定要做的几件事

1. 记得"记住用户选择"

自动检测只是默认值,用户手选过的语言/货币,要优先于IP检测。存Cookie,下次访问直接用用户选择。别用IP判断去覆盖用户的手动选择,会被人骂死。

2. 海外判断用国家,别用城市

本地化关心的是"国家/地区"级,不要为了语言去精确到城市(没意义还容易错)。

3. 代理用户怎么办

挂代理的访客,IP是代理服务器的国家。这个没法完全避免,但可以把"检测到的语言"做成可切换的,让用户自己改回来。

4. 时区也别忘

列表页、倒计时这些,用检测到的时区去格式化时间,体验提升巨大。

效果描述一下

我之前给一个小型跨境电商站做了一套。原来用户进来都是中文,海外访客一脸懵;改完之后,美国用户进来自动英文+美元,日本用户自动日文+日元,跳出率肉眼可见地降了。

这一步,成本很低,但对"国际化感"的提升非常直接。

提醒一句

IP定位做本地化,讲究"默认值 + 用户可覆盖"。它不是用来强制用户的,是让"绝大多数访客开箱即用"。把这个定位想清楚,你就能把这事儿做得很舒服。

检测国家的接口:https://www.ip9.com.cn