翻译 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 的指导。
我正在将我的应用程序翻译成西班牙语和阿拉伯语。我将值文件中的所有英文字符串都转换为所需的语言,效果非常好。
我的问题是 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 的指导。