the*_*yuv 13 java currency internationalization
是否有任何理由为什么某些显示名称以英语显示,尽管语言环境不是英语(即:未翻译).
例如:区域设置:"ru"未翻译
Locale locale = new Locale("ru");
Currency curr = Currency.getInstance("USD");
System.out.println(curr.getDisplayName(locale));
// US Dollar
Run Code Online (Sandbox Code Playgroud)
区域设置:"es"已翻译
Locale locale = new Locale("es");
Currency curr = Currency.getInstance("USD");
System.out.println(curr.getDisplayName(locale));
// dólar estadounidense
Run Code Online (Sandbox Code Playgroud)
这是故意的吗?或者Java没有得到翻译它?或者我做错了什么?
我试图找到存储这些翻译但无法找到它们的文件.如果有人能指出我那个有用的资源.
谢谢.
Dua*_*ses 13
Java使用可扩展机制来提供本地化的数据(如字符串,格式化程序等).
类可以实现
LocaleServiceProvider为本地敏感数据的工厂.在很多类java.util和java.text依赖这些供应商使用不同的正常工作Locale被委托对象,它们的创建.
您可以在java.util.spi包中找到本地服务提供商的示例,这些示例通常用于以依赖于区域设置的方式显示文本或数字.它包括CurrencyNameProviderCurrency调用时使用的内容Currency#getDisplayName.
希望使用特定LocaleServiceProvider(例如CurrencyNamePovider)用法LocaleServiceProviderPool查找支持特定Locale的提供程序实例的类.
LocaleServiceProviderPool首先尝试使用JRE中包含的默认实现.如果找不到,它依赖于Java中的简单服务提供者接口(SPI)机制,并使用1来尝试查找第三方库提供的实现.ServiceLoader
这些方法首先检查Java运行时环境是否支持所请求的语言环境; 如果是这样,他们会使用这种支持.否则,这些方法会调用已安装提供程序的getAvailableLocales()方法以获取相应的接口,以查找支持所请求区域设置的提供程序.
可以在包中找到JRE附带的提供程序的默认实现sun.util.locale.provider.它很复杂,但它基本上从jar中获取数据localedata.jar.在Oracle JDK中,它位于java_home/jre/lib/ext/localedata.jar.如果你列出在这个罐子,并检查文件中的文件sun.util.resources.es和sun.util.resources.ru,你会看到有比俄罗斯西班牙语定义更多的货币名称.
区域设置按层次结构组织.例如,某个国家/地区的特定区域可以有一个区域设置,该区域设置反映了该国家/地区的一些本地差异.如果找不到Locale的数据,LocaleServiceProviderPool将尝试使用Locale的父级.
Locales树的根基本上是一个"后备"虚构的Locale,它为所有本地化数据提供默认值.
这就是当您要求显示俄语显示名称时可能发生的情况.
任何程序都可以提供其他语言环境信息.他们需要通过创建元数据文件来定义服务提供者1并实现一个CurrencyNameProvider.您可以在自己的jar中填写缺少的本地化数据.
或者Java没有得到翻译它?
情况就是如此.
或者我做错了什么?
不,您可以依靠默认值或自己提供本地化数据.
1该ServiceLoader会通过要求类加载器加载资源找到他们META-INF/services/java.text.spi.DateFormatProvider.如果找到这样的文件,它应该具有该实现的特定类名.然后它尝试通过类加载器创建它的实例.
| 归档时间: |
|
| 查看次数: |
602 次 |
| 最近记录: |