如何为具有非英语版本的项目显示适当的语言标签

时间:2015-07-23 16:27:28

标签: xslt internationalization dspace

我的本​​地语言中包含URI http://hdl.handle.net/10862/717的项目,其英文版本为http://hdl.handle.net/10862/152

<dim:field element="relation" qualifier="hasversion" language="en"
mdschema="dc">http://hdl.handle.net/10862/152</dim:field>

我的xsl模板如下:

<xsl:template name="itemSummaryView-DIM-HASVERSION">
    <xsl:if test="dim:field[@element='relation' and @qualifier='hasversion' and descendant::text()]">
        <div class="simple-item-view-uri item-page-field-wrapper table">
            <h5><i18n:text>xmlui.dri2xhtml.METS-1.0.item-hasversion</i18n:text></h5>
            <span>
                <xsl:for-each select="dim:field[@element='relation' and @qualifier='hasversion']">
                    <a>
                        <xsl:attribute name="href">
                            <xsl:copy-of select="./node()"/>
                        </xsl:attribute>
                        <xsl:value-of select="./@language"/>
                    </a>
                    <xsl:if test="count(following-sibling::dim:field[@element='relation' and @qualifier='hasversion']) != 0">
                        <xsl:text>; </xsl:text>
                    </xsl:if>
                </xsl:for-each>
            </span>
        </div>
    </xsl:if>
</xsl:template>

使用上面的模板,它只显示文本en。我想要实现的是为指定的语言显示适当的标签(例如,英语为en,日本语为ja),就像在语言切换器中启用webui.supported.locales一样。我在dspace-tech here中读过DSpace不了解它们。

提前致谢。

1 个答案:

答案 0 :(得分:1)

我有一个类似的用例 - 将语言代码的iso版本存储在dc.language.iso中,但使用该语言的英文名称在项目页面上显示它。

我这样做了:

<xsl:for-each select="dim:field[@element='language' and @qualifier='iso']">
    <xsl:value-of select="util:isoLanguageToDisplay(node())"/>
        <xsl:if test="count(following-sibling::dim:field[@element='language' and @qualifier='iso']) != 0">
        <xsl:text>; </xsl:text>
    </xsl:if>
</xsl:for-each>

您需要将isoLanguageToDisplay方法添加到util命名空间org.dspace.app.xmlui.utils.XSLUtils引用的类中(或者添加到不同的类/命名空间,并通过相同的机制将其拉入):

public static String isoLanguageToDisplay(String iso) {
    if (StringUtils.isBlank(iso)) {
        return iso;
    }
    Locale locale;
    if (iso.contains("_")) {
        String language = iso.substring(0, iso.indexOf("_"));
        locale = new Locale(language);
    } else {
        locale = new Locale(iso);
    }
    String englishNameOfLanguage = locale.getDisplayLanguage(Locale.getDefault());
    if (!StringUtils.isBlank(englishNameOfLanguage))
    {
        if ("Maori".equals(englishNameOfLanguage)) {
            englishNameOfLanguage = "Māori";
        }
        return englishNameOfLanguage;
    }
    return iso;
}

你可以忽略那里只修复“毛利”拼写的位。

在您的情况下,听起来您想要该语言的语言名称,而不是英语。我想你只需要改变

locale.getDisplayLanguage(Locale.getDefault());

locale.getDisplayLanguage(locale);