Skip to content

Logon language

Helpers for converting between the two-character ISO language code and the one-character SAP language code that the RFC logon frame carries.

Both names match the equivalents exposed by pyrfc (language_iso_to_sap / language_sap_to_iso), which in turn wrap RfcLanguageIsoToSap / RfcLanguageSapToIso in the SAP NetWeaver RFC SDK.

See Connection Options for how this interacts with connect(lang=…).

language_iso_to_sap

language_iso_to_sap(iso_code)

Convert a two-character ISO language code to its one-character SAP code.

Mirrors RfcLanguageIsoToSap in the SAP RFC SDK, with one deliberate difference: an unknown code raises instead of returning a garbage character.

Parameters:

Name Type Description Default
iso_code str

Two-character ISO code, e.g. "EN". Case-insensitive.

required

Returns:

Type Description
str

The one-character SAP language code, e.g. "E".

Raises:

Type Description
ValueError

If iso_code is not exactly two characters, or names no known SAP language.

Source code in src/saprfclib/language.py
def language_iso_to_sap(iso_code: str) -> str:
    """Convert a two-character ISO language code to its one-character SAP code.

    Mirrors ``RfcLanguageIsoToSap`` in the SAP RFC SDK, with one deliberate
    difference: an unknown code raises instead of returning a garbage character.

    Args:
        iso_code: Two-character ISO code, e.g. ``"EN"``. Case-insensitive.

    Returns:
        The one-character SAP language code, e.g. ``"E"``.

    Raises:
        ValueError: If ``iso_code`` is not exactly two characters, or names no
            known SAP language.
    """
    if not isinstance(iso_code, str):
        raise ValueError(f"ISO language code must be a str, got {type(iso_code).__name__!r}")
    code = iso_code.strip().upper()
    if len(code) != 2:
        raise ValueError(f"ISO language code must be exactly two characters, got {iso_code!r}")
    try:
        return _ISO_TO_SAP[code]
    except KeyError:
        raise ValueError(
            f"unknown ISO language code {iso_code!r}; known codes are "
            f"{', '.join(sorted(_ISO_TO_SAP))}"
        ) from None

language_sap_to_iso

language_sap_to_iso(sap_code)

Convert a one-character SAP language code to its two-character ISO code.

Mirrors RfcLanguageSapToIso in the SAP RFC SDK.

Parameters:

Name Type Description Default
sap_code str

One-character SAP code, e.g. "E". Case-insensitive.

required

Returns:

Type Description
str

The two-character ISO code, e.g. "EN".

Raises:

Type Description
ValueError

If sap_code is not exactly one character, or names no known SAP language.

Source code in src/saprfclib/language.py
def language_sap_to_iso(sap_code: str) -> str:
    """Convert a one-character SAP language code to its two-character ISO code.

    Mirrors ``RfcLanguageSapToIso`` in the SAP RFC SDK.

    Args:
        sap_code: One-character SAP code, e.g. ``"E"``. Case-insensitive.

    Returns:
        The two-character ISO code, e.g. ``"EN"``.

    Raises:
        ValueError: If ``sap_code`` is not exactly one character, or names no
            known SAP language.
    """
    if not isinstance(sap_code, str):
        raise ValueError(f"SAP language code must be a str, got {type(sap_code).__name__!r}")
    code = sap_code.strip().upper()
    if len(code) != 1:
        raise ValueError(f"SAP language code must be exactly one character, got {sap_code!r}")
    try:
        return _SAP_TO_ISO[code]
    except KeyError:
        raise ValueError(
            f"unknown SAP language code {sap_code!r}; known codes are "
            f"{', '.join(sorted(_SAP_TO_ISO))}"
        ) from None