我无法重新加载我的资源束类,以反映页面上更改的翻译(使我的最终用户)。尽管getContent方法执行,并且所有翻译作为键/值从数据库和object [] []获取的键/值成功地从getContent方法返回。每次我清除缓存并通过ActionListener刷新JSF页面。
都会发生这种情况。ResourceBundle.clearCache();
我也尝试使用以下并获得相同的结果。
ResourceBundle.clearCache(Thread.currentThread().GetContextClassLoader());
为什么WLS总是看到旧的?我想念什么吗?
版本:12.2.1.1.0和12.2.1.3.0
最终用户 - 进行翻译并促进项目国际化后,将翻译保存到数据库中,输入这些操作的过程是通过以下步骤完成的:
-
创建一个hashmap并在地图中加载所有资源密钥/谷物对从数据库中:
while (rs.next()) { bundle.put(rs.getString(1), rs.getString(2)); }
-
刷新您的应用程序的捆绑包
SoftCache cache = (SoftCache)getFieldFromClass(ResourceBundle.class, "cacheList"); synchronized (cache) { ArrayList myBundles = new ArrayList(); Iterator keyIter = cache.keySet().iterator(); while (keyIter.hasNext()) { Object key = keyIter.next(); String name = (String)getFieldFromObject(key, "searchName"); if (name.startsWith(bundleName)) { myBundles.add(key); sLog.info("Resourcebundle " + name + " will be refreshed."); } } cache.keySet().removeAll(myBundles);
-
从应用程序的
ResourceBoundle
获取A字符串:for (String resourcebundle : bundleNames) { String bundleName = resourcebundle + (bundlePostfix == null ? "" : bundlePostfix); try { bundle = ResourceBundle.getBundle(bundleName, locale, getCurrentLoader(bundleName)); } catch (MissingResourceException e) { // bundle with this name not found; } if (bundle == null) continue; try { message = bundle.getString(key); if (message != null) break; } catch (Exception e) { } }