English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تعريب Servlet

قبل أن نبدأ، دعونا نرى ثلاثة مفاهيم مهمة:

  • التحويل الدولي(i18n):هذا يعني أن الموقع يقدم نسخًا مختلفة من المحتوى المترجم إلى لغة أو جنسية الزائر.

  • التحويل المحلي(l10n):هذا يعني إضافة موارد إلى الموقع لجعله يتوافق مع منطقة جغرافية أو ثقافية معينة، مثل ترجمة الموقع إلى اللغة الهندية (Hindi).

  • إعدادات المنطقة(locale):هذا هو منطقة ثقافية أو جغرافية خاصة. عادة ما يشير إلى رمز اللغة متبوعًا بعلامة التساوي ورمز البلد. على سبيل المثال، "en_US" يعني إعدادات المنطقة للإنجليزية في الولايات المتحدة.

عند إنشاء موقع عالمي هناك بعض النقاط التي يجب مراعاتها. هذا الدرس لن يشرح تفاصيل هذه النقاط بشكل كامل، ولكن سيعرض لك كيفية عرض صفحات الويب بلغات مختلفة من خلال التوجيه التفاضلي (أي إعدادات المنطقة).

يمكن لـ Servlet اختيار نسخة الموقع المناسبة بناءً على إعدادات المنطقة للمستخدم، وتقديم نسخة الموقع المناسبة بناءً على اللغة والثقافة والاحتياجات المحلية. فيما يلي طرق العودة إلى Object request Locale.

java.util.Locale request.getLocale()

تحقق من إعدادات المنطقة

فيما يلي قائمة بأهم طرق إعدادات المنطقة، يمكنك استخدامها للتحقق من موقع المستخدم المطلوب، اللغة وإعدادات المنطقة. جميع الطرق المذكورة هنا تظهر اسم البلد واللغة المعدل في متصفح المستخدم.

الترتيبالطريقة & الوصف
1String getCountry()
هذا الطريقة تعود رمز البلد/المنطقة بالشكل الأحرف الكبيرة للتنسيق ISO 3166.
2String getDisplayCountry()
هذا الطريقة تعود اسم البلد المناسب لعرضه للمستخدم في إعدادات المنطقة.
3String getLanguage()
هذا الطريقة تعود رمز اللغة بالشكل الأحرف الصغيرة للتنسيق ISO 639.
4String getDisplayLanguage()
هذا الطريقة تعود اسم اللغة المناسبة لعرضها للمستخدم في إعدادات المنطقة.
5String getISO3Country()
يحصل هذا الطريقة على اختصار الثلاثة أحرف للدولة المنطقة.
6String getISO3Language()
يحصل هذا الطريقة على اختصار الثلاثة أحرف للغة المنطقة.

مثال على الإنترنت

يوضح هذا المثال كيفية عرض لغة الطلب和国家 المرتبطة بها:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
public class GetLocale extends HttpServlet{
    
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // الحصول على إعدادات المناطق للعميل
      Locale locale = request.getLocale();
      String language = locale.getLanguage();
      String country = locale.getCountry();
      // إعداد نوع المحتوى للإجابة
      response.setContentType("text/html;charset=UTF-8");
      PrintWriter out = response.getWriter();
      String title = "تحديد إعدادات المنطقة";
      String docType = "<!DOCTYPE html> \n";
      out.println(docType +
        "<html>\n" +
        "<head><title>" + title + "</title></head>\n" +
        "<body bgcolor=\"#f0f0f0\">\n" +
        "<h1 align=\"center\">" + language + "</h1>\n" +
        "<h2 align=\"center\">" + country + "</h2>\n" +
        "</body></html>);"
  }
}

إعداد اللغة

يمكن للسيرفلت أن يخرج صفحات مكتوبة بلغات أوروبا الغربية (مثل الإنجليزية، الإسبانية، الألمانية، الفرنسية، الإيطالية، الهولندية، إلخ). هنا، من أجل عرض جميع الرموز بشكل صحيح، من المهم إعداد رأس Content-Language.

النقطة الثانية هي عرض جميع الرموز الخاصة باستخدام رموز HTML، مثل "ñ" التي تمثل "ñ"، "¡" التي تمثل "¡"، كما يلي:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
public class DisplaySpanish extends HttpServlet{
    
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
    // إعداد نوع المحتوى للإجابة
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    // إعداد رمز اللغة الإسبانية
    response.setHeader("Content-Language", "es");
    String title = "En Español";
    String docType = "<!DOCTYPE html> \n";
     out.println(docType +
     "<html>\n" +
     "<head><title>" + title + "</title></head>\n" +
     "<body bgcolor=\"#f0f0f0\">\n" +
     "<h1>" + "En Español:" + "</h1>\n" +
     "<h1>" + "¡Hola Mundo!" + "</h1>\n" +
     "</body></html>);"
  }
}

تاريخ مخصص للمنطقة

يمكنك استخدام كلاس java.text.DateFormat ومتدخلاته الثابتة getDateTimeInstance() لتنسيق تاريخ وموعد مخصص للمنطقة. يوضح المثال التالي كيفية تنسيق تاريخ مخصص لمنطقة معينة:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
import java.text.DateFormat;
import java.util.Date;
public class DateLocale extends HttpServlet{
    
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
    // إعداد نوع المحتوى للإجابة
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    // الحصول على إعدادات المناطق للعميل
    Locale locale = request.getLocale( );
    String date = DateFormat.getDateTimeInstance(
                                  DateFormat.FULL, 
                                  DateFormat.SHORT, 
                                  locale).format(new Date( ));
    String title = "特定于区域设置的日期";
    String docType = "<!DOCTYPE html> \n";
      out.println(docType +
      "<html>\n" +
      "<head><title>" + title + "</title></head>\n" +
      "<body bgcolor=\"#f0f0f0\">\n" +
      "" + date + "\n" +
      "</body></html>);"
  }
}

特定于区域设置的货币

您可以使用 java.text.NumberFormat 类及其静态方法 getCurrencyInstance() 来格式化数字(比如 long 类型或 double 类型)为特定于区域设置的货币。下面的示例演示了如何格式化特定于某个给定的区域设置的货币:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
import java.text.NumberFormat;
import java.util.Date;
public class CurrencyLocale extends HttpServlet{
    
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
    // إعداد نوع المحتوى للإجابة
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    // الحصول على إعدادات المناطق للعميل
    Locale locale = request.getLocale( );
    NumberFormat nft = NumberFormat.getCurrencyInstance(locale);
    String formattedCurr = nft.format(1000000);
    String title = "特定于区域设置的货币";
    String docType = "<!DOCTYPE html> \n";
      out.println(docType +
      "<html>\n" +
      "<head><title>" + title + "</title></head>\n" +
      "<body bgcolor=\"#f0f0f0\">\n" +
      "" + formattedCurr + "\n" +
      "</body></html>);"
  }
}

特定于区域设置的百分比

您可以使用 java.text.NumberFormat 类及其静态方法 getPercentInstance() 来格式化特定于区域设置的百分比。下面的示例演示了如何格式化特定于某个给定的区域设置的百分比:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
import java.text.NumberFormat;
import java.util.Date;
public class PercentageLocale extends HttpServlet{
    
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
    // إعداد نوع المحتوى للإجابة
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    // الحصول على إعدادات المناطق للعميل
    Locale locale = request.getLocale( );
    NumberFormat nft = NumberFormat.getPercentInstance(locale);
    String formattedPerc = nft.format(0.51);
    String title = "معدل التردد المحدد للمنطقة";
    String docType = "<!DOCTYPE html> \n";
      out.println(docType +
      "<html>\n" +
      "<head><title>" + title + "</title></head>\n" +
      "<body bgcolor=\"#f0f0f0\">\n" +
      "<h1 align=\"center\">" + formattedPerc + "</h1>\n" +
      "</body></html>);"
  }
}