
| Key: |
STR-2923
|
| Type: |
Bug
|
| Status: |
Closed
|
| Resolution: |
Duplicate
|
| Priority: |
Minor
|
| Assignee: |
Unassigned
|
| Reporter: |
Antti Tirkkonen
|
| Votes: |
0
|
| Watchers: |
0
|
|
If you were logged in you would be able to see more operations.
|
|
|
|
Environment:
|
default locale on windows platform is fi_FI
|
|
Issue Links:
|
Duplicate
|
|
This issue duplicates:
|
|
STR-2925
Seemingly random message resources in another language
|
|
|
|
|
|
Required
|
|
|
|
|
|
|
if you have following messagebundles:
bundle_fi.properties
bundle.properties
And want to any other locale except fi to use bundle.properties. It is not possible without setting JVM default locale something else than fi locale. Problem with this approach is that you possible end up effecting behaviour of other software running on the same JVM.
To solve this problem PropertyMessageResources.getMessage implementation
could be changed to do locale loading in different order.
current order is: asked locale, asked locale minus underscore, JVM default locale, no locale
proposed order: asked locale, asked locale minus underscore, no locale, JVM default locale
Current code:
public String getMessage(Locale locale, String key) {
if (log.isDebugEnabled()) {
log.debug("getMessage(" + locale + "," + key + ")");
}
String localeKey = localeKey(locale);
String originalKey = messageKey(localeKey, key);
String messageKey = null;
String message = null;
int underscore = 0;
boolean addIt = false;
while (true) {
loadLocale(localeKey);
messageKey = messageKey(localeKey, key);
synchronized (messages) {
message = (String)messages.get(messageKey);
if (message != null) {
if (addIt) {
messages.put(originalKey, message);
}
return (message);
}
}
addIt = true;
underscore = localeKey.lastIndexOf("_");
if (underscore < 0) {
break;
}
localeKey = localeKey.substring(0, underscore);
}
if (!defaultLocale.equals(locale)) {
localeKey = localeKey(defaultLocale);
messageKey = messageKey(localeKey, key);
loadLocale(localeKey);
synchronized (messages) {
message = (String)messages.get(messageKey);
if (message != null) {
messages.put(originalKey, message);
return (message);
}
}
}
localeKey = "";
messageKey = messageKey(localeKey, key);
loadLocale(localeKey);
synchronized (messages) {
message = (String)messages.get(messageKey);
if (message != null) {
messages.put(originalKey, message);
return (message);
}
}
if (returnNull) {
return (null);
} else {
return ("???" + messageKey(locale, key) + "???");
}
}
proposed code:
public String getMessage(Locale locale, String key) {
if (log.isDebugEnabled()) {
log.debug("getMessage(" + locale + "," + key + ")");
}
String localeKey = localeKey(locale);
String originalKey = messageKey(localeKey, key);
String messageKey = null;
String message = null;
int underscore = 0;
boolean addIt = false;
while (true) {
loadLocale(localeKey);
messageKey = messageKey(localeKey, key);
synchronized (messages) {
message = (String)messages.get(messageKey);
if (message != null) {
if (addIt) {
messages.put(originalKey, message);
}
return (message);
}
}
addIt = true;
underscore = localeKey.lastIndexOf("_");
if (underscore < 0) {
break;
}
localeKey = localeKey.substring(0, underscore);
}
localeKey = "";
messageKey = messageKey(localeKey, key);
loadLocale(localeKey);
synchronized (messages) {
message = (String)messages.get(messageKey);
if (message != null) {
messages.put(originalKey, message);
return (message);
}
}
if (!defaultLocale.equals(locale)) {
localeKey = localeKey(defaultLocale);
messageKey = messageKey(localeKey, key);
loadLocale(localeKey);
synchronized (messages) {
message = (String)messages.get(messageKey);
if (message != null) {
messages.put(originalKey, message);
return (message);
}
}
}
if (returnNull) {
return (null);
} else {
return ("???" + messageKey(locale, key) + "???");
}
}
|
|
Description
|
if you have following messagebundles:
bundle_fi.properties
bundle.properties
And want to any other locale except fi to use bundle.properties. It is not possible without setting JVM default locale something else than fi locale. Problem with this approach is that you possible end up effecting behaviour of other software running on the same JVM.
To solve this problem PropertyMessageResources.getMessage implementation
could be changed to do locale loading in different order.
current order is: asked locale, asked locale minus underscore, JVM default locale, no locale
proposed order: asked locale, asked locale minus underscore, no locale, JVM default locale
Current code:
public String getMessage(Locale locale, String key) {
if (log.isDebugEnabled()) {
log.debug("getMessage(" + locale + "," + key + ")");
}
String localeKey = localeKey(locale);
String originalKey = messageKey(localeKey, key);
String messageKey = null;
String message = null;
int underscore = 0;
boolean addIt = false;
while (true) {
loadLocale(localeKey);
messageKey = messageKey(localeKey, key);
synchronized (messages) {
message = (String)messages.get(messageKey);
if (message != null) {
if (addIt) {
messages.put(originalKey, message);
}
return (message);
}
}
addIt = true;
underscore = localeKey.lastIndexOf("_");
if (underscore < 0) {
break;
}
localeKey = localeKey.substring(0, underscore);
}
if (!defaultLocale.equals(locale)) {
localeKey = localeKey(defaultLocale);
messageKey = messageKey(localeKey, key);
loadLocale(localeKey);
synchronized (messages) {
message = (String)messages.get(messageKey);
if (message != null) {
messages.put(originalKey, message);
return (message);
}
}
}
localeKey = "";
messageKey = messageKey(localeKey, key);
loadLocale(localeKey);
synchronized (messages) {
message = (String)messages.get(messageKey);
if (message != null) {
messages.put(originalKey, message);
return (message);
}
}
if (returnNull) {
return (null);
} else {
return ("???" + messageKey(locale, key) + "???");
}
}
proposed code:
public String getMessage(Locale locale, String key) {
if (log.isDebugEnabled()) {
log.debug("getMessage(" + locale + "," + key + ")");
}
String localeKey = localeKey(locale);
String originalKey = messageKey(localeKey, key);
String messageKey = null;
String message = null;
int underscore = 0;
boolean addIt = false;
while (true) {
loadLocale(localeKey);
messageKey = messageKey(localeKey, key);
synchronized (messages) {
message = (String)messages.get(messageKey);
if (message != null) {
if (addIt) {
messages.put(originalKey, message);
}
return (message);
}
}
addIt = true;
underscore = localeKey.lastIndexOf("_");
if (underscore < 0) {
break;
}
localeKey = localeKey.substring(0, underscore);
}
localeKey = "";
messageKey = messageKey(localeKey, key);
loadLocale(localeKey);
synchronized (messages) {
message = (String)messages.get(messageKey);
if (message != null) {
messages.put(originalKey, message);
return (message);
}
}
if (!defaultLocale.equals(locale)) {
localeKey = localeKey(defaultLocale);
messageKey = messageKey(localeKey, key);
loadLocale(localeKey);
synchronized (messages) {
message = (String)messages.get(messageKey);
if (message != null) {
messages.put(originalKey, message);
return (message);
}
}
}
if (returnNull) {
return (null);
} else {
return ("???" + messageKey(locale, key) + "???");
}
}
|
Show » |
made changes - 26/Nov/06 05:48 AM
| Field |
Original Value |
New Value |
|
Link
|
|
This issue requires STR-2897
[ STR-2897
]
|
made changes - 26/Nov/06 05:58 AM
|
Affects Version/s
|
|
1.2.9
[ 21687
]
|
|
Affects Version/s
|
|
1.3.5
[ 21721
]
|
|
Fix Version/s
|
|
1.3.6
[ 21731
]
|
|
Component/s
|
|
Core
[ 21233
]
|
made changes - 27/Nov/06 07:49 PM
|
Fix Version/s
|
|
1.3.7
[ 21771
]
|
|
Fix Version/s
|
1.3.6
[ 21731
]
|
|
made changes - 29/Nov/06 12:31 PM
|
Link
|
|
This issue duplicates STR-2925
[ STR-2925
]
|
made changes - 29/Nov/06 12:32 PM
|
Status
|
Open
[ 1
]
|
Resolved
[ 5
]
|
|
Resolution
|
|
Duplicate
[ 3
]
|
|
Fix Version/s
|
1.3.7
[ 21771
]
|
|
made changes - 04/Jul/07 05:31 AM
|
Status
|
Resolved
[ 5
]
|
Closed
[ 6
]
|
|
STR-2925- PropertyMessageResources can now be configured to operate in one of three modes. SeeSTR-2925for details.