マイナー・マイナー

隠れた名作の発掘が生きがい。

I18Nを考慮したtoLowerCase


スポンサードリンク

I18Nとは国際化(Internationalization)の略で、多様な言語や地域に適合できるようにソフトウェアを開発することです。I18Nは個人的に注目しているキーワードで、この設計思考が今後重要になってくると予感しています。ここでは、このI18Nの具体例としてtoLowerCaseとtoUpperCaseを取り上げてみます。


Localeクラスを利用するメソッドに、 StringクラスのtoLowerCaseとtoUpperCaseがあります。toLowerCase、toUpperCaseはそれぞれすべての文字を小文字、大文字に変換するメソッドです。これらのメソッドの引数にロケールを指定しない場合、これらはデフォルトロケールの規則を使用します。I18Nの観点からすると、この場合の使い方は、言語間で差異を生み出すため推奨していないようです。


例えば、トルコ語では、"I"の小文字は点の無い"i"です。"i"の大文字は上に点の付いた"I"です。そのため、toLowerCaseとtoUpperCaseの引数にトルコ語ロケールを指定しない状態でそれらをトルコ語の環境で実行した場合、I"と"i"がそれぞれトルコ語の小文字と大文字にならない可能性があります。トルコ語の環境で"I"、"i"をそれぞれトルコ語の小文字、大文字に変換したい場合はトルコ語ロケールを指定する必要があります。


プログラム

package i18n;

import java.util.Locale;

public class UsageOfToXxxerCase {
      
         public static void main(String[] args) {
                 String string = "It is";
                 Locale turkLocale = new Locale("tr", "tr");

                 System.out.println("Default locale" + Locale.getDefault());
                 System.out.println("");

                 System.out.println("toLowerCase");
                 System.out.println(string.toLowerCase()); // 非推奨
                 System.out.println(string.toLowerCase(turkLocale)); // 推奨
                 System.out.println("");

                 System.out.println("toUpperCase");
                 System.out.println(string.toUpperCase()); // 非推奨
                 System.out.println(string.toUpperCase(turkLocale)); // 推奨
         }
}

実行結果

Default localeja_JP


toLowerCase
it is
ıt is


toUpperCase
IT IS
IT İS




また、国際化を意識したとき、staticメソッドのCharacter.toLowerCase(char)とCharacter.toUpperCase(char)は国際化環境で動作しない場合があるため、使わないことを推奨しています。これらを使う場合はStringクラスのtoLowerCase、toUpperCaseを代替して使うようにします。