1

我已经很清楚使用 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!");

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

谢谢!

4

3 回答 3

5

将这些字符串也提取到strings.xml文件中,它将根据语言从正确的文件中选择值。没有理由这些字符串硬编码到您的 java.lang.

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

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

于 2014-05-22T20:08:47.873 回答
2

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

textView1.setText(R.string.hello);

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

于 2014-05-22T20:10:12.053 回答
1

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

  1. 您的 java 代码永远不必担心添加新语言,只需创建一个新values-..文件夹
  2. 您可以让不同的人(包括非开发人员)在处理代码的同时处理翻译
  3. 您永远不必担心缺少翻译,因为 lint 会警告您,并且默认语言回退将保证不会发生崩溃
  4. 这是在 XML 布局中放置本地化文本而不在 java 中显式设置它们的唯一方法,这样可以节省大量无用、容易出错的意大利面条式代码。
  5. 这是执行此操作的标准和推荐方式,这意味着 a/ 如果需要,您会找到支持,并且 b/ 任何加入您团队的 android 开发人员都将处于熟悉的环境中
于 2014-05-22T20:27:53.730 回答