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

توطين JSP

قبل البدء، يجب توضيح بعض المفاهيم المهمة:

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

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

يستطيع محرك JSP تقديم نسخة الصفحة الصحيحة بناءً على خاصية locale من الطلب. يلي كيفية الحصول على كائن Locale من كائن الطلب:

java.util.Locale request.getLocale() 

تحديد Locale

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

الرقم الطريقة & الوصف
1 String getCountry();

يعيد رمز المنطقة بالحروف الكبيرة أو المنطقة بتنسيق ISO 3166 2-letter
2 String getDisplayCountry();

يعيد اسم البلد الذي سيشاهدونه المستخدمون
3 String getLanguage();

يعيد رمز اللغة بالحروف الصغيرة أو المنطقة بتنسيق ISO 639
4 String getDisplayLanguage();

يعيد اسم اللغة الذي سيشاهدونه المستخدمون
5 String getISO3Country();

يعيد رمز البلد بالرموز الثلاثية
6 String getISO3Language();

يعيد اسم اللغة بالرموز الثلاثية

عرض مثال

يعلمنا هذا المثال كيفية عرض اللغة والبلد في JSP:

<%@ page import="java.io.*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>"
<%
   // الحصول على معلومات التوطين للعميل
   Locale locale = request.getLocale();
   String language = locale.getLanguage();
   String country = locale.getCountry();
%>
<html>
<head>
<title>كشف عن اللغة الإقليمية</title>
</head>
<body>
<center>
<h1>كشف عن اللغة الإقليمية</h1>
</center>
<p align="center">
<% 
   out.println("Language : " + language  + "<br />");
   out.println("Country  : " + country   + "<br />");
%>
</p>
</body>
</html>

إعداد اللغة

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

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

<%@ page import="java.io.*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>"
<%
    // تعيين نوع محتوى الرد
    response.setContentType("text/html");
    // تعيين رمز اللغة الإسبانية.
    response.setHeader("Content-Language", "ar");
    String title = "En Espa?ol";
%>
<html>
<head>
<title><%  out.print(title); %></title>
</head>
<body>
<center>
<h1><%  out.print(title); %></h1>
</center>
<div align="center">
<p>En Espa?ol</p>
<p>?Hola Mundo!</p>
</div>
</body>
</html>

تاريخ محددة بالمنطقة

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

<%@ page import="java.io.*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>"
<%@ page import="java.text.DateFormat,java.util.Date" %>
<%
    String title = "تواريخ محددة بالمنطقة";
    //Get the client's Locale
    Locale locale = request.getLocale( );
    String date = DateFormat.getDateTimeInstance(
                                  DateFormat.FULL, 
                                  DateFormat.SHORT, 
                                  locale).format(new Date( ));
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>تاريخ محلي: <%  out.print(date); %></p>
</div>
</body>
</html>

عملة محددة بالمنطقة

يمكن استخدام كلاً من java.text.NumberFormat وطرقها الثابتة getCurrencyInstance() لتشكيل الأرقام. على سبيل المثال، في العملات المحددة بالمنطقة من النوع long وdouble. يوضح المثال التالي كيفية تشكيل العملة بناءً على المنطقة المحددة:

<%@ page import="java.io.*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>"
<%@ page import="java.text.NumberFormat,java.util.Date" %>
<%
    String title = "عملة محددة بالمنطقة";
    //Get the client's Locale
    Locale locale = request.getLocale( );
    NumberFormat nft = NumberFormat.getCurrencyInstance(locale);
    String formattedCurr = nft.format(1000000);
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>عملة منسقة: <%  out.print(formattedCurr); %></p>
</div>
</body>
</html>

نسبة مئوية محددة بالمنطقة

يمكن استخدام كلاً من java.text.NumberFormat وطرقها الثابتة getPercentInstance() لتشكيل النسبة المئوية. يوضح المثال التالي كيفية تشكيل النسبة المئوية بناءً على المنطقة المحددة:

<%@ page import="java.io.*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>"
<%@ page import="java.text.NumberFormat,java.util.Date" %>
<%
    String title = "Locale Specific Percentage";
    //Get the client's Locale
    Locale locale = request.getLocale( );
    NumberFormat nft = NumberFormat.getPercentInstance(locale);
    String formattedPerc = nft.format(0.51);
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>نسبة مئوية مناسبة: <%  out.print(formattedPerc); %></p>
</div>
</body>
</html>