التدويل (i18n) في Java: دليل شامل مع أمثلة

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

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

ابدأ الدورة

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

\n\n

التدويل (اختصارًا i18n - من كلمة internationalization، حيث يوجد بين الحرف الأول 'i' والحرف الأخير 'n' 18 حرفًا) هو عملية تصميم البرمجيات بحيث يمكن تكييفها مع لغات ومناطق مختلفة دون إجراء تغييرات في الكود المصدري. توفر Java مجموعة أدوات مدمجة وقوية للتدويل، مما يسمح للمطورين بإنشاء تطبيقات متعددة اللغات بسهولة.

\n\n

في هذه المقالة، سنشرح بالتفصيل المكونات الرئيسية لـ i18n في Java: Locale و ResourceBundle وملفات الخصائص و MessageFormat. ستتعلم كيفية هيكلة الموارد المترجمة بشكل صحيح ومعالجة الاستثناءات المتعلقة بعدم وجود ترجمة.

\n\n

1. المكونات الرئيسية لـ i18n في Java

\n\n

يعتمد التدويل في Java على ثلاثة عناصر أساسية:

\n\n
    \n
  • Locale - كائن يمثل منطقة جغرافية أو سياسية أو ثقافية محددة. يحتوي على معلومات حول اللغة والبلد (اختياري) والتنوع (اختياري).
  • \n
  • ResourceBundle - فئة تقوم بتحميل الموارد المترجمة (سلاسل نصية، تنسيقات) من ملفات الخصائص (.properties) أو مصادر أخرى.
  • \n
  • ملفات الخصائص - ملفات نصية بامتداد .properties، حيث يتم تخزين أزواج مفتاح=قيمة. يتم بناء اسم الملف وفقًا للقواعد: الاسم_الأساسي_اللغة_البلد.properties.
  • \n
\n\n

مثال على هيكل الملفات للغتين الروسية والإنجليزية:

\n\n
Messages.properties          // الملف الافتراضي\nMessages_en.properties       // الإنجليزية (عام)\nMessages_en_US.properties    // الإنجليزية (الولايات المتحدة)\nMessages_ru_RU.properties    // الروسية (روسيا)\n
\n\n

2. إنشاء ملفات الخصائص

\n\n

لنقم بإنشاء ملف أساسي Messages.properties (القيم الافتراضية - بالإنجليزية):

\n\n
greeting=Hello\nfarewell=Goodbye\napp.name=My Application\n
\n\n

الآن لنقم بإنشاء الترجمة الروسية Messages_ru_RU.properties:

\n\n
greeting=Здравствуйте\nfarewell=До свидания\napp.name=Моё приложение\n
\n\n

للإنجليزية (الولايات المتحدة) - Messages_en_US.properties:

\n\n
greeting=Hello\nfarewell=Goodbye\napp.name=My Application\n
\n\n

3. استخدام Locale و ResourceBundle

\n\n

لتحميل السلاسل المترجمة، يتم استخدام الكود التالي:

\n\n
import java.util.Locale;\nimport java.util.ResourceBundle;\n\npublic class I18nExample {\n    public static void main(String[] args) {\n        // تعيين اللغة المحلية (مثال: اللغة الروسية، روسيا)\n        Locale ruLocale = new Locale("ru", "RU");\n        ResourceBundle bundle = ResourceBundle.getBundle("Messages", ruLocale);\n        \n        // الحصول على السلاسل المترجمة\n        String greeting = bundle.getString("greeting");\n        String farewell = bundle.getString("farewell");\n        String appName = bundle.getString("app.name");\n        \n        System.out.println(greeting + " " + farewell); // Здравствуйте До свидания\n        System.out.println(appName);                   // Моё приложение\n    }\n}\n
\n\n

إذا لم يتم العثور على اللغة المحلية، تستخدم Java تلقائيًا سلسلة البحث:

\n
    \n
  1. أولاً، يبحث عن ملف بالتطابق التام (Messages_ru_RU.properties).
  2. \n
  3. ثم - بدون البلد (Messages_ru.properties).
  4. \n
  5. بعد ذلك - الملف الأساسي (Messages.properties).
  6. \n
  7. إذا لم يتم العثور على شيء - يتم طرح استثناء MissingResourceException.
  8. \n
\n\n

4. تنسيق الرسائل باستخدام MessageFormat

\n\n

غالبًا ما تحتوي السلاسل على أجزاء متغيرة. لهذا، يتم استخدام MessageFormat. مثال مع بيانات ديناميكية:

\n\n<

توصيات