Skip to content

共创翻译 / 文本质量反馈(Community Translation)

功能概述

SDK 1.4.0+ 提供了玩家共创翻译入口,1.5.0 起进一步扩展为「文本质量反馈」:玩家在游戏内即可对当前译文打分,并/或提交自己的翻译建议,与 AI Agent 审查(开发者侧)相互独立。

SDK 提供两种接入模式,走同一个服务端流程(仅评分立即采纳计入平均分,包含翻译建议的条目进入 AI 评分 → 人工审核):

  • 内置 UI — 调用 suggestTranslation(stringIds[, imageBytes]),SDK 直接弹出评分卡片,集成成本最低
  • 无 UI(Headless,1.6.0+) — 调用 submitTranslationSuggestions(...),集成方在自己的界面收集玩家评分/翻译建议后提交,SDK 不弹任何页面

下方先介绍内置 UI(方式一/二),无 UI 提交在「方式三」一节。

suggestTranslation() 弹窗内每条文本下方有 1-5 星评分组件 + 可选输入框,可按需选择三种反馈模式:

反馈模式含义平台侧行为
仅评分玩家只对当前译文打 1-5 星自动采纳,立即计入字符串平均分 + 玩家积分(项目侧可配单条评分积分)
仅建议玩家只填写新的翻译建议进入 AI 评分 → 人工审核队列
评分 + 建议同时给出评分与翻译建议评分立即计入;建议照常走 AI + 人工审核

前提条件

使用共创翻译功能前,必须满足以下条件:

  1. SDK 已完成初始化
  2. 已通过 updateUserInfo() 设置 userId(用于标识提交反馈的玩家)
  3. 项目在 Loxily 平台已开启「共创翻译」开关
java
UserConfig userConfig = new UserConfig.Builder()
    .setUserId("player_001")
    .setUserTags("beta,community")
    .build();
LoxilyLocalize.updateUserInfo(userConfig);

方式一:自动截图

SDK 自动截取当前屏幕,随建议一起提交(仅评分时不会附带截图,节省流量):

java
String[] stringIds = {"dialog.npc_greeting", "dialog.player_choice_1"};
LoxilyLocalize.suggestTranslation(stringIds);

方式二:外部传入截图(游戏引擎推荐)

适用于 Unity、Cocos2dx 等游戏引擎,由游戏方自行截图:

java
byte[] screenshotBytes = ...; // 从 RenderTexture 获取
String[] stringIds = {"dialog.npc_greeting", "dialog.player_choice_1"};
LoxilyLocalize.suggestTranslation(stringIds, screenshotBytes);

注意: 传入 imageBytesnull 时,SDK 会自动截取当前屏幕;玩家仅评分(无建议)时不上传截图。

参数说明

参数类型必填说明
stringIdsString[]当前页面使用的 string_id 数组,不可为空
imageBytesbyte[]PNG/JPEG 格式的截图数据,传 null 则 SDK 自动截屏

方式三:无 UI 提交(Headless,1.6.0+)

如果你希望沿用自己的 UI 风格(例如已有的评分对话框 / 反馈中心),可以使用 submitTranslationSuggestions(...) 直接提交,SDK 完全不渲染任何页面

java
// 1) 玩家在你的自绘界面对若干词条评分 / 写建议后,构造提交项
List<TranslationSuggestion> items = new ArrayList<>();
items.add(TranslationSuggestion.builder("HOME_TITLE")
        .rating(4)
        .build());
items.add(TranslationSuggestion.builder("BTN_OK")
        .rating(2)
        .suggestedTranslation("确定")
        .build());

// 2) 截图(可选;不传则不附带——SDK 不会自动截屏)
byte[] screenshot = captureGameScreenBeforeOpeningDialog();

// 3) 提交,回调在主线程触发
LoxilyLocalize.submitTranslationSuggestions(items, screenshot,
        new SuggestSubmitCallback() {
            @Override
            public void onSuccess(int ratingCount, int suggestionCount) {
                showToast("感谢反馈:" + (ratingCount + suggestionCount) + " 条已提交");
                dismissDialog();
            }

            @Override
            public void onFailure(String errorMsg) {
                showToast("提交失败:" + errorMsg);
            }
        });

单条便捷重载:

java
LoxilyLocalize.submitTranslationSuggestions(
        TranslationSuggestion.builder("BTN_OK").rating(5).build(),
        /* imageBytes */ null,
        callback);

TranslationSuggestion

Builder 模式构造,字段如下:

字段类型必填说明
stringIdString词条 ID(建议从 getPageString 调用链路中拿到)
ratingint1-5;0 或不传表示未评分
suggestedTranslationString玩家撰写的翻译建议;空或 null 表示不提交建议
currentTranslationString当前展示的译文。不传时 SDK 会自动用 stringId 查询补全,通常省略即可

每个 TranslationSuggestion 至少要满足「评分 > 0」「非空建议」之一,否则会被静默过滤。

SuggestSubmitCallback

java
public interface SuggestSubmitCallback {
    void onSuccess(int ratingCount, int suggestionCount);
    void onFailure(String errorMsg);
}
  • ratingCount:服务端计入的纯评分条数
  • suggestionCount:服务端计入的翻译建议条数(含同时含评分的)
  • onFailure:SDK 校验失败、网络异常、HTTP 非 2xx 均走此回调

参数说明

参数类型必填说明
suggestionsList<TranslationSuggestion> / TranslationSuggestion反馈条目,至少 1 条
imageBytesbyte[]PNG/JPEG 截图。null 时 SDK 不会自动截屏(与方式一/二不同)
callbackSuggestSubmitCallback提交结果回调,主线程触发

注意事项

  • submitTranslationSuggestions 不会自动截屏;如需附带截图,请在打开自绘对话框之前自行抓取,否则截到的是对话框本身
  • 服务端契约与 suggestTranslation 完全一致,仅是入口不同;同一 stringId 在同一玩家维度的去重 / 风控由服务端处理
  • 调用前需满足同样的前提条件(SDK 已初始化 + userId 已设置)

老接口迁移

老接口新接口说明
evaluateString(code, content)suggestTranslation(new String[]{code})submitTranslationSuggestions(...)老接口签名保留但已 @Deprecated,内部直接转发到 suggestTranslationcontent 参数被忽略(新平台始终查询实时译文)
evaluateAllStrings()@Deprecated 且 no-op(新平台无"整版本评分"维度)
enableEvaluateFunction(boolean)@Deprecated 且 no-op

老集成代码无需立即修改即可继续编译运行,但建议尽快迁移到本页面描述的新接口。

内置 UI 的弹窗交互

调用 suggestTranslation() 后 SDK 打开「Text Quality Feedback」卡片:

  • 每条 string_id 一行,下方有 5 颗星评分 + 翻译建议输入框
  • 底部按钮
    • 仅一条 string_id → 「Submit」
    • 多条 string_id → 「Submit All」
  • 没评分也没填建议的行会被自动跳过,不会上传空数据
  • 提交成功 → Toast 提示 + 自动关闭页面,玩家直接回到游戏

内置 UI 的工作流程

  1. 调用方法 → 传入当前页面的 string_id 数组
  2. 展示卡片 → SDK 打开共创界面,展示每条 string_id 当前译文 + 评分 + 建议输入框
  3. 玩家反馈 → 玩家给出评分、建议或两者
  4. 提交 → 评分立即入库计入平均分;建议进入审核队列;积分按项目配置发放
  5. 关闭 → 提交成功 Toast 后自动关闭页面

与 reviewCurrentScreen 的区别

对比项reviewCurrentScreensuggestTranslationsubmitTranslationSuggestions
目标用户开发/翻译团队终端玩家终端玩家
交互方式AI Agent 对话SDK 弹窗卡片集成方自绘 UI
功能AI 分析翻译质量 + 一键优化 + 版本发布玩家反馈译文质量并提建议同左,但 UI 由集成方控制
userId不要求必须设置必须设置
截图始终携带仅在有翻译建议时携带(不传则自动截屏)不会自动截屏,由集成方决定是否传
适用 SDK 版本1.2.8+1.4.0+1.6.0+