如何禁用i18next translation.json文件的缓存?

JZ5*_*555 8 json caching web-config cache-control i18next

我在IIS上运行单页应用程序,并使用i18next库在我的应用程序中进行翻译.问题是,有时当我向translate.json文件添加新关键字并点击刷新时,浏览器仍会使用旧的缓存翻译文件,这会导致用户看到添加的关键字而不是翻译.例如,如果我添加一个关键字,"somekey": "Some text here..."那么somekey将显示而不是指定的文本.

由于我的translation.json文件位于一个名为localesthis 的文件夹中:

locales
    en
      translation.json
Run Code Online (Sandbox Code Playgroud)

我尝试将以下设置添加到web.config:

<location path="locales">
  <system.webServer>
    <staticContent>
      <clientCache cacheControlMode="DisableCache" />
    </staticContent>
  </system.webServer>
</location>
Run Code Online (Sandbox Code Playgroud)

但是,当我使用Chrome开发人员工具查看网络流量时,我注意到translate.json文件仍然来自缓存并且Cache-Control: no-cache标头丢失.为什么这不起作用?什么是禁用文件缓存的正确方法?

编辑:刚刚再次检查该网站,似乎translate.json文件现在有Cache-Control: no-cache标题,每次刷新页面时,实际上都是从服务器检索它.此时我认为该问题可能与我们的发布过程有关,而配置更改未应用.不过不确定.

Alx*_*Alx 7

这实际上比看起来更棘手.我假设你正在使用角度转换模块.

我在加载json文件的地方进行了缓存清理:

$translateProvider.useLoader('$translatePartialLoader', {
        urlTemplate: 'AppScripts/i18n/{part}-{lang}.json' + '?cb=' + (new Date()).getTime()
    });
Run Code Online (Sandbox Code Playgroud)

这样它就永远不会缓存语言文件,并会在每个请求上加载新文件(无需刷新页面或清除缓存).

Web配置设置被完全忽略,我相信因为插件使用ajax调用加载文件的方式.此外,json文件不能用.net捆绑缩小,因为密钥在压缩时会改变,所以不是"MAIN.FIRSTNAME":"First Name",你会有类似"abc"的东西:"First Name"和由于视图具有原始名称,因此无法工作.

如果你保留一个版本,你也可以使用该版本,只有当你发布一个新版本时才会破坏缓存

    + '?v=' + myVersionVar
Run Code Online (Sandbox Code Playgroud)

而不是使用当前时间戳,它将始终在每个请求上加载文件.


小智 5

我使用组合 SPA + i18next + IIS 遇到过同样的情况,并注意到有时 json 文件没有更新。

这在某些时候变得奇怪的主要原因是,在文件已经被谷歌浏览器缓存后,您很有可能更改了 IIS 的 web.config 设置,因为第一次下载文件时没有任何Cache-Control标题.

原因

json 文件没有显示 Cache-Control: no-cache 标头,因此在 304 - Not Modified 响应之后,它开始使用谷歌浏览器的本地磁盘缓存。

解决方案

它被解决了

1) 在网络选项卡上清理谷歌浏览器的缓存(清除所有缓存也可以完成这项工作)

在此处输入图片说明

2)在/locales/文件夹中放置一个web.config文件,规则如下,并且不指定属性:staticContentlocationpath

<?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <location>
            <system.webServer>
                <staticContent>
                    <clientCache cacheControlMode="DisableCache" />
                </staticContent>
            </system.webServer>
        </location>
    </configuration>
Run Code Online (Sandbox Code Playgroud)

如关于标签的文档所述<location>

path 属性

使用<location>缺少的path属性会将配置设置应用于当前目录和所有子目录。


在这种情况下,我专门在/locales/文件夹中应用了规则,目的是不干扰网站上其他静态内容的缓存,例如图像、JavaScript 文件等。预期的行为可能会根据您的解决方案的需求而有所不同。