我有一个需要本地化的 Java (JSF) Web 应用程序,包括文本、图像等(数字、日期)。我试图让程序员只使用
<h:graphicImage value="#{images['i_print.png']}" ... />
...并根据用户的语言环境在后台自动选择正确的本地化图像。
一种方法是让资源包属性文件具有特定图像键的不同图像路径。有没有一种方法可以在没有属性文件的情况下完成?
我的意思是.. images 目录具有以下结构:
-Images
--en
---en_US
---en_CA
--fr
---fr_FR
是否可以创建资源包,其中查找将首先通过最本地化的目录并沿着树向上直到找到图像名称?
到目前为止,我有以下内容:
(1) 图像处理程序。
<resource-bundle>
<base-name>com.example.ImageResourcesHandler</base-name>
<var>images</var>
</resource-bundle>
(2) 处理程序实现,它扩展了资源包并通过覆盖 getObject 来处理调用
public class ImageResourcesHandler extends ResourceBundle {
@Override
protected Object handleGetObject(String key) {...}
}
(3) 一个扩展 ResourceBundle.Control 的图像控件,应该是 BundleLoading 和控件
public class ImageControl extends ResourceBundle.Control { ... }
现在我浏览图像根目录并创建一个地图,其中图像的名称作为键,它们的路径作为值。
问题是我没有 Bundle 结构,这意味着如果我在两个不同的语言环境中有键,我的地图显然不起作用(两个以上的路径映射到同一个键)。
您对如何完成此任务有任何想法吗?我不想维护属性文件。
TL;DR: 我想实现一种机制,该机制可以根据用户的区域设置从文件系统获取图像,而不使用属性文件。
任何想法都受到高度赞赏。谢谢!