我的本地语言中包含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不了解它们。
提前致谢。
答案 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);