在我的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...
你觉得这样怎么样?它会对系统语言产生任何缺陷吗?
答案 0 :(得分: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>
现在其他部分:
在您的代码中,按用户选择的语言获取部件。没有确定的方法,一个简单的方法可能是将它们放在数组或数据库中。我在这里使用了一个hypotetical方法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.
。