1
앱 엔진에서 자바 버전의 번역 API를 사용하고 있습니다. 번역에서 특정 단어를 무시하는 방법이 있습니까? 예 : 일부 언어의 경우 IGNORED_TEXT이 (가) '번역 IGNORED_TEXT'이 (가) IGNORED_TEXT 형식이 잘못되었으며 번역 API가 변환하지 않는다고 보장 할 수 없습니다.텍스트의 지정된 단어를 무시하는 방법은 무엇입니까?
앱 엔진에서 자바 버전의 번역 API를 사용하고 있습니다. 번역에서 특정 단어를 무시하는 방법이 있습니까? 예 : 일부 언어의 경우 IGNORED_TEXT이 (가) '번역 IGNORED_TEXT'이 (가) IGNORED_TEXT 형식이 잘못되었으며 번역 API가 변환하지 않는다고 보장 할 수 없습니다.텍스트의 지정된 단어를 무시하는 방법은 무엇입니까?
여러 번 시도한 결과 나는 무시하고 싶은 텍스트에 특수 문자를 사용하는 레티 어를 만들었습니다. 내 경우에는 문자열 매개 변수 (% d, % s 등)입니다. 어쩌면 그것은 누군가를위한 도움이 될 것입니다 :
public class Parser {
public static final String[] MAGIC_PARAMETER_STRING = {"975313579", "*****", "˨", "இ", "⏲"};
public static final String[] MAGIC_PARAMETER_NUMBER = {"975323579", "*******", "Ω", "˧", "\u23FA"};
private static final String formatSpecifier
= "%(\\d+\\$)?([-#+ 0,(\\<]*)?(\\d+)?(\\.\\d+)?([tT])?([a-zA-Z%])";
private static final Pattern formatToken = Pattern.compile(formatSpecifier);
private final int maxStringParameterCount = Parser.MAGIC_PARAMETER_STRING.length;
private final int maxNumberParameterCount = Parser.MAGIC_PARAMETER_NUMBER.length;
private int stringPos = 0;
private int numberPos = 0;
private String convertToken(ConvertedString result, String index, String flags, String width, String precision, String temporal, String conversion, String numberReplacement, String stringReplacement) {
if (conversion.equals("s")) {
result.stringArgCount++;
return stringReplacement;
} else if (conversion.equals("d")) {
result.numberArgCount++;
return numberReplacement;
}
throw new IllegalArgumentException("%" + index + flags + width + precision + temporal + conversion);
}
private String getReplacementNumber(boolean bumpUp) throws RetryExceededException {
if (bumpUp) {
++numberPos;
}
if (numberPos >= maxNumberParameterCount) {
throw new RetryExceededException();
}
return MAGIC_PARAMETER_NUMBER[numberPos];
}
private String getReplacementString(boolean bumpUp) throws RetryExceededException {
if (bumpUp) {
++stringPos;
}
if (stringPos >= maxStringParameterCount) {
throw new RetryExceededException();
}
return MAGIC_PARAMETER_STRING[stringPos];
}
public ConvertedString revert(String text) throws RetryExceededException {
ConvertedString convertedString = new ConvertedString();
String replacementString = getReplacementString(false);
String replacementNumber = getReplacementNumber(false);
convertedString.stringArgCount = StringUtils.countMatches(text, replacementString);
convertedString.numberArgCount = StringUtils.countMatches(text, replacementNumber);
String result = text.replace(replacementString, "%s");
result = result.replace(replacementNumber, "%d");
convertedString.result = result;
return convertedString;
}
public ConvertedString convert(final String format) {
return convert(format, MAGIC_PARAMETER_NUMBER[0], MAGIC_PARAMETER_STRING[0]);
}
public ConvertedString convert(final String format, String numberReplacement, String stringReplacement) {
ConvertedString result = new ConvertedString();
final StringBuilder regex = new StringBuilder();
final Matcher matcher = formatToken.matcher(format);
int lastIndex = 0;
while (matcher.find()) {
regex.append(format.substring(lastIndex, matcher.start()));
regex.append(convertToken(result, matcher.group(1), matcher.group(2), matcher.group(3),
matcher.group(4), matcher.group(5), matcher.group(6), numberReplacement, stringReplacement));
lastIndex = matcher.end();
}
regex.append(format.substring(lastIndex, format.length()));
result.result = regex.toString();
return result;
}
public ConvertedString retryConvert(String originalText, boolean bumpUpString, boolean bumpUpNumber) throws RetryExceededException {
String replacementNumber = getReplacementNumber(bumpUpNumber);
String replacementString = getReplacementString(bumpUpString);
return convert(originalText, replacementNumber, replacementString);
}
public static class ConvertedString {
public int stringArgCount;
public int numberArgCount;
public String result;
}
public static class RetryExceededException extends Exception {
}
}