Liferay:网站默认语言

时间:2012-03-16 17:59:59

标签: localization internationalization liferay

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

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

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

Web Content Default Language

2 个答案:

答案 0 :(得分:4)

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

对于整个门户网站,您在

下有“默认语言”选项
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

注意从首选项(数据库)String oldLocales = preferences.getValue(PropsKeys.LOCALES, StringPool.BLANK);读取oldLocales 并针对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中修改locales=en_GB

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

{{1}}

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

答案 1 :(得分:1)

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

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

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

这个细节水平够吗?