如果文件中有翻译,如何在 DSpace 中翻译或替换主题术语 [英] How to translate or replace subject terms in DSpace if I have the translations in a file

查看:21
本文介绍了如果文件中有翻译,如何在 DSpace 中翻译或替换主题术语的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果语言切换,我想在我维护的 DSPace 实例中翻译 item-view.xsl 中显示的主题 (MeSH) 术语.以前我使用下面的代码(我在 XSLUtils.java 类中添加了它)来查找 Babelmesh 站点并即时翻译它.

I would like to translate the subject(MeSH) terms displayed in item-view.xsl in the DSPace instance that I'm maintaining if the language is switched. Previously I am using the code below (I added this in XSLUtils.java class) to lookup to Babelmesh site and translate it on the fly.

    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 中像这样使用它:

I then used it in item-view.xsl like this:

  <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 用于法语和中文翻译.

Now, I would like to translate the text without calling BabelMesh site everytime the language is switched since there's a limit to the number of requests. Also, since the url to BabelMesh is hardcoded, any changes to BabelMesh service will break the rendering of the translation. I only need to translate the terms into chinese and french. I have the translations located in [dspace]/config/mesh directory. The files are named mterms_fr and mterms_zh for french and chinese translations respectively.

这些文件的内容如下所示:

The contents of these files looked like these:

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).

If you noticed, the :: is the separator between the english terms and the translations. If there's no translation for that term, the english term is retained (eg Acaricides).

那么是否可以仅从 [dspace]/config/mesh 目录中查找这些文件并即时进行翻译?

So would it be possible to just lookup to these files from the [dspace]/config/mesh directory and do the translation on-the-fly?

编辑

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

I would like to add that if ever the term is not found in the translation file, it should be returned as is (eg some random text should return some random text) since it is expected that I have no control to what users will input in the subject field (ie via batch import).

提前致谢!

推荐答案

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

You can try something like this (added to 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 你应该添加文件的路径:

At dspace.cfg you should add the path of files:

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

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

check langs comparations and file adquisition.

然后改变:

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

为了

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

在 xsl

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

And replace the files separator from "::" to "="

添加完整运行类:

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

这篇关于如果文件中有翻译,如何在 DSpace 中翻译或替换主题术语的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆