Servletler - Uluslararasılaştırma
Devam etmeden önce, üç önemli terimi açıklamama izin verin -
Internationalization (i18n) - Bu, bir web sitesinin ziyaretçinin diline veya uyruğuna çevrilmiş farklı içerik sürümleri sunmasını sağlamak anlamına gelir.
Localization (l10n) - Bu, belirli bir coğrafi veya kültürel bölgeye uyum sağlamak için bir web sitesine kaynak eklemek anlamına gelir.
locale- Bu belirli bir kültürel veya coğrafi bölgedir. Genellikle bir dil sembolü ve ardından bir alt çizgi ile ayrılmış bir ülke sembolü olarak anılır. Örneğin "en_US", ABD için İngilizce yerel ayarını temsil eder.
Küresel bir web sitesi oluştururken dikkat edilmesi gereken çok sayıda öğe vardır. Bu eğitim size bu konuda tam bir ayrıntı vermeyecektir, ancak farklı dillerdeki web sayfanızı konumlarını, yani yerel ayarları farklılaştırarak internet topluluğuna nasıl sunabileceğiniz konusunda size iyi bir örnek verecektir.
Sunucu uygulaması, istekte bulunan kişinin yerel ayarına göre sitenin uygun sürümünü alabilir ve yerel dil, kültür ve gereksinimlere göre uygun site sürümünü sağlayabilir. Aşağıda, Locale nesnesini döndüren istek nesnesinin yöntemi verilmiştir.
java.util.Locale request.getLocale()
Yerel Algılama
Aşağıda, talepte bulunan kişinin konumunu, dilini ve tabii ki yerel ayarını tespit etmek için kullanabileceğiniz önemli yerel ayar yöntemleri verilmiştir. Aşağıdaki yöntemlerin tümü, talepte bulunan kişinin tarayıcısında belirlenen ülke adını ve dil adını görüntüler.
Sr.No. | Yöntem ve Açıklama |
---|---|
1 | String getCountry() Bu yöntem, ISO 3166 2 harfli formatta bu yerel ayar için ülke / bölge kodunu büyük harflerle döndürür. |
2 | String getDisplayCountry() Bu yöntem, yerel ayarın ülkesi için kullanıcıya görüntülenmeye uygun bir ad döndürür. |
3 | String getLanguage() Bu yöntem, ISO 639 biçiminde bu yerel ayar için dil kodunu küçük harflerle döndürür. |
4 | String getDisplayLanguage() Bu yöntem, yerel ayar dili için kullanıcıya görüntülenmeye uygun bir ad döndürür. |
5 | String getISO3Country() Bu yöntem, bu yerel ayarın ülkesi için üç harfli bir kısaltma döndürür. |
6 | String getISO3Language() Bu yöntem, bu yerelin dili için üç harfli bir kısaltma döndürür. |
Misal
Bu örnek, bir istek için bir dili ve ilişkili ülkeyi nasıl görüntülediğinizi gösterir -
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 {
//Get the client's Locale
Locale locale = request.getLocale();
String language = locale.getLanguage();
String country = locale.getCountry();
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Detecting Locale";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\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>"
);
}
}
Diller Ayarı
Bir sunucu uygulaması, İngilizce, İspanyolca, Almanca, Fransızca, İtalyanca, Hollandaca vb. Gibi Batı Avrupa dilinde yazılmış bir sayfanın çıktısını alabilir. Burada, ContentLanguage başlığının tüm karakterleri düzgün şekilde görüntülemesi için ayarlanması önemlidir.
İkinci nokta, tüm özel karakterleri HTML varlıklarını kullanarak görüntülemektir, Örneğin, "& # 241;" "ñ" ve "& # 161;" temsil eder aşağıdaki gibi "¡" yi temsil eder:
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 {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// Set spanish language code.
response.setHeader("Content-Language", "es");
String title = "En Español";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\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>"
);
}
}
Yerel Ayara Özel Tarihler
Yerel ayara özel tarih ve saati biçimlendirmek için java.text.DateFormat sınıfını ve statik getDateTimeInstance () yöntemini kullanabilirsiniz. Aşağıda, belirli bir yerel ayara özel tarihlerin nasıl biçimlendirileceğini gösteren örnek verilmiştir -
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 {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//Get the client's Locale
Locale locale = request.getLocale( );
String date = DateFormat.getDateTimeInstance(DateFormat.FULL,
DateFormat.SHORT, locale).format(new Date( ));
String title = "Locale Specific Dates";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + date + "</h1>\n" +
"</body>
</html>"
);
}
}
Yerel Ayara Özgü Para Birimi
Yerel ayara özgü bir para biriminde uzun veya çift tür gibi bir sayıyı biçimlendirmek için java.txt.NumberFormat sınıfını ve statik getCurrencyInstance () yöntemini kullanabilirsiniz. Aşağıda, belirli bir yerel ayara özel para biriminin nasıl biçimlendirileceğini gösteren örnek verilmiştir -
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 {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//Get the client's Locale
Locale locale = request.getLocale( );
NumberFormat nft = NumberFormat.getCurrencyInstance(locale);
String formattedCurr = nft.format(1000000);
String title = "Locale Specific Currency";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + formattedCurr + "</h1>\n" +
"</body>
</html>"
);
}
}
Yerel Ayara Özgü Yüzde
Yerel ayara özgü yüzdeyi almak için java.txt.NumberFormat sınıfını ve statik getPercentInstance () yöntemini kullanabilirsiniz. Aşağıda, belirli bir yerel ayara özgü yüzdelerin nasıl biçimlendirileceğini gösteren örnek verilmiştir -
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 {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//Get the client's Locale
Locale locale = request.getLocale( );
NumberFormat nft = NumberFormat.getPercentInstance(locale);
String formattedPerc = nft.format(0.51);
String title = "Locale Specific Percentage";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + formattedPerc + "</h1>\n" +
"</body>
</html>"
);
}
}