Search code examples
javajspstruts2internationalizationresourcebundle

Global resource bundle in Struts2 - Granularity best practices ?


I have three pages with three different tab titles.

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

Which is better to do, implementation and best practice wise:


Solution #1

Inside 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

Then inside the title tag for each page in 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>

OR


Solution #2

Inside 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

Then inside the title tag for each page in 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>

My co-developer argues so that the Hello, Hi, : are reusable. But it's only static text. It's not changing. Which is better to use implementation, coding standard, performance-wise(LOL)? Thanks!


Solution

  • Here is my experience for a fully i18n application. You should not define different keys for same values as much as you can.

    Consider you want to define a label for user name.

    You can do is as

    lable.username=User Name
    

    OR

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

    The first approach is much better as you do less in resource bundle. UserName is only User Name in whole application, if you want to change it is quite logical that one change should be enough.

    Please consider that huge resource bundle,is harder to maintain and needs more memory. Resource bundle will become huge in no time :)

    I also recommend not to build sentences by adding keys:

    For example

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

    Make it as:

    form.message= Please add your user name
    

    It make your jsp or action very complicated, and you will not gain a lot.

    So I generally agree with you, but your college approach should be consider for reusable values!