gpt4 book ai didi

java - Java 中图像的无文件资源包?

转载 作者:太空宇宙 更新时间:2023-11-04 07:19:51 26 4
gpt4 key购买 nike

我有一个需要本地化的 Java (JSF) Web 应用程序,包括文本、图像等(数字、日期)。我试图让程序员只使用

<h:graphicImage value="#{images['i_print.png']}" ... />

...并根据用户的区域设置在后台自动选取正确的本地化图像。

一种方法是让资源包属性文件具有特定图像 key 的不同图像路径。有没有一种方法可以在没有属性文件的情况下完成此操作?

我的意思是..图像目录具有以下结构:

-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 结构,这意味着如果我在两个不同的区域设置中拥有 key ,我的 map 显然不起作用(两个以上路径映射到同一个 key )。

您对如何实现这一目标有什么想法吗?我不想维护属性文件。

TL;DR:我想实现一种机制,可以根据用户的区域设置从文件系统获取图像,而不使用属性文件。

任何想法都将受到高度赞赏。谢谢!

最佳答案

JSF 有一个内置机制来执行此操作:资源。

通过将资源放置在 .war 中名为/resources/locale/library 的目录中来本地化资源。所以你的 .war 可能包含这些文件:

  • /resources/images/i_print.png
  • /resources/en_UK/images/i_print.png
  • /resources/de/images/i_print.png
  • /resources/ja/images/i_print.png

...等等。

对于图像,可以通过 <h:graphicImage library="images" name="i_print.png"/> 访问。 。 JSF 将根据 View 根目录的区域设置自动选择资源目录。

样式表可以用相同的方式本地化:<h:outputStylesheet library="css" name="apptheme.css"/> .

对于图像和样式表以外的资源,JSF 提供了一个内置的 EL 解析器来处理标识符 resource就像 map 一样,其键是库+“:”+文件名。因此页面作者可以通过 #{resource['images:i_print.png']} 访问上述资源。 ,尽管我认为使用 library 更清晰和name属性。

关于java - Java 中图像的无文件资源包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19484244/

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