Primeiramente é necessário criar uma tabela conforme print abaixo:
Existe uma outra maneira onde se importa a tradução de um arquivo excel ou txt, porém, deixar em uma tabela Z os parceiros podem alimentar a mesma e a tradução fica cada vez melhor.
REPORT ZSAPeiros.
* ----------------------------------------------------------------------
* DEFINIÇÃO DE TIPOS PARA TABELAS / ESTRUTURAS
* ----------------------------------------------------------------------
TYPES:
BEGIN OF ty_linhas,
linha(100) TYPE c,
END OF ty_linhas.
* ----------------------------------------------------------------------
* TABELAS E ESTRUTURAS INTERNAS
* ----------------------------------------------------------------------
DATA:
t_de_para TYPE TABLE OF ztraducao WITH HEADER LINE,
t_progr1 TYPE TABLE OF string WITH HEADER LINE,
t_progr TYPE TABLE OF ty_linhas WITH HEADER LINE.
* ----------------------------------------------------------------------
* VARIÁVEIS GLOBAIS
* ----------------------------------------------------------------------
DATA:
gv_size_para(10) TYPE c,
gv_tabix TYPE sy-tabix,
gv_posi(3) TYPE c,
gv_length(3) TYPE n.
* ----------------------------------------------------------------------
* PARÂMETROS
* ----------------------------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK b1.
PARAMETERS:
p_repid TYPE sy-repid,
p_dest TYPE rlgrap-filename DEFAULT 'c:\ZSAPeiros.txt'.
SELECTION-SCREEN END OF BLOCK b1.
* ----------------------------------------------------------------------
* INITIALIZATION
* ----------------------------------------------------------------------
INITIALIZATION.
%_p_repid_%_app_%-text = 'Programa a ser traduzido'.
%_p_dest_%_app_%-text = 'Arquivo de destino'.
* ----------------------------------------------------------------------
* Destino da tradução
* ----------------------------------------------------------------------
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_dest.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_path = 'C:\'
mode = 'S'
IMPORTING
filename = p_dest
EXCEPTIONS
OTHERS = 1.
* ----------------------------------------------------------------------
* START-OF-SELECTION
* ----------------------------------------------------------------------
START-OF-SELECTION.
SELECT *
FROM ztraducao
INTO TABLE t_de_para.
IF sy-subrc IS INITIAL.
SORT t_de_para BY de.
DELETE t_de_para WHERE de IS INITIAL.
ENDIF.
IF t_de_para[] IS INITIAL.
MESSAGE 'Dados de tradução inexistentes' TYPE 'I'.
LEAVE LIST-PROCESSING.
ENDIF.
READ REPORT p_repid INTO t_progr1.
t_progr[] = t_progr1[].
LOOP AT t_de_para.
gv_size_para = STRLEN( t_de_para-para ).
LOOP AT t_progr.
gv_tabix = sy-tabix.
TRANSLATE t_progr-linha USING '''"'.
CLEAR: gv_posi, gv_length.
FIND t_de_para-de IN t_progr-linha MATCH OFFSET gv_posi
MATCH LENGTH gv_length
IGNORING CASE.
IF sy-subrc IS INITIAL.
gv_posi = gv_posi - 1.
IF gv_posi = -1 OR t_progr-linha+gv_posi(1) = ' '.
gv_posi = gv_posi + 1.
REPLACE t_progr-linha+gv_posi(gv_length) WITH t_de_para-para(gv_size_para) INTO t_progr-linha.
ENDIF.
ENDIF.
MODIFY t_progr INDEX gv_tabix.
ENDLOOP.
ENDLOOP.
LOOP AT t_progr.
WRITE: / t_progr-linha.
ENDLOOP.