我想在系统语言以外的应用程序中使用自定义语言翻译,怎么做?

时间:2012-11-06 06:52:37

标签: android translation

在我的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...
你觉得这样怎么样?它会对系统语言产生任何缺陷吗?

1 个答案:

答案 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.