gpt4 book ai didi

java - 静态资源包

转载 作者:行者123 更新时间:2023-12-01 14:19:15 25 4
gpt4 key购买 nike

我目前正在为使用 ResourceBundle 的应用制作资源。问题是,使用当前代码来分派(dispatch)资源,我需要在每次需要时创建一个资源包实例,我猜这不是一个好主意,因为我最终会一次又一次地加载资源.

第二个解决方案是将 bundle 分成许多,但我最终会得到只有 2-3 个字符串的 bundle ,比如 15 个 bundle 。

我的问题是:有没有一种方法可以简单地将所有资源加载到一个静态类中并从那里访问它们。

我编写了这段似乎对我有用的小代码,但我怀疑它的质量。

public class StaticBundle
{
private final static ResourceBundle resBundle =
ResourceBundle.getBundle("com.resources");
public final static String STRING_A = resBundle.getString("KEY_A");
public final static String STRING_B = resBundle.getString("KEY_B");
public final static String STRING_C = resBundle.getString("KEY_C");
}

有了这个,我可以调用 StaticBundle.STRING_A 并在项目中的任何地方获取值,但是由于 bundle 是与类本身同时初始化的...程序很可能将没有时间从首选项加载适当的本地。

是否有好的方法或任何其他可能的解决方案?

谢谢

最佳答案

如果您打算只有默认语言环境的消息,那么您所拥有的就可以了。

或者,您可以让调用者指定它需要的键而不是常量,如下所示:

public static String getMessage(String key) {
return resBundle.getString(key);
}

如果你喜欢支持多个语言环境,那么通常的方法是使用 Map<Locale, ResourceBundle> Map<Locale, Map<String, String>您只为每个语言环境加载一次资源。在那种情况下,您的类将有一个方法,调用者可以在其中指定语言环境:

public static String getMessage(String key, Locale locale) {
Map<String, String> bundle = bundles.get(locale); // this is the map with all bundles
if (bundle == null) {
// load the bundle for the locale specified
// here you would also need some logic to mark bundles that were not found so
// to avoid continously searching bundles that are not present

// you could even return the message for the default locale if desirable
}
return bundle.get(key);
}

编辑正如@JB Nizet 正确指出的(感谢)ResourceBundle已经存储了 Map .我在源示例中提供的自定义解决方案是关于类似于 ResourceBundle 的自定义机制。使用了 MapMap s 以 property=value 格式加载键的翻译,不仅从文件而且从数据库。我错误地认为我们有一个 MapResourceBundle在该解决方案中。源示例现已修复。

关于java - 静态资源包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17977539/

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