Android のローカライズをテストしたところ、任意のリージョンを使用でき、それが機能することがわかりました。
values-sr-rZZ
ZZ は存在しなかった架空の地域のような名前のフォルダーをプロジェクトに追加します。
次に、次のコードを Application クラスに追加します。ここから取得し、わずかに変更しました。
public class MainApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Resources res = this.getResources();
Configuration conf = res.getConfiguration();
boolean isLatinAlphabet = PreferenceManager.getDefaultSharedPreferences(this)... // get a value from the application settings
if(conf.locale.getLanguage().equals("sr") && isLatinAlphabet) {
conf.locale = new Locale("sr", "ZZ");
res.updateConfiguration(conf, res.getDisplayMetrics());
}
}
}
このコードでは、ユーザーがセルビア語をデフォルトとして選択し( ) conf.locale.getLanguage().equals("sr")
、アプリの設定でいくつかのチェックボックスをオンにした場合 ( ) にのみ、ロケールが変更されますisLatinAlphabet
。
別の条件を使用して、必要に応じて変更できます。
また、言語を動的に変更するこのような方法では、古いデバイスのメニュー項目にバグが発生する可能性がありますが、新しいデバイスでは再現されません。