如何为非英文版本的项目显示适当的语言标签
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);
我有一个 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);