Easy AI18n is a modern internationalization tool library for Python3. It supports AI translation, multi-user scenarios, and full string formatting syntax, making globalization of your project more elegant and natural.
- 🚀 Easy to Use: Implement i18n with just a few lines of code
- ✨ Elegant Syntax: Use
_()
to wrap translatable texts, seamlessly integrating into your code - 🤖 AI Translation: Supports translation using large language models (LLMs) for high-quality results
- 📝 Full Formatting Support: Fully supports all Python string formatting syntaxes
- 🌐 Multi-language Support: Choose languages using
[]
selector for multilingual support
pip install easy-ai18n
/i18n.py
from easy_ai18n import EasyAI18n
i18n = EasyAI18n()
_ = i18n.t()
if __name__ == "__main__":
i18n.build(["ja"])
/main.py
from i18n import _
def main():
print(_("Hello, world!")['ja'])
if __name__ == "__main__":
main()
easy_ai18n
├── core # Core functionality module
│ ├── builder.py # Builder: extract, translate, generate YAML files
│ ├── i18n.py # Main translation logic
│ ├── loader.py # Loader: load translation files
│ └── parser.py # AST parser
├── prompts # Translation prompts
├── translator # Translator module
└── main.py # Project entry point
from easy_ai18n import EasyAI18n
i18n = EasyAI18n(
i18n_function_names=["_t", '_'] # Custom translation function names
)
_t = i18n.t()
_ = _t
print(_t("Hello, world!"))
print(_("Hello, world!"))
from easy_ai18n import EasyAI18n
from easy_ai18n.translator import OpenAIBulkTranslator
translator = OpenAIBulkTranslator(api_key=..., base_url=..., model='gpt-4o-mini')
i18n = EasyAI18n()
i18n.build(target_lang=["ru", "ja", 'zh-Hant'], translator=translator)
_ = i18n.t()
print(_("Hello, world!")['zh-Hant'])
from easy_ai18n import EasyAI18n
i18n = EasyAI18n()
_ = i18n.t()
_t = _['ja']
d = {
1: _('apple'),
2: _('banana'),
3: _t('orange'),
}
print(d[1]['zh-hans']) # output: 苹果
print(d[2]) # output: banana
print(d[3]) # output: みかん
Use custom language selector to dynamically select languages in multi-user environments:
/i18n.py
:
from pyrogram.types import Message
from easy_ai18n import EasyAI18n, PostLanguageSelector
class MyPostLanguageSelector(PostLanguageSelector):
def __getitem__(self, msg: Message):
# ......
lang = msg.from_user.language_code
return super().__getitem__(lang)
i18n = EasyAI18n()
_ = i18n.t(post_lang_selector=MyPostLanguageSelector)
if __name__ == "__main__":
i18n.build(target_lang=['en', 'ru'])
/bot.py
:
from pyrogram import Client
from pyrogram.types import Message
from i18n import _
bot = Client("my_bot")
@bot.on_message()
async def start(__, msg: Message):
await msg.reply(_[msg]("Hello, world!"))
if __name__ == "__main__":
bot.run()