(app, sheet, names_map, lang=None)
return msgs
A single-sheet translation file deals with only one language, and
    fits all the items to be translated onto the same sheet. All items
    share the same columns. If the column is not applicable to the row,
    it is left empty.

    :param app: The application being translated
    :param sheet: The worksheet containing the translations
    :param names_map: A map of sheet_name (like "menu1" or "menu1_form1") to
                      module/form unique_id, used to fetch a module/form
                      even if it has been moved since the worksheet was created
    :param lang: The language that the app is being translated into
    :return: A list of error messages or an empty list
A single-sheet translation file deals with only one language, and
    fits all the items to be translated onto the same sheet. All items
    share the same columns. If the column is not applicable to the row,
    it is left empty.
A single - sheet translation file deals with only one language and fits all the items to be translated onto the same sheet . All items share the same columns . If the column is not applicable to the row it is left empty .
def _process_single_sheet(app, sheet, names_map, lang=None):
    """
    A single-sheet translation file deals with only one language, and
    fits all the items to be translated onto the same sheet. All items
    share the same columns. If the column is not applicable to the row,
    it is left empty.

    :param app: The application being translated
    :param sheet: The worksheet containing the translations
    :param names_map: A map of sheet_name (like "menu1" or "menu1_form1") to
                      module/form unique_id, used to fetch a module/form
                      even if it has been moved since the worksheet was created
    :param lang: The language that the app is being translated into
    :return: A list of error messages or an empty list
    """
    msgs = []
    module_or_form = None
    modules_and_forms_rows = []
    rows = []
    for row in sheet:
        if not row['case_property'] and not row['list_or_detail'] and not row['label']:
            modules_and_forms_rows.append(row)
        elif module_or_form != row['menu_or_form']:
            msgs.extend(_process_rows(app, module_or_form, rows, names_map, lang=lang))
            module_or_form = row['menu_or_form']
            rows = [row]
        else:
            rows.append(row)
    msgs.extend(_process_rows(app, module_or_form, rows, names_map, lang=lang))
    msgs.extend(_process_rows(app, MODULES_AND_FORMS_SHEET_NAME,
                              modules_and_forms_rows, names_map, lang=lang))
    return msgs
def _process_single_sheet ( app , sheet , names_map , lang = None ) : msgs = [ ] module_or_form = None modules_and_forms_rows = [ ] rows = [ ] for row in sheet : if not row [ 'case_property' ] and not row [ 'list_or_detail' ] and not row [ 'label' ] : modules_and_forms_rows . append ( row ) elif module_or_form != row [ 'menu_or_form' ] : msgs . extend ( _process_rows ( app , module_or_form , rows , names_map , lang = lang ) ) module_or_form = row [ 'menu_or_form' ] rows = [ row ] else : rows . append ( row ) msgs . extend ( _process_rows ( app , module_or_form , rows , names_map , lang = lang ) ) msgs . extend ( _process_rows ( app , MODULES_AND_FORMS_SHEET_NAME , modules_and_forms_rows , names_map , lang = lang ) ) return msgs