邓明辉的实名博客

记下来,是怕会忘记。
  首页  :: 新随笔  :: 联系 :: 管理

跨国公司的SAP系统需要多语言的程序界面,本文用一个简单的示例给出了一个解决方案。

1、程序示例

(1)中文选择屏幕

(2)中文清单

(3)英文选择屏幕

(4)英文清单

2、关键设计点

(1)选择屏幕的多语言实现
(2)程序Title的多语言实现
(3)按钮文本的多语言实现
(4)清单列名的多语言实现
(5)Screen元素的多语言实现

皆要使用ABAP文本元素的翻译功能。翻译功能可以从SE38中选取菜单“转到>>翻译”进入,也可以通过事务代码SE63进去:

输入程序名,并选择源语言和目标语言,注意,这里的语言选择框虽然是灰色的,但是允许选取:

然后点击编辑进入:

3、注意应用程序按钮的定义要使用动态文本

4、在线程序Screen元素的多语言化

需要将待多语言化的屏幕元素定义成I/O类型,并设置成只输出,以2D显示。然后在程序中定义一个与之Screen Name一致字符串变量。在PBO里为这个字符串变量赋值,例如:

ZScreenText = TEXT-001.

通过对TEXT-001的翻译,就可以实现对屏幕元素ZScreenText的多语言转换。

5、示例程序的源代码 

*&---------------------------------------------------------------------*

*& Report Z_MULTI_LANGUAGE                                            *

*&---------------------------------------------------------------------* 

REPORT z_multi_language.

TABLES: makt.

DATA:   ok_code TYPE sy-ucomm,

        save_ok TYPE sy-ucomm.

 

DATA:   alv_container TYPE scrfname VALUE 'CCONTROL',

        alv_grid TYPE REF TO cl_gui_alv_grid ,

        gui_container TYPE REF TO cl_gui_custom_container.

 

DATA : itab TYPE STANDARD TABLE OF makt.

 

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

SELECT-OPTIONS: smatnr FOR makt-matnr.

SELECTION-SCREEN END OF BLOCK b1.

 

START-OF-SELECTION.

 CALL SCREEN 2000.

 

*---------------------------------------------------------------------*

MODULE status_2000 OUTPUT.

 SET TITLEBAR 'Z_MULTI_LANGUAGE'.

 SET PF-STATUS 'Z_MULTI_LANGUAGE'.

 IF gui_container IS INITIAL.

    CREATE OBJECT gui_container

      EXPORTING container_name = alv_container.

    CREATE OBJECT alv_grid

      EXPORTING i_parent = gui_container.

    PERFORM display_alv.

 ENDIF.

ENDMODULE.                 " status_2000 OUTPUT

 

*---------------------------------------------------------------------*

FORM display_alv.

 SELECT * FROM makt INTO TABLE itab

   WHERE matnr IN smatnr

   AND spras EQ sy-langu.

 CALL METHOD alv_grid->set_table_for_first_display

    EXPORTING

      i_structure_name = 'MAKT'

    CHANGING

      it_outtab        = itab.

ENDFORM.                    "display_alv

 

*---------------------------------------------------------------------*

MODULE cancel INPUT.

 LEAVE PROGRAM.

ENDMODULE.                    "cancel INPUT

 

*----------------------------------------------------------------------*

MODULE user_command_2000 INPUT.

 save_ok = ok_code.

 CLEAR ok_code.

 CASE save_ok.

    WHEN '&EXIT'.

    WHEN 'EXIT'.

    WHEN '&BACK'.

      LEAVE PROGRAM.

 ENDCASE.

ENDMODULE.                 " user_command_2000 INPUT