在 android 应用程序中更改区域设置(到印地语)
Change locale in android app (onto Hindi)
为应用程序创建多语言支持,可以在应用程序设置中更改语言。
至于现在,英语、西班牙语、法语、俄语一切正常,
但不适用于印地语和中文。
1) 我用原语言指定语言名称
但在应用程序中我可以看到 "Hindi".
而不是 हिन्दी
\res\values-hi\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) 选择后结束"Hindi" - 实际上选择的是默认(英文)。
\res\values-hi\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();
}
怎么了?我的代码或我的设备有问题吗?
这取决于设备。另外,请通过 Settings
--> Language & input
.
检查您的设备是否支持 Hindi
和 Chinese
语言
我。第一件事:
您的 post 有很多逻辑和拼写错误。 Lint
将报告此类错误和警告,代码将无法编译。
请看更正:
为应用程序创建多语言支持,可以在应用程序设置中更改语言。
至于现在,英语、西班牙语、French
、俄语、
但不适用于印地语和 Chinese
.
1) 我用原语言指定语言名称
但在应用程序中我可以看到 "Hindi".
而不是 हिन्दी
\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>
[COMMENTS]
Spelling mistakes: in the words chinese, french.
Logical mistake: repetition in the key russian, in both the arrays, where on the second repeat, it should be french.
二. @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-zh and values-hi
如果以上内容正确,则您的应用程序无法在某些 旧 设备中接受或识别 values-zh
和 values-hi
。
请分享您的设备品牌、制造商和型号,以便更多
可以进行调查。
您的代码没问题,因此您可以在任何其他环境中测试您的应用程序
和更新的设备。
请调用更改语言环境的方法,就在之前
在 "onCreate"
回调中调用 "setContentView"
。
也许你可以检查一下你的设备是否支持印地语和中文
语言 Settings --> Language & input
。
I have devices that don't have Hindi
and Chinese
in the device
settings, but still the locales hi
and zh
are recognized within the
application, though I have to install corresponding fonts to prevent
the fallback.
请注意 Hindi
和 Chinese
是来自不同时区的语言环境,因此很可能无法在相同的设备设置中找到它们。
请确保您的代码在其他新 设备上运行。如果没有,那么您必须按照以下步骤操作。先有一些基本的认识:
首先,如果你在device settings
里改了locale
,应该不会影响你的application level locale settings
。也就是说,如果您的 device locale
设置为 Spanish
,并且您的 Application level locale
首选项设置为 Hindi
,则 Hindi
应该继续显示在每个 fragment/activity
你的 application
如果这些组件中的每一个都包含字符串 localized
。现在,如果您将 locale
从 Spanish
更改为 Chinese
,并且您的 application
或设备重新启动,因为 zh
存储在您的首选项中,您的方法会改变在 Application load
上 Chinese
的语言环境,它继续在 Chinese
.
中显示文本
其次,如果你的language
依赖于font
例如:因为你有English
、Hindi
和 Chinese
区域设置支持在您的应用程序中,您必须在 asset folder
中包含所有 TTF fonts
并将 Font-face
应用于 TextView
、EditText
、Radio Buttons
、Check Box
、Spinners
等,当您从 application settings
更改语言时。这里 Hindi
和 Chinese
语言环境都需要 TTF
字体,在 assets
文件夹中并且必须在每个 component's
[=67= 中使用] 如上所述。
第三,也是最重要的,更改区域设置的最佳位置就在 setContentView(layout_id)
之前 activity
在 onCreate(Bundle restoreState)
方法中被调用。因此,一旦 locale
发生变化,您必须将控件发送回 dashboard/home
屏幕,以便立即看到效果。
请参阅Android get hosting Activity from a view
您还可以看到How to use font assets using XML resources, in Android
和Using styles for your components in Android
快乐编码:-)
为应用程序创建多语言支持,可以在应用程序设置中更改语言。
至于现在,英语、西班牙语、法语、俄语一切正常, 但不适用于印地语和中文。
1) 我用原语言指定语言名称 但在应用程序中我可以看到 "Hindi".
而不是 हिन्दी\res\values-hi\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) 选择后结束"Hindi" - 实际上选择的是默认(英文)。
\res\values-hi\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();
}
怎么了?我的代码或我的设备有问题吗?
这取决于设备。另外,请通过 Settings
--> Language & input
.
Hindi
和 Chinese
语言
我。第一件事:
您的 post 有很多逻辑和拼写错误。 Lint
将报告此类错误和警告,代码将无法编译。
请看更正:
为应用程序创建多语言支持,可以在应用程序设置中更改语言。
至于现在,英语、西班牙语、French
、俄语、
但不适用于印地语和 Chinese
.
1) 我用原语言指定语言名称 但在应用程序中我可以看到 "Hindi".
而不是 हिन्दी\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>
[COMMENTS]
Spelling mistakes: in the words chinese, french.
Logical mistake: repetition in the key russian, in both the arrays, where on the second repeat, it should be french.
二. @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-zh and values-hi
如果以上内容正确,则您的应用程序无法在某些 旧 设备中接受或识别 values-zh
和 values-hi
。
请分享您的设备品牌、制造商和型号,以便更多 可以进行调查。
您的代码没问题,因此您可以在任何其他环境中测试您的应用程序 和更新的设备。
请调用更改语言环境的方法,就在之前 在
"onCreate"
回调中调用"setContentView"
。也许你可以检查一下你的设备是否支持印地语和中文 语言
Settings --> Language & input
。
I have devices that don't have
Hindi
andChinese
in the device settings, but still the localeshi
andzh
are recognized within the application, though I have to install corresponding fonts to prevent the fallback.
请注意 Hindi
和 Chinese
是来自不同时区的语言环境,因此很可能无法在相同的设备设置中找到它们。
请确保您的代码在其他新 设备上运行。如果没有,那么您必须按照以下步骤操作。先有一些基本的认识:
首先,如果你在device settings
里改了locale
,应该不会影响你的application level locale settings
。也就是说,如果您的 device locale
设置为 Spanish
,并且您的 Application level locale
首选项设置为 Hindi
,则 Hindi
应该继续显示在每个 fragment/activity
你的 application
如果这些组件中的每一个都包含字符串 localized
。现在,如果您将 locale
从 Spanish
更改为 Chinese
,并且您的 application
或设备重新启动,因为 zh
存储在您的首选项中,您的方法会改变在 Application load
上 Chinese
的语言环境,它继续在 Chinese
.
其次,如果你的language
依赖于font
例如:因为你有English
、Hindi
和 Chinese
区域设置支持在您的应用程序中,您必须在 asset folder
中包含所有 TTF fonts
并将 Font-face
应用于 TextView
、EditText
、Radio Buttons
、Check Box
、Spinners
等,当您从 application settings
更改语言时。这里 Hindi
和 Chinese
语言环境都需要 TTF
字体,在 assets
文件夹中并且必须在每个 component's
[=67= 中使用] 如上所述。
第三,也是最重要的,更改区域设置的最佳位置就在 setContentView(layout_id)
之前 activity
在 onCreate(Bundle restoreState)
方法中被调用。因此,一旦 locale
发生变化,您必须将控件发送回 dashboard/home
屏幕,以便立即看到效果。
请参阅Android get hosting Activity from a view
您还可以看到How to use font assets using XML resources, in Android
和Using styles for your components in Android
快乐编码:-)