Liferay 更改URL上的语言ID

Liferay 更改URL上的语言ID,liferay,liferay-7,Liferay,Liferay 7,经过几个小时的搜索,我找不到任何解决方案,所以我希望有人能在这里帮助我 我的问题是,我必须用瓦伦西亚语言在Liferay上创建一个网页,将该语言添加到Liferay中没有问题,我有它并且工作得很好,问题是我必须在内部将该语言存储为加泰罗尼亚语,以在HTML标记上生成“lang”属性作为“ca”,用于检测浏览器语言为加泰罗尼亚语,以自动在该语言上加载网页,并与第三方portlet通信,因为根据ISO,瓦伦西亚语不存在 最简单的解决方案显然是使用加泰罗尼亚语,仅在网页上更改语言选择器上的标志和文本,

经过几个小时的搜索,我找不到任何解决方案,所以我希望有人能在这里帮助我

我的问题是,我必须用瓦伦西亚语言在Liferay上创建一个网页,将该语言添加到Liferay中没有问题,我有它并且工作得很好,问题是我必须在内部将该语言存储为加泰罗尼亚语,以在HTML标记上生成“lang”属性作为“ca”,用于检测浏览器语言为加泰罗尼亚语,以自动在该语言上加载网页,并与第三方portlet通信,因为根据ISO,瓦伦西亚语不存在

最简单的解决方案显然是使用加泰罗尼亚语,仅在网页上更改语言选择器上的标志和文本,但如果我使用该选项,我会遇到问题,并且是我的客户的重新查询,在URL中,当选择巴伦西亚语时,应显示“va”,在这种情况下,代码为“ca”。例如“mywebpage/va/home”,而不是“mywebpage/ca/home”

你知道怎么在Liferay上做吗


提前谢谢。

我不能一步一步地回答你,但你应该从这里开始寻找答案:

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>

I18n Servlet
com.liferay.portal.servlet.I18nServlet
1.
...
I18n Servlet
/ca/*
因此,您已经在中处理了URL映射。如果不仔细查看它,您可能还需要更新它以了解您的其他语言

为了向Liferay引入一种新的语言,您可能需要或者不需要做更多的工作,但是这个入口点应该有助于找到必要的步骤。这需要一个ext插件,但我觉得它可以构建得很好,并且可以维护,因为这是一个很小的改变

请考虑将您的翻译提供给LIFELAY,以便它可以添加到下一个版本(并且可以被更多的人维护)

编辑:在你的评论之后,再多考虑几点(而不是具体的建议)

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

您可以开始CA翻译,以便初始工作是相同的。我觉得这样比较干净


一个可能说服我在URL中将va映射到ca,并像ca一样在内部处理它的原因是,如果使用非ISO语言时,区域设置处理(例如日期-时间)和类似的格式设置会失败。Liferay至少在LocaleUtil和类似的类中封装了其中的一部分,但是由于我还没有向Liferay引入新的语言,所以我不能给您任何建议。当您引入变体(例如ca_va)时,这可能会起作用,也可能不会起作用,在该变体中,区域设置处理可以返回到ca。

完成此步骤是为了将瓦伦西亚语言添加到我的网站。正如我在文章中所说,我的问题是,我需要在URL上加上“va”前缀,但在内部我必须配置加泰罗尼亚语言。因此,我需要如何配置Liferay以使用这两个选项之一:1使用加泰罗尼亚语时,URL上的“va”而不是“ca”;2使用瓦伦西亚语时,在内部将“ca”存储为所选语言,但在URL上保留“va”。希望我能解释。请参考我的(标记的)编辑。我似乎很早就编辑了——也解释了你在评论中编辑的内容。在提交我对答案的编辑后,我才看到您的编辑。最后,由于我们的客户禁止更改Liferay的核心,我们决定使用加泰罗尼亚语,并在每个页面上手动放置一个友好的URL,路径包含加泰罗尼亚语的“va”和西班牙语的“es”。作为信息,加泰罗尼亚语言的路径可以包含“/va/”,如果不是url的第一部分,例如“www.myweb.com/myserver/va/mypage”,我们的加泰罗尼亚语翻译的手动友好url也是“myserver/va/mypage”,为了避免Liferay在url上自动显示语言,我配置了“locale.prepend.friendly.url.style=0”