diff --git a/src/repo/zcl_abapgit_dot_abapgit.clas.abap b/src/repo/zcl_abapgit_dot_abapgit.clas.abap index 0ebe101b5..c921a98cb 100644 --- a/src/repo/zcl_abapgit_dot_abapgit.clas.abap +++ b/src/repo/zcl_abapgit_dot_abapgit.clas.abap @@ -76,6 +76,14 @@ CLASS zcl_abapgit_dot_abapgit DEFINITION METHODS set_requirements IMPORTING it_requirements TYPE zif_abapgit_dot_abapgit=>ty_requirement_tt. + + METHODS get_i18n_langs + RETURNING + VALUE(rv_langs) TYPE string. + METHODS set_i18n_langs + IMPORTING + iv_langs TYPE string. + PROTECTED SECTION. PRIVATE SECTION. DATA: ms_data TYPE zif_abapgit_dot_abapgit=>ty_dot_abapgit. @@ -89,6 +97,13 @@ CLASS zcl_abapgit_dot_abapgit DEFINITION IMPORTING iv_xml TYPE string RETURNING VALUE(rs_data) TYPE zif_abapgit_dot_abapgit=>ty_dot_abapgit. + CLASS-METHODS decode_i18n_langs_string + IMPORTING + iv_langs TYPE string + iv_skip_master_lang TYPE spras OPTIONAL + RETURNING + VALUE(rt_langs) TYPE zif_abapgit_dot_abapgit=>ty_langs_tt. + ENDCLASS. @@ -137,6 +152,35 @@ CLASS ZCL_ABAPGIT_DOT_ABAPGIT IMPLEMENTATION. ENDMETHOD. + METHOD decode_i18n_langs_string. + + " This should go as an util to TEXTS/i18n class + + DATA lt_langs_str TYPE string_table. + DATA lv_master_lang_iso TYPE laiso. + FIELD-SYMBOLS LIKE LINE OF lt_langs_str. + FIELD-SYMBOLS LIKE LINE OF rt_langs. + + IF iv_skip_master_lang IS NOT INITIAL. + lv_master_lang_iso = cl_i18n_languages=>sap1_to_sap2( iv_skip_master_lang ). + ENDIF. + + SPLIT iv_langs AT ',' INTO TABLE lt_langs_str. + LOOP AT lt_langs_str ASSIGNING . + CONDENSE . + = to_upper( ). + IF IS NOT INITIAL AND ( lv_master_lang_iso IS INITIAL OR <> lv_master_lang_iso ). + APPEND INITIAL LINE TO rt_langs ASSIGNING . + = . + ENDIF. + ENDLOOP. + + " TODO: maybe validate language against table, but system may not have one? + " TODO: maybe through on lang > 2 symbols ? + + ENDMETHOD. + + METHOD deserialize. DATA: lv_xml TYPE string, @@ -183,6 +227,18 @@ CLASS ZCL_ABAPGIT_DOT_ABAPGIT IMPLEMENTATION. ENDMETHOD. + METHOD get_i18n_langs. + + DATA lt_langs TYPE zif_abapgit_dot_abapgit=>ty_langs_tt. + + lt_langs = decode_i18n_langs_string( + iv_langs = ms_data-i18n_langs + iv_skip_master_lang = ms_data-master_language ). + CONCATENATE LINES OF lt_langs INTO rv_langs SEPARATED BY ','. + + ENDMETHOD. + + METHOD get_master_language. rv_language = ms_data-master_language. ENDMETHOD. @@ -285,6 +341,18 @@ CLASS ZCL_ABAPGIT_DOT_ABAPGIT IMPLEMENTATION. ENDMETHOD. + METHOD set_i18n_langs. + + DATA lt_langs TYPE zif_abapgit_dot_abapgit=>ty_langs_tt. + + lt_langs = decode_i18n_langs_string( + iv_langs = iv_langs + iv_skip_master_lang = ms_data-master_language ). + CONCATENATE LINES OF lt_langs INTO ms_data-i18n_langs SEPARATED BY ','. + + ENDMETHOD. + + METHOD set_requirements. ms_data-requirements = it_requirements. ENDMETHOD. diff --git a/src/repo/zcl_abapgit_dot_abapgit.clas.testclasses.abap b/src/repo/zcl_abapgit_dot_abapgit.clas.testclasses.abap index 50372b268..624ffe2bd 100644 --- a/src/repo/zcl_abapgit_dot_abapgit.clas.testclasses.abap +++ b/src/repo/zcl_abapgit_dot_abapgit.clas.testclasses.abap @@ -7,11 +7,11 @@ CLASS ltcl_dot_abapgit DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS METHODS: identity FOR TESTING RAISING zcx_abapgit_exception, - ignore FOR TESTING. + ignore FOR TESTING, + i18n FOR TESTING. ENDCLASS. - CLASS ltcl_dot_abapgit IMPLEMENTATION. METHOD identity. @@ -101,4 +101,33 @@ CLASS ltcl_dot_abapgit IMPLEMENTATION. ENDMETHOD. + METHOD i18n. + + DATA lo_dot TYPE REF TO zcl_abapgit_dot_abapgit. + + lo_dot = zcl_abapgit_dot_abapgit=>build_default( ). + lo_dot->ms_data-master_language = 'E'. + + cl_abap_unit_assert=>assert_equals( + act = lo_dot->ms_data-i18n_langs + exp = '' ). + + lo_dot->set_i18n_langs( 'en , de, es' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_dot->ms_data-i18n_langs + exp = 'DE,ES' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_dot->get_i18n_langs( ) + exp = 'DE,ES' ). + + lo_dot->ms_data-i18n_langs = `en , DE, es `. + + cl_abap_unit_assert=>assert_equals( + act = lo_dot->get_i18n_langs( ) + exp = 'DE,ES' ). + + ENDMETHOD. + ENDCLASS. diff --git a/src/repo/zif_abapgit_dot_abapgit.intf.abap b/src/repo/zif_abapgit_dot_abapgit.intf.abap index 0a9280be9..f63103f8a 100644 --- a/src/repo/zif_abapgit_dot_abapgit.intf.abap +++ b/src/repo/zif_abapgit_dot_abapgit.intf.abap @@ -8,9 +8,13 @@ INTERFACE zif_abapgit_dot_abapgit PUBLIC. END OF ty_requirement . TYPES: ty_requirement_tt TYPE STANDARD TABLE OF ty_requirement WITH DEFAULT KEY . + + TYPES: + ty_langs_tt TYPE STANDARD TABLE OF laiso WITH DEFAULT KEY. TYPES: BEGIN OF ty_dot_abapgit, master_language TYPE spras, + i18n_langs TYPE string, starting_folder TYPE string, folder_logic TYPE string, ignore TYPE STANDARD TABLE OF string WITH DEFAULT KEY, diff --git a/src/ui/zcl_abapgit_gui_page_sett_repo.clas.abap b/src/ui/zcl_abapgit_gui_page_sett_repo.clas.abap index 7c38b01fb..59c1518df 100644 --- a/src/ui/zcl_abapgit_gui_page_sett_repo.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_sett_repo.clas.abap @@ -29,6 +29,7 @@ CLASS zcl_abapgit_gui_page_sett_repo DEFINITION BEGIN OF c_id, dot TYPE string VALUE 'dot', master_language TYPE string VALUE 'master_language', + i18n_langs TYPE string VALUE 'i18n_langs', starting_folder TYPE string VALUE 'starting_folder', folder_logic TYPE string VALUE 'folder_logic', ignore TYPE string VALUE 'ignore', @@ -71,7 +72,7 @@ ENDCLASS. -CLASS zcl_abapgit_gui_page_sett_repo IMPLEMENTATION. +CLASS ZCL_ABAPGIT_GUI_PAGE_SETT_REPO IMPLEMENTATION. METHOD constructor. @@ -121,6 +122,10 @@ CLASS zcl_abapgit_gui_page_sett_repo IMPLEMENTATION. iv_label = 'Main Language' iv_hint = 'Main language of repository (cannot be changed)' iv_readonly = abap_true + )->text( + iv_name = c_id-i18n_langs + iv_label = 'Serialize translations (experimental LXE approach)' + iv_hint = 'Comma separate 2-letter iso lang codes e.g. "de,es,..." - should not include main language' )->radio( iv_name = c_id-folder_logic iv_default_value = zif_abapgit_dot_abapgit=>c_folder_logic-prefix @@ -167,6 +172,7 @@ CLASS zcl_abapgit_gui_page_sett_repo IMPLEMENTATION. METHOD read_settings. DATA: + lo_dot TYPE REF TO zcl_abapgit_dot_abapgit, ls_dot TYPE zif_abapgit_dot_abapgit=>ty_dot_abapgit, lv_language TYPE t002t-sptxt, lv_ignore TYPE string, @@ -178,7 +184,8 @@ CLASS zcl_abapgit_gui_page_sett_repo IMPLEMENTATION. TYPE string. " Get settings from DB - ls_dot = mo_repo->get_dot_abapgit( )->get_data( ). + lo_dot = mo_repo->get_dot_abapgit( ). + ls_dot = lo_dot->get_data( ). " Repository Settings SELECT SINGLE sptxt INTO lv_language FROM t002t @@ -190,6 +197,9 @@ CLASS zcl_abapgit_gui_page_sett_repo IMPLEMENTATION. mo_form_data->set( iv_key = c_id-master_language iv_val = |{ ls_dot-master_language } ({ lv_language })| ). + mo_form_data->set( + iv_key = c_id-i18n_langs + iv_val = lo_dot->get_i18n_langs( ) ). mo_form_data->set( iv_key = c_id-folder_logic iv_val = ls_dot-folder_logic ). @@ -259,6 +269,7 @@ CLASS zcl_abapgit_gui_page_sett_repo IMPLEMENTATION. lo_dot->set_folder_logic( mo_form_data->get( c_id-folder_logic ) ). lo_dot->set_starting_folder( mo_form_data->get( c_id-starting_folder ) ). + lo_dot->set_i18n_langs( mo_form_data->get( c_id-i18n_langs ) ). " Remove all ignores lt_ignore = lo_dot->get_data( )-ignore.