提示语拼接问题及样例

1 问题描述
在日常开发中,经常会遇到使用提示语进行客户提示的场景。但是由于使用场景或开发习惯,经常会导致一些提示语出现拼接的情况。一旦提示语出现拼接就会给提示语的多语言翻译带来一定的影响。因此希望通过下面的样例及建议,让开发者在开发中避免发生拼接问题,导致代码修改,重复测试等。
2 拼接样例及建议
append拼接问题
1、中文与字符串参数拼接
StringBuilder msg = new StringBuilder();
for (TelephoneVerifyResult item : resultList){
if (!item.isParseSuccess()){
throw new KDBizException(item.getParseErrorMsg());
}
if (!item.isVerifySuccess()){
Map<String,String> result = item.getVerifyResult();
String message = CollectionUtils.isEmpty(result)?"":result.get("message");
if (StringUtils.isNotBlank(message)){
msg.append(ResManager.loadResFormat("账号:","AdmRegisterPlugin_29","scm-adm-formplugin"));
msg.append(message);
throw new KDBizException(msg.toString());
}
}这种拼接会被可翻译性检查服务检查出来,可能导致最终展示的内容缺失,语义不完整导致无法准确翻译。
修改建议:
1、去掉“账号:”中文内容,直接展示校验的错误信息。
2、msg.append(ResManager.loadKDString("账号:%s","AdmRegisterPlugin_29","scm-adm-formplugin", message)); 这样还是不能根本解决问题,但是翻译员会知道需要翻译的内容会有占位符替换内容。
2、 中文与中文符号拼接
StringBuilder msg = new StringBuilder();
msg.append(ResManager.loadKDString("系统管理员姓名:", "AdmSupplierChgEdit_9", "scm-adm-formplugin"));
msg.append("【");
msg.append(userName);
msg.append("】");这种是明显的词条拼接,翻译员无法准确的拿到翻译的完整内容。导致无法准确的进行翻译。
修改建议:使用占位符的方式来描述句子的完整内容。
StringBuilder msg = new StringBuilder();
msg.append(ResManager.loadKDString("系统管理员姓名:【%s】", "AdmSupplierChgEdit_9", "scm-adm-formplugin"));3、中文句子不完整拼接
StringBuilder sb;
for (Row row : ds) {
sb = new StringBuilder();
String time = sdf.format(row.getDate("fexetime"));
sb.append(time);
sb.append(' ');
String name = getNameByBilltype(row.getString("billtype"));
sb.append(name);
sb.append(ResManager.loadKDString("成功归档。", "CardArchiveLogPlugin_0", "fi-aef-formplugin"));
Integer count = row.getInteger("count");
sb.append(count);
sb.append(ResManager.loadKDString("份", "CardArchiveLogPlugin_1", "fi-aef-formplugin"));
Label lab = getControl("loglab" + index);
lab.setText(sb.toString());
index++;
}
这种是明显的词条拼接,针对“份”量词在其他语言例如英文中,单独出现时存在不可译问题。修改建议:将提示内容整理成包含占位符的完整句子。方便翻译员准确翻译。
for (Row row : ds) {
String time = sdf.format(row.getDate("fexetime"));
String name = getNameByBilltype(row.getString("billtype"));
Integer count = row.getInteger("count");
Label lab = getControl("loglab" + index);
lab.setText(ResManager.loadKDString(“时间:%1$s,类型:%2$s,成功归档%3$s份。” "CardArchiveLogPlugin_0", "fi-aef-formplugin"),time,name,count);
index++;
}4、中文符号拼接
public String toString() {
String sb = "【" +areaCode +':' +
String.format(ResManager.loadKDString("关键字=", "CMBArea_0", "ebg-aqap-banks-cmb-dc"),keywords) +',' +
String.format(ResManager.loadKDString("省市代码=", "CMBArea_1", "ebg-aqap-banks-cmb-dc"),areaCode) +',' +
String.format(ResManager.loadKDString("省份=", "CMBArea_2", "ebg-aqap-banks-cmb-dc"),province) +',' +
String.format(ResManager.loadKDString("城市=", "CMBArea_3", "ebg-aqap-banks-cmb-dc"),city) +',' +
String.format(ResManager.loadKDString("联行号(地区码)=", "CMBArea_4", "ebg-aqap-banks-cmb-dc"),branchBankCode) +
"】";
return sb;
}
这种拼接没有将需要转换的中文符号包含在提示语中,会导致在其他语言环境下,翻译员不能通过对翻译的修改来进行符号的转换。同时中文客户看到的语句中出现了非中文的符号内容。
修改建议:将句子整理成包含中文符号和占位符的完整句子。
public String toString() {
String sb = ResManager.loadKDString("【%1$s:关键字=%2$s,省市代码=%3$s,省份=%4$s,城市=%5$s,联行号(地区码)=%6$s】" ,areaCode,keywords,areaCode,province,city,branchBankCode);
return sb;
}中文断句问题
1、无效中文拼接
private static String getFullName(long modelId, String dimension,String num) {
StringBuilder sb = new StringBuilder();
IDNumberTreeNode member;
int index = num.indexOf("@");
if ( index < 0) {
member = MemberReader.findMemberByNumber(MemberReader.findModelNumberById(modelId), dimension, num);
} else {
member = MemberReader.findMemberByNumber(MemberReader.findModelNumberById(modelId), dimension, num.substring(0, index));
}
String memNumber = member.getNumber();
String memName = member.getName();
if (member == IDNumberTreeNode.NotFoundTreeNode && num.contains(":")) {
String[] splits = num.split(":");
Long dimensionId = MemberReader.getDimensionIdByNum(modelId, dimension);
memNumber =splits[0] + ":" + DimPropList.getDimPropList(dimensionId).getFieldName(splits[0]);
Map<Long, IDNumberTreeNode> allNodeFromCache = MemberReader.getAllNodeFromCache(FormConstant.FORM_MEMBPROPERTY, modelId);
for (IDNumberTreeNode node : allNodeFromCache.values()) {
if (java.util.Objects.equals(node.getDimId(), dimensionId) &&
提示语拼接问题及样例
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



