[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[upki-fed:00489] localization of Shibboleth IdP
- Subject: [upki-fed:00489] localization of Shibboleth IdP
- Date: Wed, 11 Jul 2012 10:31:56 +0900
- From: TSUCHIYA Masatoshi <xxxxxxxx@xxxxxx>
土屋です.
Java Servlet に慣れている人にとっては楽勝の話なんでしょうけど,初めての作
業で試行錯誤しながらやったので,せっかくですから手順を報告します.
Java Servlet の localize については,2通りの方法があります.
第1は,primitive に java.util.ResourceBundle を用いる方法,第2は,JSTL を
使う方法です.ここでは,JSTL を使う方法を報告します.
(1) Apache Taglibs からライブラリをダウンロードして,展開.
wget http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/jakarta-taglibs-standard-1.1.2.zip
unzip -x jakarta-taglibs-standard-1.1.2.zip
(2) 必要なライブラリは jstl.jar と standard.jar の2つです.他のライブラリ
と見分けがつくように,適当に名前を変更しながらコピーしました.
mkdir /opt/shibboleth-idp-2.x/src/main/webapp/WEB-INF/lib
cp -p jakarta-taglibs-standard-1.1.2/lib/jstl.jar /opt/shibboleth-idp-2.x/src/main/webapp/WEB-INF/lib/jakarta-taglibs-jstl-1.1.2.jar
cp -p jakarta-taglibs-standard-1.1.2/lib/standard.jar /opt/shibboleth-idp-2.x/src/main/webapp/WEB-INF/lib/jakarta-taglibs-standard-1.1.2.jar
(3) メッセージ用のプロパティファイルを用意します.プロパティファイルは,
クラスパスの通っている個所に置く必要があります.とりあえず,
日本語用プロパティファイルは WEB-INF/classes/mymessage_ja.properties
デフォルトのプロパティファイルは WEB-INF/classes/mymessage.properties
に置くことにしました.
mymessage.properties は以下のような感じです.
==== mymessage.properties ここから ====
login.username = Username
login.password = Password
login.authfail = Credentials not recognized.
login.continue = Continue
==== mymessage.properties ここまで ====
mymessage_ja.properties は,unicode エスケープした形式で置く必要がありま
す.そのため,前段階として,unicode のプロパティファイルを作ります.
==== mymessage_ja.properties.utf8 ここから ====
login.username = ユーザ名
login.password = パスワード
login.authfail = ユーザ名またはパスワードが違います.
login.continue = 次に進む
==== mymessage_ja.properties.utf8 ここまで ====
これを,native2ascii コマンドで変換して,日本語用プロパティファイルにしま
す.
native2ascii mymessage_ja.properties.utf8 mymessage_ja.properties
(4) login.jsp でメッセージ用プロパティファイルを使うための記述をします.
最初に文字コードを宣言.
<%@ page contentType="text/html; charset=UTF-8" %>
JSTL のパッケージをロード.
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
ブラウザから送信された accept-language にしたがって言語を選択.
<fmt:setLocale value="${pageContext.request.locale}" />
適切なプロパティファイルを開く.
<fmt:bundle basename="mymessage">
〜内部〜
</fmt:bundle>
すると,内部では,<fmt:message key="〜"> で文字列を取り出せるようになりま
す.これらをまとめると,以下のようになります.
==== login.jsp ここから ====
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="urn:mace:shibboleth:2.0:idp:ui" prefix="idpui" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<fmt:setLocale value="${pageContext.request.locale}" />
<fmt:bundle basename="mymessage">
<html>
<head>
<title>Shibboleth Identity Provider, Example - Login</title>
<link rel="stylesheet" type="text/css" href="<%= request.getContextPath()%>/login.css"/>
</head>
<body>
<img src="<%= request.getContextPath()%>/images/logo.jpg" alt="Shibboleth Logo"/>
<h1>Shibboleth Identity Provider Login</h1>
<% if ("true".equals(request.getAttribute("loginFailed"))) { %>
<p><font color="red"><fmt:message key="login.authfail"/></font> </p>
<% } %>
<% if(request.getAttribute("actionUrl") != null){ %>
<form action="<%=request.getAttribute("actionUrl")%>" method="post">
<% }else{ %>
<form action="j_security_check" method="post">
<% } %>
<table>
<tr><td><label for="username"><fmt:message key="login.username"/>:</label></td><td><input name="j_username" type="text" id="username" autocapitalize="off" /></td></tr>
<tr><td><label for="password"><fmt:message key="login.password"/>:</label></td><td><input name="j_password" type="password" id="password" /></td></tr>
<tr><td></td><td><input type="submit" value="<fmt:message key="login.continue"/>" />
</table>
</form>
</body>
</html>
</fmt:bundle>
==== login.jsp ここまで ====
(5) Shibboleth IdP を再デプロイ.
初めての作業で試行錯誤しながらやったので,もっと良い方法があればコメント
をお願いします.
--
土屋 雅稔 ( TSUCHIYA Masatoshi )