/** * 替换掉骨架文件中的占位符 * * @param segId * @param srcBean * @param tgtbeBean */ private void replaceSegment(String segId, TuMrkBean srcBean, TuMrkBean tgtbeBean) throws Exception { String segStr = "%%%" + segId + "%%%"; String srcXpath = "/xliff/file/body//trans-unit/seg-source//mrk[text()='" + segStr + "']"; // 先处理源文 outputAP.selectXPath(srcXpath); if (outputAP.evalXPath() != -1) { int textIdx = outputVN.getText(); outputXM.updateToken(textIdx, srcBean.getContent().getBytes("utf-8")); } // 处理译文 String tgtXpath = "/xliff/file/body//trans-unit/target//mrk[text()='" + segStr + "']"; outputAP.selectXPath(tgtXpath); if (outputAP.evalXPath() != -1) { String content = tgtbeBean.getContent(); if (tgtbeBean.getCommentList().size() > 0) { String uuId = CommonFunction.createUUID(); commentMap.put(uuId, tgtbeBean.getCommentList()); content = "<mrk mtype=\"x-sdl-comment\" sdl:cid=\"" + uuId + "\">" + tgtbeBean.getContent() + "</mrk>"; } int textIdx = outputVN.getText(); outputXM.updateToken(textIdx, content.getBytes("utf-8")); // 开始处理状态 int attrIdx = -1; if ((attrIdx = outputVN.getAttrVal("mid")) != -1) { boolean needLocked = false; String mid = outputVN.toString(attrIdx); // 下面根据mid找到对应的sdl:seg节点,这个节点里面存放的有每个文本段的状态 String xpath = "ancestor::trans-unit/sdl:seg-defs/sdl:seg[@id='" + mid + "']"; outputAP.selectXPath(xpath); if (outputAP.evalXPath() != -1) { // 先判断是否锁定 if (tgtbeBean.isLocked()) { if ((attrIdx = outputVN.getAttrVal("locked")) != -1) { if (!"true".equals(outputVN.toString(attrIdx))) { outputXM.updateToken(attrIdx, "true"); } } else { needLocked = true; } } else { if ((attrIdx = outputVN.getAttrVal("locked")) != -1) { if ("true".equals(outputVN.toString(attrIdx))) { outputXM.updateToken(attrIdx, "false"); } } } // 下面根据R8的状态。修改sdl的状态。 String conf = ""; String status = tgtbeBean.getStatus(); if ("new".equals(status)) { conf = "Draft"; } else if ("translated".equals(status)) { conf = "Translated"; } else if ("approved".equals(status)) { conf = "ApprovedTranslation"; } else if ("signed-off".equals(status)) { conf = "ApprovedSignOff"; } if ("".equals(conf)) { if ((attrIdx = outputVN.getAttrVal("conf")) != -1) { outputXM.updateToken(attrIdx, ""); } } else { if ((attrIdx = outputVN.getAttrVal("conf")) != -1) { if (!conf.equals(outputVN.toString(attrIdx))) { outputXM.updateToken(attrIdx, conf); } } else { String attributeStr = ""; if (needLocked) { attributeStr = " locked=\"true\" "; } attributeStr += " conf=\"" + conf + "\" "; outputXM.insertAttribute(attributeStr.getBytes("utf-8")); needLocked = false; } } if (needLocked) { outputXM.insertAttribute(" locked=\"true\" ".getBytes("utf-8")); } } } } }