التدويل (i18n) في Go (Golang): دليل شامل

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

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

ابدأ الدورة

التدويل (i18n) في Go (Golang): دليل شامل للمطورين



التدويل (i18n) هو عملية تصميم البرمجيات بحيث يمكن تكييفها بسهولة مع لغات ومناطق مختلفة دون إجراء تغييرات على الكود المصدري. في Go (Golang)، توجد عدة حلول ناضجة لهذا الغرض، ولكن الأكثر شيوعًا وتوحيدًا هو الحزمة golang.org/x/text التي توفر أدوات قوية للعمل مع الترجمة. في هذه المقالة، سنشرح بالتفصيل كيفية إعداد i18n في تطبيق Go باستخدام المكتبات الرسمية وأفضل الممارسات.



المكتبات الأساسية لـ i18n في Go



يقدم نظام Go البيئي عدة طرق للتدويل. دعنا نستعرض أهمها:



  • golang.org/x/text — الحزمة الرئيسية من فريق Go، تدعم Unicode و CLDR (مستودع بيانات الإعدادات المحلية الشائعة) وقواعد الجمع المعقدة.
  • github.com/nicksnyder/go-i18n — مكتبة خارجية شائعة تدعم ملفات الترجمة بصيغ JSON و TOML و YAML، مع واجهة برمجة تطبيقات بسيطة واكتشاف تلقائي للغة.
  • github.com/leonelquinteros/gotext — بديل خفيف الوزن يعمل مع تنسيق GNU gettext (ملفات .po/.mo)، مثالي للمشاريع الصغيرة.


في هذا الدليل، سنركز على go-i18n باعتباره الحل الأكثر توازنًا لتطبيقات الويب، لكن المفاهيم تنطبق على أي مكتبة.



تثبيت وإعداد go-i18n



للبدء، قم بتثبيت المكتبة وأداة سطر الأوامر للعمل مع الترجمات:



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 صيغ، بينما في الإنجليزية توجد صيغتان فقط (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

توصيات