[jsword-devel] Externalizing Strings

DM Smith jsword-devel@crosswire.org
Mon, 05 Apr 2004 20:30:06 -0400


This is a multi-part message in MIME format.

------=_NextPart_000_1387_7366_726a
Content-Type: text/plain; format=flowed

I  have attached a patch for evaluation. I don't mean for it to be checked 
in unless there is general agreement that this is an approach we want to 
pursue.

Eclipse has decent support for externalizing strings.

With developer cooperation, it also can help by flagging strings that need 
to be externalized.

The developer cooperation is to add //$NON-NLS-n$ as an end of line comment 
where n stands for the string that does not need to be internationalized. If 
there are more than one string then add more of these comments to the end of 
the line.

For a contrived example:

System.out.println("Hello " + System.getProperty("user.name") + ". Welcome 
to " + appName); //$NON-NLS-2$

Or

System.out.println( "(" + action + ") " + reason + " at this time"); 
//$NON-NLS-1$ //$NON-NLS-2$

When there are strings all through the code it really begins to look ugly, 
but if all non-externalized strings are declared as:
   [public|protected|private] static final XXX="value"; //$NON-NLS-1
It won't look so bad.

Then you can go to Window->Preferences->Java->Compiler->Advanced
and set the "Usage of non-externalized strings" to something other than 
ignore.
Then click on Apply and say yes to recompiling.

I am including a patch for java/swing that marks all of the strings that 
don't need to be internationalized. You will find that there are about 200 
strings that need to be externalized in the GUI.

If you look closely, I marked all strings that a user will not see as 
NON-NLS. Strings that a user will or might see, I left as needing 
externalization.

If we were to use this as a way of managing the strings, then a gatekeeper 
could be the one to validate that all strings are externalized.

_________________________________________________________________
Limited-time offer: Fast, reliable MSN 9 Dial-up Internet access FREE for 2 
months! 
http://join.msn.com/?page=dept/dialup&pgmarket=en-us&ST=1/go/onm00200361ave/direct/01/

------=_NextPart_000_1387_7366_726a
Content-Type: application/x-zip-compressed; name="patchstrings.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="patchstrings.zip"

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
lm7GE0t79h3hNzO82x3bZo0GzzMB/M/yPOsFjNLgrQWbHXa9Ly1fZM/iBrAC
68ICdeNyRXYBb0ew55r9Cf0eY0xqqM8TP0/5zyPSgZIA9vU6SeLVbCWGi2l0
GTDllz1Fe8YhKnTJeyGdELLgS03J2KQfCLIc8Q/SJP4JNlzxA30T5bn+iOa4
2WJ2L42wgMAdmVdJ9i7BINw2DKzfGrQ7hOFuQOqO9pDKzw+oO12tySI7qcmg
jueEfsJqvNf8CGl2dN/DTfSHOSYl0yeXogKHNrlUWAkv5Q2n1pLsx4xa25+m
ykROa7Y0Sbd4k3+dMfdJRgNZFfLSJdke3MeJqLZkGkvW9Is79rkS86PlSQuv
bU0biXDa0bw175O6pvutvgJlDOMibKTCSEyTcXX7Cazx/8m4jHc9VCz3mrEo
zdE8Wim667QUVApAkdDKmjzcey45zVWPXMf16mOHfBMRzwrm0Ups6dmsI7Gd
YeGxVwIJr7uRHVoPZqvH8ef5/cwh/wJFcCk4lkQRfEMjS9wWbyhnWNM0a60O
CGB9ToKgyLsXVHKE8Y0duyoukIkfwSPc9SX/YLggwv58xbRgvywtLmWhGaNO
TAiWQFo1g0/LcAtGpV2prtwOSsT0pLMHvYHMXnSIoMTnfl9wsuWXBqZ2YM0d
n6X6kmslTSmatIt/y28zxRd+zfxX4VapIi3hCSp2a0YXhCx1FOLJ/lzTqk/D
FADV2mZJOzLIIsK2Mruy8nYEzGuJ3GonqtTdikjdICHtHfTVszCKSgrFX7B4
BWkMJpjMhDU7zpw5BGrLy8iYt1cxnpJqsFRPWCkqcL1mN4qdKWJmkj+1lBMz
ZrJOX7hzcnz2yMqBFVpevhgMyfngkzeffrTuZe+DEgjM0n2T/+eBM/eDxtWK
HHP4/bNt9dHJN+pkFO9FUbxnJMy6KKbnG9eOeRA68Oz3B+3uoBPifq847ufs
Nk4M2hFigEfDg5gSVuOcnXSnTWVLklP1Kd4mw1zxdkAYKgY9Mcau+6C/nlak
aSGXbOrrfBA3t4vzIRSZLUNPRzMidS6qbE1ppFFdWBvdCrA7Z4C0eN/cmCAw
CNdBLfegllOUe4XbpunsoEA9nInwF6At3yv1gh8BeEswxyVSA9pw6d3sdal9
NO7tm7h6S+p7wYOzrr2EDF5sIXhGPYm4Z61oIVCpBhE/bKSAiCywtB/L0+rA
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
LnR4dFBLBQYAAAAAAQABAD4AAACOKAAAAAA=


------=_NextPart_000_1387_7366_726a--