I18n settings (#4416)

* dot abapGit i18n_langs

* rewrite dot abapgit (better design)

* settings

* linter fix

* review fixes

Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Alexander Tsybulsky 2021-01-18 10:32:55 +02:00 committed by GitHub
parent 6dac984acc
commit 47dae10ab0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 116 additions and 4 deletions

View File

@ -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 <lv_str> LIKE LINE OF lt_langs_str.
FIELD-SYMBOLS <lv_lang> 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 <lv_str>.
CONDENSE <lv_str>.
<lv_str> = to_upper( <lv_str> ).
IF <lv_str> IS NOT INITIAL AND ( lv_master_lang_iso IS INITIAL OR <lv_str> <> lv_master_lang_iso ).
APPEND INITIAL LINE TO rt_langs ASSIGNING <lv_lang>.
<lv_lang> = <lv_str>.
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.

View File

@ -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.

View File

@ -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,

View File

@ -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.
<lv_ignore> 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.