Rust में अंतर्राष्ट्रीयकरण (i18n): gettext-rs और fluent-rs लाइब्रेरी

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Rust में अंतर्राष्ट्रीयकरण (i18n): gettext-rs और fluent-rs



अंतर्राष्ट्रीयकरण (i18n) आधुनिक अनुप्रयोगों के विकास का एक महत्वपूर्ण पहलू है, जो सॉफ़्टवेयर को विभिन्न देशों और संस्कृतियों के उपयोगकर्ताओं के लिए अनुकूलित करने की अनुमति देता है। Rust पारिस्थितिकी तंत्र में i18n को लागू करने के लिए कई शक्तिशाली लाइब्रेरी मौजूद हैं। इस लेख में हम दो सबसे लोकप्रिय लाइब्रेरी पर विचार करेंगे: gettext-rs (gettext पर आधारित क्लासिक दृष्टिकोण) और fluent-rs (Mozilla द्वारा आधुनिक स्थानीयकरण प्रणाली)।



1. gettext-rs लाइब्रेरी



gettext-rs क्लासिक GNU gettext सिस्टम के लिए एक Rust रैपर है। यह उन प्रोजेक्ट्स के लिए आदर्श है जहाँ पहले से gettext का उपयोग किया जाता है, या उन लोगों के लिए जो समय-परीक्षित समाधान पसंद करते हैं।



स्थापना और कॉन्फ़िगरेशन



Cargo.toml में निर्भरता जोड़ें:



[dependencies]gettext-rs = "0.7"gettext-sys = "0.21"


उपयोग का मूल उदाहरण



use gettextrs::*;

fn main() { // लोकेल और अनुवाद डोमेन सेट करें setlocale(LocaleCategory::LcAll, "ru_RU.UTF-8"); bindtextdomain("myapp", "/usr/share/locale").unwrap(); textdomain("myapp").unwrap();

// अनुवाद का उपयोग करें let greeting = gettext("Hello, world!"); println!("{}", greeting);

// बहुवचन रूप let items = 5; let message = ngettext("{} item", "{} items", items); println!("{}", message.replace("{}", &items.to_string()));}


संदर्भ के साथ कार्य करना



विभिन्न संदर्भों में समान स्ट्रिंग को अलग करने के लिए pgettext का उपयोग करें:



let menu_item = pgettext("menu", "File");let dialog_title = pgettext("dialog", "File");


2. fluent-rs लाइब्रेरी



fluent-rs Mozilla द्वारा विकसित एक आधुनिक, लचीली और शक्तिशाली स्थानीयकरण प्रणाली है। यह जटिल व्याकरणिक संरचनाओं, बहुवचन रूपों और संदर्भ अनुवादों का समर्थन करती है।



स्थापना



[dependencies]fluent = "0.16"fluent-bundle = "0.15"fluent-resmgr = "0.5"fluent-langneg = "0.4"unic-langid = "0.9"


अनुवाद फ़ाइलें (FTL) बनाना



Fluent अपने स्वयं के .ftl फ़ाइल स्वरूप का उपयोग करता है। रूसी भाषा के लिए उदाहरण (ru.ftl):



hello-world = Привет, мир!greeting = Здравствуйте, {$name}!items-count = { $count ->    [one] {$count} элемент    [few] {$count} элемента    [many] {$count} элементов    *[other] {$count} элементов}


fluent-rs उपयोग का उदाहरण



use fluent_bundle::{FluentBundle, FluentResource};use unic_langid::langid;use std::fs;

fn main() { // अनुवाद फ़ाइल लोड करें let ftl_string = fs::read_to_string("locales/ru.ftl") .expect("Не удалось прочитать файл локализации"); let resource = FluentResource::try_new(ftl_string) .expect("Ошибка парсинга FTL");

// रूसी भाषा के लिए बंडल बनाएँ let lang_ru = langid!("ru"); let mut bundle = FluentBundle::new(&[lang_ru]); bundle.add_resource(&resource).unwrap();

// पैरामीटर के साथ अनुवाद प्राप्त करें let mut errors = vec![]; let msg = bundle.get_message("greeting").unwrap(); let mut args = fluent_bundle::FluentArgs::new(); args.set("name", "Алексей"); let pattern = msg.value().unwrap(); let value = bundle.format_pattern(pattern, Some(&args), &mut errors); println!("{}", value);

// बहुवचन रूप let msg = bundle.get_message("items-count").unwrap(); let mut args = fluent_bundle::FluentArgs::new(); args.set("count", 3); let pattern = msg.value().unwrap(); let value = bundle.format_pattern(pattern, Some(&args), &mut errors); println!("{}", value);}


3. gettext-rs और fluent-rs की तुलना



अनुशंसाएँ