与应用路由和组件共享本地化包

问题描述

本地化库创建一个包实例,为提供的语言环境(例如,res/lang/en_US/common.json)加载数据。将此库与 Sapper 框架结合时,我遇到了麻烦。

在我的 HTTP 路由器的 @sapper/server 中间件中,我为根布局预加载器传递 Accept-Language HTTP 标头值:

sapper.middleware({
    session: (req,res) => ({
        acceptLanguage: req.headers['Accept-Language'],}),})

然后,在根 _layout.svelte 我有这个:

<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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...