更改网址上的语言ID

时间:2018-08-10 07:13:46

标签: liferay liferay-7

经过数小时的搜索,我找不到任何解决方案,因此希望有人可以在这里为我提供帮助。

我的问题是我必须使用Valencian语言在Liferay上创建一个网页,将这种语言添加到liferay中没有问题,我拥有并可以完美地工作,问题是我必须将该语言内部存储为加泰罗尼亚语,将HTML标记上的“ lang”属性生成为“ ca”,用于将浏览器语言检测为加泰罗尼亚语,从而自动将网页加载到该语言上,并将该语言与第三方portlet进行通信,如根据ISO的巴伦西亚语不存在。

最简单的解决方案显然是使用加泰罗尼亚语,并且仅在网页上更改语言选择器上的标志和文本,但是如果使用该选项,则会出现问题,并且是我的客户提出的要求,即URL中的问题选择Valencian时,应显示“ va”,在这种情况下,代码为“ ca”。例如“ mywebpage / va / home”,而不是“ mywebpage / ca /​​ home”。

有什么想法可以在Liferay上实现吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

我无法为您提供分步解答,但是您应该在这里开始寻找它:

Liferay的WEB-INF/web.xml包含以下映射:

<servlet>
  <servlet-name>I18n Servlet</servlet-name>
  <servlet-class>com.liferay.portal.servlet.I18nServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>
...
<servlet-mapping>
  <servlet-name>I18n Servlet</servlet-name>
  <url-pattern>/ca/*</url-pattern>
</servlet-mapping>

因此,您已经在I18nServlet中处理了URL映射。如果不认真研究它,您可能也必须对其进行更新以了解您的其他语言。

为了向Liferay引入新语言,您可能需要做或不需要做更多的事情,但是此切入点应有助于找到必要的步骤。这需要一个ext插件,但是我觉得它可以构建得很好维护,因为它的改动很小。

请考虑将您的翻译稿交还给Liferay,以便可以将其添加到下一个版本中(并可能由更多人维护)

编辑:发表评论后,还有更多想法(而不是可靠的建议)

I18nServlet是关键,源链接在上面。即使VA没有ISO代码,我还是建议引入一种全新的语言:否则,您将不得不对vaca进行各种特殊处理。在I18nServlet中,从网址解析语言可能很简单,但从另一个方向,例如Liferay从一种语言生成 URL,通常涉及使用URL中的语言代码。

您可以开始进行CA转换,因此初始工作是相同的。我觉得这样比较干净。

可能说服我仅将va映射到URL中的ca并像ca那样在内部进行处理的一个原因是,如果进行Locale处理,例如使用非ISO语言时,日期时间和类似格式将失败。 Liferay至少将其中一些封装在LocaleUtil和类似的类中,但是由于我还没有向Liferay引入新的语言,因此我无法给您任何建议。当您引入变体时,例如,可能起作用 ca_va,在这里语言环境处理可以回退到ca。