Reactive Multi-language Gradio App with minimal effort
Project description
gradio-i18n
Reactive Multi-language Gradio App with minimal effort. Enables Gradio app displayiing localized UI responding to the browser language settings.
Installation
pip install gradio-i18n
Usage
- Prepare a translation dict like examples below.
- Wrap text intended to be localized with
gradio_i18n.gettext()
- Invoke
gradio_i18n.translate_blocks()
, within the context of gradio blocks.
import gradio as gr
from gradio_i18n import gettext, translate_blocks
def greet(name):
return f"Hello {name}!"
lang_store = {
"en": {
"Submit": "Submit✅",
"Name": "Name 📛",
"Greeting": "Greeting 🎉",
"Input your name here.": "Input your name here. 📝",
},
"zh": {
"Submit": "提交",
"Name": "名字",
"Greeting": "问候",
"Input your name here.": "在这里输入你的名字。",
},
}
with gr.Interface(
fn=greet,
inputs=gr.Textbox(
label=gettext("Name"), placeholder=gettext("Input your name here.")
),
outputs=gr.Textbox(label=gettext("Greeting")),
submit_btn=gettext("Submit"),
) as demo:
translate_blocks(translation=lang_store)
demo.launch()
[!NOTE] Keep in mind that the translate_blocks() function MUST BE called in the gradio block context (
with
)
Get current language
Except for automatically translated text value in Gradio components, user may expect to get the current language of the user for localizing contents. To get the current language, simply pass a gradio.State
into arguments of translate_blocks()
, and you will get the language value in "lang"
key in the input state object.
Example:
import gradio as gr
import gradio_i18n
def get_lang(state):
return state, state["lang"]
with gr.Blocks() as block:
state = gr.State()
display_lang = gr.Text()
gr.Interface(get_lang, inputs=[state], outputs=[state, display_lang])
gradio_i18n.translate_blocks(state=state)
block.launch()
[!NOTE] Only dict type state is supported at this moment.
Build translation dictionary
To build the transtion dictionary to be passed to translate_blocks
, we provide a simple helper function to dump all the i18n texts from the gradio blocks object.
This is an example of using yaml/json to persist the translation.
JSON
import gradio as gr
import gradio_i18n
import json
trans_file = "translations.json"
if not os.path.exists(trans_file):
lang_store = {}
else:
lang_store = json.load(open(trans_file))
# define your gradio block here....
# with gr.Blocks() as block:
# ....
# gradio_i18n.translate_blocks(block, lang_store)
collected_texts = gradio_i18n.dump_blocks(block, langs=["zh", "en"], include_translations=lang_store)
json.dump(collected_texts, open(trans_file, "w"), indent=2, ensure_ascii=False)
YAML
import gradio as gr
import gradio_i18n
import yaml
trans_file = "translations.yaml"
if not os.path.exists(trans_file):
lang_store = {}
else:
lang_store = yaml.safe_load(open(trans_file))
# define your gradio block here....
# with gr.Blocks() as block:
# ....
# gradio_i18n.translate_blocks(block, lang_store)
collected_texts = gradio_i18n.dump_blocks(block, langs=["zh", "en"], include_translations=lang_store)
yaml.safe_dump(collected_texts, open(trans_file, "w"), allow_unicode=True)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file gradio_i18n-0.0.3.tar.gz
.
File metadata
- Download URL: gradio_i18n-0.0.3.tar.gz
- Upload date:
- Size: 9.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1f7b89a1e1ee4b8279db7a84ffba075d3f98fde02ba2e06da9e723b356364291 |
|
MD5 | 2afe19878da0b76ae03c43e24f66f789 |
|
BLAKE2b-256 | 8c0283ae96efb8f88de1c5d177877def1964e692e4adbf33fc3ce5e63981dd27 |
File details
Details for the file gradio_i18n-0.0.3-py3-none-any.whl
.
File metadata
- Download URL: gradio_i18n-0.0.3-py3-none-any.whl
- Upload date:
- Size: 7.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ff8c02484a8a28630d5b8da6600976fb75725e72fc90b2d0aa095da4ef560850 |
|
MD5 | 4d9bda241b5461be94164a32cc264409 |
|
BLAKE2b-256 | cc71fbf365951b1466b2ad43065619cc19850da5cb9ce2b3f8d9f7102476e2d5 |