如何使用Java代码创建多语言应用程序?

时间:2014-05-22 19:53:09

标签: java android multilingual dynamic-text

我已经很清楚使用string.xml代码制作Android多语言应用程序是多么容易。这部分很简单。

问题是我的应用程序中有很多动态文本是用我的Java代码编写的。这是我无法找到如何制作多语言的部分。我想象一个解决方案的方式是在某种条件下我会验证它所使用的语言,并更改字符串。例如:

 if(language.equals(English))
      textView1.setText("Hi! This is in English!");
 if(language.equals(Portuguese))
      textView1.setText("Oi! Isso é em Português!");

我可以做这样的事情吗?如果是这样,我该怎么做?

谢谢!

3 个答案:

答案 0 :(得分:5)

将这些字符串解压缩到strings.xml文件中,它将根据语言从正确的文件中选择值。 没有有理由在您的java中使用硬编码字符串。

String hello = getResources().getString(R.string.hello);

如果可用,将使用正确的语言,因为在运行时,Android系统根据当前为用户设备设置的语言环境使用适当的字符串资源集。 例如,如果您的res/values-ru/strings.xml包含res/values/strings.xml并且该设备是俄语设备,则会从第一个设备获取该值(如果可用)。

答案 1 :(得分:2)

根据您的示例,听起来您实际上并不了解strings.xml的工作原理,因为这似乎是您正在寻找的答案。您的整个示例可以替换为一行:

textView1.setText(R.string.hello);

然后创建strings.xml的不同版本,所有这些版本都包含完全相同的ID但不同的字符串值。如果英语是您的默认值,则英文版本将命名为/res/values/strings.xml。葡萄牙文件将命名为/res/values-pt/strings.xml。系统会自动使用正确文件中的字符串作为设备区域设置。

答案 2 :(得分:1)

在几百个要翻译并包含在代码中的文本之后,您会发现在资源中使用字符串要简单得多。

  1. 您的java代码永远不必担心添加新语言,只需创建一个新的values-..文件夹
  2. 您可以让单独的人员(包括非开发人员)在您处理代码的同时从事翻译工作
  3. 您永远不必担心缺少翻译,因为lint会警告您,默认语言后备将保证不会崩溃
  4. 这是将本地化文本放在XML布局中而不在java中明确设置的唯一方法,这样可以节省大量无用的,容易出错的意大利面条代码。
  5. 这是标准和推荐的方式,这意味着,如果您需要它,您将获得支持,并且任何加入您团队的Android开发人员都将处于熟悉的环境中