Firebase i18n 重写语言覆盖 cookie 被忽略
Firebase i18n rewrite language-override cookie is ignored
我使用标准 Angular 本地化包本地化了一个 Angular 应用程序。这很完美,我在 firebase 上托管了我的应用程序。我阅读了关于如何配置 i18n 重写的 firebase 文章,并在我的 firebase.json(https://firebase.google.com/docs/hosting/i18n-rewrites) 中实现了它。
法文版在 .../fr 时加载,俄文版在 .../ru 时加载,具体取决于用户浏览器的语言偏好,默认情况下 .../en 为英语。重写也按预期工作。
我还想让用户保存他们的偏好,这应该可以通过设置
document.cookie = "firebase-language-override=fr"
但是,似乎 cookie 被完全忽略了,firebase 仍然服务于用户的偏好。
有什么经验或建议我可以做些什么吗?还有其他方法可以更改 firebase 重写行为吗?
问题很可能与缓存控制有关。当客户端第一次加载页面时,它会缓存一个小时(默认情况下),即使您更改 cookie,请求相同的页面也会返回缓存结果(基于初始条件的结果 - 用户语言设置或 cookie 覆盖)。
您可以通过在开发工具“网络”选项卡中禁用缓存来对此进行测试。
要解决此问题,请尝试更新 firebase.json:
中默认路由的缓存控制
{
"headers": [
{
"source": "/",
"headers": [
{
"key": "Cache-Control",
"value": "no-store"
}
]
}
]
}
我使用标准 Angular 本地化包本地化了一个 Angular 应用程序。这很完美,我在 firebase 上托管了我的应用程序。我阅读了关于如何配置 i18n 重写的 firebase 文章,并在我的 firebase.json(https://firebase.google.com/docs/hosting/i18n-rewrites) 中实现了它。 法文版在 .../fr 时加载,俄文版在 .../ru 时加载,具体取决于用户浏览器的语言偏好,默认情况下 .../en 为英语。重写也按预期工作。
我还想让用户保存他们的偏好,这应该可以通过设置
document.cookie = "firebase-language-override=fr"
但是,似乎 cookie 被完全忽略了,firebase 仍然服务于用户的偏好。
有什么经验或建议我可以做些什么吗?还有其他方法可以更改 firebase 重写行为吗?
问题很可能与缓存控制有关。当客户端第一次加载页面时,它会缓存一个小时(默认情况下),即使您更改 cookie,请求相同的页面也会返回缓存结果(基于初始条件的结果 - 用户语言设置或 cookie 覆盖)。
您可以通过在开发工具“网络”选项卡中禁用缓存来对此进行测试。
要解决此问题,请尝试更新 firebase.json:
中默认路由的缓存控制{
"headers": [
{
"source": "/",
"headers": [
{
"key": "Cache-Control",
"value": "no-store"
}
]
}
]
}