搜索全站
multilingual 3 分钟阅读

多语言 REST API 输出:按语言参数获取内容

用 WordPress REST API 取多语言内容时,如何按语言参数(?lang=)拿到对应译文:WPML/Polylang 的 API 支持、自定义端点与前端按需拉取做法。

U
UFO_PF 2016-09-27 · 阅读 3 分钟
多语 MULTILINGUAL
阅读提示
本文约 853 字,预计阅读 3 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:前端调 API 总拿到中文

用 REST API 给 SPA/小程序供数,默认返回默认语言。多语言需让 API 按语言返回译文。

原理分析:API 的语言参数

WPML 给 REST 加 ?lang=en;Polylang 支持 ?lang=en 或在请求头带语言。插件 hook rest_pre_dispatch 把查询切到对应语言副本。自定义端点也要读该参数。

保姆级实操

WPML:

fetch('/wp-json/wp/v2/posts?lang=en&per_page=10')
  .then(r=>r.json()).then(console.log);

Polylang:

// 自定义端点读取 lang
add_action('rest_api_init', function(){
  register_rest_route('my/v1','posts', [
    'methods'=>'GET',
    'callback'=>function($req){
      $lang = $req['lang'] ?? pll_default_language();
      $q = new WP_Query(['post_type'=>'post','lang'=>$lang]);
      return $q->posts;
    }
  ]);
});

常见坑

  1. API 不传 lang,总默认语。
  2. 自定义端点忽略 lang,串语。
  3. 案例:某小程序用 REST 取文,没传 lang 全中文;加 ?lang 后按区域显示。
  4. 缓存 API 响应不分语言,串。
  5. WPML 没开 REST 多语,需设置。

总结

判断标准:REST 按 lang 返译文、自定义端点读参。行动清单:加 lang 参数 → 插件开 REST 多语 → 自定义端点读参 → 缓存分语言。详见多语言站点 Headless 方案。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。