Improve translator

This commit is contained in:
世界 2021-01-17 11:54:00 +08:00
parent abb802f8bc
commit 8887c1dd86
No known key found for this signature in database
GPG Key ID: CD109927C34A63C4
3 changed files with 69 additions and 34 deletions

View File

@ -240,6 +240,7 @@ import java.util.regex.Pattern;
import cn.hutool.core.util.StrUtil;
import kotlin.Unit;
import kotlin.text.StringsKt;
import tw.nekomimi.nekogram.BottomBuilder;
import tw.nekomimi.nekogram.MessageDetailsActivity;
import tw.nekomimi.nekogram.NekoConfig;
@ -491,7 +492,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
private MessageObject selectedObjectToEditCaption;
private MessageObject selectedObject;
private MessageObject.GroupedMessages selectedObjectGroup;
public MessageObject.GroupedMessages selectedObjectGroup;
private ArrayList<MessageObject> forwardingMessages;
private MessageObject forwardingMessage;
private MessageObject.GroupedMessages forwardingMessageGroup;
@ -18571,9 +18572,6 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
}
}
if (chatMode != MODE_SCHEDULED) {
boolean allowPrpr = currentUser != null
|| (currentChat != null && ChatObject.canSendMessages(currentChat) && !currentChat.broadcast &&
message.isFromUser());
boolean allowViewHistory = currentUser == null
&& (currentChat != null && !currentChat.broadcast && message.isFromUser());
@ -18582,17 +18580,24 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
options.add(90);
icons.add(R.drawable.baseline_schedule_24);
}
MessageObject messageObject = null;
if (selectedObjectGroup != null) {
if (!TextUtils.isEmpty(selectedObjectGroup.messages.get(0).messageOwner.message)) {
messageObject = selectedObjectGroup.messages.get(0);
MessageObject messageObject = getMessageForTranslate();
boolean docsWithMessages = false;
if (selectedObjectGroup != null && selectedObjectGroup.isDocuments) {
for (MessageObject object : selectedObjectGroup.messages) {
if (StrUtil.isNotBlank(object.messageOwner.message)) {
docsWithMessages = true;
}
}
} else if (!TextUtils.isEmpty(selectedObject.messageOwner.message) || selectedObject.type == MessageObject.TYPE_POLL) {
messageObject = selectedObject;
}
if (NekoConfig.showTranslate) {
if (messageObject != null) {
items.add(messageObject.messageOwner.translated ? LocaleController.getString("UndoTranslate", R.string.UndoTranslate) : LocaleController.getString("Translate", R.string.Translate));
if (messageObject != null || docsWithMessages) {
boolean td;
if (messageObject != null) {
td = messageObject.messageOwner.translated;
} else {
td = selectedObjectGroup.messages.get(0).messageOwner.translated;
}
items.add(td ? LocaleController.getString("UndoTranslate", R.string.UndoTranslate) : LocaleController.getString("Translate", R.string.Translate));
options.add(88);
icons.add(R.drawable.ic_translate);
}
@ -19264,6 +19269,25 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
}
}
public MessageObject getMessageForTranslate() {
MessageObject messageObject = null;
if (selectedObjectGroup != null && !selectedObjectGroup.isDocuments) {
for (MessageObject object : selectedObjectGroup.messages) {
if (!TextUtils.isEmpty(object.messageOwner.message)) {
if (messageObject != null) {
messageObject = null;
break;
} else {
messageObject = object;
}
}
}
} else if (!TextUtils.isEmpty(selectedObject.messageOwner.message) || selectedObject.type == MessageObject.TYPE_POLL) {
messageObject = selectedObject;
}
return messageObject;
}
private void processSelectedOption(int option) {
if (selectedObject == null || getParentActivity() == null) {
return;
@ -19839,19 +19863,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
}
case 88: {
MessageObject messageObject = null;
if (selectedObjectGroup != null) {
if (!TextUtils.isEmpty(selectedObjectGroup.messages.get(0).messageOwner.message)) {
messageObject = selectedObjectGroup.messages.get(0);
}
} else if (!TextUtils.isEmpty(selectedObject.messageOwner.message) || selectedObject.type == MessageObject.TYPE_POLL) {
messageObject = selectedObject;
}
if (messageObject == null) {
return;
}
MessageTransKt.translateMessages(this, new MessageObject[]{messageObject});
MessageTransKt.translateMessages(this);
break;
@ -20107,7 +20119,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
scrimPopupWindowItems = null;
}
MessageTransKt.translateMessages(this, new MessageObject[]{selectedObject}, locale);
MessageTransKt.translateMessages(this, locale);
return Unit.INSTANCE;

View File

@ -67,7 +67,8 @@ fun MessageObject.translateFinished(locale: Locale): Int {
} else {
val text = db.query(messageOwner.message.takeIf { !it.isNullOrBlank() } ?: return 1) ?: return 0
val text = db.query(messageOwner.message.takeIf { !it.isNullOrBlank() } ?: return 1)
?: return 0
messageOwner.translatedMessage = messageOwner.message + "\n\n--------\n\n" + text
@ -77,9 +78,19 @@ fun MessageObject.translateFinished(locale: Locale): Int {
}
@JvmOverloads
fun ChatActivity.translateMessages(messages: Array<MessageObject>, target: Locale = NekoConfig.translateToLang?.code2Locale
?: LocaleController.getInstance().currentLocale) {
@JvmName("translateMessages")
fun ChatActivity.translateMessages1() = translateMessages()
@JvmName("translateMessages")
fun ChatActivity.translateMessages2(target: Locale) = translateMessages(target)
@JvmName("translateMessages")
fun ChatActivity.translateMessages3(messages: Array<MessageObject>) = translateMessages(messages = messages)
fun ChatActivity.translateMessages(target: Locale = NekoConfig.translateToLang?.code2Locale
?: LocaleController.getInstance().currentLocale, messages: Array<MessageObject> = messageForTranslate?.let { arrayOf(it) }
?: selectedObjectGroup?.messages?.toTypedArray()
?: emptyArray()) {
if (messages.all { it.messageOwner.translated }) {
@ -163,7 +174,7 @@ fun ChatActivity.translateMessages(messages: Array<MessageObject>, target: Local
AlertUtil.showTransFailedDialog(parentActivity, it is UnsupportedOperationException, it.message
?: it.javaClass.simpleName) {
translateMessages(messages, target)
translateMessages(target, messages)
}
@ -200,7 +211,7 @@ fun ChatActivity.translateMessages(messages: Array<MessageObject>, target: Local
AlertUtil.showTransFailedDialog(parentActivity, e is UnsupportedOperationException, e.message
?: e.javaClass.simpleName) {
translateMessages(messages, target)
translateMessages(target, messages)
}
@ -237,7 +248,7 @@ fun ChatActivity.translateMessages(messages: Array<MessageObject>, target: Local
AlertUtil.showTransFailedDialog(parentActivity, it is UnsupportedOperationException, it.message
?: it.javaClass.simpleName) {
translateMessages(messages, target)
translateMessages(target, messages)
}

View File

@ -8,6 +8,7 @@ import org.telegram.messenger.LocaleController
import org.telegram.messenger.R
import tw.nekomimi.nekogram.NekoConfig
import tw.nekomimi.nekogram.PopupBuilder
import tw.nekomimi.nekogram.cc.CCConverter
import tw.nekomimi.nekogram.cc.CCTarget
import tw.nekomimi.nekogram.transtale.source.*
import tw.nekomimi.nekogram.utils.UIUtil
@ -104,12 +105,23 @@ interface Translator {
// FileLog.d("[Trans] use provider ${translator.javaClass.simpleName}, toLang: $toLang, query: $query")
return translator.doTranslate("auto", language, query).also {
val result = translator.doTranslate("auto", language, query).also {
to.transDb.save(query, it)
}
if (language == "zh") {
val countryUpperCase = country.toUpperCase()
if (countryUpperCase == "CN") {
return CCConverter.get(CCTarget.SP).convert(result)
} else if (countryUpperCase == "TW") {
return CCConverter.get(CCTarget.TT).convert(result)
}
}
return result
}
@JvmStatic