次の問題があります。JavaのWebアプリケーションでは、TutorとStudentのメニューの2つのバリアントを使用します。その後、ログオンしたユーザーの役割に応じて、xmlファイルをhtmlに変換し、ページに含めます。これは、4つのxmlファイルと4つのhtmlファイルを使用する必要があることを意味します(ローカリゼーション2ロケールとmultithread-appを使用する場合)、現在のロケールを取得し、変換用のファイルソースと結果を選択しますか、それとも他の方法がありますか?
1 に答える
私が正しく理解していれば、2種類のビューがあり、それぞれ2つの可能な言語で表示されます。
- 講師向けの表示(ページ)
- 英語で
- 第二言語で
- 学生向けに表示
- 英語で
- 第二言語で
私の知る限り、同じページ(あなたの場合は家庭教師と学生)に異なるビューを定義する標準的なユーティリティはありません。これは、アプリケーションに大きく依存するためです。したがって、任意のアプローチを使用できます。さまざまなXMLソースを使用したアプローチは問題ないように思えます。
ロケールに関しては、標準的なアプローチはJavaResourceBundleを使用することです。コスモポリタンなど、国際化のための他のユーティリティもあります。これを使用すると、XMLファイルを言語翻訳から分離できるという利点があり、必要なXMLファイルは2つだけです。これは、XMLファイルを英語に変更する場合、XMLファイルを第2言語に変更する必要がないことも意味します。
ただし、ローカライズ可能なテキストをXMLファイルに保存することは避け、代わりに、現在のロケールの正しいテキストを取得するために使用される特別なキーを保存する必要があります。
例えば:
<page>
<title>${title}</title>
<body>
<heading>${heading}</heading>
${introduction}
Copyright (c) 2012
</body>
</page>
次に、たとえば、プロパティファイルでローカライズ可能な部分( ${title}
、など)の翻訳を定義できます。${heading}
#In Translations_en.properties file
title=Page for tutors
heading=Introduction
introduction=Welcome to the tutors page!
#In Translations_<yourlanguage>.properties file
title=...
heading=...
introduction=...
次に、XML-> HTML変換プロセスを変更して、のキーを抽出し、現在のロケールに基づいて.properties${key}
ファイルの1つの値に置き換えます。
編集:
あなたはこれを試すことができます:
1)XMLテンプレートから始めます(少し単純化しましょう):
<!-- tutor.xml -->
<page>
<title>${title}</title>
</page>
2)プリプロセッサを作成して適用し、言語ごとにテンプレートをローカライズされたテンプレートに変換します。出力は次のようになります。
<!-- tutor_en.xml -->
<page>
<title>Title</title>
</page>
<!-- tutor_ru.xml -->
<page>
<title>Название</title>
</page>
3)実行時に適切なテンプレートを変換してロードします。大まかに言って、コードは次のようになります。
// Get xml template name based on current locale
String getLocalisedTemplate(String baseName){
return baseName + "_" + Locale.getDefault().getLanguage() + ".xml";
}
public String renderPage(){
if(currentUser.isTutor()){
//This will be tutor_en.xml or tutor_ru.xml
String templateFile = getLocalisedTemplate("tutor");
//Return localised and transformed HTML
return applyXslt("tutor.xslt", templateFile);
} else if (currentUser.isStudent()){
// same as above replacing tutor with student
}
}
説明のために使用Locale.getDefault()
しましたが、アプリケーションでは、現在のユーザーロケールを(おそらくユーザー設定から)決定する別の方法があるでしょう。
本質的に、上記のアプローチは元の提案と非常に似ています。唯一の違いは、ローカライズされたXMLファイルがステップ2でXMLテンプレートから自動的に生成されるため、手動で管理する必要がないことです。
ユーザーによる同時使用に関しては、ユーザーの見解がぶつからないようにする必要があります。これは、インターフェイスのデプロイ方法(デスクトップJavaアプリ、アプレット、Webベースのアプリなど)によって異なります。どちらのアプローチを採用する場合でも、各ユーザーは独自のJVMインスタンスまたは独自のセッションを分離する必要があります。他のユーザーから。