Temel bir JSP / Servlet web uygulaması durumunda, temel yaklaşım JSTL fmt
taglib'i kaynak paketleriyle birlikte kullanmak olacaktır . Kaynak paketleri, anahtarın tüm diller için aynı olan ve değerin dile göre farklılık gösteren bir sabit olduğu anahtar / değer çiftleri içerir. Kaynak paketleri genellikle tarafından yüklenen özellikler dosyalarıdır .ResourceBundle
API . Ancak bu, örneğin bir veritabanından anahtar / değer çiftlerini yükleyebilmeniz için özelleştirilebilir.
Özellikler dosyası tabanlı kaynak paketleriyle web uygulamanızın oturum açma formunu nasıl uluslararası hale getireceğinize dair bir örnek.
Aşağıdaki dosyaları oluşturun ve bunları bir pakete koyun, örneğin com.example.i18n
(Maven olması durumunda, onları içerideki paket yapısına koyun src/main/resources
).
text.properties
(varsayılan dilde, genellikle İngilizce olan anahtar / değer çiftlerini içerir)
login.label.username = Kullanıcı Adı
login.label.password = Parola
login.button.submit = Oturum açın
text_nl.properties
(Hollandaca ( nl
) anahtar / değer çiftlerini içerir)
login.label.username = Gebruikersnaam
login.label.password = Wachtwoord
login.button.submit = Inloggen
text_es.properties
(İspanyolca ( es
) anahtar / değer çiftlerini içerir)
login.label.username = Nombre de usuario
login.label.password = Contraseña
login.button.submit = Kullanıcı
Kaynak paketi dosya adı aşağıdaki kalıba uymalıdır name_ll_CC.properties
. _ll
Bölüm küçük harfli olmalıdır ISO 693-1 dil kodu. İsteğe bağlıdır ve yalnızca _CC
parça mevcut olduğunda gereklidir . _CC
Parçası büyük harf olmalıdır ISO 3166-1 Alpha-2 ülke kodu. İsteğe bağlıdır ve genellikle yalnızca Amerikan İngilizcesi ( _en_US
) ve İngiliz İngilizcesi ( _en_GB
) gibi ülkeye özgü dil lehçelerini ayırt etmek için kullanılır .
Henüz tamamlanmadıysa, JSTL'yi yükleyin. Servlet 2.5 veya daha yenisi (Tomcat 6.0 ve benzeri) üzerinde çalışıyorsanız ve web.xml
Servlet 2.5 spesifikasyonuna uygun olduğu bildirilirse, jstl-1.2.jar'ı webapp /WEB-INF/lib
klasörüne koyun .
Aşağıdaki örnek JSP dosyasını oluşturun ve web içeriği klasörüne koyun.
login.jsp
<%@ page pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="language" value="${not empty param.language ? param.language : not empty language ? language : pageContext.request.locale}" scope="session" />
<fmt:setLocale value="${language}" />
<fmt:setBundle basename="com.example.i18n.text" />
<!DOCTYPE html>
<html lang="${language}">
<head>
<title>JSP/JSTL i18n demo</title>
</head>
<body>
<form>
<select id="language" name="language" onchange="submit()">
<option value="en" ${language == 'en' ? 'selected' : ''}>English</option>
<option value="nl" ${language == 'nl' ? 'selected' : ''}>Nederlands</option>
<option value="es" ${language == 'es' ? 'selected' : ''}>Español</option>
</select>
</form>
<form method="post">
<label for="username"><fmt:message key="login.label.username" />:</label>
<input type="text" id="username" name="username">
<br>
<label for="password"><fmt:message key="login.label.password" />:</label>
<input type="password" id="password" name="password">
<br>
<fmt:message key="login.button.submit" var="buttonValue" />
<input type="submit" name="submit" value="${buttonValue}">
</form>
</body>
</html>
<c:set var="language">
Geçerli dil yönetir. Dil, istek parametresi olarak sağlandıysa (dil açılır listesine göre), o zaman ayarlanacaktır. Aksi takdirde, dil oturumda önceden ayarlanmışsa, bunun yerine ona bağlı kalın. Aksi takdirde, istek başlığında kullanıcı tarafından sağlanan yerel ayarı kullanın.
Kaynak <fmt:setLocale>
grubu için yerel ayarı ayarlar. Bu hat olması önemlidir önce<fmt:setBundle>
.
<fmt:setBundle>
Baz adıyla kaynak paketi başlatır (olduğunu olmadan tek adıyla kadar tam nitelikli paket adı _ll_CC
belirteci).
<fmt:message>
Verilerini geri çağırır belirtilen paket anahtar tarafından mesaj değer.
Arama <html lang="${language}">
botlarına sayfanın hangi dilde olduğunu bildirir, böylece yinelenen içerik olarak işaretlenmez (dolayısıyla SEO için iyidir).
Dil açılır menüsü, başka bir dil seçildiğinde hemen JavaScript tarafından gönderilecek ve sayfa, yeni seçilen dil ile yenilenecektir.
Bununla birlikte, özellik dosyalarının varsayılan olarak ISO-8859-1 karakter kodlaması kullanılarak okunduğunu aklınızda bulundurmanız gerekir. Unicode kaçışlarıyla onlardan kaçmanız gerekir. Bu, JDK tarafından sağlanan native2ascii.exe
araç kullanılarak yapılabilir . Daha fazla ayrıntı için bu makale bölümüne de bakın .
Teorik bir alternatif, Control
bu dosyaları UTF-8 olarak yüklemek için özel bir paket sağlamak olabilir , ancak bu maalesef temel JSTL fmt
taglib tarafından desteklenmiyor . Bir Filter
. JSF gibi bunu daha şeffaf bir şekilde ele alabilen (MVC) çerçeveleri vardır, ayrıca bu makaleye bakın .