为应用创建多语言支持,可以在应用设置中更改语言。
至于现在一切正常,英语,西班牙语,法语,俄语, 但对印地语和中国人不起作用。
1)我用原始语言指定语言名称 但在应用程序而不是हिन्दी我可以看到“印地语”。
\ RES \值喜\ arrays.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="languages">
<item name="english">English</item>
<item name="russian">Русский</item>
<item name="spanish">Espagnol</item>
<item name="russian">Français</item>
<item name="chineese">中国</item>
<item name="hindi">हिन्दी</item>
</string-array>
<string-array name="languagesValues">
<item name="english">en</item>
<item name="russian">ru</item>
<item name="spanish">es</item>
<item name="russian">fr</item>
<item name="chineese">zh-CN</item>
<item name="hindi">hi</item>
</string-array>
</resources>
2)选择“印地语”后结束 - 实际上正在选择默认(英语) \ RES \值喜\的strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">लकी बीनने</string>
<string name="score">0000</string>
<string name="settings">सेटिंग</string>
<string name="start_button">प्रारंभ</string>
<string name="about_button">के बारे में</string>
<string name="about">लियोनिद द्वारा बनाया गया</string>
<string name="feedback">प्रतिक्रिया भेजें </string>
<string name="high_score">उच्च स्कोर के</string>
<string name="score_set">स्कोर निर्धारित किया गया है \r\nमें:</string>
<string name="game_over">खेल खत्म</string>
...
在首选项中保存区域设置。
public class Settings extends PreferenceActivity {
Locale myLocale;
static boolean localeChanged;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
// language changing
Preference langPreference = getPreferenceScreen().findPreference(
"language");
langPreference.setOnPreferenceChangeListener(languageChangeListener);
}
Preference.OnPreferenceChangeListener languageChangeListener = new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
switch (newValue.toString()) {
case "en":
setLocale("en");
break;
case "ru":
setLocale("ru");
break;
case "fr":
setLocale("fr");
break;
case "es":
setLocale("es");
break;
case "zh-CN":
setLocale("zh-CN");
break;
case "hi":
setLocale("hi");
break;
}
localeChanged = true;
return true;
}
};
// * manually changing locale/
public void setLocale(String lang) {
myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
Intent refresh = new Intent(this, Settings.class);
startActivity(refresh);
finish();
}
有什么问题?我的代码或设备中有什么问题吗?
答案 0 :(得分:3)
这取决于设备。此外,请转到Hindi
- &gt;检查您的设备是否支持Chinese
和Settings
种语言Language & input
。
答案 1 :(得分:1)
I。首先要做的是:
您的帖子有很多逻辑和拼写错误。 Lint
将为此报告错误和警告,并且代码将无法编译。
请查看更正内容:
为应用创建多语言支持,并可以在应用设置中更改语言。
目前,英语,西班牙语,French
,俄语,
但不适用于印地语和Chinese
。
1)我用原始语言指定语言名称 但是在应用程序中,而不是हिन्दी,我可以看到“印地语”。
\ res \ values-hi \ arrays.xml
<string-array name="languages">
<item name="english">English</item>
<item name="russian">Русский</item>
<item name="spanish">Espagnol</item>
<item name="french">Français</item>
<item name="chinese">中国</item>
<item name="hindi">हिन्दी</item>
</string-array>
<string-array name="languagesValues">
<item name="english">en</item>
<item name="russian">ru</item>
<item name="spanish">es</item>
<item name="french">fr</item>
<item name="chinese">zh-CN</item>
<item name="hindi">hi</item>
</string-array>
[评论]
拼写错误:用中文,法语。
逻辑错误:两个数组中的键俄语中重复,第二次重复应为法语。
< / li>
II。 @Chandrakanth答案的改进:
这取决于设备,并且您的设备似乎是旧,而您的代码是正确的。给您以下原因:
从我的答案开始, 我想引用您的问题:
As for now everything works fine for English, Spanish, French, Russian
languages, but doesn't work for Hindi and Chinese.
使用中文和印地语时,使用的是以下语言环境,例如字符串资源:
<item name="chineese">zh-CN</item>
<item name="hindi">hi</item>
请重构为:
<item name="chinese">zh</item>
<item name="hindi">hi</item>
因此,您应该将values文件夹用作:
values-zh and values-hi
如果上述正确,则您的应用程序无法在某些旧设备中接受或识别values-zh
和values-hi
。
请分享您的设备品牌,制造商和型号,以便更多 可以做调查。
您的代码正常,因此您可以在其他任何应用程序中进行测试 和更新的设备。
请在更改语言环境之前调用该方法
在"setContentView"
内部回叫"onCreate"
。
也许您可以检查您的设备是否支持印地语和中文
Settings --> Language & input
进入语言。
我的设备中没有
Hindi
和Chinese
设置,但仍然可以在hi
和zh
中识别语言环境 应用程序,尽管我必须安装相应的字体以防止 后备。
请注意,Hindi
和Chinese
是来自不同时区的语言环境,因此很可能在相同的设备设置中找不到它们。
请确保您的代码正在其他新设备上运行。如果没有,那么您必须遵循以下步骤。首先有一些基本理解:
首先 ,如果您在locale
中更改了device settings
,则对application level locale settings
无效。也就是说,如果您的device locale
设置为Spanish
,并且您的Application level locale
首选项设置为Hindi
,则Hindi
应该继续在每个{{1 fragment/activity
中的}},如果其中每个组件中都有字符串application
。现在,如果您将localized
从locale
更改为Spanish
,并且Chinese
或设备重新启动,因为application
存储在您的首选项中,则方法会更改zh
上Chinese
的语言环境,并继续在Application load
中显示文本。
其次 ,例如,如果您的Chinese
依赖于language
:由于您有font
,English
和应用程序中的Hindi
语言环境支持,您必须在Chinese
中拥有所有TTF fonts
并将asset folder
应用于Font-face
,TextView
,当您从EditText
更改语言时,请适当选择Radio Buttons
,Check Box
,Spinners
等。这里的application settings
和Hindi
语言环境需要Chinese
文件夹中的每种字体TTF
,并且必须在每个assets
{{1}中使用}。
第三,也是最重要的 ,更改语言环境的最佳位置是{{1}中的component's
被调用之前{{ 1}}方法。因此,一旦更改font-face
,就必须将控件发送回setContentView(layout_id)
屏幕,以便立即看到效果。
请参阅Android get hosting Activity from a view
您还可以看到How to use font assets using XML resources, in Android
和Using styles for your components in Android
快乐编码:-)