Go (Golang) में अंतर्राष्ट्रीयकरण (i18n): डेवलपर्स के लिए एक संपूर्ण मार्गदर्शिका
अंतर्राष्ट्रीयकरण (i18n) सॉफ्टवेयर को इस तरह डिजाइन करने की प्रक्रिया है कि इसे स्रोत कोड में बदलाव किए बिना विभिन्न भाषाओं और क्षेत्रों के लिए आसानी से अनुकूलित किया जा सके। Go (Golang) में इस उद्देश्य के लिए कई परिपक्व समाधान मौजूद हैं, लेकिन सबसे लोकप्रिय और मानकीकृत पैकेज golang.org/x/text है, जो स्थानीयकरण के साथ काम करने के लिए शक्तिशाली उपकरण प्रदान करता है। इस लेख में, हम विस्तार से जानेंगे कि आधिकारिक लाइब्रेरीज़ और सर्वोत्तम प्रथाओं का उपयोग करके Go एप्लिकेशन में i18n कैसे सेट अप करें।
Go में i18n के लिए मुख्य लाइब्रेरीज़
Go इकोसिस्टम अंतर्राष्ट्रीयकरण के लिए कई दृष्टिकोण प्रदान करता है। आइए उनमें से प्रमुख पर नज़र डालें:
golang.org/x/text— Go टीम का मुख्य पैकेज, जो Unicode, CLDR (Common Locale Data Repository) और जटिल बहुवचन नियमों का समर्थन करता है।github.com/nicksnyder/go-i18n— JSON, TOML और YAML अनुवाद फ़ाइलों, सरल API और स्वचालित भाषा पहचान के समर्थन वाली एक लोकप्रिय तृतीय-पक्ष लाइब्रेरी।github.com/leonelquinteros/gotext— एक हल्का विकल्प जो GNU gettext प्रारूप (.po/.mo फ़ाइलें) के साथ काम करता है, छोटे प्रोजेक्ट्स के लिए आदर्श है।
इस मार्गदर्शिका में, हम वेब एप्लिकेशन के लिए सबसे संतुलित समाधान के रूप में go-i18n पर ध्यान केंद्रित करेंगे, लेकिन अवधारणाएँ किसी भी लाइब्रेरी पर लागू होती हैं।
go-i18n की स्थापना और कॉन्फ़िगरेशन
आरंभ करने के लिए, लाइब्रेरी और अनुवाद के साथ काम करने के लिए CLI टूल स्थापित करें:
go get github.com/nicksnyder/go-i18n/v2/i18ngo install github.com/nicksnyder/go-i18n/v2/goi18n@latestप्रोजेक्ट संरचना बनाएँ:
myapp/├── active.en.json├── active.ru.json├── main.go└── go.modअनुवाद फ़ाइलें बनाना
लाइब्रेरी अनुवाद के लिए JSON फ़ाइलों का उपयोग करती है। अंग्रेजी और रूसी भाषाओं के लिए उदाहरण:
active.en.json
{ "greeting": { "other": "Hello, {{.Name}}!" }, "cakes_count": { "one": "You have {{.Count}} cake.", "few": "You have {{.Count}} cakes.", "many": "You have {{.Count}} cakes.", "other": "You have {{.Count}} cakes." }}active.ru.json
{ "greeting": { "other": "Привет, {{.Name}}!" }, "cakes_count": { "one": "У вас {{.Count}} пирожное.", "few": "У вас {{.Count}} пирожных.", "many": "У вас {{.Count}} пирожных.", "other": "У вас {{.Count}} пирожных." }}बहुवचन नियमों के उपयोग पर ध्यान दें: one, few, many और other। रूसी भाषा में 4 रूप हैं, जबकि अंग्रेजी में केवल 2 (one/other) हैं। लाइब्रेरी संख्या के आधार पर स्वचालित रूप से सही रूप का चयन करती है।
कोड में उपयोग का उदाहरण
अब हम कोड लिखेंगे जो अनुवाद लोड करता है और स्थानीयकृत संदेश प्रदर्शित करता है:
package main
import ( "fmt" "log"
"github.com/nicksnyder/go-i18n/v2/i18n" "golang.org/x/text/language")
func main() { // भाषा फ़ाइलों के साथ एक बंडल बनाएँ bundle := i18n.NewBundle(language.English) bundle.RegisterUnmarshalFunc("json", json.Unmarshal)
// अनुवाद फ़ाइलें लोड करें _, err := bundle.LoadMessageFile("active.en.json") if err != nil { log.Fatal(err) } _, err = bundle.LoadMessageFile("active.ru.json") if err != nil { log.Fatal(err) }
// रूसी भाषा के लिए एक स्थानीयकरणकर्ता बनाएँ localizer := i18n.NewLocalizer(bundle, "ru")
// उदाहरण 1: सरल अभिवादन greeting, err := localizer.Localize(&i18n.LocalizeConfig{ MessageID: "greeting", TemplateD