0

在我的 android 应用程序中,我想实现一个函数 - 它具有可以使用系统语言更改翻译的字符串,以及不应使用系统语言更改翻译而应根据用户需要更改的字符串。

例子:

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

在上面的句子中,引号外的字符串应该随系统语言而变化,但引号内的字符串应该根据用户的需要或选择而变化。

我如何在android中实现这个功能?


但我不想在我的应用程序中添加数据库。如何使用数组实现这一点,如何将翻译字符串保存在数组中,以及获取和合并字符串?

如果系统语言是英文,如何从保存的数组中获取中文字符串?

而且我还发现了另一个实现这个目标的方法,就像下面的代码:

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 回答