# National Language Shift

In addition to the standard SMPP 3.4 features, we support **National Language Shift (NLI)**, which enables the use of language-specific characters. This functionality is available over **[SMPP](https://www.infobip.com/glossary/smpp)**, **[Broadcast](https://www.infobip.com/docs/broadcast)**, and **[HTTP API](https://www.infobip.com/docs/api//api)**.

National Language Shift uses language-specific character sets that allow you to send special characters at the same cost as standard [GSM-7 messages](https://www.infobip.com/docs/sms/language). The tables below list supported languages.

For example, Turkish characters such as **ğ**, **Ğ**, **€** can be sent at the cost of a single **GSM-7** character. Normally, these would require Unicode, reducing the message length to 70 characters, but with **NLI** and **User Data Header (UDH)**, the limit is **155 characters**.

## Locking Shift vs. Single Shift

- **Locking Shift**: Characters from the extended set do not reduce the message length (remains **155 characters**).
- **Single Shift**: Each extended character requires an **escape character**, which reduces the available message length by **1**.
  - Example: In Spanish, the letter **Ú** is only available in the single shift set. If 3 such characters are used, the length reduces **from 155 to 152 characters**.
  - Example encoding: `1B55` → `1B` is the escape character, `55` is Ú from the extended set.

## Technical notes

- Language selection is defined in the **UDH** using the **Information-Element-Identifier (IEI)** to specify single or locking shift.
- The **ESM class parameter** must be set to **64**.
- Valid **data coding values** are **0** or **1**.

## Locking Shift example UDH

| UDH length | IEI (Information Element Identifier) | IE length | Selected shift |
| --- | --- | --- | --- |
| 03 | 25 | 01 | 01 |
| Remaining UDH length in bytes | National Language Locking Shift |  | Locking Shift - Turkish |

## Single Shift example UDH

| UDH length | IEI (Information Element Identifier) | IE length | Selected shift |
| --- | --- | --- | --- |
| 03 | 24 | 01 | 02 |
| Remaining UDH length in bytes | National Language Single Shift |  | Single Shift - Spanish |

## UDH Identifier reference

Below is a UDH reference for each language and here is a detailed [character set reference for GSM 7](https://en.wikipedia.org/wiki/User_Data_Header).

| Language | Single Shift | Locking Shift | UDH Identifier |
| --- | --- | --- | --- |
| Reserved | Basic | Basic | 0x00 |
| Turkish | Turkish | Turkish | 0x01 |
| Spanish | Basic | Spanish | 0x02 |
| Portuguese | Portuguese | Portuguese | 0x03 |
| Bengali | Bengali | Bengali | 0x04 |
| Gujarati | Gujarati | Gujarati | 0x05 |
| Hindi | Hindi | Hindi | 0x06 |
| Kannada | Kannada | Kannada | 0x07 |
| Malayalam | Malayalam | Malayalam | 0x08 |
| Oriya | Oriya | Oriya | 0x09 |
| Punjabi | Punjabi | Punjabi | 0x0A |
| Tamil | Tamil | Tamil | 0x0B |
| Telugu | Telugu | Telugu | 0x0C |
| Urdu | Urdu | Urdu | 0x0D |