التحدث بجميع اللغات: تدويل تطبيقات Java

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

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

ابدأ الدورة

لماذا يجب أن يتحدث تطبيق Java الخاص بك بلغة البشر؟

\n\n

هل تساءلت يومًا لماذا التطبيقات التي نستخدمها يوميًا - من Spotify إلى Notion - "تفهم" فورًا اللغة التي تتحدث بها؟ إنها لا تقرأ الأفكار، ولا تخمن من عنوان IP. إنها تستخدم التدويل (i18n).

\n\n

بالنسبة لمطور Java، فإن القدرة على جعل التطبيقات متعددة اللغات ليست مجرد "ميزة إضافية"، بل هي مهارة أساسية إذا كنت تستهدف السوق العالمية. تخيل: لقد كتبت خدمة رائعة لإدارة المهام. في روسيا، حققت نجاحًا. ولكن بمجرد أن ترغب في بيعها في ألمانيا أو اليابان - سيرى المستخدمون زر "إنشاء مهمة" باللغة الروسية. وسيغلقون علامة التبويب. محزن، أليس كذلك؟

\n\n

في هذه المقالة، لن نتحدث فقط عن النظرية. سنأخذ تطبيق Java (تطبيق عادي جدًا، وحدة تحكم أو ويب) وسنضيف إليه خطوة بخطوة دعم اللغات الروسية والإنجليزية والألمانية. سترى أن تدويل Java ليس مخيفًا، بل هو أنيق جدًا. هيا بنا!

\n\n

ما هو التدويل والتوطين؟ لا تخلط بينهما!

\n\n

غالبًا ما يتم الخلط بين هذين المفهومين. دعنا نضع النقاط على الحروف.

\n\n
    \n
  • التدويل (i18n) - هو عملية تصميم التطبيق بحيث يمكن تكييفه مع لغات ومناطق مختلفة دون تغيير الكود. أنت تضع "خطافات" للترجمة.
  • \n
  • التوطين (l10n) - هو ملء هذه "الخطافات" بترجمات محددة، وتنسيقات التواريخ، والعملات، وقواعد الفرز لدولة معينة.
  • \n
\n\n

في Java، الفئات المسؤولة عن التدويل موجودة في الحزمة java.util: Locale و ResourceBundle. تذكرهما - إنهما أفضل أصدقائك.

\n\n

الخطوة 1. التعرف على Locale - قلب التدويل

\n\n

تمثل الفئة Locale منطقة محددة (لغة + دولة). على سبيل المثال:

\n\n
    \n
  • Locale.US - الإنجليزية (الولايات المتحدة)
  • \n
  • Locale.GERMANY - الألمانية (ألمانيا)
  • \n
  • new Locale("ru", "RU") - الروسية (روسيا)
  • \n
\n\n

يتم استخدام Locale لاختيار الترجمة الصحيحة للسلاسل النصية، وتنسيق الأرقام، والتواريخ، والعملات. بدونها، التدويل مستحيل.

\n\n

كيف تحصل على اللغة المحلية الحالية؟

\n\n
import java.util.Locale;\n\npublic class Main {\n    public static void main(String[] args) {\n        // اللغة المحلية الافتراضية (عادة ما تتطابق مع لغة النظام)\n        Locale defaultLocale = Locale.getDefault();\n        System.out.println("اللغة المحلية الحالية: " + defaultLocale);\n\n        // اللغات المحلية المتاحة في JVM\n        Locale[] available = Locale.getAvailableLocales();\n        System.out.println("إجمالي المتاح: " + available.length);\n    }\n}
\n\n

قد يكون الإخراج، على سبيل المثال: اللغة المحلية الحالية: ru_RU. لكننا لن نعتمد على لغة النظام المحلية - في تطبيق الويب، عادةً ما يرسلها متصفح المستخدم.

\n\n

الخطوة 2. ResourceBundle - المترجم الخاص بك

\n\n

الآن الجزء الممتع: كيف تخزن الترجمات؟ في Java، يتم استخدام ملفات الخصائص (.properties) لذلك. كل ملف عبارة عن مجموعة من أزواج المفتاح=القيمة.

\n\n

إنشاء ملفات الترجمة

\n\n

أنشئ في الدليل src/main/resources (أو ببساطة في مجلد المصادر) ثلاثة ملفات:

\n\n

1. Messages.properties (اللغة الافتراضية - الإنجليزية)

\n
greeting=Hello, {0}!\nfarewell=Goodbye!\napp.title=Task Manager
\n\n

2. Messages_ru_RU.properties (الروسية)

\n
greeting=Привет, {0}!\nfarewell=До свидания!\napp.title=Менеджер задач
\n\n

3. Messages_de_DE.properties (الألمانية)

\n
greeting=Hallo, {0}!\nfarewell=Auf Wiedersehen!\napp.title=Aufgabenverwaltung
\n\n

لاحظ اللواحق: _ru_RU، _de_DE. تبحث Java عن الملف وفقًا للنمط: الاسم_الأساسي

المدونات

توصيات الكتب