Java中的gettext _()方法有一个很好的替代方法吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java中的gettext _()方法有一个很好的替代方法吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1794字,纯文字阅读大概需要3分钟。
内容图文
![Java中的gettext _()方法有一个很好的替代方法吗?](/upload/InfoBanner/zyjiaocheng/783/a2a53578dc494dc4ad24f97b11dee19b.jpg)
这是通过gettext组实用程序在C / Python / PHP / etc中解耦文本消息和源代码的常用方法.根据this instruction,我正在尝试在我的Java项目中做类似的事情.这是最好的方法吗?或者我应该尝试一些不同的,更先进的东西?
PS.我想避免复杂的初始化,理想情况下我的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)方法更改活动区域设置,并使用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中的gettext _()方法有一个很好的替代方法吗?全部内容,希望文章能够帮你解决Java中的gettext _()方法有一个很好的替代方法吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。