Add translation support to reply items (#1894)

* Add translation support to reply items

- Add translateState and showTranslate fields to ReplyControl
- Add translatedText field to ReplyInfo for translation results
- Implement TranslateReplyReq message and translateReply API method
- Add translation UI with loading state and result display in reply
  items
- Show translation button when showTranslate is true and translateState
  is 2

* refa

Signed-off-by: dom <githubaccount56556@proton.me>

---------

Co-authored-by: dom <githubaccount56556@proton.me>
This commit is contained in:
lesetong
2026-04-16 12:40:39 +08:00
committed by GitHub
parent 0b4ed25891
commit dd2492e04d
5 changed files with 389 additions and 31 deletions

View File

@@ -2857,6 +2857,20 @@ const ReplyControl$json = {
'6': '.bilibili.main.community.reply.v1.ReplyControl.InsertEffect',
'10': 'insertEffect'
},
{
'1': 'translation_switch',
'3': 37,
'4': 1,
'5': 5,
'10': 'translationSwitch'
},
{
'1': 'show_translation',
'3': 100,
'4': 1,
'5': 8,
'10': 'showTranslation'
},
],
'3': [
ReplyControl_EasterEggLabel$json,
@@ -2977,18 +2991,20 @@ final $typed_data.Uint8List replyControlDescriptor = $convert.base64Decode(
'aWxpLm1haW4uY29tbXVuaXR5LnJlcGx5LnYxLlJlcGx5Q29udHJvbC5FYXN0ZXJFZ2dMYWJlbF'
'IOZWFzdGVyRWdnTGFiZWwSJwoPY29udGV4dF9mZWF0dXJlGCMgASgJUg5jb250ZXh0RmVhdHVy'
'ZRJgCg1pbnNlcnRfZWZmZWN0GCQgASgLMjsuYmlsaWJpbGkubWFpbi5jb21tdW5pdHkucmVwbH'
'kudjEuUmVwbHlDb250cm9sLkluc2VydEVmZmVjdFIMaW5zZXJ0RWZmZWN0GkEKDkVhc3RlckVn'
'Z0xhYmVsEhQKBWltYWdlGAEgASgJUgVpbWFnZRIZCghqdW1wX3VybBgCIAEoCVIHanVtcFVybB'
'rXAQoLR3JhZGVSZWNvcmQSFAoFc2NvcmUYASABKAVSBXNjb3JlElUKBXRleHRzGAIgAygLMj8u'
'YmlsaWJpbGkubWFpbi5jb21tdW5pdHkucmVwbHkudjEuUmVwbHlDb250cm9sLkdyYWRlUmVjb3'
'JkLlRleHRSBXRleHRzGlsKBFRleHQSEAoDcmF3GAEgASgJUgNyYXcSQQoFc3R5bGUYAiABKAsy'
'Ky5iaWxpYmlsaS5tYWluLmNvbW11bml0eS5yZXBseS52MS5UZXh0U3R5bGVSBXN0eWxlGjwKDE'
'luc2VydEVmZmVjdBIYCgdjb250ZW50GAEgASgJUgdjb250ZW50EhIKBGljb24YAiABKAlSBGlj'
'b24a8QEKClZvdGVPcHRpb24SYgoKbGFiZWxfa2luZBgBIAEoDjJDLmJpbGliaWxpLm1haW4uY2'
'9tbXVuaXR5LnJlcGx5LnYxLlJlcGx5Q29udHJvbC5Wb3RlT3B0aW9uLkxhYmVsS2luZFIJbGFi'
'ZWxLaW5kEhIKBGRlc2MYAiABKAlSBGRlc2MSEAoDaWR4GAMgASgDUgNpZHgSFwoHdm90ZV9pZB'
'gEIAEoA1IGdm90ZUlkIkAKCUxhYmVsS2luZBIVChFERUZBVUxUX0xhYmVsS2luZBAAEgcKA1JF'
'RBABEggKBEJMVUUQAhIJCgVQTEFJThAD');
'kudjEuUmVwbHlDb250cm9sLkluc2VydEVmZmVjdFIMaW5zZXJ0RWZmZWN0Ei0KEnRyYW5zbGF0'
'aW9uX3N3aXRjaBglIAEoBVIRdHJhbnNsYXRpb25Td2l0Y2gSKQoQc2hvd190cmFuc2xhdGlvbh'
'hkIAEoCFIPc2hvd1RyYW5zbGF0aW9uGkEKDkVhc3RlckVnZ0xhYmVsEhQKBWltYWdlGAEgASgJ'
'UgVpbWFnZRIZCghqdW1wX3VybBgCIAEoCVIHanVtcFVybBrXAQoLR3JhZGVSZWNvcmQSFAoFc2'
'NvcmUYASABKAVSBXNjb3JlElUKBXRleHRzGAIgAygLMj8uYmlsaWJpbGkubWFpbi5jb21tdW5p'
'dHkucmVwbHkudjEuUmVwbHlDb250cm9sLkdyYWRlUmVjb3JkLlRleHRSBXRleHRzGlsKBFRleH'
'QSEAoDcmF3GAEgASgJUgNyYXcSQQoFc3R5bGUYAiABKAsyKy5iaWxpYmlsaS5tYWluLmNvbW11'
'bml0eS5yZXBseS52MS5UZXh0U3R5bGVSBXN0eWxlGjwKDEluc2VydEVmZmVjdBIYCgdjb250ZW'
'50GAEgASgJUgdjb250ZW50EhIKBGljb24YAiABKAlSBGljb24a8QEKClZvdGVPcHRpb24SYgoK'
'bGFiZWxfa2luZBgBIAEoDjJDLmJpbGliaWxpLm1haW4uY29tbXVuaXR5LnJlcGx5LnYxLlJlcG'
'x5Q29udHJvbC5Wb3RlT3B0aW9uLkxhYmVsS2luZFIJbGFiZWxLaW5kEhIKBGRlc2MYAiABKAlS'
'BGRlc2MSEAoDaWR4GAMgASgDUgNpZHgSFwoHdm90ZV9pZBgEIAEoA1IGdm90ZUlkIkAKCUxhYm'
'VsS2luZBIVChFERUZBVUxUX0xhYmVsS2luZBAAEgcKA1JFRBABEggKBEJMVUUQAhIJCgVQTEFJ'
'ThAD');
@$core.Deprecated('Use replyExtraDescriptor instead')
const ReplyExtra$json = {
@@ -3311,6 +3327,14 @@ const ReplyInfo$json = {
'10': 'memberV2'
},
{'1': 'track_info', '3': 16, '4': 1, '5': 9, '10': 'trackInfo'},
{
'1': 'translated_content',
'3': 17,
'4': 1,
'5': 11,
'6': '.bilibili.main.community.reply.v1.Content',
'10': 'translatedContent'
},
],
};
@@ -3326,8 +3350,9 @@ final $typed_data.Uint8List replyInfoDescriptor = $convert.base64Decode(
'NvbW11bml0eS5yZXBseS52MS5NZW1iZXJSBm1lbWJlchJTCg1yZXBseV9jb250cm9sGA4gASgL'
'Mi4uYmlsaWJpbGkubWFpbi5jb21tdW5pdHkucmVwbHkudjEuUmVwbHlDb250cm9sUgxyZXBseU'
'NvbnRyb2wSRwoJbWVtYmVyX3YyGA8gASgLMiouYmlsaWJpbGkubWFpbi5jb21tdW5pdHkucmVw'
'bHkudjEuTWVtYmVyVjJSCG1lbWJlclYyEh0KCnRyYWNrX2luZm8YECABKAlSCXRyYWNrSW5mbw'
'==');
'bHkudjEuTWVtYmVyVjJSCG1lbWJlclYyEh0KCnRyYWNrX2luZm8YECABKAlSCXRyYWNrSW5mbx'
'JYChJ0cmFuc2xhdGVkX2NvbnRlbnQYESABKAsyKS5iaWxpYmlsaS5tYWluLmNvbW11bml0eS5y'
'ZXBseS52MS5Db250ZW50UhF0cmFuc2xhdGVkQ29udGVudA==');
@$core.Deprecated('Use replyInfoReplyDescriptor instead')
const ReplyInfoReply$json = {
@@ -4561,3 +4586,60 @@ const WordSearchParam$json = {
/// Descriptor for `WordSearchParam`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List wordSearchParamDescriptor = $convert.base64Decode(
'Cg9Xb3JkU2VhcmNoUGFyYW0SHwoLc2hvd25fY291bnQYASABKANSCnNob3duQ291bnQ=');
@$core.Deprecated('Use translateReplyReqDescriptor instead')
const TranslateReplyReq$json = {
'1': 'TranslateReplyReq',
'2': [
{'1': 'type', '3': 1, '4': 1, '5': 3, '10': 'type'},
{'1': 'oid', '3': 2, '4': 1, '5': 3, '10': 'oid'},
{'1': 'rpid', '3': 3, '4': 3, '5': 3, '10': 'rpid'},
],
};
/// Descriptor for `TranslateReplyReq`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List translateReplyReqDescriptor = $convert.base64Decode(
'ChFUcmFuc2xhdGVSZXBseVJlcRISCgR0eXBlGAEgASgDUgR0eXBlEhAKA29pZBgCIAEoA1IDb2'
'lkEhIKBHJwaWQYAyADKANSBHJwaWQ=');
@$core.Deprecated('Use translateReplyRespDescriptor instead')
const TranslateReplyResp$json = {
'1': 'TranslateReplyResp',
'2': [
{
'1': 'translated_reply',
'3': 1,
'4': 3,
'5': 11,
'6':
'.bilibili.main.community.reply.v1.TranslateReplyResp.TranslatedReplyEntry',
'10': 'translatedReply'
},
],
'3': [TranslateReplyResp_TranslatedReplyEntry$json],
};
@$core.Deprecated('Use translateReplyRespDescriptor instead')
const TranslateReplyResp_TranslatedReplyEntry$json = {
'1': 'TranslatedReplyEntry',
'2': [
{'1': 'key', '3': 1, '4': 1, '5': 3, '10': 'key'},
{
'1': 'value',
'3': 2,
'4': 1,
'5': 11,
'6': '.bilibili.main.community.reply.v1.ReplyInfo',
'10': 'value'
},
],
'7': {'7': true},
};
/// Descriptor for `TranslateReplyResp`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List translateReplyRespDescriptor = $convert.base64Decode(
'ChJUcmFuc2xhdGVSZXBseVJlc3ASdAoQdHJhbnNsYXRlZF9yZXBseRgBIAMoCzJJLmJpbGliaW'
'xpLm1haW4uY29tbXVuaXR5LnJlcGx5LnYxLlRyYW5zbGF0ZVJlcGx5UmVzcC5UcmFuc2xhdGVk'
'UmVwbHlFbnRyeVIPdHJhbnNsYXRlZFJlcGx5Gm8KFFRyYW5zbGF0ZWRSZXBseUVudHJ5EhAKA2'
'tleRgBIAEoA1IDa2V5EkEKBXZhbHVlGAIgASgLMisuYmlsaWJpbGkubWFpbi5jb21tdW5pdHku'
'cmVwbHkudjEuUmVwbHlJbmZvUgV2YWx1ZToCOAE=');