[解決済み] JSP/ServletのWebアプリケーションを国際化/ローカライズするには?
質問
私はGoogleから国際化とは、私のウェブアプリケーションがすべての言語を使用できるようにするためのプロセスであることを学びました。 Webアプリケーションをすべての言語で使用できるようにするプロセスであることをGoogleから学びました。私は国際化のプロセスのためにUnicodeを理解したいので、私はからUnicodeについて学びました。 はこちら と そこ .
私はUnicodeについて、どのように文字セットセットがバイトにエンコードされ、再びバイトが文字セットにデコードされるかを理解することができます。しかし、どのように先に進めばよいのかわかりません。私は文字列を比較する方法を学びたいし、私のウェブアプリケーションで国際化を実装する方法を知る必要があります。何か提案はありますか?私を導いてください。
私の目的
私の主な目的は、翻訳のためのWebアプリケーションを開発することです(英語からアラビア語&逆も同様)。私は、国際化に従いたいと思います。私はすべての3つのブラウザ、すなわちFF、Chrome、IEで翻訳のための私のWebアプリケーションを実行したい。 どのように私はこれを達成するのでしょうか?
どのように解決するのですか?
基本的なJSP/ServletのWebアプリケーションの場合、基本的な方法としては
JSTL
fmt
タグリブ
と組み合わせて
リソースバンドル
. リソースバンドルはキーと値のペアを含み、キーは全言語で同じ定数、値は言語ごとに異なります。リソースバンドルは通常
プロパティファイル
で読み込まれます。
ResourceBundle
APIで読み込まれます。しかし、これは、例えばデータベースからキーと値のペアをロードできるようにカスタマイズすることができます。
ここでは、プロパティファイルベースのリソースバンドルでWebアプリケーションのログインフォームを国際化する方法の例を示します。
-
以下のファイルを作成し、何らかのパッケージの中に入れてください、例えば
com.example.i18n
(Mavenの場合、パッケージ構造の中のsrc/main/resources
).text.properties
(デフォルトの言語、通常は英語でのキー・バリュー・ペアを含む)login.label.username = ユーザー名 login.label.password=パスワード login.button.submit = サインイン
text_nl.properties
(オランダ語を含む(nl
) キーと値のペアを含む)login.label.usernameの= Gebruikersnaam login.label.password = パスワード login.button.submit = ログアウト
text_es.properties
(スペイン語(es
) キー・バリュー・ペア)login.label.username = ユーザ名 login.label.password=ユーザー名 login.button.submit = 登録する
リソースバンドルのファイル名は、次のパターンに従います。
name_ll_CC.properties
. この場合_ll
の部分は小文字の ISO 693-1 言語コードです。これはオプションであり_CC
部分が存在する場合にのみ必要です。また_CC
の部分は、大文字の ISO 3166-1 アルファ2 の国別コードです。これはオプションで、多くの場合、次のような国特有の言語方言を区別するためにのみ使用されます。 アメリカ英語 (_en_US
) と イギリス英語 (_en_GB
).
-
まだの場合は、この回答の指示に従って、JSTLをインストールしてください。 JSTLをインストールする方法を教えてください。絶対URI: http://java.sun.com/jstl/core が解決できません。 .
-
以下の例のJSPファイルを作成し、Webコンテンツフォルダに配置します。
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">
は現在の言語を管理します。もし言語がリクエストパラメータとして (言語ドロップダウンによって) 与えられたのであれば、それが設定されます。そうでない場合、言語がすでにセッションで設定されていれば、 代わりにそれを使用します。そうでなければ、リクエストヘッダでユーザーが提供したロケールを使用します。このような場合
<fmt:setLocale>
はリソースバンドル用のロケールを設定します。重要なのは、この行が の前に の前にあることが重要です。<fmt:setBundle>
.は
<fmt:setBundle>
はリソースバンドルをそのベース名(つまり、完全修飾パッケージ名から_ll_CC
指定子なしの単独名まで)でリソースバンドを初期化します。は
<fmt:message>
は、指定されたバンドルキーでメッセージの値を取得します。は
<html lang="${language}">
は、検索ボットにそのページが何語で書かれているかを知らせ、重複コンテンツとしてマークされないようにします(したがって、SEOに有利です)。別の言語が選択されると、言語ドロップダウンはJavaScriptによって直ちに送信され、ページは新しく選択された言語でリフレッシュされます。
しかし、プロパティ ファイルはデフォルトで ISO-8859-1 文字エンコードを使用して読み込まれることに留意する必要があります。ユニコード エスケープを使用してそれらをエスケープする必要があります。これは、JDK が提供する
native2ascii.exe
ツールを使って行うことができます。また
この記事部分
をご覧ください。
理論的な代替案としては、バンドルにカスタムの
Control
でこれらのファイルを UTF-8 として読み込むことができますが、残念ながら、これは基本的な JSTL の
fmt
タグライブラリではサポートされていません。の助けを借りて、自分ですべてを管理する必要があります。
Filter
. JSFのように、より透明性の高い方法でこれを処理できる(MVC)フレームワークがあります。
この記事
.
関連
-
Serious: End event threw exception java.lang.reflect.InvocationTargetException at sun.reflect.GeneratedM
-
java オープンソースフレームワーク統合 Context initialization failed の共通エラー。
-
[解決済み] JSPページでサーブレットを呼び出す方法
-
[解決済み] JSP/Servletを使用してサーバーにファイルをアップロードするにはどうすればよいですか?
-
[解決済み] JSTLでのif-elseオプションの使用方法
-
[解決済み】JSP 2を使用して、JSPファイル内のJavaコードを回避するにはどうすればよいですか?
-
[解決済み】JSF、Servlet、JSPの違いは何ですか?
-
[解決済み】ベストプラクティスの多言語ウェブサイト
-
[解決済み] 別のJSPファイルをインクルードする
-
[解決済み] ドメインURLとアプリケーション名を取得するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
java オープンソースフレームワーク統合 Context initialization failed の共通エラー。
-
[解決済み] JSTLでのif-elseオプションの使用方法
-
[解決済み] JSTLをインストールするには?絶対 URI: http://java.sun.com/jstl/core は解決できません。
-
[解決済み] 別のJSPファイルをインクルードする
-
[解決済み] RequestDispatcher.forward()とHttpServletResponse.sendRedirect()の比較
-
[解決済み] JSP EL、JSF EL、Unified ELの違い【終了しました
-
[解決済み] jsp の出力から空白を取り除く
-
[解決済み] ログアウト後に、以前に閲覧した保護されたページを表示しないようにする。
-
[解決済み] ドメインURLとアプリケーション名を取得するには?
-
[解決済み] 302リダイレクトはrefererの文字列を維持しますか?