ترجمة تطبيقات Go: من $ إلى € بدون صداع

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

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

ابدأ الدورة

لماذا يحتاج تطبيق Go الخاص بك إلى التدويل (i18n)؟

\n\n

لقد كتبت خدمة رائعة بلغة Go. إنها سريعة، متزامنة، وتُترجم في ثوانٍ. لكن هناك مشكلة واحدة: جميع الرسائل والأزرار والتلميحات فيها باللغة الروسية (أو الإنجليزية). والعالم يريد استخدام منتجك بلغته الأم. وهنا يأتي دور تدويل تطبيقات Go (i18n).

\n\n

يعتقد الكثيرون أن ترجمة Go هي كابوس مع ملفات JSON والحلول المؤقتة. لكن هذا ليس صحيحًا. تقدم بيئة Go حلولًا أنيقة تتيح إضافة دعم لأي عدد من اللغات، دون تضخيم الكود أو فقدان الأداء. في هذه المقالة، سنشرح كيفية تنفيذ i18n في Go بشكل صحيح، ليتحدث تطبيقك بمئات اللغات.

\n\n

ما هو i18n و l10n؟ فهم المصطلحات

\n\n

قبل كتابة الكود، دعنا نرتب المصطلحات:

\n\n
    \n
  • i18n (التدويل) — عملية تصميم التطبيق بحيث يمكن تكييفه مع لغات ومناطق مختلفة دون إعادة كتابة الكود. يتعلق الأمر بالهندسة.
  • \n
  • l10n (الترجمة) — تكييف المحتوى (ترجمة النص، تنسيق التواريخ، العملات) مع لغة محددة (مثل en-US، ru-RU، de-DE).
  • \n
\n\n

في سياق تدويل تطبيقات Go، i18n هو إعداد الكود (استخدام المفاتيح بدلاً من السلاسل النصية)، بينما l10n هو ملء هذه المفاتيح بالترجمات.

\n\n

اختيار المكتبة: لماذا go-i18n؟

\n\n

توجد في Go عدة مكتبات شائعة للعمل مع الترجمات. بعد اختبار خيارات مختلفة، فإن أفضل خيار لمعظم المشاريع هو go-i18n من nicksnyder. لماذا؟

\n\n
    \n
  • سهولة الاستخدام — الحد الأدنى من الكود التمهيدي.
  • \n
  • دعم الجمع — التصريف الصحيح لـ "رسالة واحدة"، "رسالتان"، "5 رسائل".
  • \n
  • العمل مع TOML/YAML/JSON — اختر تنسيق الترجمات الذي تفضله.
  • \n
  • دعم القوالب — يمكنك إدراج المتغيرات مباشرة في سلسلة الترجمة.
  • \n
  • أداة مدمجة لاستخراج المفاتيح — لا حاجة لكتابة الترجمات يدويًا.
  • \n
\n\n

مثال عملي: إنشاء خدمة متعددة اللغات بلغة Go

\n\n

لنقم بإنشاء خادم ويب بسيط بلغة Go يرحب بالمستخدم بلغته.

\n\n

الخطوة 1: التثبيت وهيكل المشروع

\n\n

قم بتثبيت المكتبة وإنشاء هيكل الدليل:

\n\n
go get github.com/nicksnyder/go-i18n/v2/i18n\ngo get golang.org/x/text/language
\n\n

هيكل المشروع:

\n\n
myapp/\n├── main.go\n└── locales/\n    ├── active.en.toml\n    ├── active.ru.toml\n    └── active.de.toml
\n\n

الخطوة 2: إنشاء ملفات الترجمة

\n\n

locales/active.en.toml:

\n\n
[greeting]\ndescription = "تحية المستخدم"\none = "مرحبًا، {{.Name}}!"\nother = "مرحبًا، {{.Name}}!"\n\n[inbox]\ndescription = "عدد الرسائل في صندوق الوارد"\none = "لديك {{.Count}} رسالة جديدة."\nother = "لديك {{.Count}} رسائل جديدة."
\n\n

locales/active.ru.toml:

\n\n
[greeting]\ndescription = "تحية المستخدم"\none = "Привет, {{.Name}}!"\nother = "Привет, {{.Name}}!"\n\n[inbox]\ndescription = "عدد الرسائل في صندوق الوارد"\none = "У вас {{.Count}} новое сообщение."\nfew = "У вас {{.Count}} новых сообщения."\nmany = "У вас {{.Count}} новых сообщений."\nother = "У вас {{.Count}} сообщений."
\n\n

لاحظ صيغ الجمع في اللغة الروسية: one, few, many, other. الجمع في Go هي ميزة قوية تعالج قواعد التصريف المعقدة بشكل صحيح.

\n\n

الخطوة 3: كتابة الكود بلغة Go

\n\n

الآن الجزء الممتع — التدويل

المدونات

توصيات الكتب