当前位置: 首页 > 知识库问答 >
问题:

多个语言文件和一个输入点

东郭淇
2023-03-14

我有一个Java程序,我有不止一种语言,我使用i18n的结构如下:

package languages;
import languages.it.ItLanguage;

enum ListLanguages {
    IT,
    EN,
    FR
}

public class Languages {

    ItLanguage language;
    

    public Languages(ListLanguages lan) {
        switch (lan) {
            case IT: {
                this.language = new ItLanguage();
                break;
            }
            case EN: {
                // this.language = new EnLanguage();
                break;
            }
        }
    }

    public String[] getStrings(String item) {
        return this.language.getStringArray(item);
    }

    public String getString(String item) {
        return this.language.getString(item);
    }
}

我希望调用构造函数Languages传递要使用的语言,并在之后调用此对象以获得字符串,如下所示:

Languages lan = new Languages(it);
lan.getString("s1");
[...]
Languages lan = new Languages(fr);
lan.getString("s2");

但是我找不到一个解决方案来避免像getString这样的方法中的开关:

switch(languageChosen) {
case("it"): return this.itLanguage.getString(item);
case("en"): return this.enLanguage.getString(item);
}

有没有办法避免这种切换`?

另一类(更多信息)是:

package it.bper.languages.it;


import java.util.ListResourceBundle;

public class ItLanguage extends ListResourceBundle {
    @Override
    protected Object[][] getContents() {
        return new Object[][] {
                {"name", "Pippo"},
                {
                        "ourfeatures", new String[]
                        {
                                "Б, Г, Д, ё, Ж, П, Ф, И, й, Л, Ц, Ш, Щ, Э, e Ю Я",
                                "Null",
                                "Empty"
                        }
                }
        };
    }
}

共有1个答案

夏侯渊
2023-03-14

由于Java支持多态性,您可以在这里使用一个接口:提供定义getStringgetStrings方法的interface Language,并在LanguageIt和类似类中实现它们。

一般来说,如果类提供特定于语言的行为,那么定义类如LanguageIt最有意义。如果它们只返回不同的数据,那么也可能只有一个语言类,并将数据放在映射中,使用enum作为键。然后,getString()样式的方法就可以通过该枚举键简单地查找数据。

这是接口变体:

enum ListLanguages {
    IT,
    EN,
    FR
}

public class Languages {

    private Language language;

    public Languages(ListLanguages lan) {
        switch (lan) {
            case IT: {
                this.language = new ItLanguage();
                break;
            }
            case EN: {
                // this.language = new EnLanguage();
                break;
            }
        }
    }

    public String getString(String item) {
        return this.language.getString(item);
    }

    public static void main(String[] args) {
        Languages lan = new Languages(ListLanguages.IT);
        System.out.println(lan.getString("Peter"));
    }
}

interface Language {
    String getString(String item);
}

class ItLanguage implements Language {
    public String getString(String item) {
        return "Grazie "+item+"!";
    }
}

 类似资料:
  • 在单个 Step 中处理多个输入文件是很常见的需求。如果这些文件都有相同的格式, 则可以使用 MultiResourceItemReader 来进行处理(支持 XML/或 纯文本文件)。 假如某个目录下有如下3个文件: file-1.txt file-2.txt ignored.txt file-1.txt 和 file-2.txt 具有相同的格式, 根据业务需求需要一起处理. 可以通过 Muli

  • 所以我正在和Yii2一起工作,对它来说是相当新的。我正在使用Kartik文件上传,并试图将代码转换为多个文件。但它只保存了第一个文件。 我已经删除了验证,因为这也是失败的,但一旦我知道所有其他的都在工作,我会重新添加。 型号: 控制器: 查看:

  • 问题内容: 我是Hadoop的新手,正在尝试弄清楚它是如何工作的。至于练习,我应该实现类似于WordCount- Example的东西。任务是读入多个文件,执行WordCount并为每个输入文件编写一个输出文件。Hadoop使用组合器,将map- part的输出改编为reducer的输入,然后写入一个输出文件(我猜每个正在运行的实例)。我想知道是否可以为每个输入文件写入一个输出文件(因此保留inp

  • 我想上传多输入文件。我尝试了下面的代码,但文件没有上传,我无法获得上传目录。 HTML 控制器 我也尝试用下面的代码获取上传的数据,但为什么总是出现错误?

  • 可设定文字输入等使用的语言。 键盘/添加词语 设定输入文字时使用的语言(键盘)。亦可设定多个键盘并切换使用。 此外,可依每种语言分别添加经常使用的词语。 添加/编辑词汇 1. 选择语言并轻触[添加/编辑词汇]。 2. 轻触 (选项)>[添加词语]。 在步骤1若选择了[日本語],可添加读音与词语。输入文字时只要输入添加[よみ]的文字,即会显示添加为输入候补的词语。 在步骤1若选择了[日本語]以外的语

  • 问题内容: 第二次输入后,我无法上传任何图像。我只能上传第一个输入。当添加另一个输入值时,将动态创建输入。下面是代码: 问题答案: 我制作并测试了一些代码示例,以便您可以了解问题所在。您有几处错误。我建议的第一件事实际上是使用jQuery。您的代码显然使用的是jQuery,但您可以使用各种可以简化的原始JS: 请注意,我在ajax URL中进行了硬编码。我用于测试的控制器名为Multi_uploa