gpt4 book ai didi

java - "ResourceBundle"整个文件?

转载 作者:搜寻专家 更新时间:2023-10-31 20:29:49 25 4
gpt4 key购买 nike

显然 ResourceBundle 在它找到的文件中需要一个类似于语法的属性文件。

我们有一种情况想要使用整个文件(在我们的例子中是 HTML 文件)作为“值”。这意味着我们没有这样的 key 。好吧,也许文件名可以作为 key 。

这是一个目录树:

src/
main/
resources/
html/
content.html
content_de.html
content_fr.html
content_es.html
order.html
order_de.html
order_fr.html
order_es.html

现在我们需要逻辑来根据当前语言环境找到正确的文件。如果当前语言环境是德语并且我正在寻找 html/content.html 文件,它应该会找到 html/content_de.html。它不一定需要立即加载它。 Java中是否有一些现有的机制?我们需要手动执行此操作吗?

由于一些限制,我们目前计划不使用任何第三方库。因此,如果 Java 6 SE 中有可用的东西,那将是我们最好的选择;但是,如果您知道第三方库,请随意命名。

编辑#1:一个明显的解决方案是在 messages.properties 中设置一个键来命名该 HTML 文件。虽然这会奏效,但从长远来看可能会让人头疼(除此之外,我认为这不会解决我们所有的问题)。

编辑 #2:我忘了说这是一个桌面应用程序。

最佳答案

为了使这更理想,如果您的文件命名约定保持一致(即,对于每个语言环境,您使用该语言的两个字母前缀 - 表示英语为“en”,法语为“fr”,而“es' 表示西类牙语),那么这个过程就非常简单了。

我们将使用 Properties类读取属性,然后使用MessageFormat从结果属性中格式化我们想要的适当语言环境。

首先,我们对属性文件进行更改 - 我们对其进行参数化,以便我们能够传入任何我们喜欢的内容。

content=content_{0}.html
order=order_{0}.html

{0} 表示属性的第一个参数。

现在,我们只需要加载属性,并传入合适的参数即可。

Properties prop = new Properties();
try {
MessageFormat messageFormat = new MessageFormat("");
String property;
// change to suit the locale you wish to serve
String[] param = {"en"};

prop.load(new FileReader(new File("/full/path/to/property/file.properties")));
property = prop.getProperty("content");
messageFormat.applyPattern(property);
System.out.println(messageFormat.format(param));
} catch(IOException ioex) {
System.out.println("no property file here");
}

打印出来:

content_en.html

在进行此调用之前确保您要访问的 HTML 文件存在,或者将其转换为返回 String 的函数,并确保该文件在返回之前存在。

关于java - "ResourceBundle"整个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12237886/

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