【问题标题】:Liferay: Default Language by SiteLiferay:站点的默认语言
【发布时间】:2012-03-16 17:59:58
【问题描述】:

我有一个门户和几个社区(LR 6.1 - 站点)。社区分配了不同语言的几个区域,因此我想为每个社区设置不同的默认语言。

是否可以按站点设置默认语言?

我需要它来满足 CMS 要求:每个网站都有自己的默认内容语言。例如,德国的网站必须将德国作为默认语言,而西班牙的网站必须将西班牙语作为默认语言等等。

【问题讨论】:

  • 你想一次实现什么?
  • 看我的问题,我已经更新了。
  • 我不知道您现在是否找到了问题的答案,但是您不需要为每个站点版本都设置默认语言以便在其中使用 CMS语言。例如,一旦您更改为一种语言,控制面板就会更改为该语言。

标签: localization internationalization liferay


【解决方案1】:

我不知道每个站点的默认语言配置设置(如果您的意思是社区/组织...)存在。

对于整个门户,您在

下有“默认语言”选项
Control panel -> Portal settings -> Display settings

但是如果你没有你的语言,或者你想删除/添加一些语言,你可以在portal-ext.properties 中配置它。例如

locales=hr_HR,en_US

编辑(有关评论中提到的错误的更多信息)

如果你看看 com.liferay.portal.service.impl.CompanyLocalServiceImpl

public void updatePreferences(long companyId, UnicodeProperties properties)
    throws PortalException, SystemException {

    PortletPreferences preferences = PrefsPropsUtil.getPreferences(
        companyId);

    try {
        String newLocales = properties.getProperty(PropsKeys.LOCALES);

        if (newLocales != null) {
            String oldLocales = preferences.getValue(
                PropsKeys.LOCALES, StringPool.BLANK);

            if (!Validator.equals(oldLocales, newLocales)) {
                validateLocales(newLocales);

                LanguageUtil.resetAvailableLocales(companyId);
            }
        }

    ...
}


protected void validateLocales(String locales) throws PortalException {
    String[] localesArray = StringUtil.split(locales, StringPool.COMMA);

    for (String locale : localesArray) {
        if (!ArrayUtil.contains(PropsValues.LOCALES, locale)) {
            throw new LocaleException();
        }
    }
}

你会看到“newLocales”被验证了

if (!ArrayUtil.contains(PropsValues.LOCALES, locale)) {
    throw new LocaleException();
}

因此,如果您在 Portal 设置的显示页面中添加新的区域设置键,该页面不在 portal-ext.properties 或 portal.properties 中,您将获得LocaleException

注意 oldLocales 是从首选项(数据库)String oldLocales = preferences.getValue(PropsKeys.LOCALES, StringPool.BLANK); 中读取的 并针对portal.properties/portal-ext.properties if (!ArrayUtil.contains(PropsValues.LOCALES, locale)) { ...进行验证

PropsValues.LOCALES => public static String[] LOCALES = PropsUtil.getArray(PropsKeys.LOCALES);

如评论中所述,当(且仅当)您添加不在 portal.properties 中的新语言环境(在 GUI 中)时,才会发生这种行为

locales=ar_SA,eu_ES,bg_BG,ca_AD,ca_ES,zh_CN,zh_TW,hr_HR,cs_CZ,da_DK,nl_NL,nl_BE,en_US,en_GB,et_EE,fi_FI,fr_FR,gl_ES,de_DE,el_GR,iw_IL,hi_IN,hu_HU,in_ID,it_IT,ja_JP,ko_KR,lo_LA,nb_NO,fa_IR,pl_PL,pt_BR,pt_PT,ro_RO,ru_RU,sr_RS,sr_RS_latin,sl_SI,sk_SK,es_ES,sv_SE,tr_TR,uk_UA,vi_VN

或者如果您在 portal-ext.properties 中修改了 locales,而不是在 portal-ext.properties 中修改。

例如,如果您在 portal-ext.properties 中有

locales=en_GB

您将无法从 GUI 添加任何其他语言环境,除非您首先将新语言环境添加到 portal-ext.properties,然后转到门户设置的显示页面并再次添加。

【讨论】:

  • 此外,您可以在 URL 中指定语言(例如添加 /en/ 表示英语)
  • 我有一个门户和几个社区(LR 6.1 - 站点)。社区分配了不同语言的几个区域,因此我想为每个社区设置不同的默认语言。
  • 哪些设置可能会覆盖该 portal-ext.properties 设置?我尝试在那里只添加一个选项,但没有效果
  • 可以通过 GUI(控制面板)和 portal-ext.properties 修改的属性,一旦通过 GUI 修改和保存,从那时起只能通过 GUI 进行管理。因此,在这种情况下,您应该更改“显示设置”中的“可用语言”字段。但请注意,至少在 LR 6.1 中存在围绕“可用语言环境”的错误,因此您首先必须修改门户扩展中的“语言环境”属性(添加新语言)并重新启动,然后通过 GUI 将其添加到“可用语言”(否则,您将收到错误消息“请输入有效的语言环境。”尝试在 GUI 中保存修改)。
  • 我有 Liferay Portal Enterprise Edition 6.1.30 EE(Paton / Build 6130 / August 16, 2013),但没有遇到@MartinGamulin 提到的错误。你有更多相关信息吗?
【解决方案2】:

可能有一种方法取决于您组织编辑器的方式:网络内容的默认语言基于用户的当前语言(例如默认语言)。通常,德国用户可能会将他们的语言设置为德语,以便阅读德语内容版本,不是吗?

或者,您必须自定义 Liferay(例如网络内容编辑器)并根据当前站点中的某些属性手动设置默认语言 - 这可能存储为自定义字段,即 expando。这样,它将真正基于正在创建内容的站点,但这可能与当前用户的期望相冲突:当编辑器不尊重这一点时,他们将默认语言设置为什么?

仍然 - 在您的情况下,期望甚至可能是您所描述的,所以这是一个有效的选择。

这种详细程度够吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-26
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 2013-11-03
    相关资源
    最近更新 更多