التدويل (i18n) في Java: جعل التطبيق متعدد اللغات
التدويل (غالبًا ما يُختصر i18n - من كلمة internationalization، حيث 18 هو عدد الحروف بين الحرف الأول 'i' والحرف الأخير 'n') هو عملية تصميم البرمجيات بحيث يمكن تكييفها مع لغات وخصائص إقليمية مختلفة دون تغيير الكود المصدري. في Java، يتم حل هذه المشكلة بأناقة وقوة باستخدام واجهات برمجة التطبيقات المضمنة: java.util.Locale، java.util.ResourceBundle ومجموعة من الفئات للتنسيق.
في هذه المقالة، سنشرح كيفية تنفيذ دعم لغات متعددة في تطبيق Java باستخدام الأدوات القياسية. ستتعلم كيفية إنشاء ملفات التوطين، وتبديل اللغة ديناميكيًا، وتنسيق الأرقام والتواريخ والعملات بشكل صحيح.
المكونات الأساسية لـ i18n في Java
توفر Java ثلاثة عناصر رئيسية للعمل مع التدويل:
- Locale — كائن يمثل لغة ومنطقة معينة (على سبيل المثال، اللغة الروسية في روسيا —
ru_RU، الإنجليزية في الولايات المتحدة —en_US). - ResourceBundle — فئة لتحميل الموارد المترجمة (سلاسل، رسائل، تسميات) من ملفات
.propertiesأو الفئات. - أدوات التنسيق — فئات من حزمة
java.text(NumberFormat،DateFormat،MessageFormat) لعرض الأرقام والتواريخ والرسائل المركبة بشكل صحيح.
الخطوة 1: إنشاء ملفات الموارد
الطريقة التقليدية لتخزين السلاسل المترجمة هي ملفات .properties. يتم إنشاؤها وفقًا للقاعدة التالية:
Messages.properties # الملف الافتراضي (عادةً الإنجليزية)Messages_ru_RU.properties # للغة الروسية (روسيا)Messages_de_DE.properties # للألمانية (ألمانيا)Messages_fr.properties # للفرنسية (بدون تحديد منطقة)مثال على محتوى ملف Messages.properties (الإنجليزية، الافتراضي):
welcome.message = Welcome to our application!farewell.message = Goodbye!date.format = dd/MM/yyyyمثال على محتوى ملف Messages_ru_RU.properties (الروسية):
welcome.message = Добро пожаловать в наше приложение!farewell.message = До свидания!date.format = dd.MM.yyyyهام: يجب أن تكون الملفات بترميز ISO 8859-1 (Latin-1) أو استخدام ترميز Unicode للأحرف غير المضمنة في هذا الترميز. بالنسبة للأحرف الروسية، ستحتاج إلى ترميز، على سبيل المثال \\u0414\\u043E\\u0431\\u0440\\u043E. ومع ذلك، في بيئات التطوير الحديثة (IntelliJ IDEA، Eclipse) وعند البناء باستخدام Maven/Gradle، غالبًا ما يتم أتمتة ذلك.
الخطوة 2: تحميل الموارد في الكود
لاستخدام السلاسل المترجمة، يكفي إنشاء كائن Locale والحصول على ResourceBundle المقابل:
import java.util.Locale;import java.util.ResourceBundle;
public class I18nDemo { public static void main(String[] args) { // إنشاء لغة للغة الروسية Locale ruLocale = new Locale("ru", "RU"); // تحميل الحزمة (الاسم الأساسي للملف هو "Messages") ResourceBundle bundle = ResourceBundle.getBundle("Messages", ruLocale);
// الحصول على السلاسل String welcome = bundle.getString("welcome.message"); String farewell = bundle.getString("farewell.message");
System.out.println(welcome); // Добро пожаловать в наше приложение! System.out.println(farewell); // До свидания! }}إذا لم يتم العثور على ملف للغة محددة، يستخدم Java تلقائيًا الملف الافتراضي (Messages.properties).
الخطوة 3: التبديل الديناميكي للغة
في تطبيق الويب