Struts2中的全局资源包 - 粒度最佳实践?

时间:2016-05-16 03:52:38

标签: java jsp struts2 internationalization resourcebundle

我有三个页面,有三个不同的标题标题。

  

第1页标题标题名称第一页:您好:您好

     

第2页标题标题名称:第二页:您好:您好

     

第3页标题标题名称第3页:您好:您好

哪个更好,实施和最佳实践明智:

解决方案#1

在global.properties内部

tab.title.page.number.one   = Page One 
tab.title.page.number.two   = Page Two
tab.title.page.number.three = Page Three
tab.title.colon             = :
tab.title.hello             = Hello 
tab.title.hi                = Hi

然后在jsp

中每个页面的标题标签内
  

第1页:

<title>
    <s:text name="tab.title.page.number.one"/>
    <s:text name="tab.title.colon"/>
    <s:text name="tab.title.hello"/>
    <s:text name="tab.title.colon"/>
    <s:text name="tab.title.hi"/>
</title>
     

第2页:

<title>
    <s:text name="tab.title.page.number.two"/>
    <s:text name="tab.title.colon"/>
    <s:text name="tab.title.hello"/>
    <s:text name="tab.title.colon"/>
    <s:text name="tab.title.hi"/>
</title> 
     

第3页:

<title>
    <s:text name="tab.title.page.number.three"/>
    <s:text name="tab.title.colon"/>
    <s:text name="tab.title.hello"/>
    <s:text name="tab.title.colon"/>
    <s:text name="tab.title.hi"/>
</title>

OR

解决方案#2

在global.properties内部

tab.title.page.one   = Page One : Hello : Hi  
tab.title.page.two   = Page Two : Hello : Hi
tab.title.page.three = Page Three : Hello : Hi

然后在jsp中每个页面的标题标签内:

  

第1页:

<title><s:text name="tab.title.page.one"/></title>
     

第2页:

<title><s:text name="tab.title.page.two"/></title>
     

第3页:

<title><s:text name="tab.title.page.three"/></title>

我的合作开发者辩称,HelloHi:可以重复使用。但它只是静态文本。它没有变化。哪个更好用于实现,编码标准,性能方面(LOL)?谢谢!

2 个答案:

答案 0 :(得分:2)

以下是我对完全i18n应用程序的体验。 您不应该尽可能多地为相同的值定义不同的键

考虑您要为user name定义标签。

你可以这样做

lable.username=User Name

OR

lable.inputform.username=User Name
lable.registeration.form.username=User Name
lable.activate.form.username=User Name

第一种方法要好得多,因为你在资源包中做得更少。 UserName在整个应用程序中仅为User Name,如果您想要更改它,那么一个更改就足够了。

请考虑大量资源包,难以维护并需要更多内存。资源包将很快变得巨大:)

我还建议不要通过添加键来构建句子:

例如

  lable.please+ lable.add + lable.your + lable.username 

将其设为:

form.message= Please add your user name

它使你的jsp或动作非常复杂,你不会获得很多。

所以我普遍同意你的观点,但是你的大学方法应该考虑可重复使用的价值!

答案 1 :(得分:2)

几个想法太长,不适合评论:

I18N冒号没有任何意义:它会改变吗?不太可能。如果可能,请考虑使用自定义标记/等。包装视图级静态文本。

在密钥本身中使用非I18N文本有点奇怪,例如,使用.greeting代替.hello

page.number.one似乎不必要地冗长,而是page.onepage1。或者不是直接将其固定到选项卡,因为您可能希望将其重新用于实际页面标题或标题,只需page1.title

Nutshell:我完全可以重用,但IMO属性文件对于您展示的很多内容来说都是错误的。使用自定义标记或实用程序方法来访问需要更改的实际属性。

(我实际上很喜欢在I18N数据库中保留这样的内容而不是属性文件;他们使用简单的前端更容易处理,并且使用适当的缓存同样快。)