我面临 i18n 标签的问题。
我的应用程序使用 Granite.I18n.get('') 函数在 js 前端读取一些 i18n 标签。整个字典下载为“/libs/cq/i18n/dict.{+locale}.json”,如“/etc/clientlibs/foundation/shared/source/init.js”中所述。
现在 en 字典仅返回自定义标签并且尺寸很小。
但其他语言如fr,字典文件是所有/libs字典的聚合,并且非常巨大。我在其他一些网站上也注意到了这一点。
坦南特公司.com
英语词典- 118 KB
法语词典- 1.4 MB
时代华纳有线电视网
英语词典- 1.1 KB
法语词典- 1.2MB
赛默飞世尔
英语词典 - 3 KB
法语词典- 695 KB
我们的痛点是,在 CDN 上缓存这个大文件的成本会增加,并试图找到一种方法来降低 CDN 成本。
我知道标签本身就是关键。但 ExportServlet 只能过滤掉 en 的渲染自定义字典。我们的词典与 /libs 下的 otb 词典类似。那么ExportServlet是如何对待en导出下的otb标签的呢?
此错误是所有 CMS 产品中常见的还是 Adobe 特有的?还需要一个解决方案或解决方法来获取仅适用于其他语言的自定义词典。
英语词典很小,因为英语条目是关键,而不是翻译。法语(和其他语言)很重要,因为它们包含英语和进一步翻译的关键。此外,许多密钥仅在翻译语言中可用,因为该密钥被用作默认翻译。
所以对于法语,如果你使用Granite.I18n.get('Hello world!')
,如果找到它,它将返回法语翻译,否则它将简单地返回“Hello World”,如果语言上下文是英语,则不需要翻译。
由于 JS 在客户端进行评估的性质,该产品旨在下载完整的词典,包括产品本身的 OOTB 翻译,因为 i18n 实现无法感知上下文,无法过滤掉不需要的翻译。
虽然方便,但这是使用的限制和副作用Granite.I18n.get('')
很遗憾。
可能的解决方法
- Granite.I18n.* 可以通过使用服务器端 i18n 库并在服务器上仅呈现所需的翻译并作为部分 HTML 来避免。这可能不起作用水疗中心。
- 如果您使用 Angular(x) 等 SPA 框架,那么它们支持 i18n 工厂初始化,可以将其挂接到下载过滤的 i18n 的自定义 servlet 响应中。这可能需要大量工作,并且如果翻译了太多术语并且词典变得很大,那么大小仍然可能是一个问题。
- 压缩、最小化和缓存字典。您可以使用 Apache 模块或输出过滤器来完成此操作。这将减少大小和流量负载,但同样不能保证随着翻译的增长整个词典的大小会变小。
一般来说,页面必须只呈现所需的内容。使用 JS 进行后期翻译会强制下载字典,并且 Granite.i18n 无法满足优化的下载体验。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)