【原创】ABAP多语言环境开发的解决方案/Multiple Language Development In ABAP
Posted on 2008-12-15 20:18 邓明辉 阅读(2504) 评论(2) 编辑 收藏 举报跨国公司的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 |