6

我正在将我的 iPhone 应用程序移植到 android,我现在遇到了字符串文件的问题。

该应用程序是一个翻译工具,用户可以切换语言,因此所有本地化字符串都是两种语言,并且它们独立于操作系统运行的区域设置。

对于 iOS 版本,我有不同的文件,例如 de.strings、en.strings 和 fr.strings 等。对于具有指定语言对的每个目标,我从字符串表中读取字符串,例如对于 de-fr,我将在项目中包含 de.strings 和 fr.strings,并在 info-list 文件中设置字符串表的名称并读取字符串从他们。最后,我有一个项目包含不同的目标(具有不同的信息列表文件),并且所有配置都很好。

我打算在android平台上做同样的事情,但是

  1. 每个项目只允许一个 strings.xml 吗?

  2. 如何设置不同的构建目标?例如,我的 de-fr 和 de-en 翻译应用程序实际上是两个应用程序,唯一的区别是语言对。如何设置一些东西以便我可以使用一个项目来生成两个应用程序?在 XCode 中它很简单,但我找不到 eclipse 的解决方案。

  3. 如何为每个目标指定应该读取的 strings.xml?

感谢您的回答,但请注意,我需要与操作系统区域设置无关的语言设置,即如果用户将操作系统区域设置从 en 更改为 de,我的应用程序仍会以英语显示本地化字符串。我要问的实际上是如何设置诸如预构建之类的内容并为不同的目标加载不同的字符串文件。

4

4 回答 4

9

根据用户设置自动选择区域设置

包含原始strings.xml文本,假设为英语。要创建不同语言的翻译,您可以创建文件夹,例如: values-gr, values.it, 表示希腊语结尾的意大利语。只需复制strings.xml到这些文件夹并翻译即可。

在应用程序启动时,操作系统会根据用户的偏好自动选择一种语言。

手动选择区域设置,覆盖用户设置

例如,要强制使用希腊语,您可以使用:

Locale locale = new Locale("gr"); 
            Locale.setDefault(locale);
            Configuration config = new Configuration();
            config.locale = locale;
            getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());

当然,您应该为此提供希腊语翻译。

阅读更多

您可以在此处查看文档: 支持不同的语言 - Android

于 2012-12-05T11:01:08.687 回答
2

您必须将本地化字符串放在不同的文件夹中,例如 values-es、values-de、values-fr 等。

该文件必须包含相同的键,例如在 values 文件夹中:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello</string>
</resources>

在 values-es 文件夹中:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hola</string>
</resources>

等等。

于 2012-12-05T11:01:43.273 回答
1

您必须为每种语言创建一个值文件夹,使用以下格式添加您想要翻译的语言的语言 ISO 代码:values-es、values-de、... 在每个文件夹中,您必须添加一个 strings.xml带有其语言的字符串。values 文件夹(没有国家代码)将是默认语言。

选择您要使用的字符串语言:

import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;

public class Main extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    String languageToLoad  = "fa"; // your language
    Locale locale = new Locale(languageToLoad); 
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config, 
    getBaseContext().getResources().getDisplayMetrics());
    this.setContentView(R.layout.main);
  }
}
于 2012-12-05T11:02:43.890 回答
0

ad 1. 不,你可以拥有尽可能多的。有关ad 3更多信息,请参阅。

ad 2. ???

ad 3. 要在我们的应用程序中进行语言选择,您应该更新 context。然后会自动选择正确的 xml。阅读内容以了解如何操作。

于 2012-12-05T11:10:11.013 回答