gpt4 book ai didi

java - 如果我在文件中有翻译,如何在 DSpace 中翻译或替换主题词

转载 作者:搜寻专家 更新时间:2023-10-31 20:17:40 25 4
gpt4 key购买 nike

如果切换语言,我想翻译我正在维护的 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_frmterms_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 目录中查找这些文件并即时进行翻译?

编辑

我想补充一点,如果在翻译文件中找不到该术语,则应按原样返回(例如 some random text 应返回 some random text) 因为预计我无法控制用户将在主题字段中输入的内容(即通过批量导入)。

提前致谢!

最佳答案

您可以尝试这样的事情(添加到 XSLUtils.java):

        private static Properties chinnese = null;
private static Properties french = null;

static{


try {
chinnese = new Properties();
String mterms_zhPath=ConfigurationManager.getProperty("mterms_zh.path");
chinnese.load(new InputStreamReader(new FileInputStream(new File(mterms_zhPath)), "UTF8"));
french = new Properties();
String mterms_frPath=ConfigurationManager.getProperty("mterms_fr.path");
french.load(new InputStreamReader(new FileInputStream(new File(mterms_frPath)), "UTF8"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static String lookupMeSH(String term, String lang) {
String translated=null;
if("zh".equals(lang)){
translated=chinnese.getProperty(term);
}else if("fr".equals(lang)){
translated=french.getProperty(term);
}
return translated;
}

在 dspace.cfg 你应该添加文件的路径:

mterms_zh.path= /put/the/file/path
mterms_fr.path=/home/dspace_instalation/config/mterms_fr

检查语言比较和文件获取。

然后改变:

<xsl:value-of select="util:lookupBabelMeSH(node(),$current-locale)"/>

对于

<xsl:value-of select="util:lookupMeSH(node(),$current-locale)"/>

在 xsl 上

并将文件分隔符从“::”替换为“=”

添加了完整的运行类(class):

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.Properties;


public class Test3 {
private static Properties chinnese = null;
private static Properties french = null;

static{

chinnese = new Properties();
try {
String mterms_zhPath="D:/mterms_fr";
chinnese.load(new InputStreamReader(new FileInputStream(new File(mterms_zhPath)), "UTF8"));
french = new Properties();
String mterms_frPath="D:/mterms_fr";
french.load(new InputStreamReader(new FileInputStream(new File(mterms_frPath)), "UTF8"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static String lookupMeSH(String term, String lang) {
String translated=null;
if("zh".equals(lang)){
translated=chinnese.getProperty(term);
}else if("fr".equals(lang)){
translated=french.getProperty(term);
}
return translated;
}
public static void main (String [] args) {
// Test3 test3=new Test3();
//XSLUtils s = new XSLUtils();
System.out.println(lookupMeSH("Acari", "fr")); }
}

关于java - 如果我在文件中有翻译,如何在 DSpace 中翻译或替换主题词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40575394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com