こんにちは、KNSKです。
よろしくお願いします。
今回は Android13の新機能である『アプリごとの言語設定』について
開発者目線で紹介したいと思います。
Android13がリリースされる前は、アプリが使用する言語は端末の設定に依存しており
アプリごとに異なる言語を設定することはできませんでした。
※ OSの機能として提供されていなかっただけで
独自の言語設定機能が実装されているアプリも多く存在します。
Android13でOSの機能として『アプリごとの言語設定』が提供されるようになったため、
この機能に対応したアプリであれば、共通の設定画面(下図)で言語設定が可能になりました。
設定画面の表示方法
設定画面は下記のいずれかの手順で表示できます。
A. 『アプリごとの言語設定』に対応するアプリの一覧を表示し、対象アプリを選択する。
[設定] > [システム] > [言語と入力] > [アプリの言語]
B. 対象アプリのアプリ情報画面で[言語]の項目を選択する。
[設定] > [アプリ] >(アプリを選択)
次に、『アプリごとの言語設定』にアプリを対応させる方法について説明します。
(既に多言語対応されているアプリを前提に説明します。)
1. 言語設定画面が表示されるようにする
① 対応言語ファイルの作成
アプリが対応している言語を記述したファイル app/src/main/res/xml/locales_config.xml を作成します。
<?xml version="1.0" encoding="utf-8"?>
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
<locale android:name="ja" />
<locale android:name="en" />
<locale android:name="fr" />
<locale android:name="it" />
</locale-config>
② 対応言語ファイルの登録
マニフェストファイル app/src/main/AndroidManifest.xml に言語ファイルを指定する行を追加します。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
<application
...
android:localeConfig="@xml/locales_config">
...
</application>
</manifest>
以上の対応で、言語設定画面が表示されるようになります。(簡単!)
なお、上図において「言語の候補」にイタリア語が表示されていませんが
これは使用端末の言語設定画面でイタリア語が追加されていないためです。
2. アプリから言語設定を取得・変更できるようにする
Android13で言語設定を取得・変更するためのAPIが追加されました。
Androidフレームワーク と AndroidXサポートライブラリ の 2種類のAPIがありますが、
AndroidX サポートライブラリは Android12以下の環境でも使用することができるため
こちらを使用する方法を説明します。
① サポートライブラリの導入
app/build.gradle に依存関係を追加します。
...
dependencies {
...
implementation 'androidx.appcompat:appcompat:1.6.0-rc01'
}
② 取得
AppCompatActivity を継承したActivityで使用する必要があります。
また、onCreate() 以降に使用する必要があります。
val appLocales: LocaleListCompat = AppCompatDelegate.getApplicationLocales()
if (appLocales.isEmpty) {
Log.d("AppLanguage", "システムのデフォルト")
} else {
appLocales[0]?.let {
Log.d("AppLanguage", it.language)
}
}
③ 変更
使用条件は取得と同様です。
言語設定を変更すると自動的にActivityが再生成されます。
// システムのデフォルト
AppCompatDelegate.setApplicationLocales(LocaleListCompat.getEmptyLocaleList())
// 日本語
val appLocale: LocaleListCompat = LocaleListCompat.forLanguageTags("ja")
AppCompatDelegate.setApplicationLocales(newAppLocale)
④ Android12以下をサポートする
app/src/main/AndroidManifest.xml に下記の記述を追加します。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
<application
...
<service android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
android:enabled="false"
android:exported="false">
<meta-data
android:name="autoStoreLocales"
android:value="true" />
</service>
...
</application>
</manifest>
言語設定機能を独自に実装した経験があるのですが、
それと比べると今回の『アプリごとの言語設定』はとても簡単に実装できました。
開発者にとって嬉しい新機能でした。
なお、IOSでは同様の機能がiOS13で追加されているようです。
今後もOSの新機能について掲載していきたいと思います。
関連記事
-
第1回 ラズパイを使用したBLE通信 ~ ディスプレイ、キーボード、マウスを接続しないで設定 前編 ~
こんにちは、GTです。よろしくお願いします。 最近業務でラズパイのBluetooth機能を使...
公開日:2021.12.24 更新日:2021.12.24
tag : Bluetooth Raspberry Pi
-
-
-
第1回 Visual C++で作成したDLL内のクラスをC#で利用する方法
こんにちは、ILCです。 Visual C++ (以下 VC++)で作成されたDynamic...
公開日:2024.01.19 更新日:2024.01.19
tag : Windows
-
こんにちは、TMIHです。 今回から組み込み系のソフトウェア設計標準規格である、MISRA-...
公開日:2022.02.25 更新日:2022.02.25
-
第3回 ラズパイを使用したBLE通信 ~ A/D変換・D/A変換を用いた入出力編 ~
こんにちは、GTです。よろしくお願いします。 第3回の今回は、ラズパイの入出力についてご紹介...
公開日:2023.02.24 更新日:2023.02.24
tag : Bluetooth BLE Raspberry Pi