2

次の問題があります。JavaのWebアプリケーションでは、TutorとStudentのメニューの2つのバリアントを使用します。その後、ログオンしたユーザーの役割に応じて、xmlファイルをhtmlに変換し、ページに含めます。これは、4つのxmlファイルと4つのhtmlファイルを使用する必要があることを意味します(ローカリゼーション2ロケールとmultithread-appを使用する場合)、現在のロケールを取得し、変換用のファイルソースと結果を選択しますか、それとも他の方法がありますか?

4

1 に答える 1

3

私が正しく理解していれば、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インスタンスまたは独自のセッションを分離する必要があります。他のユーザーから。

于 2012-05-26T08:41:15.747 に答える