此处Api使用的有道智云
https://ai.youdao.com/?keyfrom=fanyi-new-nav#/
Api调用参考文档:
https://ai.youdao.com/DOCSIRMA/html/trans/api/wbfy/index.html
需要导入Api网站的证书,有道智云是两个证书。可以到智云AI平台下载,也可也在网易有道的页面下载
先给出成功结果
注意事项
*---注意事项:
*---1.翻译是覆盖式写入,不能一次只翻译一个元素。
*---2.文本元素长度,需要满足被翻译后的文本长度,一般预设50. 事务代码被翻译后长度不能超36
*---3.被翻译的文字不能超过20个(使用的有道智云,超过20,需要特殊处理,此处没有做处理,默认小于20个字
*---3.1 q前10个字符 + q长度 + q后10个字符(当q长度大于20)或 q字符串(当q长度小于等于20)
*---4.目前只针对RPT4,TRAN,即RPT4(文本元素,tital),TRAN(事务码)
先看结果:
第一个界面是翻译的文本是否写入成功(与翻译是否成功没关系)
双击后进入具体元素
-----------------------------------分割线------------------------------------------------------
0.屏幕处理
SELECTION-SCREEN BEGIN OF BLOCK BLK01 WITH FRAME .
SELECT-OPTIONS:S_PROG FOR TSTC-PGMNA .
SELECTION-SCREEN END OF BLOCK BLK01.
AT SELECTION-SCREEN .
AT SELECTION-SCREEN OUTPUT.
START-OF-SELECTION.
PERFORM FRM_DATA_GET."获取需要翻译的数据
PERFORM FRM_DATA_TRANS."调用Api翻译
PERFORM FRM_PROG_TRANS."写入翻译
PERFORM FRM_ALV.
1.使用的变量:
DATA:BEGIN OF GS_DATA,"调用Api需要的字段/第二界面显示
TEXT_ORI TYPE STRING, "源文本 ---导入文件字段,仅3个
LANGU_ORI TYPE STRING, "源语言
LANGU_TRA TYPE STRING, "翻译语言
TEXT_TRA TYPE STRING, "翻译文本
PROG TYPE TSTC-PGMNA, "翻译程序
SEL TYPE C,
MSG TYPE STRING,
CODE TYPE STRING,
TYPE TYPE C,
END OF GS_DATA.
DATA:GT_DATA LIKE TABLE OF GS_DATA.
DATA:BEGIN OF GS_ALV,"第一界面显示
PROG TYPE TSTC-PGMNA, "翻译程序
ICON TYPE ICON_D,
SEL TYPE C,
END OF GS_ALV.
DATA:GT_ALV LIKE TABLE OF GS_ALV.
DATA:BEGIN OF GS_RPT4,"文本元素
PROG TYPE TSTC-PGMNA, "翻译程序
LT_LXE_PCX_S1 LIKE TABLE OF LXE_PCX_S1, "程序对应的
END OF GS_RPT4.
DATA:GT_RPT4 LIKE TABLE OF GS_RPT4.
DATA:GS_TRAN LIKE GS_RPT4,"tcode翻译
GT_TRAN LIKE GT_RPT4.
2.获取程序的翻译数据
文本元素保存并非保存在表中,而是保存在池里。
通过DEBUG,SE63的代码,找到获取文本的代码如下:
READ TEXTPOOL objname INTO lt_s_textpool LANGUAGE s_r3_lang STATE 'A'.
读取文本元素的函数其实是两部分构成:
LXE_OBJ_TEXT_PAIR_READ_ && OBJTYPE
OBJTYPE就是文本类型
【图片不知道为什么插入不进来了,查看路径如下】
SE63->短文本->A5 下面的RPT1,RPT2......就是文本类型。
所以应该是可以通用到SMARTFORMS的翻译,但是因为SMARTFORMS翻译比其他
批量翻译要简单,所以就没有研究代码翻译的。
*----获取程序的翻译数据
*--一般只有 文本元素:PRT4 , 事务代码:TRANS
DATA:LT_PCX_S1 LIKE TABLE OF LXE_PCX_S1,
LS_PCX_S1 TYPE LXE_PCX_S1.
DATA:LV_OBJNAME TYPE LXEOBJNAME.
*-----文本元素:PRT4
SELECT DISTINCT NAME FROM TRDIR INTO TABLE @DATA(LT_TRDIR) WHERE NAME IN @S_PROG."取程序表
LOOP AT LT_TRDIR INTO DATA(LS_TRDIR).
LV_OBJNAME = LS_TRDIR-NAME.
CALL FUNCTION 'LXE_OBJ_TEXT_PAIR_READ_RPT4'
EXPORTING
T_R3_LANG = '*'
S_R3_LANG = '1'
O_R3_LANG = '*'
OBJTYPE = 'RPT4'
OBJNAME = LV_OBJNAME
TABLES
LT_PCX_S1 = LT_PCX_S1.
GS_RPT4-PROG = LS_TRDIR-NAME.
GS_RPT4-LT_LXE_PCX_S1[] = LT_PCX_S1[].
LOOP AT LT_PCX_S1 INTO LS_PCX_S1.
GS_ALV-PROG = GS_DATA-PROG = LS_TRDIR-NAME.
GS_DATA-TEXT_ORI = LS_PCX_S1-S_TEXT.
GS_DATA-LANGU_ORI = 'en'.
GS_DATA-LANGU_TRA = 'zh-CHS'.
APPEND GS_DATA TO GT_DATA.
APPEND GS_ALV TO GT_ALV.
CLEAR:LS_PCX_S1,GS_DATA,GS_ALV,LV_OBJNAME.
ENDLOOP.
APPEND GS_RPT4 TO GT_RPT4.
CLEAR:LS_TRDIR,LT_PCX_S1[].
ENDLOOP.
*----事务代码:TRANS
SELECT TCODE FROM TSTC INTO TABLE @DATA(LT_TSTC) WHERE PGMNA IN @S_PROG.
LOOP AT LT_TSTC INTO DATA(LS_TSTC).
LV_OBJNAME = LS_TSTC-TCODE.
CALL FUNCTION 'LXE_OBJ_TEXT_PAIR_READ_TRAN'
EXPORTING
T_R3_LANG = '1'
S_R3_LANG = '1'
OBJTYPE = 'TRAN'
OBJNAME = LV_OBJNAME
TABLES
LT_PCX_S1 = LT_PCX_S1.
GS_TRAN-PROG = LS_TSTC-TCODE.
GS_TRAN-LT_LXE_PCX_S1[] = LT_PCX_S1[].
LOOP AT LT_PCX_S1 INTO LS_PCX_S1.
GS_ALV-PROG = GS_DATA-PROG = LS_TSTC-TCODE.
GS_DATA-TEXT_ORI = LS_PCX_S1-S_TEXT.
GS_DATA-LANGU_ORI = 'en'.
GS_DATA-LANGU_TRA = 'zh-CHS'.
APPEND GS_DATA TO GT_DATA.
APPEND GS_ALV TO GT_ALV.
CLEAR:LS_PCX_S1,GS_DATA,GS_ALV,LV_OBJNAME.