Tag: resourcebundle

在Java中,如何在Web应用程序中动态重新加载资源包?

我们使用fmt:setBundle从数据库加载资源包(我们扩展了ResourceBundle类来做到这一点)。 当我们修改数据库中的值时,我们必须重新加载Web服务器以在Web应用程序上显示新值。 是否有任何简单的方法可以在不重新启动Web服务器的情况下使用新值? (我们不想总是从数据库中查找值,但我们希望使缓存无效,例如通过调用特殊的“admin”URL) 编辑:我们正在使用JDK 1.4,所以我更喜欢该版本的解决方案。 🙂

从jar内部加载ResourceBundle

我已经看到了一些关于如何通过getResourceAsStream在jar中加载特定文件的答案,我可以管理它。 但是我面对的是一些非常具体的内容,我在论坛上找不到相关答案。 这是配置: 我有一个jar文件,其conf目录包含2个属性文件messages_en_US.properties和messages_fr_FR.properties 。 加载这些资源的经典方法是使用 ResourceBundle.getBundle(“messages”, java.util.Locale.getDefault()); 如果文件在磁盘上,则在programm类路径引用的目录中,这可以正常工作。 但我不知道如何管理ResourceBundle.getBundle的使用和从jar中使用资源。 实际上,因为我看不到通过getResourceAsStream的任何桥接(或者这意味着我自己管理语言环境以指定整个资源文件名,这不是很聪明)。 有人可以帮忙吗? 谢谢。

编写Spring Resource Boundle时是否有单一规则来处理单引号?

Spring的ResourceBundleMessageSource使用MessageFormat替换消息中的占位符( {0} )。 MessageFormat要求使用两个单引号( ” )转义单引号( ” )(请参阅: MessageFormat Javadoc )。 但是,默认情况下, MessageFormat不会解析不包含任何参数的消息,因此不需要对不带参数的消息中的单引号进行转义。 因此,您的翻译人员必须了解编写和维护资源包的两个规则 : 如果带有单引号的消息也包含至少一个占位符( {0} ),则写入( ” ); 如果带有单引号的消息不包含占位符,则写入( ‘ )。 编写Spring Resource Boundle时是否有单一规则来处理单引号?

用于检查Java资源包的工具(i18n)

我正在寻找一个工具,ant-task,IDE插件……这有助于使用标准的message-properties资源包来处理Java应用程序的I18N。 欢迎开源和商业解决方案。 具体来说,我正在寻找以下任务的支持: 1)从Java代码,JSP和其他工件中提取使用过的密钥。 由于涉及自定义框架,因此提取应允许自定义。 将源工件映射到某个消息包。 还有自定义规则。 报告使用不在捆绑中的密钥。 报告包中的键,但不包含映射到此包的源工件。 2)检查每个包的属性文件,并报告缺少的键定义和默认翻译(使用英文文本)。 3)将当前SVN / CVS / GIT /任何版本与旧版本进行比较,并报告一个转换(或者可能只是默认转换)而不是其他转换的情况。 http://rscbundlecheck.sourceforge.net/涵盖2)很大一部分。 但是我没有找到1)和3)的东西。 有什么指针吗?

如何避免Java ResourceBundle字符串中的重复?

我们有很多字符串包含相同的子字符串,从关于检查日志或如何联系支持的句子到包含公司或产品名称的类似品牌的字符串。 重复导致了我们自己的一些问题(主要是拼写错误或复制/粘贴错误),但它也会导致问题,因为它增加了翻译者必须翻译的文本量。 我提出的解决方案是这样的: public class ExpandingResourceBundleControl extends ResourceBundle.Control { public static final ResourceBundle.Control EXPANDING = new ExpandingResourceBundleControl(); private ExpandingResourceBundleControl() { } @Override public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload) throws IllegalAccessException, InstantiationException, IOException { ResourceBundle inner = super.newBundle(baseName, locale, format, loader, reload); return inner == null ? null : new […]

使用带有spring boot的可执行jar命令时的资源FileNotFoundException

要在我的spring-boot应用程序中启用https ,我执行了以下操作。 @Bean @Inject public EmbeddedServletContainerCustomizer containerCustomizer() throws FileNotFoundException { final String absoluteKeystoreFile = ZenoTuringServiceApp.class.getClassLoader().getResource(“test.jks”).getFile(); return (ConfigurableEmbeddedServletContainer factory) -> { TomcatEmbeddedServletContainerFactory containerFactory = (TomcatEmbeddedServletContainerFactory) factory; containerFactory.addConnectorCustomizers((TomcatConnectorCustomizer) (Connector connector) -> { connector.setSecure(true); connector.setScheme(“https”); connector.setAttribute(“keystoreFile”, absoluteKeystoreFile); connector.setAttribute(“keystorePass”, “test”); connector.setAttribute(“keystoreType”, “JKS”); connector.setAttribute(“clientAuth”, “false”); connector.setAttribute(“sslProtocol”, “TLS”); connector.setAttribute(“SSLEnabled”, true); }); }; } 如果我使用mvn spring-boot运行它:运行它按预期工作。 但是当我使用java -jar target/xxx-xxx-service-0.1.17-SNAPSHOT.jar的可执行jar运行时,我得到了FileNotFoundException。 Caused by: org.apache.catalina.LifecycleException: […]

更正java.util.ResourceBundle组织

我有一个包含许多模块的国际化项目。 每个模块都有自己的一组包: – database-module + com_naugler_project_database.properties + com_naugler_project_database_fr.properties – mapping-module + com_naugler_project_mapping.properties + com_naugler_project_mapping_fr.properties 但是,许多国际化术语都是多余的(例如“确定”或“取消”),我希望将这些术语放在一个地方,以便于维护和开发。 我发现了ResourceBundleinheritance的这个有用的解释 ,但似乎一个(不是?)共同的祖先不会被正确国际化,因为: – common-module + com_naugler_project.properties + com_naugler_project_fr.properties <– this is not an ancestor – database-module + com_naugler_project_database.properties + com_naugler_project_database_fr.properties <– of this 我的捆绑组织是否会离开基地? 提供共同的国际化祖先的正确方法是什么?

Java i18n:每个包使用一个ResourceBundle访问器,还是整个项目使用一个?

我对国际化一无所知。 我有一个包含多个包的项目。 我正在使用Eclipse的内置“Externalize Strings”向导将我的类中的String常量提取到属性文件,并将这些字符串替换为对静态访问器的调用。 而不是 System.out.println(“Hello, world!”); 我结束了 System.out.println(Messages.getString(“MyKey”)); 每个包中都有一个Messages实用程序类(它提供了一个静态getString方法,用于从ResourceBundle获取所需的String [在本例中为.properties文件])。 是否最好在每个包中都有一个Messages类,或者为整个项目设置一个Messages类?

如何在Java中从DB加载资源包消息?

我可以动态加载资源包吗? 我可以动态编辑资源包吗? 如果我可以拥有这样的逻辑资源包(即位于上下文中而不是物理文件),那将是最好的。 有关: 如何从文件资源加载资源包?

javax.el.PropertyNotWritableException:/index.xhtml @ 29,118 value =“”:集合操作的非法语法

我想创建一个带有本地化选项的登录屏幕来翻译名称,当我从默认英语更改为阿拉伯语时,它会崩溃 这是faces.config.xml en ar mypack.enar msg ManagedBean import java.io.Serializable; import java.util.LinkedHashMap; import java.util.Locale; import java.util.Map; import javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped; import javax.faces.context.FacesContext; import javax.faces.event.ValueChangeEvent; /** * * @author body */ @ManagedBean(name = “localize”) @RequestScoped public class LocalizeMBean implements Serializable { /** * @return the countries */ public static Map getCountries() { return countries; } /** * […]