Tag: 国际化

多个枚举的国际化(枚举值的翻译)

再次讨论过之前我想要分享“我的”解决方案的内容,并要求增强,其他方法或最佳实践。 我有几个枚举,我需要国际化(我需要将枚举值翻译成某些语言,以便在jsf页面中显示它们)。 考试枚举: public enum TransferStatus { NOT_TRANSFERRED, TRANSFERRED } 翻译将是例如Not yet transferred / Transferred, all good 转换应存储在MessageBundle(属性文件)中。 我正在寻找一个简单,通用的解决方案(最好不需要在所有枚举中编写额外的代码),这在jsf方面并不需要太多。 只是要提一下,当然有可能两个不同的枚举产生相同的枚举值(例如,在不同的枚举中具有不同含义的COMPLETED值)。 我提出的解决方案: (1)将翻译存储在属性文件中,如下所示: TransferStatus.NOT_TRANSFERRED = Not yet transferred TransferStatus.TRANSFERRED = Transferred, all good (2)创建一个带有枚举的helper类并生成查找键: public class EnumTranslator { public static String getMessageKey(Enum e) { return e.getClass().getSimpleName() + ‘.’ + e.name(); } } (3)将此代码添加到每个枚举: public String getKey() […]

如何更改Java中的默认语言环境设置以使它们保持一致?

我正在寻找一组命令行参数,这些参数允许我强制为java应用程序设置一组特定的语言环境设置。 假设我无法修改应用程序,因此我必须使用java -Dmy.prop=”value”设置属性。 我正在寻找特别改变日期/时间格式以使其符合ISO-8601(军事时间),但我无法找到适当的属性。

Struts2使用数据库进行国际化

我们有一个相当大的应用程序,具有大量的动态内容。 无论如何强制struts使用数据库进行i18n查找而不是属性文件? 如果有人曾经用动态内容做过i18n,我会开放其他方式来解决这个问题。

如果您有ISO国家代码`US`,`FR`,您如何获得Locale代码(`Locale.US`,`Locale.FRANCE`)?

如果你有国家代码US , FR (ISO-3166-1 alpha-2国家代码),你如何获得Locale代码( Locale.US , Locale.FRANCE )来做这样的事情: System.out.println(DecimalFormat.getCurrencyInstance(Locale.US).format(12.34)); System.out.println(DecimalFormat.getCurrencyInstance(Locale.FRANCE).format(12.34)); $12.34 12,34 €

Hibernatevalidation器的国际化

Hibernatevalidation器是否支持国际化。 我看到了jar,我可以看到各种ValidationMessages.properties文件。 我们可以创建自己的自定义错误消息,这些消息将被国际化吗? 我不想使用Hibernatevalidation器中默认提供的错误消息。 我们需要使用自己的自定义消息,它们应该是国际化的。 以及Hibernatevalidation器支持的语言是什么。 在jar中我看到了英语,法语,德语,土耳其语和蒙古语的属性文件。 我们可以添加更多语言,例如西class牙语,葡萄牙语等?

Spring MVC LocaleChangeInterceptor注释不起作用

import java.util.Locale; import org.springframework.context.MessageSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.support.ReloadableResourceBundleMessageSource; import org.springframework.web.servlet.HandlerMapping; import org.springframework.web.servlet.LocaleResolver; import org.springframework.web.servlet.i18n.CookieLocaleResolver; import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; import org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping; @Configuration public class Config { @Bean public LocaleResolver localeResolver() { final CookieLocaleResolver ret = new CookieLocaleResolver(); ret.setDefaultLocale(new Locale(“en_US”)); return ret; } @Bean public MessageSource messageSource() { final ReloadableResourceBundleMessageSource ret = new ReloadableResourceBundleMessageSource(); ret.setBasename(“classpath:lang”); ret.setDefaultEncoding(“UTF-8”); return […]

Swing国际化 – 如何在运行时更新语言

我跟随Googles howto获取其Window Builder Pro扩展程序以使我的应用程序国际化。 将在标签中显示的字符串现在存储在由“Externalize Strings”向导创建的属性文件中(我使用了经典的eclipse消息文件)。 在我的initialize方法中,我的所有标签都被初始化,它们的文本设置如下: JLabel lblLanguage = new JLabel(Messages.getString(“App.lblLanguage.text”)); //$NON-NLS-1$ 我在我的App类中创建了一个包含GUI的枚举类型: private enum Lang { German(Locale.GERMAN), English(Locale.ENGLISH); private Locale loc; Lang (Locale l) { loc = l; } Locale getLocale() { return loc; } } 该语言将使用combobox设置,该combobox使用枚举类型Lang来显示可用的语言: JComboBox cboLanguage = new JComboBox(); cboLanguage.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JComboBox cb = […]

在Wicket中使用参数化UI消息的简单方法?

Wicket拥有灵活的国际化系统 ,支持以多种方式对UI消息进行参数化。 例如在StringResourceModel javadocs中有例如: WeatherStation ws = new WeatherStation(); add(new Label(“weatherMessage”, new StringResourceModel( “weather.${currentStatus}”, this, new Model(ws))); 但我想要一些非常简单的东西,并且找不到一个很好的例子。 在.properties文件中考虑这种UI消息: msg=Value is {0} 具体来说,我不想为此目的创建一个模型对象(使用要替换的值的getter;如上例中的WeatherStation)。 如果我已经拥有局部变量中的值,那就太过分了,否则就不需要这样的对象了。 这是用正确的值替换{0}的一种愚蠢的“powershell”方式: String value = … // contains the dynamic value to use add(new Label(“message”, getString(“msg”).replaceAll(“\\{0\\}”, value))); 是否有一种干净的,更多的Wicket-y方式来做到这一点 (这不比上面的长得多) ?

国际化Java Swing桌面应用程序的最佳实践是什么?

我确信有很多方法,但建议的方法是什么,对代码的影响最小? 显而易见的是,您创建了属性文件,但是如何在渲染中交换值? 在J2EE中,您只需重新渲染整个页面,这样就很容易了。 但是在Swing应用程序中,您只是在paintComponent(Graphics g)方法中添加.getProperty()的代码吗? 如果是这样的话,它看起来不是很重,因为现在你不得不在你不需要之前的所有地方覆盖这个方法…… 附加:如何设置通知系统以重新渲染所有当前可见的组件而不强制某种注册模式? 我想如果我覆盖paintComponent(Graphics g),我所要做的就是触发一个事件已经改变了,并且将调用paintComponent(Graphics g)方法……

依赖于默认编码,我应该使用什么以及为什么?

FindBugs报告错误: 依赖于默认编码找到对将执行字节到String(或String to byte)转换的方法的调用,并假设默认平台编码是合适的。 这将导致应用程序行为在平台之间变化。 使用备用API并显式指定charset名称或Charset对象。 我像这样使用FileReader(只是一段代码): public ArrayList getValuesFromFile(File file){ String line; StringTokenizer token; ArrayList list = null; BufferedReader br = null; try { br = new BufferedReader(new FileReader(file)); list = new ArrayList(); while ((line = br.readLine())!=null){ token = new StringTokenizer(line); token.nextToken(); list.add(token.nextToken()); … 要纠正我需要改变的错误 br = new BufferedReader(new FileReader(file)); 至 br = new […]