* _ _ _ _ _ _ _ _ * (_)_ __ | |_ ___ _ __ _ __ __ _| |_(_) ___ _ __ __ _| (_)______ _| |_(_) ___ _ __ * | | '_ \| __/ _ \ '__| '_ \ / _` | __| |/ _ \| '_ \ / _` | | |_ / _` | __| |/ _ \| '_ \ * | | | | | || __/ | | | | | (_| | |_| | (_) | | | | (_| | | |/ / (_| | |_| | (_) | | | | * |_|_| |_|\__\___|_| |_| |_|\__,_|\__|_|\___/|_| |_|\__,_|_|_/___\__,_|\__|_|\___/|_| |_| * "! This report is part of a mini-framework on Internationalization for texts on Abap objects. "! Class ZCL_I18N is available as a text-supplier that can be fed (with feed) from Abap "! coding (hard-coded). The framework will operate with the hard-coded values, but these "! can be "overwritten" with entries from a table (ZTEXTPOOL_I18N). This report is the editor "! for the report. And it doubles as example for the framework. REPORT zi18n_editor. CLASS lcl_controller DEFINITION DEFERRED. DATA go_controller TYPE REF TO lcl_controller. DATA go_i18n TYPE REF TO zcl_i18n. TABLES: ztextpool_i18n, sscrfields. SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE tlt_01. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN POSITION 2. SELECTION-SCREEN PUSHBUTTON (70) lbl_b03 USER-COMMAND create VISIBLE LENGTH 5. SELECTION-SCREEN PUSHBUTTON (70) lbl_b04 USER-COMMAND delete_pool VISIBLE LENGTH 5. SELECTION-SCREEN POSITION 23. SELECTION-SCREEN PUSHBUTTON (70) lbl_b01 USER-COMMAND focus VISIBLE LENGTH 5. SELECTION-SCREEN PUSHBUTTON (70) lbl_b02 USER-COMMAND clear_fields VISIBLE LENGTH 5. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(17) lbl_s01 FOR FIELD so_pool. SELECT-OPTIONS: so_pool FOR ztextpool_i18n-pool LOWER CASE NO INTERVALS. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(17) lbl_s02 FOR FIELD so_id. SELECT-OPTIONS: so_id FOR ztextpool_i18n-id LOWER CASE NO INTERVALS. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN POSITION 2. SELECTION-SCREEN PUSHBUTTON (70) lbl_b08 USER-COMMAND download VISIBLE LENGTH 5. SELECTION-SCREEN PUSHBUTTON (70) lbl_b09 USER-COMMAND upload VISIBLE LENGTH 5. SELECTION-SCREEN POSITION 23. SELECTION-SCREEN PUSHBUTTON (70) lbl_b05 USER-COMMAND onli VISIBLE LENGTH 5. SELECTION-SCREEN COMMENT 30(60) cmt_01. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK b01. SELECTION-SCREEN BEGIN OF BLOCK b02 WITH FRAME TITLE tlt_02. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN POSITION 2. SELECTION-SCREEN PUSHBUTTON (70) lbl_b10 USER-COMMAND save_text VISIBLE LENGTH 5. SELECTION-SCREEN PUSHBUTTON (70) lbl_b11 USER-COMMAND delete_text VISIBLE LENGTH 5. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(17) lbl_p01 FOR FIELD pa_pool. PARAMETERS: pa_pool TYPE ztextpool_i18n-pool LOWER CASE MODIF ID reo. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(17) lbl_p02 FOR FIELD pa_id. PARAMETERS: pa_id TYPE ztextpool_i18n-id LOWER CASE MODIF ID reo. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN SKIP. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(2) lbl_nl. PARAMETERS: pa_nl0 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN COMMENT 50(2) lbl_en. PARAMETERS: pa_en0 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN POSITION 2. PARAMETERS: pa_nl_pl AS CHECKBOX. SELECTION-SCREEN POSITION 4. PARAMETERS: pa_nl1 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN POSITION 51. PARAMETERS: pa_en_pl AS CHECKBOX. SELECTION-SCREEN POSITION 53. PARAMETERS: pa_en1 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN POSITION 4. PARAMETERS: pa_nl2 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN POSITION 53. PARAMETERS: pa_en2 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN POSITION 4. PARAMETERS: pa_nl3 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN POSITION 53. PARAMETERS: pa_en3 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN POSITION 4. PARAMETERS: pa_nl4 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN POSITION 53. PARAMETERS: pa_en4 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN SKIP. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(2) lbl_de. PARAMETERS: pa_de0 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN COMMENT 50(2) lbl_fr. PARAMETERS: pa_fr0 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN POSITION 2. PARAMETERS: pa_de_pl AS CHECKBOX. SELECTION-SCREEN POSITION 4. PARAMETERS: pa_de1 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN POSITION 51. PARAMETERS: pa_fr_pl AS CHECKBOX. SELECTION-SCREEN POSITION 53. PARAMETERS: pa_fr1 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN POSITION 4. PARAMETERS: pa_de2 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN POSITION 53. PARAMETERS: pa_fr2 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN POSITION 4. PARAMETERS: pa_de3 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN POSITION 53. PARAMETERS: pa_fr3 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN POSITION 4. PARAMETERS: pa_de4 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN POSITION 53. PARAMETERS: pa_fr4 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN SKIP. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(2) lbl_it. PARAMETERS: pa_it0 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN COMMENT 50(2) lbl_es. PARAMETERS: pa_es0 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN POSITION 2. PARAMETERS: pa_it_pl AS CHECKBOX. SELECTION-SCREEN POSITION 4. PARAMETERS: pa_it1 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN POSITION 51. PARAMETERS: pa_es_pl AS CHECKBOX. SELECTION-SCREEN POSITION 53. PARAMETERS: pa_es1 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN POSITION 4. PARAMETERS: pa_it2 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN POSITION 53. PARAMETERS: pa_es2 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN POSITION 4. PARAMETERS: pa_it3 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN POSITION 53. PARAMETERS: pa_es3 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN POSITION 4. PARAMETERS: pa_it4 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN POSITION 53. PARAMETERS: pa_es4 TYPE ztextpool_i18n-text LOWER CASE. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK b02. CLASS lcl_event_manager DEFINITION. PUBLIC SECTION. METHODS constructor IMPORTING io_object TYPE REF TO cl_salv_table. METHODS on_link_click FOR EVENT link_click OF cl_salv_events_table IMPORTING row column. ENDCLASS. "lcl_event_manager DEFINITION CLASS lcl_controller DEFINITION. PUBLIC SECTION. TYPES: BEGIN OF gty_textpool_i18n_line_json, line TYPE ztextpool_i18n-line, text TYPE ztextpool_i18n-text, plural TYPE ztextpool_i18n-plural, END OF gty_textpool_i18n_line_json. TYPES: BEGIN OF gty_textpool_i18n_id_json, id TYPE ztextpool_i18n-id, nl TYPE SORTED TABLE OF gty_textpool_i18n_line_json WITH UNIQUE KEY line, en TYPE SORTED TABLE OF gty_textpool_i18n_line_json WITH UNIQUE KEY line, de TYPE SORTED TABLE OF gty_textpool_i18n_line_json WITH UNIQUE KEY line, fr TYPE SORTED TABLE OF gty_textpool_i18n_line_json WITH UNIQUE KEY line, it TYPE SORTED TABLE OF gty_textpool_i18n_line_json WITH UNIQUE KEY line, es TYPE SORTED TABLE OF gty_textpool_i18n_line_json WITH UNIQUE KEY line, END OF gty_textpool_i18n_id_json. TYPES: BEGIN OF gty_textpool_i18n_pool_json, pool TYPE ztextpool_i18n-pool, ids TYPE SORTED TABLE OF gty_textpool_i18n_id_json WITH UNIQUE KEY id, END OF gty_textpool_i18n_pool_json. TYPES: BEGIN OF gty_textpool_i18n_json, pools TYPE SORTED TABLE OF gty_textpool_i18n_pool_json WITH UNIQUE KEY pool, END OF gty_textpool_i18n_json. CLASS-DATA go_instance TYPE REF TO lcl_controller. DATA go_alv TYPE REF TO cl_salv_table. DATA go_event_manager TYPE REF TO lcl_event_manager. DATA gt_textpool TYPE STANDARD TABLE OF ztextpool_i18n. CLASS-METHODS get_instance RETURNING VALUE(ro_instance) TYPE REF TO lcl_controller. CLASS-METHODS value_request_pool RETURNING VALUE(rv_return) TYPE ztextpool_i18n-pool. CLASS-METHODS value_request_id IMPORTING iv_pool TYPE ztextpool_i18n-pool RETURNING VALUE(rv_return) TYPE ztextpool_i18n-pool. CLASS-METHODS set_focus. METHODS create IMPORTING iv_pool TYPE ztextpool_i18n-pool iv_id TYPE ztextpool_i18n-id RETURNING VALUE(rv_created) TYPE boolean. METHODS save_text. METHODS delete_pool. METHODS delete_text. METHODS reporter. METHODS download IMPORTING iv_pool TYPE ztextpool_i18n-pool DEFAULT space. METHODS upload IMPORTING iv_cleandesk TYPE boolean DEFAULT abap_false. ENDCLASS. CLASS lcl_event_manager IMPLEMENTATION. METHOD constructor. DATA: lo_events TYPE REF TO cl_salv_events_table. lo_events = io_object->get_event( ). SET HANDLER on_link_click FOR lo_events. ENDMETHOD. METHOD on_link_click. * DATA lo_controller TYPE REF TO lcl_controller. * lo_controller = lcl_controller=>get_instance( ). * * READ TABLE lo_controller->gt_sensor_report * INTO DATA(ls_reportline) INDEX row. * IF sy-subrc = 0. * SUBMIT (zcl_sensor_manager=>co_sensor_editor_report) * WITH so_group = ls_reportline-groupname * WITH so_senso = ls_reportline-sensor * WITH so_parva = ls_reportline-parvalue * WITH pa_blind = abap_true * VIA SELECTION-SCREEN * AND RETURN. * * lo_controller->selection_sensors( ). * lo_controller->sensor_report_prepare( ). * lo_controller->go_alv->refresh( ). * ENDIF. ENDMETHOD. ENDCLASS. CLASS lcl_controller IMPLEMENTATION. METHOD get_instance. IF go_instance IS INITIAL. CREATE OBJECT go_instance. ENDIF. ro_instance = go_instance. ENDMETHOD. METHOD value_request_pool. DATA lt_return TYPE STANDARD TABLE OF ddshretval. SELECT DISTINCT pool FROM ztextpool_i18n INTO TABLE @DATA(lt_pools) GROUP BY pool. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'POOL' value_org = 'S' TABLES value_tab = lt_pools return_tab = lt_return EXCEPTIONS OTHERS = 0. IF lines( lt_return ) > 0. rv_return = lt_return[ 1 ]-fieldval. ENDIF. ENDMETHOD. METHOD value_request_id. DATA lt_return TYPE STANDARD TABLE OF ddshretval. SELECT DISTINCT id FROM ztextpool_i18n INTO TABLE @DATA(lt_ids) WHERE pool = @iv_pool GROUP BY id. IF lines( lt_ids ) = 0. MESSAGE go_i18n->get( 'F4NOPOOL' ) TYPE 'S'. ELSE. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'ID' value_org = 'S' TABLES value_tab = lt_ids return_tab = lt_return EXCEPTIONS OTHERS = 0. IF lines( lt_return ) > 0. rv_return = lt_return[ 1 ]-fieldval. ENDIF. ENDIF. ENDMETHOD. METHOD set_focus. DATA lv_fieldname TYPE c LENGTH 20. FIELD-SYMBOLS TYPE ztextpool_i18n-text. FIELD-SYMBOLS TYPE ztextpool_i18n-plural. SELECT DISTINCT pool, id FROM ztextpool_i18n INTO TABLE @DATA(lt_candidates) WHERE pool IN @so_pool AND id IN @so_id GROUP BY pool, id. DEFINE clear_field. CLEAR pa_&1&2. CLEAR pa_&1_pl. END-OF-DEFINITION. CLEAR pa_pool. CLEAR pa_id. "Clear the parameter fields, using a macro clear_field: nl 0, nl 1, nl 2, nl 3, nl 4, en 0, en 1, en 2, en 3, en 4, de 0, de 1, de 2, de 3, de 4, fr 0, fr 1, fr 2, fr 3, fr 4, it 0, it 1, it 2, it 3, it 4, es 0, es 1, es 2, es 3, es 4. READ TABLE lt_candidates INTO DATA(ls_candidate) INDEX 1. IF sy-subrc = 0. pa_pool = ls_candidate-pool. pa_id = ls_candidate-id. SELECT * FROM ztextpool_i18n INTO TABLE @DATA(lt_textpool) WHERE pool = @ls_candidate-pool AND id = @ls_candidate-id ORDER BY lang, line. LOOP AT lt_textpool INTO DATA(ls_textpool). IF ls_textpool-plural = abap_true. lv_fieldname = |PA_{ ls_textpool-lang }_PL|. ASSIGN (lv_fieldname) TO . IF sy-subrc = 0. = ls_textpool-plural. ENDIF. ENDIF. lv_fieldname = |PA_{ ls_textpool-lang }{ ls_textpool-line }|. ASSIGN (lv_fieldname) TO . IF sy-subrc = 0. = ls_textpool-text. ENDIF. ENDLOOP. IF lines( lt_candidates ) > 1. MESSAGE go_i18n->get( iv_id = 'MULTIPLE' iv_par = |{ lines( lt_candidates ) }| ) TYPE 'S'. ENDIF. ELSE. MESSAGE go_i18n->get( 'NODATA' ) TYPE 'S'. ENDIF. ENDMETHOD. METHOD create. DATA lt_ztextpool_i18n TYPE SORTED TABLE OF ztextpool_i18n WITH UNIQUE KEY pool id lang line. DATA(lo_i18n) = zcl_i18n=>get_instance( 'i18n.editor.create' ). lo_i18n->multifeed( go_i18n->gt_texts ). "Involve the texts from the global instance lo_i18n->multifeed( VALUE #( ( id = 'OBLIGATORY' nl = VALUE #( ( |Groep en ID zijn verplicht| ) ) en = VALUE #( ( |Group and ID are mandatory| ) ) ) ( id = 'VERIFY' nl = VALUE #( ( |Nieuwe groep| ) ) en = VALUE #( ( |New group| ) ) ) ) ). IF iv_pool IS INITIAL OR iv_id IS INITIAL. MESSAGE lo_i18n->get( 'OBLIGATORY' ) TYPE 'S'. rv_created = abap_false. EXIT. ENDIF. SELECT id FROM ztextpool_i18n INTO @DATA(lv_id) WHERE pool = @iv_pool AND id = @iv_id. ENDSELECT. IF sy-subrc <> 0. INSERT VALUE #( pool = iv_pool id = iv_id lang = 'NL' line = 0 text = 'Nieuw' ) INTO TABLE lt_ztextpool_i18n. INSERT VALUE #( pool = iv_pool id = iv_id lang = 'EN' line = 0 text = 'New' ) INTO TABLE lt_ztextpool_i18n. INSERT ztextpool_i18n FROM TABLE lt_ztextpool_i18n. ENDIF. set_focus( ). ENDMETHOD. METHOD save_text. DATA lt_ztextpool_i18n TYPE SORTED TABLE OF ztextpool_i18n WITH UNIQUE KEY pool id lang line. DATA(lo_i18n) = zcl_i18n=>get_instance( 'i18n.editor.save' ). lo_i18n->multifeed( go_i18n->gt_texts ). "Involve the texts from the global instance lo_i18n->multifeed( VALUE #( ( id = 'NOFOCUS' nl = VALUE #( ( |Kies eerst een tekst| ) ) en = VALUE #( ( |Focus on a text first| ) ) ) ( id = 'SAVED' nl = VALUE #( ( |Aanpassingen opgeslagen| ) ) en = VALUE #( ( |Changes saved| ) ) ) ) ). IF pa_pool IS INITIAL. MESSAGE lo_i18n->get( 'NOFOCUS' ) TYPE 'S'. EXIT. ENDIF. DEFINE process_field. IF NOT pa_&1&2 IS INITIAL. IF &2 = 1. "Plural checkbox only relevant for position 1 INSERT VALUE #( pool = pa_pool id = pa_id lang = |{ '&1' CASE = UPPER }| line = &2 text = pa_&1&2 plural = pa_&1_pl ) INTO TABLE lt_ztextpool_i18n. ELSE. INSERT VALUE #( pool = pa_pool id = pa_id lang = |{ '&1' CASE = UPPER }| line = &2 text = pa_&1&2 ) INTO TABLE lt_ztextpool_i18n. ENDIF. ENDIF. END-OF-DEFINITION. CLEAR lt_ztextpool_i18n. "Compose a table with all relevant fields - using a macro process_field: nl 0, nl 1, nl 2, nl 3, nl 4, en 0, en 1, en 2, en 3, en 4, de 0, de 1, de 2, de 3, de 4, fr 0, fr 1, fr 2, fr 3, fr 4, it 0, it 1, it 2, it 3, it 4, es 0, es 1, es 2, es 3, es 4. DELETE FROM ztextpool_i18n WHERE pool = pa_pool AND id = pa_id. INSERT ztextpool_i18n FROM TABLE lt_ztextpool_i18n. MESSAGE lo_i18n->get( 'SAVED' ) TYPE 'S'. ENDMETHOD. METHOD delete_pool. DATA lv_answer TYPE c LENGTH 1. DATA(lo_i18n) = zcl_i18n=>get_instance( 'i18n.editor.delete' ). lo_i18n->multifeed( go_i18n->gt_texts ). "Involve the texts from the global instance lo_i18n->feed( VALUE #( ( id = 'NOPOOL' nl = |Kies eerst een groep| en = |Focus on a pool first| ) ( id = 'COMPLETED' nl = |Teksten verwijderd| en = |Texts removed| ) ( id = 'LOCKED' nl = |Teksten geblokkeerd door gebruiker| en = |Texts locked by user| ) ( id = 'TITLE' nl = |Confirmatie: teksten verwijderen| en = |Please confirm: remove texts| ) ( id = 'QUESTION' nl = |Mogen alle groepsteksten van & verwijderd worden ?| en = |Remove all texts for group & ?| ) ) ). IF pa_pool IS INITIAL. MESSAGE lo_i18n->get( 'NOPOOL' ) TYPE 'S'. EXIT. ENDIF. CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING titlebar = |{ lo_i18n->get( 'TITLE' ) }| text_question = |{ lo_i18n->get( iv_id = 'QUESTION' iv_par = |{ pa_pool }| ) }| display_cancel_button = space IMPORTING answer = lv_answer EXCEPTIONS OTHERS = 0. CHECK lv_answer = '1'. IF zcl_i18n=>delete( iv_pool = so_pool-low ) = abap_true. MESSAGE lo_i18n->get( 'COMPLETED' ) TYPE 'S'. ELSE. MESSAGE lo_i18n->get( 'LOCKED' ) TYPE 'S'. ENDIF. ENDMETHOD. METHOD delete_text. DATA lv_answer TYPE c LENGTH 1. DATA(lo_i18n) = zcl_i18n=>get_instance( 'i18n.editor.delete' ). lo_i18n->multifeed( go_i18n->gt_texts ). "Involve the texts from the global instance lo_i18n->feed( VALUE #( ( id = 'NOPOOL' nl = |Kies eerst een groep en ID| en = |Focus on a pool and ID first| ) ( id = 'COMPLETED' nl = |Teksten verwijderd| en = |Texts removed| ) ( id = 'LOCKED' nl = |Teksten geblokkeerd door gebruiker| en = |Texts locked by user| ) ( id = 'TITLE' nl = |Confirmatie: teksten verwijderen| en = |Please confirm: remove texts| ) ( id = 'QUESTION' nl = |Mogen de teksten van & / & verwijderd worden ?| en = |Remove texts for group & / & ?| ) ) ). IF pa_pool IS INITIAL or pa_id is initial. MESSAGE lo_i18n->get( 'NOFOCUS' ) TYPE 'S'. EXIT. ENDIF. CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING titlebar = |{ lo_i18n->get( 'TITLE' ) }| text_question = |{ lo_i18n->get( iv_id = 'QUESTION' iv_par = |{ pa_pool }| iv_par2 = |{ pa_id }| ) }| display_cancel_button = space IMPORTING answer = lv_answer EXCEPTIONS OTHERS = 0. CHECK lv_answer = '1'. IF zcl_i18n=>delete( iv_pool = so_pool-low iv_id = pa_id ) = abap_true. MESSAGE lo_i18n->get( 'COMPLETED' ) TYPE 'S'. ELSE. MESSAGE lo_i18n->get( 'LOCKED' ) TYPE 'S'. ENDIF. ENDMETHOD. METHOD reporter. DATA lo_ref TYPE REF TO cl_salv_column_table. "cl_salv_column DATA(lo_i18n) = zcl_i18n=>get_instance( 'i18n.editor.report' ). lo_i18n->multifeed( go_i18n->gt_texts ). "Involve the texts from the global instance lo_i18n->multifeed( VALUE #( ( id = 'LINE' nl = VALUE #( ( |Regel| ) ) en = VALUE #( ( |Line| ) ) ) ( id = 'LANG' nl = VALUE #( ( |Taal| ) ) en = VALUE #( ( |Language| ) ) ) ( id = 'TEXT' nl = VALUE #( ( |Tekst| ) ) en = VALUE #( ( |Text| ) ) ) ( id = 'PLURAL' nl = VALUE #( ( |Meervoud| ) ) en = VALUE #( ( |Plural| ) ) ) ) ). TRY. cl_salv_table=>factory( IMPORTING r_salv_table = go_alv CHANGING t_table = gt_textpool ). go_alv->get_functions( )->set_all( abap_true ). DATA(lo_cols) = go_alv->get_columns( ). lo_cols->set_optimize( ). * DATA lo_ref TYPE REF TO cl_salv_column_table. "cl_salv_column * DATA(lo_col) = lo_cols->get_column( 'POOL' ). * lo_col->set_medium_text( |{ lo_i18n->get( 'POOL' ) }| ). * lo_col = lo_cols->get_column( 'ICON' ). * lo_col->set_medium_text( '____' ). * lo_ref ?= lo_col. * lo_ref->set_cell_type( if_salv_c_cell_type=>hotspot ). lo_cols->get_column( 'CLIENT' )->set_technical( abap_true ). lo_cols->get_column( 'POOL' )->set_short_text( |{ lo_i18n->get( 'LBL_S01' ) }| ). lo_cols->get_column( 'POOL' )->set_medium_text( |{ lo_i18n->get( 'LBL_S01' ) }| ). lo_cols->get_column( 'ID' )->set_short_text( |{ lo_i18n->get( 'LBL_S02' ) }| ). lo_cols->get_column( 'ID' )->set_medium_text( |{ lo_i18n->get( 'LBL_S02' ) }| ). lo_cols->get_column( 'LANG' )->set_short_text( |{ lo_i18n->get( 'LANG' ) }| ). lo_cols->get_column( 'LANG' )->set_medium_text( |{ lo_i18n->get( 'LANG' ) }| ). lo_cols->get_column( 'LINE' )->set_short_text( |{ lo_i18n->get( 'LINE' ) }| ). lo_cols->get_column( 'LINE' )->set_medium_text( |{ lo_i18n->get( 'LINE' ) }| ). lo_cols->get_column( 'LINE' )->set_visible( abap_false ). lo_cols->get_column( 'TEXT' )->set_short_text( |{ lo_i18n->get( 'TEXT' ) }| ). lo_cols->get_column( 'TEXT' )->set_medium_text( |{ lo_i18n->get( 'TEXT' ) }| ). lo_cols->get_column( 'PLURAL' )->set_short_text( |{ lo_i18n->get( 'PLURAL' ) }| ). lo_cols->get_column( 'PLURAL' )->set_medium_text( |{ lo_i18n->get( 'PLURAL' ) }| ). lo_ref ?= lo_cols->get_column( 'PLURAL' ). lo_ref->set_cell_type( if_salv_c_cell_type=>checkbox ). go_alv->get_sorts( )->add_sort( 'POOL' ). go_alv->get_sorts( )->add_sort( 'ID' ). go_alv->get_sorts( )->add_sort( 'LANG' ). go_alv->get_sorts( )->add_sort( 'LINE' ). CREATE OBJECT go_event_manager EXPORTING io_object = go_alv. CATCH cx_salv_msg cx_salv_not_found cx_salv_data_error cx_salv_existing. " error handling ENDTRY. go_alv->display( ). ENDMETHOD. METHOD download. DATA lo_JSONconverter TYPE REF TO /ui2/cl_abap2json. DATA ls_textpool_json TYPE gty_textpool_i18n_json. DATA lt_FILETABLE TYPE filetable. DATA lv_Rc TYPE i. DATA lv_filename TYPE string. DATA(lo_i18n) = zcl_i18n=>get_instance( 'i18n.editor.updownld' ). lo_i18n->multifeed( go_i18n->gt_texts ). "Involve the texts from the global instance lo_i18n->multifeed( VALUE #( ( id = 'DOWNLOAD:MSG1' nl = VALUE #( ( |Geef bestandsnaam voor de download aan| ) ) en = VALUE #( ( |Please enter a filename to download to| ) ) ) ( id = 'DOWNLOAD:MSG2' nl = VALUE #( ( |Download is mislukt (!)| ) ) en = VALUE #( ( |Download failed (!)| ) ) ) ( id = 'DOWNLOAD:MSG3' nl = VALUE #( ( |Download bestand aangemaakt| ) ) en = VALUE #( ( |Download created| ) ) ) ) ). cl_gui_frontend_services=>file_open_dialog( EXPORTING window_title = lo_i18n->get( 'DOWNLOAD:MSG1' ) CHANGING file_table = lt_FILETABLE rc = lv_rc ). CHECK lv_rc = 1. lv_filename = lt_FILETABLE[ 1 ]-filename. CLEAR ls_textpool_json. "This method is called with only filename, only iv_groupname or iv_groupname + iv_sensor + iv_parvalue (which may be blank) IF NOT iv_pool IS INITIAL. SELECT * FROM ztextpool_i18n INTO TABLE @DATA(lt_ztextpool_i18n) WHERE pool = @iv_pool ORDER BY pool, id, lang, line. ELSE. SELECT * FROM ztextpool_i18n INTO TABLE @lt_ztextpool_i18n ORDER BY pool, id, lang, line. ENDIF. CLEAR ls_textpool_json. LOOP AT lt_ztextpool_i18n INTO DATA(ls_ztextpool_i18n). READ TABLE ls_textpool_json-pools ASSIGNING FIELD-SYMBOL() WITH KEY pool = ls_ztextpool_i18n-pool. IF sy-subrc <> 0. INSERT VALUE #( pool = ls_ztextpool_i18n-pool ) INTO TABLE ls_textpool_json-pools ASSIGNING . ENDIF. READ TABLE -ids ASSIGNING FIELD-SYMBOL() WITH KEY id = ls_ztextpool_i18n-id. IF sy-subrc <> 0. INSERT VALUE #( id = ls_ztextpool_i18n-id ) INTO TABLE -ids ASSIGNING . ENDIF. CASE ls_ztextpool_i18n-lang. WHEN 'NL'. INSERT VALUE #( line = ls_ztextpool_i18n-line text = ls_ztextpool_i18n-text plural = ls_ztextpool_i18n-plural ) INTO TABLE -nl. WHEN 'EN'. INSERT VALUE #( line = ls_ztextpool_i18n-line text = ls_ztextpool_i18n-text plural = ls_ztextpool_i18n-plural ) INTO TABLE -en. WHEN 'DE'. INSERT VALUE #( line = ls_ztextpool_i18n-line text = ls_ztextpool_i18n-text plural = ls_ztextpool_i18n-plural ) INTO TABLE -de. WHEN 'IT'. INSERT VALUE #( line = ls_ztextpool_i18n-line text = ls_ztextpool_i18n-text plural = ls_ztextpool_i18n-plural ) INTO TABLE -it. WHEN 'FR'. INSERT VALUE #( line = ls_ztextpool_i18n-line text = ls_ztextpool_i18n-text plural = ls_ztextpool_i18n-plural ) INTO TABLE -fr. WHEN 'ES'. INSERT VALUE #( line = ls_ztextpool_i18n-line text = ls_ztextpool_i18n-text plural = ls_ztextpool_i18n-plural ) INTO TABLE -es. ENDCASE. ENDLOOP. CREATE OBJECT lo_JSONconverter. DATA(lv_JSON_string) = lo_JSONconverter->struc2json( iv_struc = ls_textpool_json ). SPLIT lv_JSON_string AT '},' INTO TABLE DATA(lt_jsonlines). LOOP AT lt_jsonlines ASSIGNING FIELD-SYMBOL(). = |{ }\},|. ENDLOOP. = substring( val = off = 0 len = strlen( ) - 2 ). "Save as a file CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING filename = lv_filename TABLES data_tab = lt_jsonlines EXCEPTIONS OTHERS = 4. IF sy-subrc <> 0. MESSAGE lo_i18n->get( 'DOWNLOAD:MSG2' ) TYPE 'W'. ELSE. MESSAGE lo_i18n->get( 'DOWNLOAD:MSG3' ) TYPE 'S'. ENDIF. ENDMETHOD. METHOD upload. DATA ls_textpool_json TYPE gty_textpool_i18n_json. DATA lt_FILETABLE TYPE filetable. DATA lv_Rc TYPE i. DATA lv_filename TYPE string. DATA lt_data TYPE STANDARD TABLE OF string. DATA lv_json_string TYPE string. DATA lo_JSON TYPE REF TO /ui2/cl_json. DATA lt_texts TYPE zcl_i18n=>gty_textnodes. DATA ls_texts TYPE zcl_i18n=>gty_textnode. DATA(lo_i18n) = zcl_i18n=>get_instance( 'i18n.editor.updownld' ). lo_i18n->multifeed( go_i18n->gt_texts ). "Involve the texts from the global instance lo_i18n->multifeed( VALUE #( ( id = 'UPLOAD:MSG1' nl = VALUE #( ( |Geef bestandsnaam voor de upload aan| ) ) en = VALUE #( ( |Please enter a filename to upload from| ) ) ) ( id = 'UPLOAD:MSG2' nl = VALUE #( ( |Upload is mislukt (!)| ) ) en = VALUE #( ( |Upload failed (!)| ) ) ) ( id = 'UPLOAD:JSON' nl = VALUE #( ( |Upload is mislukt (!) JSON formaat| ) ) en = VALUE #( ( |Upload failed (!) JSON format| ) ) ) ( id = 'UPLOAD:MSG4' nl = VALUE #( ( |Upload bestand verwerkt - &| ) ) en = VALUE #( ( |Upload processed - &| ) ) ) ( id = 'UPLOAD:MSG5' nl = VALUE #( ( |Upload bestand niet verwerkt (geblokkeerd door gebruiker)| ) ) en = VALUE #( ( |Upload not processed - (locked by user)| ) ) ) ) ). cl_gui_frontend_services=>file_open_dialog( EXPORTING window_title = lo_i18n->get( 'DOWNLOAD:MSG1' ) CHANGING file_table = lt_FILETABLE rc = lv_rc ). CHECK lv_rc = 1. lv_filename = lt_FILETABLE[ 1 ]-filename. CALL FUNCTION 'GUI_UPLOAD' EXPORTING filename = lv_filename TABLES data_tab = lt_data EXCEPTIONS OTHERS = 4. IF sy-subrc <> 0. MESSAGE lo_i18n->get( 'UPLOAD:MSG2' ) TYPE 'W'. EXIT. ENDIF. LOOP AT lt_data INTO DATA(ls_dataline). lv_json_string = |{ lv_json_string }{ ls_dataline }|. ENDLOOP. CREATE OBJECT lo_JSON. lo_JSON->deserialize( EXPORTING json = lv_json_string pretty_name = /ui2/cl_json=>pretty_mode-user CHANGING data = ls_textpool_json ). IF lines( ls_textpool_json-pools ) = 0. MESSAGE lo_i18n->get( 'UPLOAD:JSON' ) TYPE 'S'. EXIT. ENDIF. LOOP AT ls_textpool_json-pools INTO DATA(ls_pool). DATA(lo_i18n_saver) = zcl_i18n=>get_instance( ls_pool-pool ). CLEAR lt_texts. LOOP AT ls_pool-ids INTO DATA(ls_id). ls_texts = VALUE #( id = ls_id-id ). LOOP AT ls_id-nl INTO DATA(ls_lang). INSERT ls_lang-text INTO TABLE ls_texts-nl. ENDLOOP. LOOP AT ls_id-en INTO ls_lang. INSERT ls_lang-text INTO TABLE ls_texts-en. ENDLOOP. LOOP AT ls_id-de INTO ls_lang. INSERT ls_lang-text INTO TABLE ls_texts-de. ENDLOOP. LOOP AT ls_id-fr INTO ls_lang. INSERT ls_lang-text INTO TABLE ls_texts-fr. ENDLOOP. LOOP AT ls_id-it INTO ls_lang. INSERT ls_lang-text INTO TABLE ls_texts-it. ENDLOOP. LOOP AT ls_id-es INTO ls_lang. INSERT ls_lang-text INTO TABLE ls_texts-es. ENDLOOP. APPEND ls_texts TO lt_texts. ENDLOOP. lo_i18n_saver->multifeed( iv_reset = abap_true it_texts = lt_texts ). IF lo_i18n_saver->save( ) = abap_true. MESSAGE lo_i18n->get( iv_id = 'UPLOAD:MSG4' iv_par = ls_pool-pool ) TYPE 'W'. ELSE. MESSAGE lo_i18n->get( 'UPLOAD:MSG5' ) TYPE 'W'. ENDIF. ENDLOOP. ENDMETHOD. ENDCLASS. AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_pool-low. so_pool-low = lcl_controller=>value_request_pool( ). AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_id-low. so_id-low = lcl_controller=>value_request_id( so_pool-low ). INITIALIZATION. go_controller = lcl_controller=>get_instance( ). go_i18n = zcl_i18n=>get_instance( 'i18n.editor' ). go_i18n->multifeed( VALUE #( ( id = 'TLT_01' nl = VALUE #( ( |Internationalization teksten| ) ) en = VALUE #( ( |Internationalization texts| ) ) ) ( id = 'LBL_B01' nl = VALUE #( ( |@Y2\\QUitlichten@| ) ) en = VALUE #( ( |@Y2\\QFocus@| ) ) ) ( id = 'LBL_B02' nl = VALUE #( ( |@UN\\QMaak selectie velden leeg@| ) ) en = VALUE #( ( |@UN\\QClear selection fields@| ) ) ) ( id = 'LBL_B03' nl = VALUE #( ( |@XR\\QMaak nieuwe@| ) ) en = VALUE #( ( |@XR\\QCreate@| ) ) ) ( id = 'LBL_B04' nl = VALUE #( ( |@11\\QVerwijder groep@| ) ) en = VALUE #( ( |@11\\QRemove pool@| ) ) ) ( id = 'LBL_B05' nl = VALUE #( ( |@15@| ) ) en = VALUE #( ( |@15@| ) ) ) ( id = 'EXEHINT' nl = VALUE #( ( |Toon teksten| ) ) en = VALUE #( ( |Show texts| ) ) ) ( id = 'LBL_S01' nl = VALUE #( ( |Groep| ) ) en = VALUE #( ( |Pool| ) ) ) ( id = 'LBL_S02' nl = VALUE #( ( |ID| ) ) en = VALUE #( ( |ID| ) ) ) ( id = 'TLT_02' nl = VALUE #( ( |In focus| ) ) en = VALUE #( ( |In focus| ) ) ) ( id = 'LBL_B10' nl = VALUE #( ( |@2L\\QOpslaan@| ) ) en = VALUE #( ( |@2L\\QSave@| ) ) ) ( id = 'LBL_B11' nl = VALUE #( ( |@11\\QVerwijderen@| ) ) en = VALUE #( ( |@11\\QDelete@| ) ) ) ( id = 'F4NOPOOL' nl = VALUE #( ( |Kies eerst een groep| ) ) en = VALUE #( ( |Select a group first| ) ) ) ( id = 'MULTIPLE' nl = VALUE #( ( |Meedere teksten (&) gevonden| ) ) en = VALUE #( ( |Multiple texts (&) found| ) ) ) ( id = 'NODATA' nl = VALUE #( ( |Geen gegevens gevonden| ) ) en = VALUE #( ( |No data found| ) ) ) ( id = 'LBL_B08' nl = VALUE #( ( |@Y4\\QDownload naar JSON bestand@| ) ) en = VALUE #( ( |@Y4\\QDownload to JSON file@| ) ) ) ( id = 'LBL_B09' nl = VALUE #( ( |@Y5\\QUpload uit JSON bestand@| ) ) en = VALUE #( ( |@Y5\\QUpload from JSON file@| ) ) ) ) ). tlt_01 = go_i18n->get( 'TLT_01' ). lbl_b01 = go_i18n->get( 'LBL_B01' ). lbl_b02 = go_i18n->get( 'LBL_B02' ). lbl_b03 = go_i18n->get( 'LBL_B03' ). lbl_b04 = go_i18n->get( 'LBL_B04' ). lbl_b05 = go_i18n->get( 'LBL_B05' ). lbl_b08 = go_i18n->get( 'LBL_B08' ). lbl_b09 = go_i18n->get( 'LBL_B09' ). cmt_01 = go_i18n->get( 'EXEHINT' ). lbl_s01 = go_i18n->get( 'LBL_S01' ). lbl_s02 = go_i18n->get( 'LBL_S02' ). tlt_02 = go_i18n->get( 'TLT_02' ). lbl_p01 = go_i18n->get( 'LBL_S01' ). lbl_p02 = go_i18n->get( 'LBL_S02' ). lbl_b10 = go_i18n->get( 'LBL_B10' ). lbl_b11 = go_i18n->get( 'LBL_B11' ). lbl_nl = 'nl'. lbl_en = 'en'. lbl_de = 'de'. lbl_fr = 'fr'. lbl_it = 'it'. lbl_es = 'es'. AT SELECTION-SCREEN OUTPUT. DATA(lt_ucomm) = VALUE ucomm_it( ( 'SPOS' ) ( 'PRIN' ) ( 'SJOB' ) ( 'GET' ) ). "VSHO,VDEL,SPOS "Remove the options to save variant and execute in background from the selection screen CALL FUNCTION 'RS_SET_SELSCREEN_STATUS' EXPORTING p_status = sy-pfkey TABLES p_exclude = lt_ucomm. LOOP AT SCREEN. "Key fields can not be edited IF screen-group1 = 'REO'. screen-input = '0'. ENDIF. MODIFY SCREEN. ENDLOOP. AT SELECTION-SCREEN. CASE sscrfields-ucomm. WHEN ''. "Only ENTER was pressed WHEN 'DELETE_POOL'. go_controller->delete_pool( ). WHEN 'CREATE'. go_controller->create( iv_pool = so_pool-low iv_id = so_id-low ). WHEN 'FOCUS'. go_controller->set_focus( ). WHEN 'CLEAR_FIELDS'. CLEAR so_pool[]. CLEAR so_id[]. WHEN 'DOWNLOAD'. go_controller->download( so_pool-low ). WHEN 'UPLOAD'. go_controller->upload( ). WHEN 'SAVE_TEXT'. go_controller->save_text( ). WHEN 'DELETE_TEXT'. go_controller->delete_text( ). ENDCASE. START-OF-SELECTION. SELECT * FROM ztextpool_i18n INTO TABLE go_controller->gt_textpool WHERE pool IN so_pool AND id IN so_id. go_controller->reporter( ).