Androidアプリ開発

デフォルト言語以外のリソースを
ハンドリングする

この記事は約11分で読めます。
記事内に広告が含まれています。
スポンサーリンク

この記事はAndroidスマホ用のアプリ開発の中で、
今後の開発で再使用性が高いと思われるコーディングをまとめたものです。
Javaでの開発経験、XML構文規則、Androidのアプリ開発経験がある方を対象としています。
Androidのアプリ開発でお役にたててれば、嬉しいです。
(これからAndroidのアプリ開発やJavaでの開発を始めたい方への案内は、記事の最後で紹介します)

この記事のテーマ


デフォルト言語以外の言語リソースをハンドリングする

材質や厚みによって、熱の入り方が変わります。
このフライパンを使うと、
熱の入り方が違うことが、調理した料理の味で実感できます。
油慣らしと調理前の油返しが必要ですが、
育てる鉄フライパンは一生モノです♪

ポイント

Andoridアプリの開発で多言語対応する場合、言語毎にリソースファイルを作成します。
デフォルト言語以外の言語リソースにアクセスするためには、アクセスしたい言語でコンテキストを生成し、生成したコンテキストからリソースファイルにアクセスすることで、デフォルト言語以外のリソースをハンドリングすることが可能になります。

デフォルト言語を英語にしたGPSログ走行記録アプリ(Archive)の画面です。

走行データの一覧に英語表記(Date、Speed、Record)と日本語表記(日付、最高速、記録)が混在しています。
一覧の表示で区切り文字(デリミタ)を使用して、文字列を分解していますが、デフォルト言語が日本語の場合に、文字列に英語表記があると分解が上手く機能しません。

指定した言語でコンテキストを生成する

アクセスしたい言語でコンテキストを生成します。

    :
    // 他言語リソース取得 //
    public Context createLocalizedContext(Locale locale) {
        Configuration configuration = new Configuration(getResources().getConfiguration());
        configuration.setLocales(new LocaleList(locale));
        return createConfigurationContext(configuration);
    }
    :

◎言語リソースファイル(en)

  : 
    <string name="delimiter1">Date:</string>
    <string name="delimiter2">Speed:</string>
    :

◎言語リソースファイル(ja

  : 
    <string name="delimiter1">日付:</string>
    <string name="delimiter2">最高速:</string>
    :

アプリケーション自体のデフォルト言語を英語(en)にして、日本語(ja)の言語リソースファイルを追加しています。これはスマホ本体のデフォルト言語が日本語の場合は、言語リソースを日本語を選択させ、日本語以外の場合に英語を選択させるためです。

デフォルト言語以外のリソースをハンドリング

デフォルト言語のデリミタを使用して文字列を分解します。
分解できない場合に別の言語リソースのデリミタを使用して、文字列を分解します。

        :
            @Override
            public void onBindView(View view, Object data, int position) {
                TextView textView = view.findViewById(R.id.text_item);
                String[] string = {"", "", ""};
                string[0] = motionList.get(position).getTitle().substring(0, Math.max(motionList.get(position).getTitle().indexOf(getString(R.string.delimiter1)), 0));
                if (string[0].length() > 0) {
                    string[1] = motionList.get(position).getTitle().substring(Math.max(motionList.get(position).getTitle().indexOf(getString(R.string.delimiter1)), 0),
                            Math.max(motionList.get(position).getTitle().indexOf(getString(R.string.delimiter2)), 0));
                    string[2] = motionList.get(position).getTitle().substring(Math.max(motionList.get(position).getTitle().indexOf(getString(R.string.delimiter2)), 0));
                } else {
                    Context locale = createLocalizedContext(Locale.forLanguageTag(Locale.getDefault().getLanguage().equals("ja") ? "en" : "ja"));
                    string[0] = motionList.get(position).getTitle().substring(0, Math.max(motionList.get(position).getTitle().indexOf(local.getString(R.string.delimiter1)), 0));
                    string[1] = motionList.get(position).getTitle().substring(Math.max(motionList.get(position).getTitle().indexOf(local.getString(R.string.delimiter1)), 0),
                            Math.max(motionList.get(position).getTitle().indexOf(local.getString(R.string.delimiter2)), 0));
                    string[2] = motionList.get(position).getTitle().substring(Math.max(motionList.get(position).getTitle().indexOf(local.getString(R.string.delimiter2)), 0));
                }
                textView.setText(HtmlCompat.fromHtml(String.format("<b><u><big>%s</big></u></b><br>%s<br>%s", string[0], string[1], string[2]), FROM_HTML_MODE_COMPACT));
            }
        :

デフォルト言語以外の言語リソースをハンドリングしているAndroidアプリです。

今回は、ここまでです。

誤字脱字、意味不明でわかりづらい、
もっと詳しく知りたいなどのご意見は、
このページの最後にある
コメントか、
こちら
から、お願いいたします♪

ポチッとして頂けると、
次のコンテンツを作成する励みになります♪

ブログランキング・にほんブログ村へ

これからAndroidのアプリ開発やJavaでの開発を始めたい方へ

アプリケーション開発経験がない方や、アプリケーション開発経験がある方でも、JavaやC#などのオブジェクト指向言語が初めての方は、Androidのアプリ開発ができるようになるには、かなりの時間がかかります。
オンラインスクールでの習得を、強くおススメします。

未経験者からプログラマーを目指すのに最適です。まずは無料カウンセリングから♪

カリキュラムとサポートがしっかりしています。お得なキャンペーンとかいろいろやっています♪

ゲーム系に強いスクール、UnityやUnrealEngineを習得するのに最適です。まずは無料オンライン相談から♪

参考になったら、💛をポッチとしてね♪

スポンサーリンク
msakiをフォローする
スポンサーリンク

コメント欄

タイトルとURLをコピーしました