如果语言切换,我想翻译我正在维护的 DSPace 实例中 item-view.xsl 中显示的主题(MeSH)术语。以前我使用下面的代码(我将其添加到XSLUtils.java
类)来查找 Babelmesh 站点并动态翻译它。
public static String lookupBabelMeSH(String term, String lang) {
try {
URLConnection babelMeshConn = (new URL("https://babelmesh.nlm.nih.gov/mesh_trans.php?oterm=" + URLEncoder.encode(term, "UTF-8") + "&in=ENG&out=" + lang)).openConnection();
babelMeshConn.setConnectTimeout(5000);
babelMeshConn.setReadTimeout(5000);
BufferedReader in = new BufferedReader(new InputStreamReader(babelMeshConn.getInputStream(), "UTF-8"));
String value = in.readLine();
in.close();
if (!StringUtils.isEmpty(value)) {
return value;
}
} catch (MalformedURLException mue) {
} catch (IOException ioe) {
}
return null;
}
然后我用它item-view.xsl
像这样:
<xsl:choose>
<xsl:when test="$active-locale!='en'">
<xsl:variable name="current-locale">
<xsl:if test="$active-locale='fr'">
<xsl:text>FRE</xsl:text>
</xsl:if>
<xsl:if test="$active-locale='zh'">
<xsl:text>CHN</xsl:text>
</xsl:if>
</xsl:variable>
<xsl:variable name="translation">
<xsl:value-of select="util:lookupBabelMeSH(node(),$current-locale)"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="$translation=''">
<xsl:value-of select="node()"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$translation"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="node()"/>
</xsl:otherwise>
</xsl:choose>
现在,我想翻译文本,而不是每次切换语言时都调用 BabelMesh 站点,因为请求数量有限制。此外,由于 BabelMesh 的 url 是硬编码的,因此对 BabelMesh 服务的任何更改都会破坏翻译的渲染。我只需要把这些术语翻译成中文和法文。我的翻译位于[dspace]/config/mesh
目录。这些文件被命名为mterms_fr
and mterms_zh
分别用于法文和中文翻译。
这些文件的内容如下所示:
mterms_fr
Acanthocheilonemiasis::acanthocheilonemiase
Acanthocytes::ACANTHOCYTE
Acantholysis::ACANTHOLYSE
Acanthoma::ACANTHOME
Acanthopodina::ACANTHOPODINA
Acanthosis Nigricans::ACANTHOSIS NIGRICANS
Acarbose::ACARBOSE
Acari::ACARIEN
Acaricides::Acaricides
Acaridae::ACARIDAE
Acatalasia::ACATALASIE
Accelerated Idioventricular Rhythm::RYTHME IDIOVENTRICULAIRE ACCELERE
Acceleration::ACCELERATION
mterms_zh
Acanthocheilonemiasis::棘唇虫病
Acanthocytes::棘形红细胞
Acantholysis::皮肤棘层松解
Acanthoma::棘皮瘤
Acanthopodina::Acanthopodina
Acanthosis Nigricans::Acanthosis Nigricans
Acarbose::Acarbose
Acari::Acari
Acaricides::Acaricides
Acaridae::Acaridae
Acatalasia::Acatalasia
Accelerated Idioventricular Rhythm::Accelerated Idioventricular Rhythm
Acceleration::加速度
如果您注意到的话,::
是英文术语和翻译之间的分隔符。如果该术语没有翻译,则保留英文术语(例如Acaricides
).
那么是否可以只从[dspace]/config/mesh
目录并进行即时翻译?
EDIT
我想补充一点,如果在翻译文件中找不到该术语,则应按原样返回(例如some random text
应该返回some random text
)因为预计我无法控制用户将在主题字段中输入的内容(即通过批量导入)。
提前致谢!