Conteúdo

Tradução de programas para português estruturado ou outro idioma

Uma forma simples para auxiliar na tradução de programas quando existir a necessidade de gerar alguma documentação em português ou qualquer outro idioma.

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.