跨国公司的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