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

How to display appropriate language labels for items that have non-english version

我有一个 URI 为 http://hdl.handle.net/10862/717 in our local language that has an english version: 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 不认识它们。

提前致谢。

我有一个类似的用例——在 dc.language.iso 中存储语言代码的 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 引用的 class 中(或添加到不同的 class/namespace 并拉取通过相同的机制):

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;
}

您可以忽略其中刚刚修复 "Māori" 拼写的部分。

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

locale.getDisplayLanguage(Locale.getDefault());

locale.getDisplayLanguage(locale);