从xml文件读取的本地化菜单

时间:2012-05-25 15:19:11

标签: java xml xslt localization menu

我有下一个问题。对于我在java上的web应用程序,我使用Tutor和Student的2个菜单变体。之后,根据登录用户的角色,我在html中转换xml文件并包含在页面中。这意味着我应该使用4个xml文件和4个html文件(如果我想使用本地化2语言环境和多线程应用程序),获取当前语言环境并选择文件源和结果进行转换或存在其他方式吗? / p>

1 个答案:

答案 0 :(得分:3)

如果我理解正确,你有2种不同的观点,每种观点都有两种可能的语言:

  • 导师的查看(页面)
    • 英文
    • 第二语言
  • 查看学生
    • 英文
    • 第二语言

据我所知,没有标准实用程序可以为同一页面定义不同的视图(对于导师和学生来说),因为它将在很大程度上取决于应用程序。所以你可以使用任何方法。使用不同XML源的方法听起来很不错。

对于语言环境,标准方法是使用Java Resource Bundles。还有其他用于国际化的实用程序,例如cosmopolitan等。使用它将为您提供将XML文件与语言翻译分离的优势,因此您只需要拥有2个XML文件。这也意味着如果您将XML文件更改为英语,则无需在XML文件中对第二语言进行相同的更改。

但是,您需要避免在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 - &gt; HTML转换过程,用于提取${key}中的密钥,并使用基于当前区域设置的 .properties 文件之一的值替换它们。

修改

你可以试试这个:

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文件是在XML模板的第2步中自动生成的,因此您无需手动管理它们。

关于用户的同时使用,用户的观点之间不应该发生冲突。这将取决于您部署界面的方式:桌面Java应用程序,applet,基于Web的应用程序等。您正在采用哪种方法,每个用户应该拥有自己的JVM实例或自己的会话,解耦来自其他用户。