在android中使用不同的字符串文件

时间:2012-12-05 10:57:42

标签: android xml string build-automation localizable.strings

我正在将我的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?

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

4 个答案:

答案 0 :(得分:8)

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

strings.xml包含原始文本,假设为英语。 要创建不同语言的翻译,您可以创建文件夹,例如: values-grvalues.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());

当然,您应该提供希腊语翻译,以便工作。

了解更多

您可以在此处查看文档: Support Different Languages - Android

答案 1 :(得分: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>

等等。

答案 2 :(得分:1)

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

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

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);
  }
}

答案 3 :(得分:0)

ad 1。不,你可以拥有你想要的任意数量。有关详细信息,请参阅ad 3

ad 2。 ????

ad 3。要在我们的应用中选择语言,您应该update context。然后将自动选择适当的xml。阅读this以了解如何操作。