التدويل (i18n) في Go (Golang): مكتبة go-i18n

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التدويل (i18n) في Go (Golang) باستخدام مكتبة go-i18n

\n

التدويل (i18n) هو عملية تصميم البرامج بحيث يمكن تكييفها بسهولة مع لغات ومناطق مختلفة دون تغيير في الكود المصدري. في لغة Go (Golang)، واحدة من أشهر وأقوى المكتبات لتنفيذ i18n هي go-i18n. توفر هذه المكتبة للمطورين أدوات مريحة لإدارة الترجمات، ودعم صيغ الجمع (pluralization)، والعمل مع السياق.

\n

في هذه المقالة، سنشرح بالتفصيل كيفية استخدام go-i18n لتدويل تطبيق Go الخاص بك: من التثبيت إلى إنشاء نظام ترجمة كامل.

\n\n

تثبيت مكتبة go-i18n

\n

للبدء مع go-i18n، يجب تثبيت الحزمة باستخدام مدير التبعيات Go:

\n
go get github.com/nicksnyder/go-i18n/v2/i18n
\n

ستحتاج أيضًا إلى حزمة لتحليل ملفات الترجمة (مثل JSON أو YAML):

\n
go get github.com/nicksnyder/go-i18n/v2/i18n/bundle\ngo get github.com/nicksnyder/go-i18n/v2/i18n/localizer
\n\n

هيكل ملفات الترجمة

\n

تدعم مكتبة go-i18n تخزين الترجمات بتنسيقات JSON أو YAML أو TOML. يُوصى بإنشاء ملفات منفصلة لكل لغة. مثال على هيكل الدليل:

\n
locales/\n  active.en.json   # اللغة الإنجليزية\n  active.ru.json   # اللغة الروسية\n  active.fr.json   # اللغة الفرنسية
\n\n

مثال على ملف الترجمة (active.en.json)

\n

لننشئ ملفًا للغة الإنجليزية يحتوي على رسالة واحدة مع دعم صيغ الجمع:

\n
{\n  "hello_world": {\n    "other": "Hello, World!"\n  },\n  "messages_count": {\n    "one": "You have {{.Count}} new message.",\n    "few": "You have {{.Count}} new messages.",\n    "many": "You have {{.Count}} new messages.",\n    "other": "You have {{.Count}} new messages."\n  }\n}
\n\n

مثال على ملف الترجمة (active.ru.json)

\n

ملف مماثل للغة الروسية مع مراعاة قواعد صيغ الجمع (واحد، بضعة، كثير):

\n
{\n  "hello_world": {\n    "other": "Привет, мир!"\n  },\n  "messages_count": {\n    "one": "У вас {{.Count}} новое сообщение.",\n    "few": "У вас {{.Count}} новых сообщения.",\n    "many": "У вас {{.Count}} новых сообщений.",\n    "other": "У вас {{.Count}} сообщений."\n  }\n}
\n\n

التهيئة والاستخدام في الكود

\n

الآن سنكتب كودًا بلغة Go يقوم بتحميل ملفات الترجمة واستخدامها لعرض الرسائل حسب اللغة المختارة.

\n
package main\n\nimport (\n    "fmt"\n    "github.com/nicksnyder/go-i18n/v2/i18n"\n    "golang.org/x/text/language"\n)\n\nfunc main() {\n    // إنشاء حزمة (مخزن الترجمات)\n    bundle := i18n.NewBundle(language.English)\n    bundle.RegisterUnmarshalFunc("json", json.Unmarshal)\n\n    // تحميل ملفات الترجمة\n    bundle.MustLoadMessageFile("locales/active.en.json")\n    bundle.MustLoadMessageFile("locales/active.ru.json")\n\n    // إنشاء مخصص للغة الروسية\n    localizer := i18n.NewLocalizer(bundle, language.Russian.String())\n\n    // مثال على استخدام رسالة بسيطة\n    helloMsg, _ := localizer.Localize(&i18n.LocalizeConfig{\n        MessageID: "hello_world",\n    })\n    fmt.Println(helloMsg) // الإخراج: Привет, мир!\n\n    // مثال على استخدام الأعداد الجمعية\n    for _, count := range []int{1, 2, 5, 10} {\n        msg, _ := localizer.Localize(&i18n.LocalizeConfig{\n            MessageID: "messages_count",\n            PluralCount: count,\n            TemplateData: map[string]interface{}{\n                "Count": count,\n            },\n        })\n        fmt.Println(msg)\n    }\n}
\n\n

دعم صيغ الجمع (Pluralization)

\n

إحدى الميزات الرئيسية لـ go-i18n هي المعالجة الصحيحة لصيغ الجمع. تستخدم المكتبة قواعد Unicode

توصيات