我有两个网站,代码库相同。
站点A 站点B
应用程序/公司/组件
如何在 i18n 中为 SiteA、SiteB 选择不同的资源包翻译?
谢谢, 斯里兰卡
最佳答案
您能否具体说明一下,这是服务器端翻译还是客户端翻译?对于客户端翻译,我遇到了 OTB ResourceBundleExportServlet 的问题,详细信息 here 。
- 将属性 sling:basename 添加到 mix:language 节点。说 sling:basename="siteA"
- 在包查找期间传递基本名称。 request.getResourceBundle("siteA", locale);
- 这将仅返回来自特定基本名称的键。
客户端自定义 bundle 导出器:
- 为 SiteA 和 SiteB 保留单独的字典。例如:/apps/company/sitea/i18n、/apps/company/siteb/i18n。
- 如果无法拆分字典,请在标签中保留术语以识别网站。例如,所有标签都应以 siteA/siteA 为前缀。例如 siteA.clickhere、siteB.clickhere
- 创建类似于 ResourceBundleExportServlet 的自定义 servlet。将路径保留为/libs/company/i18n/dict。
- 自定义 servlet 将从 slingrequest 检查 siteA 或 siteB,并仅返回相应的标签。根据字典路径(步骤1)或前缀(步骤2)过滤标签
创建覆盖到/libs/clientlibs/granite/utils/source/I18n.js。将 urlPrefix 更改为
var urlPrefix = "/libs/company/i18n/dict.";
现在,客户端 i18n 查找将从自定义导出器而不是 OTB 导出器中提取条目
服务器端解析器:
- 为了区分 sitea 或 siteb 标签,我们需要执行上述步骤 1 或 2。
- 一旦我们知道如何识别站点特定标签,我们只需要一个辅助实用程序来根据请求检查站点并根据特定字典或前缀进行解析
希望这有帮助。
关于internationalization - 如何指示 AEM 查找特定资源包翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55622583/