3

私の問題は、すべてのテキストが Web サービスから来ていることです。そのため、最初に Web サービスを呼び出し、strings.xml にテキストを設定する必要があります。私はstrings.xmlに書くことは不可能だと知っていますが、iOSでも同じ問題があり、解決策はここにありますhttp://iosapplove.com/archive/2013/01/localizable-strings-how-to-load-translations- dynamic-and-use-it-inside-your-iphone-app/ .

だから私の質問は次のとおりです:Androidに同様の方法はありますか? (違うと思う)

データベースや sharedPreferences を使用するなどの代替方法がありますが、これらのソリューションはあまり効果的ではありません。さらに、アプリケーションには多くの言語が含まれます。

だから私の2番目の質問:これを行う最良の方法は何ですか?

4

1 に答える 1

0

ご存知のように、strings.xml ファイルは APK には存在しません。これは、 getResources().getString(R.string.mystring) が返すものを変更する方法がないことを意味します。

「お客様からのお願いです」とのこと。私の提案は、お客様に「これは悪い考えです」と伝えることです。本当にそうだから。

顧客がこの問題を解決しない場合、必要な言語でテキストをダウンロードし、アプリの外部ファイル ストレージに保存するしかないと思います。プロパティファイルを使用することをお勧めします。それを InputStream としてロードし、そこから文字列を取得します

アプリがフライト モードの場合、または起動時にネットワークが利用できない場合にどうなるかを考えたことはありますか? デフォルト値を提供しますか?

また、このソリューションでは、システムがプロパティ ファイルでダウンロードした翻訳にアクセスできないため、TextViews または XML で同様のテキストを設定することはできません。

それでもこれを続行する場合は、プロパティ ファイルを他のクラスにラップし、プロパティ ファイルにテキストが存在しない場合、または存在しない場合は、strings.xml にあるテキストにフォールバックすることもお勧めします。何らかの理由でダウンロードされませんでした:

class TextRetriever {

    // the downloaded texts go here
    private Properties properties;

    private Context context;

    public String getString(String key) {
        String s = properties.getProperty(key);
        // not found in properties file
        if(s == null) {
            // fall back to value in strings.xml
            s = context.getResources().getIdentifier(key, "string", context.getPackageName())
        }
        return s;
    }
}
于 2013-05-31T11:37:59.240 に答える