Android 如何使用不同的语言环境作为语言的默认语言环境?
安卓目前使用西班牙作为Español的默认语言环境,但如果我想使用另一个语言环境,例如墨西哥,以便将Español的默认语言环境解析为其他语言环境,有没有办法 我的意思是,假设有人有西班牙人的字符串(西班牙)和西班牙人的字符串(墨西哥),他们会把西班牙的字符串放在文件夹values es中,墨西哥的字符串放在values es rMX中,所以其他地区的默认值是es,也就是西班牙字符串。我想让其他地区默认为墨西哥地区,并让西班牙字符串解析为西班牙人(西班牙) 我试过用西班牙人(墨西哥)作为es值,用西班牙人(西班牙)作为es-rES值,但没有用。文件--\u App.javaAndroid 如何使用不同的语言环境作为语言的默认语言环境?,android,android-resources,Android,Android Resources,安卓目前使用西班牙作为Español的默认语言环境,但如果我想使用另一个语言环境,例如墨西哥,以便将Español的默认语言环境解析为其他语言环境,有没有办法 我的意思是,假设有人有西班牙人的字符串(西班牙)和西班牙人的字符串(墨西哥),他们会把西班牙的字符串放在文件夹values es中,墨西哥的字符串放在values es rMX中,所以其他地区的默认值是es,也就是西班牙字符串。我想让其他地区默认为墨西哥地区,并让西班牙字符串解析为西班牙人(西班牙) 我试过用西班牙人(墨西哥)作为es值,
public class App extends Application {
public void onCreate(){
super.onCreate();
LocaleUtils.setLocale(new Locale("iw"));
LocaleUtils.updateConfig(this,
getBaseContext().getResources().getConfiguration());
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
LocaleUtils.updateConfig(this, newConfig);
}
}
onfile--_BaseActivity.java
public class BaseActivity extends AppCompatActivity {
public BaseActivity() {
LocaleUtils.updateConfig(this);
}
}
在文件LocaleUtils.java上
import android.app.Application;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.view.ContextThemeWrapper;
import java.util.Locale;
public class LocaleUtils {
public static final String LAN_SPANISH = "es";
public static final String LAN_PORTUGUESE = "pt";
public static final String LAN_ENGLISH = "en";
private static Locale sLocale;
public static void setLocale(Locale locale) {
sLocale = locale;
if(sLocale != null) {
Locale.setDefault(sLocale);
}
}
public static void updateConfig(ContextThemeWrapper wrapper) {
if(sLocale != null && Build.VERSION.SDK_INT >=
Build.VERSION_CODES.JELLY_BEAN_MR1) {
Configuration configuration = new Configuration();
configuration.setLocale(sLocale);
wrapper.applyOverrideConfiguration(configuration);
}
}
public static void updateConfig(Application app, Configuration configuration) {
if(sLocale != null && Build.VERSION.SDK_INT <
Build.VERSION_CODES.JELLY_BEAN_MR1) {
//Wrapping the configuration to avoid Activity endless loop
Configuration config = new Configuration(configuration);
config.locale = sLocale;
Resources res = app.getBaseContext().getResources();
res.updateConfiguration(config, res.getDisplayMetrics());
}
}
}
导入android.app.Application;
导入android.content.res.Configuration;
导入android.content.res.Resources;
导入android.os.Build;
导入android.view.contexthemewrapper;
导入java.util.Locale;
公共类LocaleUtils{
公共静态最终字符串LAN_西班牙语=“es”;
公共静态最终字符串LAN_葡萄牙语=“pt”;
公共静态最终字符串LAN_ENGLISH=“en”;
私有静态语言环境;
公共静态void setLocale(区域设置){
sLocale=语言环境;
如果(sLocale!=null){
setDefault(sLocale);
}
}
公共静态void updateConfig(ContextThemeWrapper){
如果(sLocale!=null&&Build.VERSION.SDK\u INT>=
Build.VERSION\u code.JELLY\u BEAN\u MR1){
配置=新配置();
setLocale(sLocale);
applyOverrideConfiguration(配置);
}
}
公共静态void updateConfig(应用程序应用程序、配置){
if(sLocale!=null&&Build.VERSION.SDK_INT<
Build.VERSION\u code.JELLY\u BEAN\u MR1){
//包装配置以避免活动循环
配置配置=新配置(配置);
config.locale=sLocale;
Resources res=app.getBaseContext().getResources();
res.updateConfiguration(config,res.getDisplayMetrics());
}
}
}
您可以参考此链接,以便更好地了解您应该在应用程序上调用代码的事件
我试过用西班牙人(墨西哥)作为价值观,用西班牙人(西班牙)作为价值观,但这不起作用
我不确定你是怎么说的,但总的来说,这应该行得通
资源框架通常会尝试选择最具体的规则进行匹配,但如果找不到匹配项,则会退回到越来越多的通用规则。API 24+()上的locale还有另一个缺点,但一般模式仍然适用
你选择的“默认”语言和方言完全取决于你;没有什么规定您必须将英文文本放入res/values/strings.xml
文件中。你可以把你想要的任何语言放在那里,只要你对没有看到这些默认字符串的人感到满意
因此,您可以这样设计资源目录:
res/
values/
strings.xml (English text here)
values-es/
strings.xml (Mexican Spanish text here)
values-es-rES/
strings.xml (Spain Spanish text here)
这意味着:
- 任何人只要将手机设置为西班牙语,就会看到西班牙语文本
- 任何人只要将手机设置为任何其他西班牙语方言,就会看到墨西哥西班牙语文本
- 任何将手机设置为任何其他语言的人都会看到英文文本