多言語対応は、大変だけど月名ぐらいはすぐやれるよってお話です。
私が公開している Android アプリでは、言語リソースとしては、日本語と英語しか用意できておりませんが、月名を表示する部分では、DateUtils を使用して、なんちゃって多言語対応を行なっています。
以下のスクリーンショットのように月名を表示する部分がユーザーの言語設定に合わせて変化します。左から、日本語、英語、ドイツ語、スペイン語、フランス語、イタリア語の月名(省略形)です。
ソースコード
// 月名の取得
val cal = Calendar.getInstance()
val monthName = Array(12) { month ->
cal.set(2024, month, 1)
DateUtils.formatDateTime(this, cal.timeInMillis,
DateUtils.FORMAT_SHOW_DATE
or DateUtils.FORMAT_NO_MONTH_DAY
or DateUtils.FORMAT_ABBREV_MONTH
or DateUtils.FORMAT_NO_YEAR
)
}
解説
このコードは、Calendar
クラスと DateUtils
クラスを使用して、省略された月名を取得するための処理を行っています。
各月(1月から12月)の省略された月名を生成し、monthName
配列に格納します。たとえば、ユーザーの言語設定が英語の場合は、monthName[0]
は "Jan" となり、monthName[1]
は "Feb" になります。
以下、具体的に何をしているかを説明します。
1. カレンダーのインスタンスを取得
val cal = Calendar.getInstance()
Calendar.getInstance()
を使って、現在の日付と時間を持つカレンダーのインスタンスを作成します。
2. 月名の配列を生成
val monthName = Array(12) { month ->
// 中略
}
Array(12)
を使って12個の要素を持つ配列を作成します。この配列は month
というインデックスを使って、0 から 11 まで、ループします。
3. 各月のカレンダーを設定
cal.set(2024, month, 1)
cal.set(2024, month, 1)
は、カレンダーの年月日を2024年の指定した月の1日に設定します。month
は0から11の値を持ち、それぞれ1月から12月に対応します。
4. 月名のフォーマット
DateUtils.formatDateTime(this, cal.timeInMillis,
DateUtils.FORMAT_SHOW_DATE
or DateUtils.FORMAT_NO_MONTH_DAY
or DateUtils.FORMAT_ABBREV_MONTH
or DateUtils.FORMAT_NO_YEAR
)
DateUtils.formatDateTime()
を使用して、cal.timeInMillis
(ミリ秒で表された時間)を省略された月名にフォーマットします。このメソッドにはいくつかのフラグが指定されています。省略形ではなく、通常の月名を取得したい場合は、FORMAT_ABBREV_MONTH
を削除してください。
-
FORMAT_SHOW_DATE
: 日付を表示 -
FORMAT_NO_MONTH_DAY
: 日を非表示 -
FORMAT_ABBREV_MONTH
: 月名を省略形で表示(例: "Jan", "Feb") -
FORMAT_NO_YEAR
: 年を非表示
this
は Context
を指し、Activity
や Fragment
内で実行されていると仮定しています。
さいごに
月名だけ、多言語対応してもなぁとは思いますが、やらないよりはいいかなってかんじで実装しています。
スクリーンショットのアプリは、これなので動作を見たい方は、使ってやってください。
参考URL