Most of the java applications, IDEs, application servers including Glassfish fail to run on Turkish locale machines.
There is a very simple reason for that. Turkish language has a unique characteristic. Unlike other languages:
uppercase> Ä° (not I)
lowercase> Ä± (not i)
as you can see, there are 4 possibilities in Turkish: Ä± (small letter i without a dot) - I - i - Ä° (capital letter I with a
So when there is a character conversion in application code (strings that are invisible to user), applications fail. For
example id becomes Ä°D, interceptor becomes Ä°NTERCEPTOR and exceptions occur. This is happening because
toLowerCase and toUpperCase methods doesn't enforce a locale argument and most developers (who are unaware
of this issue and expect that uppercase of i same everywhere on the world) don't use these methods with locale
arguments. If you want a java programme to run on Turkish locale computers, you must use these two methods
with English locale (since java code is always English, this is not a problem) for user invisible strings.
Language Code of Locale – Lower Case – Upper Case – Description
tr (Turkish) – \u0069 – \u0130 – small letter i -> capital letter I with dot above
tr (Turkish) – \u0131 – \u0049 – small letter dotless i -> capital letter I
Issue https://glassfish.dev.java.net/issues/show_bug.cgi?id=3851 is related to this.