gpt4 book ai didi

java - Java 中是否有替代 gettext _() 方法的好方法?

转载 作者:搜寻专家 更新时间:2023-11-01 03:13:48 25 4
gpt4 key购买 nike

通过gettext,在C/Python/PHP等中,将短信与源码解耦是一种常用的方式实用程序集。根据 this instruction,我正在尝试在我的 Java 项目中做类似的事情.这是最好的方法吗?或者我应该尝试一些不同的、更高级的东西?

附言。我想避免复杂的初始化,理想情况下我的 Java 代码应该如下所示:

[...]
public String howBigIsTheFile(File f) {
String name = f.getAbsolutePath();
long length = f.length();
return _("The file %s is %d bytes long", name, length);
}

类似于 gettext-commons也许吧?

最佳答案

我认为这个问题是关于独立应用程序(命令行、SWING 等),而不是关于服务器端应用程序(多个用户同时访问)。

在独立应用程序中,最简单的方法是创建一个单个静态访问器类,负责加载一个单个资源包,然后在其中查找字符串资源包。

像这样:

public class ResourceUtil {

private static ResourceBundle rb;

static {
//set the default locale
setLocale(Locale.ENGLISH);
}

public static void setLocale(Locale locale) {
rb = ResourceBundle.getBundle("Resources", locale);
}

public static String tr(String key, Object... args) {
return MessageFormat.format(rb.getString(key), args);
}

}

您可以使用 setLocale(Locale) 方法更改 Activity 语言环境,并使用 tr(String,Object...) 方法访问翻译后的字符串。

然后,您可以像这样从您的类中调用它:

import static ResourceUtil.tr;

public String howBigIsTheFile(File f) {
String name = f.getAbsolutePath();
long length = f.length();
return tr("The file %s is %d bytes long", name, length);
}

注意静态导入。

免责声明:所有提供的代码都是伪代码级别的,不保证可以编译。

根据您的应用程序的大小,您可能会发现使用 IDE 字符串外部化支持 很有用(例如,请参阅 Eclipse JDT help 中的章节,我相信其他 IDE 也有一些类似的功能)。

您还可以使用多个资源包和/或多个静态类 - 这取决于您的应用程序的大小和您的个人喜好。参见 this question对此进行进一步讨论。

在服务器环境中,使用上述静态方法会导致问题,因为不同的用户会有不同的语言环境。根据您的 webapp 框架,您将以不同方式解决此问题(例如 use MessageSource in Spring )。

关于java - Java 中是否有替代 gettext _() 方法的好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4286215/

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