gpt4 book ai didi

java - JLibs 国际化不会创建 _bundle.class 和属性文件

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

我目前正在从 C# 切换到 Java,并且正在尝试为 C# 资源文件找到存储字符串的良好替代方案。

internationalization of jlibs听起来正是我正在寻找的东西。但这对我不起作用。如果我理解正确的话,那么当我编译项目时它实际上应该创建两个文件:

  • Bundle.properties
  • _Bundle.class

但是什么也没有被创建。

这是一些代码,基本上是网页上的示例。

从包中调用字符串:

package i18n;

import static i18n.UIBundle.UI_BUNDLE;

public class Main {

public static void main(String[] args) {
System.out.println(UI_BUNDLE.executeButton());
}
}

bundle :

package i18n;

import jlibs.core.util.i18n.I18N;
import jlibs.core.util.i18n.Message;
import jlibs.core.util.i18n.ResourceBundle;

@ResourceBundle
public interface UIBundle{
public static final UIBundle UI_BUNDLE = I18N.getImplementation(UIBundle.class);

@Message("Execute")
public String executeButton();
}

错误实际上告诉我,没有 _Bundle 类:

Exception in thread "main" java.lang.ExceptionInInitializerError at i18n.Main.main(Main.java:10) Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: i18n._Bundle at jlibs.core.util.i18n.I18N.getImplementation(I18N.java:34)

我做了什么:

  • 在 Eclipse 中创建了一个新的 Java 项目
  • 将 jlibs-core.jar 添加到引用的库
  • 将整个 jlibs 文件夹添加到 Java - 构建路径 - 类路径变量
  • 下载 xercesImpl.jar 并将其添加到引用的库

我是否错过了一些我不知道的基本配置,或者我是否需要一些其他先决条件?有人看到我的错误吗?

最佳答案

我在 jlibs 上遇到了同样的问题,所以选择 C10N相反,它的工作方式非常相似。一个简单的例子,首先在一些启动代码中告诉C10N你想要使用默认的语言环境(你也可以添加自己的语言环境):

C10N.configure(new C10NConfigBase()
{
@Override
protected void configure()
{
install(new DefaultC10NAnnotations());
}
});

然后创建带有注释消息的界面:

//docs suggest this isn't needed by default but it didn't work without this annotation
@C10NMessages
public interface ExceptionText
{
@En("That didn't work")
@De("Das hat nicht geklappt")
public String simpleMessage();

//action may need translating too!
@En("Could not perform action {0}, failure code {1}")
@De("Aktion {0} ist nicht möglich, Fehlercode {1}")
public String complexMessage(String action, int code);
}

然后在其他地方使用上面的内容:

String simple = C10N.get(ExceptionText.class).simpleMessage();
String complex = C10N.get(ExceptionText.class).complexMessage("xyz", 123);

如果愿意,您还可以让它使用资源包来翻译文本。

关于java - JLibs 国际化不会创建 _bundle.class 和属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25307240/

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