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

Global resource bundle in Struts2 - Granularity best practices ?

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

Page 1 tab title name: Page One : Hello : Hi

Page 2 tab title name: Page Two : Hello : Hi

Page 3 tab title name: Page Three : Hello : Hi

实施和最佳实践哪个更好:


解决方案 #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

中每个页面的标题标签内

Page 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>

Page 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> 

Page 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>


解决方案 #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中每个页面的标题标签内:

Page 1:

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

Page 2:

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

Page 3:

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

我的 co-developer 认为 HelloHi: 是可重用的。但它只是静态文本。它没有改变。哪个更好用实现,编码标准,performance-wise(笑)?谢谢!

这是我对完全国际化应用程序的体验。 尽可能不要为相同的值定义不同的键

假设您想为 user name 定义一个标签。

你可以这样做

lable.username=User Name

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或者动作变得很复杂,你不会有太大的收获。

所以我大体上同意你的看法,但你的大学方法应该考虑可重用的价值!

一些想法太长,无法放入评论中:

I18N 冒号没有任何意义:它会改变吗?不太可能。如果它 可能 ,请考虑使用自定义 tag/etc。结束 view-level 静态文本。

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

page.number.one 似乎不必要地冗长,而不是 page.one 或只是 page1。或者不是直接将其与选项卡挂钩,因为您可能希望 re-use 实际页面标题或标题,只需 page1.title.

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

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