From f9bd01021de49f6d13a0f253f4bbfb08f7123bcf Mon Sep 17 00:00:00 2001 From: Albert Mink Date: Mon, 22 Jul 2024 14:28:16 +0200 Subject: [PATCH] Extend logic to detect BCP47 languages (#6986) Co-authored-by: Lars Hvam --- .../core/zcl_abapgit_filename_logic.clas.abap | 53 +++++++++++++++++-- ...apgit_filename_logic.clas.testclasses.abap | 2 +- ...bapgit_objects_files.clas.testclasses.abap | 2 +- 3 files changed, 52 insertions(+), 5 deletions(-) diff --git a/src/objects/core/zcl_abapgit_filename_logic.clas.abap b/src/objects/core/zcl_abapgit_filename_logic.clas.abap index 586785164..533ee638b 100644 --- a/src/objects/core/zcl_abapgit_filename_logic.clas.abap +++ b/src/objects/core/zcl_abapgit_filename_logic.clas.abap @@ -112,6 +112,15 @@ CLASS zcl_abapgit_filename_logic DEFINITION RAISING zcx_abapgit_exception. + CLASS-METHODS get_lang_and_ext + IMPORTING + iv_filename TYPE string + EXPORTING + ev_lang TYPE laiso + ev_ext TYPE string + RAISING + zcx_abapgit_exception. + ENDCLASS. @@ -184,7 +193,7 @@ CLASS zcl_abapgit_filename_logic IMPLEMENTATION. DATA lo_dot TYPE REF TO zcl_abapgit_dot_abapgit. - CLEAR: ev_lang, ev_ext. + CLEAR: es_item, ev_lang, ev_ext. lo_dot = zcl_abapgit_dot_abapgit=>build_default( ). file_to_object( @@ -195,8 +204,12 @@ CLASS zcl_abapgit_filename_logic IMPLEMENTATION. IMPORTING es_item = es_item ). - FIND FIRST OCCURRENCE OF REGEX 'i18n\.([^.]{2})\.([^.]+)$' IN iv_filename - SUBMATCHES ev_lang ev_ext ##SUBRC_OK. + get_lang_and_ext( + EXPORTING + iv_filename = iv_filename + IMPORTING + ev_lang = ev_lang + ev_ext = ev_ext ). ENDMETHOD. @@ -358,4 +371,38 @@ CLASS zcl_abapgit_filename_logic IMPLEMENTATION. iv_ext = iv_ext ). ENDMETHOD. + + METHOD get_lang_and_ext. + + DATA lt_filename_elements TYPE string_table. + DATA lv_langu_bcp47 TYPE string. + DATA lv_sap1 TYPE sy-langu. + + SPLIT iv_filename AT '.' INTO TABLE lt_filename_elements. + + READ TABLE lt_filename_elements INDEX lines( lt_filename_elements ) INTO ev_ext. + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise( |Could not derive file extension of file { iv_filename }| ). + ENDIF. + + READ TABLE lt_filename_elements WITH KEY table_line = `i18n` TRANSPORTING NO FIELDS. + IF sy-subrc = 0. + READ TABLE lt_filename_elements INDEX ( sy-tabix + 1 ) INTO lv_langu_bcp47. + IF sy-subrc = 0. + lv_sap1 = zcl_abapgit_convert=>language_bcp47_to_sap1( lv_langu_bcp47 ). + ev_lang = zcl_abapgit_convert=>language_sap1_to_sap2( lv_sap1 ). " actually it is to_upper( ISO-639 ) + + " to not break existing PO file implementations + IF ev_ext = `po`. + ev_lang = to_lower( ev_lang ). + ENDIF. + ENDIF. + ENDIF. + + IF ev_lang IS INITIAL. + CLEAR ev_ext. + ENDIF. + + ENDMETHOD. + ENDCLASS. diff --git a/src/objects/core/zcl_abapgit_filename_logic.clas.testclasses.abap b/src/objects/core/zcl_abapgit_filename_logic.clas.testclasses.abap index e53aa7ba1..fa2ec80be 100644 --- a/src/objects/core/zcl_abapgit_filename_logic.clas.testclasses.abap +++ b/src/objects/core/zcl_abapgit_filename_logic.clas.testclasses.abap @@ -451,7 +451,7 @@ CLASS ltcl_run_checks IMPLEMENTATION. exp = 'ZPROGRAM' act = ls_item-obj_name ). cl_abap_unit_assert=>assert_equals( - exp = 'en' + exp = 'EN' act = lv_lang ). cl_abap_unit_assert=>assert_equals( exp = 'properties' diff --git a/src/objects/core/zcl_abapgit_objects_files.clas.testclasses.abap b/src/objects/core/zcl_abapgit_objects_files.clas.testclasses.abap index a8d3fa08f..159cf2006 100644 --- a/src/objects/core/zcl_abapgit_objects_files.clas.testclasses.abap +++ b/src/objects/core/zcl_abapgit_objects_files.clas.testclasses.abap @@ -54,7 +54,7 @@ CLASS ltcl_objects_files IMPLEMENTATION. APPEND INITIAL LINE TO lt_files ASSIGNING . -filename = 'zlf.prog.i18n.es.po'. APPEND INITIAL LINE TO lt_files ASSIGNING . - -filename = 'zlf.prog.i18n.cz.other'. + -filename = 'zlf.prog.i18n.cs.other'. " object type and name are upper case ls_item-obj_type = 'PROG'.