umijs ssr 渲染时,怎么把国际化 locale 传递到非组件函数中使用(如一些 util 函数)

2021-10-12 18:12:25 +08:00
 noobma

在 node 端通过解析路径(/zh/news 、/en/news)拿到 zh 、en 等 locale,通过 umijs 提供的 render 可以把 locale 传递到页面的 props 中,可是我在组件外的一些地方如何拿到这个 locale 呢,比如有个公共的 request 函数,在这个函数里我要把 header 中的 accept-language 设置成对应的 locale 。

export function request(params {
  const headers = {
    'Accept-Language': '这里如何取到 locale???'
  };
  // ...
}

在 umijs ssr 的文档里有这样的代码,是把 locale 挂到 nodejs 的 global 上,可是这样多个请求一起过来的时候,很大可能会出现 locale 污染的情况啊。

// app.ts
export const ssr = {
  beforeRenderServer: async ({
    env,
    location,
    history,
    mode,
    context,
  }) => {
    // global 为 Node.js 下的全局变量
    // 避免直接 mock location,这样会造成一些环境判断失效
    global.mockLocation = location;

    // 国际化
    if (location.pathname.indexOf('zh-CN') > -1) {
      global.locale = 'zh-CN'
    }
  }
}
486 次点击
所在节点    程序员
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/807374

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX