@ai4bharat/indic-transliterate
Version:
Transliterate component for React
285 lines (217 loc) • 11.3 kB
Markdown
<h1 align="center">Indic Transliterate</h1>
Transliteration component for React with support for 21 Indic languages. Uses API from [AI4Bharat IndicXlit](https://ai4bharat.org/transliteration).
[](https://www.npmjs.com/package/@ai4bharat/indic-transliterate)
<p align="center">
<img src="./assets/hi.gif"></img>
</p>
## Table of contents
<!-- TOC -->
- [1. About](#1-about)
- [2. Demo](#2-demo)
- [3. Install](#3-install)
- [4. Usage](#4-usage)
- [4.1. Basic example](#41-basic-example)
- [4.2. With custom component](#42-with-custom-component)
- [4.3. With TypeScript](#43-with-typescript)
- [4.4. With Material-UI](#44-with-material-ui)
- [5. Get transliteration suggestions](#5-get-transliteration-suggestions)
- [5.1. Standalone Example](#51-standalone-example)
- [5.2. Custom trigger keys](#52-custom-trigger-keys)
- [5.3. Props](#53-props)
- [6. Languages](#6-languages)
- [6.1. Get supported languages](#61-get-supported-languages)
- [6.2. List of language codes](#62-list-of-language-codes)
- [7. License](#7-license)
<!-- /TOC -->
## 1. About
This is a frontend library to enable your users to type in many different languages of South Asia, and can be integrated into any React-based application. This library is a fork of [react-transliterate](https://www.npmjs.com/package/react-transliterate), which uses Google Transliterate API which supports around 40 languages across the globe. In this module, our focus is to provide high-quality transliteration-suggestions for Indic languages, especially for low-resource languages like Kashmiri, Manipuri, etc. (which are not supported by Google). For more details about the AI system behind this, please check [AI4Bhārat Indic-Xlit](https://ai4bharat.org/indic-xlit).
## 2. Demo
**[Click-here to try our demo!](https://ai4bharat.github.io/indic-transliterate-js/)**
Source of this demo is available in the [`example` folder](https://github.com/AI4Bharat/indic-transliterate-js/tree/master/example) of the repo.
## 3. Install
```bash
npm install --save @ai4bharat/indic-transliterate
OR
yarn add @ai4bharat/indic-transliterate
```
## 4. Usage
### 4.1. Basic example
```jsx
import React, { useState } from "react";
import { IndicTransliterate } from "@ai4bharat/indic-transliterate";
import "@ai4bharat/indic-transliterate/dist/index.css";
const App = () => {
const [text, setText] = useState("");
return (
<IndicTransliterate
value={text}
onChangeText={(text) => {
setText(text);
}}
lang="hi"
/>
);
};
export default App;
```
### 4.2. With custom component
```jsx
import React, { useState } from "react";
import { IndicTransliterate } from "@ai4bharat/indic-transliterate";
import "@ai4bharat/indic-transliterate/dist/index.css";
const App = () => {
const [text, setText] = useState("");
return (
<IndicTransliterate
renderComponent={(props) => <textarea {...props} />}
value={text}
onChangeText={(text) => {
setText(text);
}}
lang="hi"
/>
);
};
export default App;
```
### 4.3. With TypeScript
```tsx
import React, { useState } from "react";
import { IndicTransliterate, Language } from "@ai4bharat/indic-transliterate";
import "@ai4bharat/indic-transliterate/dist/index.css";
const App = () => {
const [text, setText] = useState("");
const [lang, setLang] = useState<Language>("hi");
return (
<IndicTransliterate
renderComponent={(props) => <textarea {...props} />}
value={text}
onChangeText={(text) => {
setText(text);
}}
lang={lang}
/>
);
};
export default App;
```
### 4.4. With Material-UI
```tsx
import React, { useState } from "react";
import { IndicTransliterate, Language } from "@ai4bharat/indic-transliterate";
import "@ai4bharat/indic-transliterate/dist/index.css";
import Input from "@material-ui/core/Input";
const App = () => {
const [text, setText] = useState("");
const [lang, setLang] = useState<Language>("hi");
return (
<IndicTransliterate
renderComponent={(props) => {
const inputRef = props.ref;
delete props["ref"];
return <Input {...props} inputRef={inputRef} />;
}}
value={text}
onChangeText={(text) => {
setText(text);
}}
lang={lang}
/>
);
};
export default App;
```
## 5. Get transliteration suggestions
### 5.1. Standalone example
```jsx
import { getTransliterateSuggestions } from "@ai4bharat/indic-transliterate";
const data = await getTransliterateSuggestions(
word, // word to fetch suggestions for
{
numOptions: 5, // number of suggestions to fetch
showCurrentWordAsLastSuggestion: true, // add the word as the last suggestion
lang: "hi", // target language
},
);
```
### 5.2. Custom trigger keys
Keys which when pressed, input the current selection to the textbox
Indic Transliterate uses the `event.keycode` property to detect keys. Here are some predefined keys you can use. Or, you can enter the integer codes for any other key you'd like to use as the trigger
```jsx
import React, { useState } from "react";
import { IndicTransliterate, TriggerKeys } from "@ai4bharat/indic-transliterate";
import "@ai4bharat/indic-transliterate/dist/index.css";
import Input from "@material-ui/core/Input";
const App = () => {
const [text, setText] = useState("");
return (
<IndicTransliterate
value={text}
onChangeText={(text) => {
setText(text);
}}
lang="hi"
triggerKeys={[
TriggerKeys.KEY_RETURN,
TriggerKeys.KEY_ENTER,
TriggerKeys.KEY_SPACE,
TriggerKeys.KEY_TAB,
]}
/>
);
};
export default App;
```
### 5.3. Props
| Prop | Required? | Default | Description |
| -------------------------------- | --------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| onChangeText | Yes | | Listener for the current value from the component. `(text: string) => void` |
| value | Yes | | `value` prop to pass to the component |
| enabled | | true | Control whether suggestions should be shown |
| renderComponent | | `(props) => <input {...props} />` | Component to render. You can pass components from your component library as this prop |
| lang | | hi | Language you want to transliterate. See the following section for language codes |
| maxOptions | | 5 | Maximum number of suggestions to show in helper |
| offsetY | | 0 | Extra space between the top of the helper and bottom of the caret |
| offsetX | | 0 | Extra space between the caret and left of the helper |
| containerClassName | | empty string | Classname passed to the container of the component |
| containerStyles | | {} | CSS styles object passed to the container |
| activeItemStyles | | {} | CSS styles object passed to the active item `<li>` tag |
| hideSuggestionBoxOnMobileDevices | | `false` | Should the suggestions be visible on mobile devices since keyboards like Gboard and Swiftkey support typing in multiple languages |
| hideSuggestionBoxBreakpoint | | 450 | type: `number`. To be used when `hideSuggestionBoxOnMobileDevices` is true. Suggestion box will not be shown below this device width |
| triggerKeys | | `KEY_SPACE, KEY_ENTER, KEY_TAB, KEY_RETURN` | Keys which when pressed, input the current selection to the textbox |
| insertCurrentSelectionOnBlur | | `true` | Should the current selection be inserted when `blur` event occurs |
| showCurrentWordAsLastSuggestion | | `true` | Show current input as the last option in the suggestion box |
## 6. Languages
### 6.1. Get supported languages
```jsx
import { getTransliterationLanguages } from "@ai4bharat/indic-transliterate";
const data = await getTransliterationLanguages();
```
### 6.2. List of language codes
Currently supports the following 21 languages from the Indian subcontinent:
|ISO 639 code | Language |
|---|--------------------|
|as |Assamese - অসমীয়া |
|bn |Bangla - বাংলা |
|brx|Boro - बड़ो |
|gu |Gujarati - ગુજરાતી |
|hi |Hindi - हिंदी |
|kn |Kannada - ಕನ್ನಡ |
|ks |Kashmiri - كٲشُر |
|gom|Konkani Goan - कोंकणी|
|mai|Maithili - मैथिली |
|ml |Malayalam - മലയാളം|
|mni|Manipuri - ꯃꯤꯇꯩꯂꯣꯟ |
|mr |Marathi - मराठी |
|ne |Nepali - नेपाली |
|or |Oriya - ଓଡ଼ିଆ |
|pa |Panjabi - ਪੰਜਾਬੀ |
|sa |Sanskrit - संस्कृतम् |
|sd |Sindhi - سنڌي |
|si |Sinhala - සිංහල |
|ta |Tamil - தமிழ் |
|te |Telugu - తెలుగు |
|ur |Urdu - اُردُو |
## 7. License
MIT © [ai4bharat](https://github.com/AI4Bharat)
Sincere thanks to [burhanuday](https://github.com/burhanuday/react-transliterate) for making his work open-source!