gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:45:19 25 4
gpt4 key购买 nike

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

最佳答案

如果我理解正确,您有 2 种不同的 View ,每种 View 都有 2 种可能的语言:

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

  • 据我所知,没有标准的实用程序可以为同一页面定义不同的 View (在您的情况下,对于导师和学生),因为它将在很大程度上取决于应用程序。所以你可以使用任何方法。您使用不同 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 -> 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 文件是在步骤 2 中从 XML 模板自动生成的,因此您不必手动管理它们。

    对于用户同时使用,用户的观点不应该有冲突。这将取决于您如何部署界面:桌面 Java 应用程序、小程序、基于 Web 的应用程序等。无论您采用哪种方法,每个用户都应该有他/她自己的 JVM 实例或自己的 session ,解耦来自其他用户。

    关于java - 从 xml 文件读取的本地化菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10757068/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com