我正面临着i18n标签的问题。
我的应用程序使用Granite.I18n.get('')函数在js前端读取少量i18n标签。整个字典下载为'/libs/cq/i18n/dict.{+locale}.json',如'/etc/clientlibs/foundation/shared/source/init.js'所示。
现在en字典只返回自定义标签,并且尺寸很小。 但其他语言如fr,字典文件是所有/ libs字典的聚合,并且非常庞大。我也在其他几个网站上注意到了这一点。
tennantco.com
en dictionary - 118 KB
fr dictionary - 1.4 MB
Timewarnercable.com
en dictionary - 1.1 KB
fr dictionary - 1.2 MB
赛默飞
en dictionary - 3 KB
fr dictionary - 695 KB
我们的痛点在于,在CDN缓存这个沉重文件的成本增加,并试图找到降低CDN成本的方法。
我理解标签本身就是关键。但ExportServlet只能为en过滤掉渲染自定义词典。我们的词典类似于/ libs下的otb词典。那么ExportServlet如何处理en export下的otb标签呢?
此错误在所有CMS产品中是否常见或特定于Adobe?还需要一个解决方案或解决方法来获取仅适用于其他语言的自定义词典。
答案 0 :(得分:2)
我们面临着使用Granite.i18n库在客户端获取I18n值的类似要求 这就是我所做的。
4.在clientlibs javascript文件中设置Granite.I18n.setUrlPrefix(" / bin / custom / i18n / dict。");从中获取 自定义servlet URL。这并不需要修改OOTB I18n.js
答案 1 :(得分:1)
英语词典很小,因为英语词条是关键而不是翻译。法语(和其他语言)很大,因为它们包含英语和进一步翻译的关键。此外,许多密钥仅在翻译语言中可用,因为密钥用作默认翻译。
所以对于法语,如果你使用Granite.I18n.get('Hello world!')
,它将返回法语翻译,否则它将只返回'Hello World',如果语言上下文是英语则不需要翻译。
由于JS在客户端评估的性质,该产品旨在下载完整的字典,包括产品本身的OOTB翻译,因为i18n实现不是上下文感知的,不能过滤掉不需要的翻译。
虽然方便,但不幸的是,这是使用Granite.I18n.get('')
的限制和副作用。
可能的解决方法
通常,页面必须只呈现所需内容。使用JS进行后期翻译会强制下载字典,而Granite.i18n不能满足优化的下载体验。
答案 2 :(得分:1)
我最终编写了一个自定义实现,因为我在这个问题上没有得到Adobe门票的帮助。
这解决了我的问题。虽然我不相信是正确的解决方案。需要一种使这种清洁呈现的方式。
答案 3 :(得分:0)
当您尝试获取特定词典时,这是一个可以帮助您的答案:https://stackoverflow.com/a/55656153/14465431
查看提及 sling:basename
的部分这也适用于一个站点
示例:
[sling:Language] > mix:language
mixin
- sling:basename (string)
- sling:basename (string) multiple
http:// localhost:4502 / libs / cq / i18n / dict.es。[sling:basename-value] .json
OTB解决方案:)