问题描述
本地化库创建一个包实例,为提供的语言环境(例如,res/lang/en_US/common.json
)加载数据。将此库与 Sapper 框架结合时,我遇到了麻烦。
在我的 HTTP 路由器的 @sapper/server
中间件中,我为根布局预加载器传递 Accept-Language
HTTP 标头值:
sapper.middleware({
session: (req,res) => ({
acceptLanguage: req.headers['Accept-Language'],}),})
<script context="module">
let localeMap;
export async function preload(page,session) {
localeMap = await getLocaleMap(session.acceptLanguage);
}
</script>
<script>
setContext('localization',{ localeMap,t: localeMap.get.bind(localeMap) });
</script>
问题是,当路由加载失败(404 等)时,不会等待 preload()
方法并且 localeMap
(模块级变量)最终会被传递给 setContext()
.我也不确定使用此上下文是否异步安全(例如,具有不同 Accept-Language
标头的并行客户端最终可能会读取错误的 localeMap
)。
我考虑过的另一种方法是在 preload()
函数上序列化语言环境包,但它最终仍然使用 getContext()
/setContext()
并且这种序列化是不必要的。>
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)