0

私のAndroidアプリケーションでは、関数を実装したいと考えています.システム言語で翻訳を変更できる文字列と、システム言語で翻訳を変更してはならず、代わりにユーザーが望むように変更する必要がある文字列があります。

例:

  can you say "中文", please try to say "你好"

上記の文では、引用符の外側の文字列はシステム言語に合わせて変更する必要がありますが、引用符の内側の文字列はユーザ​​ーの希望または選択に応じて変更する必要があります。

Androidでこの機能を実装するにはどうすればよいですか?


しかし、アプリケーションに DB を追加したくありません。配列でこれを達成するにはどうすればよいですか?翻訳文字列を配列に保存し、文字列を取得してマージするにはどうすればよいですか?

システム言語が英語の場合、保存された配列から中国語の文字列を取得するにはどうすればよいですか?

そして、この目標を達成する別の方法も見つけました。これは、以下のコードのようなものです。

Resources res = getResources();
Configuration config = res.getConfiguration();
DisplayMetrics dm = res.getDisplayMetrics();

/** 
 *update the desired locale, if I want to get chinese string, 
 *change configuration to Chinese locale.
**/
res.getConfiguration().locale = Locale.getDefault(); 
res.updateCXonfiguration(config, dm);
String text = res.getString(R.string.merges_tring)

//when I get the string I want, 
//then restore the configraion locale to previous/current locale.
 ...code...

//below code, to merge the get string
 ...code...

このようにどう思いますか?システム言語に欠陥はありませんか?

4

1 に答える 1

2

言語ごとに別のリソース ファイルにあるような文字列を使用します。システムはシステム言語によって文字列を選択します。

ファイルres/values/strings.xml内

<string name="example">can you say "$1%s", please try to say "$2%s"</string>

ファイルres/values-de/string.xml 内

<string name="example">Können Sie "$1%s" sagen, bitte versuchen Sie "$2%s" zu sagen.</string>

他の部分については次のとおりです。

コードで、ユーザーが選択した言語ごとにパーツを取得します。そのための定義された方法はありません。簡単な方法は、それらを配列またはデータベースに入れることです。ここでは仮説的な方法を使用します。この方法getMyStringでは、ユーザーが選択した言語と、必要な文字列を示すキーを使用します。

String s1 = getMyString(userSelectedLanguage, stringKey1);  // e.g. 中文
String s2 = getMyString(userSelectedLanguage, stringKey2);  // e.g. 你好

ここで、Activity クラスが提供する getString() メソッドを使用して、文字列をマージします。

String msg = getString(R.string.example, s1, s2);

これにより、システム言語に応じて、次のいずれかになります。

can you say "中文", please try to say "你好"または
Können Sie "中文" sagen, bitte versuchen Sie "你好" zu sagen.

于 2012-11-06T07:34:50.490 に答える