翻译 Java Class 中的菜单

Translate Menu in Java Class

我正在将我的应用程序翻译成西班牙语和阿拉伯语。我将值文件中的所有英文字符串都转换为所需的语言,效果非常好。

我的问题是 activity 名称仍然是默认语言!正如您在下面看到的,我使用了 字符串 activity1 = getResources().getString(R.string.activity1); 我在值文件中定义了 3 个 activity 名称 (res/values-es/string.xml)。例如我的第一个 activity 有 id (activity1)。由于某种原因,这仍然不起作用!有什么建议or/and其他阅读材料!

package com.reportodor.mohamed;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class Menu extends ListActivity{

    String displayNames[] = { "Report Odor","Info","Contact Us",};
    Class activities[] = {Report.class, Study.class, Contact.class};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setListAdapter(new ArrayAdapter<String>(Menu.this, android.R.layout.simple_list_item_1, displayNames));
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);
        String cheese = displayNames[position];
        Class ourClass = activities[position];
        Intent ourIntent = new Intent(Menu.this, ourClass);
        startActivity(ourIntent);
        //String activity1 = getResources().getString(R.string.activity1);
        setTitle(getResources().getText(R.string.activity1));
        setTitle("activity1 title"); //


    }
}

我阅读了以下内容,它们很有帮助: Accessing Resources Localizing with Resources

如果您在值文件中定义了字符串,它有一个 id,任何 Activity class 都可以用这个自动获得翻译:

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

getResources().getStringArray(R.string.mystringarray)

数组也是如此

有关详细信息,请参阅此内容:Accessing Resources

编辑:

我知道你的问题是什么,setTitle 方法工作得很好,但你从未看到标题发生变化。

那是因为当您开始Activity(ourIntent) 时,当前的 activity 被添加到返回堆栈并创建新的。

在这种情况下,您必须分别从 activity 调用 setTitle : Report 、 Study 和 Contact ,并使用 setTitle(R.string.report_title) 等。

终于解决了。在 res/values/arrays 中:我创建了

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array
        name="listMenu1">
        <item>@string/activity1</item>
        <item>@string/activity2</item>
        <item>@string/activity3</item>
    </string-array>

</resources>

并在 res/values-es/strings 中称为西班牙语翻译...

<?xml version="1.0" encoding="utf-8"?>
<resources>
     <string name="activity1"> Reportar Un Olor </string>
     <string name="activity2"> Información </string>
     <string name="activity3"> Contáctenos </string>                             
</resources> 

然后在OnCreate方法中获取数组如下:

@Override
protected void onCreate(Bundle savedInstanceState) {
    String[] listM = getResources().getStringArray(R.array.listMenu1);
    super.onCreate(savedInstanceState);
    setListAdapter(new ArrayAdapter<String>(Menu.this, android.R.layout.simple_list_item_1, listM));
}

非常感谢 SuigetsuSake 和 sidgate 的指导。